linux内核
IT人Key
一个文艺IT男
展开
-
32位cpu寻址小结
<br />32位cpu 地址线扩展成了32位,这和数据线的宽度是一致的。因此,在32位机里其实并不需要采用"物理地址=段:偏移"这种地址表达方式。原来在16位机里规定的每一个段不大于64kb在32位机里也不是必要的。所以,对于32位机来讲,最简单的方法就是用一个32位数来标识一个字节的存储地址,寻址时只要给出一个32位数就可以直接找到地址。这种地址储存模型就属于"平展储存模型"。<br /> 但是,新产品一般都希望遵循"向下兼容"这个原则。所以,32位机里完整的保留了16位寻址模式。即:寻址能力为1M;转载 2011-04-03 10:20:00 · 1149 阅读 · 0 评论 -
[转]kmalloc, vmalloc分配的内存结构
<br />[转]kmalloc, vmalloc分配的内存结构<br /><br />对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。<br /> 进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间。<br /> 内核空间中,从3G到vmalloc_s转载 2011-04-05 10:44:00 · 1219 阅读 · 0 评论 -
内核链表使用--删除链表节点
<br />内核链表使用--删除链表节点<br />当我们使用遍历的方法来删除链表时:<br />list_for_each(pos, &student_list)<br />{<br /> list_del(pos); <br />}<br /><br />list_for_each(pos, head)这个宏定义是用来遍历链表的,通过其第一个参数pos来删除链表节点,但是,运行后就会出现以下错误:<br /><br />Unable to handle kernel paging转载 2011-04-06 14:28:00 · 2734 阅读 · 0 评论 -
linux内核链表的实现
<br />本文会记录一些linux内核实现中使用到的一些小技巧,工具等等,会根据学习进度不定时更新本文......<br />双向循环链表<br /> 第一个想写的是linux的双向循环链表(写这个的原因是因为最近学习epoll的内核代码实现,进而需要了解linux的等待队列,这其中也用到了双向循环链表,稍后也会分析linux的等待队列)<br /> linux的双向循环链表之于传统的双向循环链表,其优点是:将其从具体的数据结构中提取出来构成一种通用的循环链表实现,在linux中表现形式为:<br />转载 2011-04-06 15:37:00 · 1534 阅读 · 0 评论 -
Linux内核代码-结构体初始化
<br />Linux内核代码 结构体初始化<br />2011-01-24 20:40出处:中国IT实验室作者:佚名【我要评论】<br />[导读]在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式。该方式是某些C教材(如谭二版、K&R二版)中没有介绍过的。<br /> 在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式。该方式是某些C教材(如谭二版、K&R二版)中没有介绍过的。这种方式称为指定初始化(designated initializer)。下面我们看一个转载 2011-04-28 10:43:00 · 1235 阅读 · 0 评论