linux内核设计与实现
拂风清柳
这个作者很懒,什么都没留下…
展开
-
虚拟地址和地址保护
Linux只用了页式管理,或者说有限制的使用了段式管理,所有段的基地址都是0,每个段的地址空间范围都是0-4G。逻辑地址和线性地址(虚拟地址保持了一致)Linux用户进程都有自己的页表,所有进程是有自己独立的用户空间的0—3G,他们共享了3-4G的内核地址空间,内核页表由内核来维护。进程处于用户态时候是不能访问内核空间的。除了系统调用和中断的时候,才可以访问,这时候就会拷贝过来内核页表,然原创 2013-12-24 21:05:03 · 1393 阅读 · 0 评论 -
内存管理
内核把物理页作为内存管理的基本单位。对与4G内存的话,每一个物理页都对应了一个struct page结构体。Linux把系统的页分为几个区:ZONE_DMA,ZONE_NORMAL,ZONE_HIGHEM 。例如x86三个区就分别是,16-896M,>896M。内核地址空间是3-4G。低端地址是直接映射的,就是简单的加上偏移量,所以page结构体中直接返回其virtual成员就是虚拟地址了。而高端原创 2013-12-22 00:04:56 · 528 阅读 · 0 评论 -
linux中断相关函数与中断上下文理解
在linux2.5之前的版本中,内核提供了一种”能禁止系统中所有处理器上中断”的方法。而在之后就取消了这些接口。所以:Local_irq_disable():禁止本地中断 local_irq_enable():恢复本地中断,这一对函数只要调用一次就会达到所要功能,而不是嵌套的,这样会带来潜在的危险,所以我要需要一种机制可以恢复的以前的状态,而不是单纯的开关,所以内核提供了另外一对函数:原创 2013-12-24 15:35:08 · 3191 阅读 · 0 评论