只有注册用户登录后才能阅读该文。 阅读全文
posted @ 2013-10-19 10:01 xiaorulou 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子:1)例子C代码voidtestfork(){ if(0==fork()) { printf(“createnewprocesssuccess!\n”); } printf(“testforkok\n”);}这段代码很简单,从功能的角度来看,就是实际执行了一个fork(),生成一个新的进程,从逻辑的角度看,就是判断了如果fork()返回的是则打印相关语句,然后函数最后再打印一句表示执行完整个... 阅读全文
posted @ 2013-10-19 09:34 xiaorulou 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:struct 位域结构名 { 位域列表};其中位域列表的形式为:类型说明符 位域名:位域长度位域变量的说明与结构变量说明的方式 阅读全文
posted @ 2013-09-06 22:20 xiaorulou 阅读(86) 评论(0) 推荐(0) 编辑
摘要: 1.什么是对齐?现代计算机中内存空间都是按照字节(byte)划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序地一个接一个地排放,这就是对齐。2.计算机为什么要对齐?各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取,其他平台可能没有这种情况。但是最常见的是,如果不按照适合其平台的要求对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,一个int型(假设为 32位)如果存放在偶地址开始的地方, 阅读全文
posted @ 2013-09-06 22:08 xiaorulou 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 好了,前面的准备工作都做完了,我们就进入进程调度的主体程序——schedule()函数。函数schedule()实现调度程序。它的任务是从运行队列的链表rq中找到一个进程,并随后将CPU分配给这个进程。schedule()可以由几个内核控制路径调用,可以采取直接调用或延迟调用(可延迟的)的方式。下面,我们就来详细介绍。1 直接调用如果current进程因不能获得必须的资源而要立刻被阻塞,就直接调用调度程序。在这种情况下,如何阻塞进程该进程的内核路径呢?按下述步骤执行:1.把current进程current插入适当的等待队列,参见《非运行状态进程的组织 》博文。2.把current进程的状态改为 阅读全文
posted @ 2012-08-25 16:18 xiaorulou 阅读(1662) 评论(0) 推荐(0) 编辑