深入linux内核架构-学习笔记一

来源:互联网 发布:手机淘宝我要代理入口 编辑:程序博客网 时间:2024/05/16 23:47

1. linux内存管理中,将虚拟空间划分为两个部分:内核空间和用户空间,内核空间占用高地址空间(>TASK_SIZE),虚拟空间地址与具体的物理内存的大小无关。内核利用页表将虚拟空间与物理内存对应起来,不同的虚拟空间的页可以映射到同意物理内存当中,从而实现不同进程间的数据共享。用户空间中的每一个用户程序都看不到彼此的存在,因此每一个用户程序都可以利用整个用户空间。

2.内核空间和用户空间的访问:用户程序不能直接访问内核空间,只能以系统调用(陷入)的形式。当内核运行在中断上下文中的时候,是不能访问虚拟空间的用户空间部分,这是因为中断随时都可能发生,发生中断的时候,任何一个用户程序都可能正在运行,基本上与中断的原因无关,因此内核无权访问用户程序空间。

3.物理内存的分配:内核采用伙伴系统来分配物理页帧,内存中的空闲块总是两两分组,每组中的两个内存块成为伙伴。如下图所示。若要分配8个页帧,则现将16个页帧分成两个伙伴,其中的一个用于满足应用程序的需求,另一个则放回伙伴系统。若下一个请求需要2个页帧,则现将8个页帧分成两个4个页帧,其中一个放回伙伴系统,另一个在分成两个伙伴,每一个含两个页。其中一个回到伙伴系统,另一个则传递给应用程序。当有内存页帧回收的时候,先检查是否能与伙伴系统中的空闲的伙伴合并,如能则先合并在放回伙伴系统,否则直接放回伙伴系统。


当内核请求比页帧小的多的空间分配的时候,由于不能使用标准库的函数,因此内核定义了slab缓存。slab缓存每次申请若干页帧,然后在这些帧中为内核分配小的空间请求,并保持与伙伴系统的交互。


4.内核中链表的处理:内核提供的标准链表能连接任何数据结构的,其采用嵌入链表的方式实现,将标准的链表连接结构作为数据结构的成员。如下图所示


5.字节序:现代计算机采用大端序( big endian)和小端序( little endian)的格式存储字。大端序表示字中的高位存储在低字节,字中的地位存储在高字节;小端序则相反,即字中的高位存储在高字节,字中的低位存储在低字节。intel的x86_64的处理器都是采用小端序。






0 0
原创粉丝点击