linux 0.11
2. 目的- 了解内存的管理机制了解虚拟内存和物理内存的映射方式了解 *** 作系统内存和磁盘的交互(分页机制->缺页重读机制,用时拷贝机制)应用程序如何搞笑使用内存和高级程序的设计方式
linux 0.11 默认支持16M
虚拟盘:用来模拟磁盘
逻辑地址:程序员看到的地址,linux *** 作系统分配给每一个进程的独立地址(例如0.11中每个进程认为的自己的空间 64M的地址)
线性地址:总线地址ARM CPU采用分段机制(线性地址 = 逻辑地址 + 段基地址)
物理地址:CPU总线的物理地址
虚拟地址:每个进程的分配空间。虚拟地址中具体的地址是逻辑地址
内存管理 来进行逻辑地址–>物理内存 之间的映射
虚拟内存优点:
可以分配超过实际内存大小的空间可以把离散的内存映射成一个连续的空间给虚拟内存来使用 5. 内存映射
虚拟内存如何映射到物理内存的方式:分段,分页
5.1 分段机制GDT:全局描述符。 系统中有一个
LDT:具体描述符。每个进程有一个
逻辑地址是段内的偏移,段基地址没每个段的起始地址。 段基址 + 逻辑地址 得到线性地址
GDT一块256项 减去 4段内核的 = 252项 (则最大进程数为 252 / 2 = 126个)
一个进程的分配的虚拟地址为64M。则可分最大空间64M* 126 = 8G
但是0.11 内核规定最大进行为64个进程 则可以分别的最大空间64M * 64 = 4G
则每个进程(pid)的线性地址 pid * 64 到 (pid + 1) * 64
分段机制:逻辑地址 -> 线程地址 的映射
分页机制:线性地址 -> 物理内存 的映射
页目录表:一级页表
页表:二级页表
下图中每个内存页是4K
线程地址变换示意图
页目录项 1024 项 为 2 ^10 所以占10位 (31 - 22)
每个页表项也是1024 项,也占10位 (21 - 12)
每个页占4K 4096 占 12位 (11 - 0)
在 *** 作系统中有多个页目录项,但是当前使用的只有一个,并且这个页目录表存储地址在CR3寄存器中。
表在head.S 中被创建
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)