08 2013 档案

摘要:中断通常分为同步中断和异步中断: 同步中断:是当指令执行时由CPU控制单元产生,之所以称之为同步,是因为只有在一条指令终止执行后CPU才会发出中断 异步中断:是由其它硬件设备依照CPU时钟信号随机产生。 通常把同步中断称之为异常,把异步中断称之为中断异步中断可能为以下两种: 可屏蔽中断:I/O设备发出的所有中断请求(IRQ)都产生可屏蔽中断。 非屏蔽中断:只有几个危急的事件(如硬件故障)才引起非屏蔽中断。非屏蔽中断总是由CPU辩认的。异常(fault):根据CPU控制单元产生异常时保存在内核态堆栈eip寄存器的值分为以下三种: 故障:通常是可以纠正的,一旦纠正,程序就可以在不失... 阅读全文
posted @ 2013-08-30 14:58 皁仩腄覺 阅读(319) 评论(0) 推荐(0)
摘要:proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。主要目录结构如下:apm 高级电源管理信息cmdline 内核命令行Cpuinfo 关于Cpu信息Devices 可以用到的设备(块设备/字符设备)Dma 使用的DMA通道Filesystems 支持的文件系统Interrupts 中断的使用Ioports I/O端口的使用K 阅读全文
posted @ 2013-08-19 16:33 皁仩腄覺 阅读(424) 评论(0) 推荐(0)
摘要:#!/usr/bin/bash #备份的目的目录 BACDIR="/home/wxr/backup" #备份的子目录每天备份在一个子目录下 SUBDIR=backup-$(date +%m%d%y) #备份的源目录 DIRS[0]="/home/wxr/workspace" DIRS... 阅读全文
posted @ 2013-08-19 10:02 皁仩腄覺 阅读(346) 评论(0) 推荐(0)
摘要:#!/bin/bash# 定义一个方法 它有一个参数代表目录foreachd(){ for file in $1 do if [ -d $file ] then ec... 阅读全文
posted @ 2013-08-16 16:10 皁仩腄覺 阅读(778) 评论(0) 推荐(0)
摘要:Linux 就是通常所说的单内核(monolithic kernel),即操作系统的大部分功能都被称为内核,并在特权模式下运行。通过 Linux 内核模块(LKM)可以在运行时动态地更改 Linux。Linux可加载内核模块(从内核的 1.2 版本开始引入)是 Linux 内核的最重要创新之一。它们提供了可伸缩的、动态的内核。探索隐藏在可加载模块后面的原理,并学习这些独立的对象如何动态地转换成 Linux 内核的一部分。(1) linux 内核模块的创建 LKM 包含 entry 和 exit 函数。当向内核插入模块时,调用 entry 函数,从内核删除模块时则调用 exit 函数。因为... 阅读全文
posted @ 2013-08-16 13:37 皁仩腄覺 阅读(226) 评论(0) 推荐(0)
摘要:1. 系统加电,CPU RESET,进入实模式,跳到地址0xFFFFFFF0,此处是BIOS,执行BIOS-ROM 代码,进行系统自检2. 初始化中断向量表 地址是03.BIOS将可启动设备的第一个扇区(磁盘引导扇区,512字节,即就是bootsect.S)读入内存绝对地址0X7C00处,并跳转到这个地址。启动设备通常是软驱或者硬盘4.把自己移到绝对地址0x90000处,并调转到那里继续执行。5.通过BIOS提供的读磁盘调用"int 0x13"从磁盘上读入setup和内核的映像,将(boot/setup.S)2kB字节的代码读入内存0x90200处,将内核镜像载入0x100 阅读全文
posted @ 2013-08-16 13:19 皁仩腄覺 阅读(163) 评论(0) 推荐(0)
摘要:1. 面向对象的核心关注的是数据,所有对象函数都围绕数据。而面向过程是针对逻辑功能。2. 构造函数 我认为就是负责申请本类的核心资源(如内存),或者资源定位(如指针指向外部变量),切忌在构造函数中加入初始化的步骤。3. 析构函数 负责释放资源。4. 如果对象在使用时候需要初始化,后提供一个初始化的函数。 阅读全文
posted @ 2013-08-15 20:02 皁仩腄覺 阅读(159) 评论(0) 推荐(0)
摘要:1.只能从大括号内向外跳。2.只能向后跳。3.严禁使用GOTO做死循环4.goto后面的标签不能出现大括号。 阅读全文
posted @ 2013-08-15 20:01 皁仩腄覺 阅读(205) 评论(0) 推荐(0)
摘要:1.读写出界 一般出现在字符串拷贝当中 一是源字符串非0结束,二是目标空间太小。2.野指针是指没有初始化过的指针。操作结果未知。 (避免法 任何变量已经声明,立即赋予处置)3.内存资源泄漏。 典型的二元操作。即一个过程,需要两次操作才能完成。常见的二元数组内存分配 对象的建立与销毁 加锁和解锁。4.内存碎片的产生。它是操作系统的问题。编译器无法检查。而且出现频率具有随机性,很难排查。在一些服务程序中可能导致申请内存失败,工作可能崩溃。这种BUG很难被调试。 本人经验 1.是建立内存池做内存管理。2.在多次需要申请较多内存空间的全局变量中 在初始化时候一次申请 退出时释放。 阅读全文
posted @ 2013-08-15 20:00 皁仩腄覺 阅读(403) 评论(0) 推荐(0)
摘要:1.线程参数应在堆 或全局变量区存放 。线程启动并行运算,有可能启动函数已经退出,但线程还未启动。如果参数是栈变量,则释放。2.线程不能开得太快。否则都可能出现死线程(windows linux 都有这个禁忌),即这个线程系统已经认为存在,但没有获得时间片执行。 建议线程的启动间隔 > 250ms.3.线程永远不能在外部被kill,线程占有资源,内存,加锁未被释放。而且在windows线程强制杀死是异步的,这有可能线程并未真是被杀死。 导致种种问题。原则上设定一定条件,让线程自行退出。4.线程总数有限制的,一般linux 300,windows 可能稍多。如果线程较多,考虑线程池。 阅读全文
posted @ 2013-08-15 19:59 皁仩腄覺 阅读(195) 评论(0) 推荐(0)
摘要:1. 函数参数越少越好。必要时候使用结构体类。2.相同功能的函数尽量使用函数重载...3. 尽量使用默认参数,提供一个最佳建议。4.返回值尽量简单,规范.5.函数内部减少变量作用域。 阅读全文
posted @ 2013-08-15 19:58 皁仩腄覺 阅读(227) 评论(0) 推荐(0)
摘要:1. 尽量避免动态内存的分配释放,及时做好资源回收,这些资源常见的是socket,线程,内存。2. 对线程的使用,建立时间片的观念,以任务方式组织业务动作,一般服务器并发线程300下(借鉴别人经验),达到线程重用的目的。 常见的线程池。3. 建立资源跟踪机制。做LOG系统。便于跟踪和故障分析。(需要考虑磁盘已满,log日志一般保存72小时以上)。4.服务器对请求的响应原则上执行“从严”的策略,层级校验,一旦发现异常,则终止本次服务。5.服务策略选择上,执行“自私”原则,先保证自己的安全,再谈客户服务。6.定时显示负载信息,供操作员做出负载均衡操作。7.必要时为服务开发“开门狗”程序,监控服务的 阅读全文
posted @ 2013-08-15 19:57 皁仩腄覺 阅读(247) 评论(0) 推荐(0)
摘要:1.需求理解和沟通。(系统分析期间不涉及细节。自上而下的分析。)2.模块划分。明确项目核心模块有哪些 3.角色定名,为每一个模块拟定一个名字,以后在项目中统一称呼,方便交流。4.绘制各个模块之间的拓扑图,展现各个模块之间的关系 阅读全文
posted @ 2013-08-15 19:56 皁仩腄覺 阅读(186) 评论(0) 推荐(0)
摘要:#include #include using namespace std;namespace MySmartPtr{ class PtrCount; template class AutoPtr;};class PtrCount{private: int m_iptrCount;public: PtrCount(int iNum = 0){m_iptrCount = iNum;} ~PtrCount(){} int addRef(){return (++m_iptrCount);} int release(){return(--m_iptrCount);} ... 阅读全文
posted @ 2013-08-15 19:55 皁仩腄覺 阅读(203) 评论(0) 推荐(0)
摘要:arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。 和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分)mm(内存管理)、math-emu(浮点单元仿真)、lib(硬件相关工具函数)、 boot(引导程序)、pci(PCI总线)和power(CPU相关状态)。block:部分块设备驱动程序。crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。Documentation:关于内核各部分的通用解释和注释。drivers:设备驱动程序,每个不同的驱动占用一个子目录。fs:各种支持的文件系统,如ext、fat、nt 阅读全文
posted @ 2013-08-15 10:23 皁仩腄覺 阅读(222) 评论(0) 推荐(0)
摘要:(1) 查看版本下载内核 uname -r 查看内核版本 一般系统中不会有内核源码,需要自己下载源码。 1> mkdir /home/usr1/temp 建立临时目录 usr1是用户的主目录 2> cd /home/usr1/temp 进入临时目录 3> apt-get source linux-image-$(uname -r) 下载内核源代码 建议:下载源码时候使用一般用户模式,建立临时路径,不要在系统目录usr/bin/src 目录中。(2) 解压配置 1>tar jfx linux-2.6.25.10.tar.bz2 解压源码 2>cd l... 阅读全文
posted @ 2013-08-14 17:35 皁仩腄覺 阅读(184) 评论(0) 推荐(0)
摘要:线程是可结合的(joinable)或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死。在被其他线程回收之前,它的存储器资源(例如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。 默认情况下,线程被创建成可结合的。为了避免存储器泄漏,每个可结合线程都应该要么被显示地回收,即调用pthread_join;要么通过调用pthread_detach函数被分离。 int pthread_join(pthread_t tid, void**thread_return); 线程通过调用pthread_join函数... 阅读全文
posted @ 2013-08-14 10:37 皁仩腄覺 阅读(240) 评论(0) 推荐(0)
摘要:最近老看一些服务器网关的代码页看了一些开源的代码。一个重要的技术线程池。 何为线程池,所谓线程池就是一组用来处理,客户请求的线程组 这里的客户指代的是线程池服务的对象。 线程池的实现原理: (1)消息队列调用函数,当有消息到来时候,将消息封装插入消息队列。 (2)有一个 线程池附服务线程,该线程负责检索消息队列,创建线程池线程,将该消息派发到线程池的某一线程处理。 (3)线程池线程参数,该参数应该是一个结构体,该结构体中某项指向一个消息,处理完成之后删除消息,进入等待状态。 源代码如下 代码注释有说明 故不在单独讲解代码: 1 #include 2 #i... 阅读全文
posted @ 2013-08-09 09:30 皁仩腄覺 阅读(422) 评论(0) 推荐(0)
摘要:Handle 是用来标记windows资源Hwnd Handle的一个子类 就好比char是int的一个子类一样。这个是窗口句柄HINSTANCE Handle的一个子类,用来标记可执行程序的实例App实例。使用hwnd 和 HINSTANCE是方便用户阅读维护代码。 阅读全文
posted @ 2013-08-05 18:05 皁仩腄覺 阅读(209) 评论(0) 推荐(0)
摘要:不知道现在人是懒了还是怎么了都使用这玩意,难道自己不会写makefile吗?我一直觉得makefile书写简单点就好了,就不要用atuomake 之类的工具了。今天同事给了我一个测试程序,就两个文件然后用automake工具生成makefile,我自己又加了一个文件,我自己都不知道如何编译。所以不得已对automake工具简单的研究了下。(1) 简介 Autoconf/Automake工具用于自动创建功能完善的makefile文件。当前大多数软件包都是用这一工具生成makefile文件的。Autoconf/Automake工具组主要包括autoconf、automake、perl语言环境和.. 阅读全文
posted @ 2013-08-04 17:27 皁仩腄覺 阅读(496) 评论(0) 推荐(0)