Linux子系统学习

来源:互联网 发布:红警数据恢复 编辑:程序博客网 时间:2024/06/03 16:44

1、Linux子系统介绍


如图所示,Linux有7个子系统,分别为
SCI:系统调用
PM:进程管理
VFS:虚拟文件系统
MM:内存管理
Network Stack:网络协议栈
Arch:体系结构相关
DD:设备驱动

和Linux驱动开发关系较为紧密的有进程管理系统、内存管理系统、虚拟文件系统,下面将学习进程管理系统和内存管理系统。

2、Linux内存管理子系统

2.1内存管理模型

内存管理子系统的职能主要有2个:
1、虚拟地址空间分布
2、虚拟地址到物理地址的映射

右边是虚拟地址的分配,上面是物理地址的分配,下面是虚拟地址到物理地址的转换。
Linux支持的虚拟地址空间由硬件来决定,比如32位的处理器只支持4G的虚拟内存,4G内存又被分为用户空间(0~3G)和系统空间(3~4G),即3:1的方式分配。
系统空间又分为直接映射区(3G~3G+896M(最高)),Vmalloc区、永久映射区和固定映射区。由于这几个区到物理地址的映射方式不同,所以分为4个区。


用户空间的虚拟地址到物理地址的映射:


学过操作系统的同学应该对这幅图不陌生。先把虚拟地址的高10位取出来,作为偏移加上基地址作为页目录,然后指向页表基地址。页表基地址加上中间10位就可以取到一个物理页的基地址,物理页的基地址加上后12位的页内偏移,就可以找到物理页的存储单元。

内核直接映射区到物理地址的映射:
这里的虚拟地址直接减去3G后就是它的物理地址

vMalloc区:
(物理地址的低896M称为低端地址,其他称为高端地址)
它及访问高端地址也访问低端地址,没有一种线性的映射关系

永久内核映射区:
它固定访问高端内存

固定映射区:
它和特殊的寄存器建立映射关系,用来访问寄存器。