我们讲完了分段机制 。接下来我们需要分析保护模式的第二种存储管理机制:分页方式 。
在前面我们提到过转台和控制寄存器组 。他们包括EFLAGS、ELP 。和4 个32 位的控制寄存器CRO CR1CR2 CER3 。其中CRO中有一位PE 用于标志是使用保护模式还是实模式的 。有一位PG定义是否使用分页方式(1或0) 。
当PG=1 时,系统使用分页机制 。80386使用大小位4K的页,并且每一个页的边界队奇 。即每一个页的起始位置都可以被4K整除 。这样4G的字节就被分成了1M 页 。分页机制把线性页映射成物理页 。真正的起到了转换作用
下面我们看一下LINUXE得分页结构:
1.多级页表结构
在LINUX中含有1M个页 。其中每个页表占4个字节 。则需要占用4M的连续内存因此LINUX引入了2 级页表结构 。在线性地址中的后10 位(22-32)定义了二级页表 。
二级页表有1K 个字节,页正好存在]一个4K 的页中 。并且通过前20位进行索引,从而实现实际的物理地址 。
这个地方我说不太清楚 。大致可以这样理解 。
如:有N 个链表 。每一个便是一页 。可最后一页的内容是指向另一个二级炼表的指针(或者是索引项)
2,页面项和页目录项
对于每一个页 。都会存在一个页面项 。用来表示该页的使用状况,是否空闲 。是否在内存中等等 。而这些相会存储成一个连标 。以减少使用表时的查询时间等 。
而每一个页表,会存在1024个页面项,这才是真正的“页“ 。
3,线性地址到物理地址的切换
CR 包含页目录的起始地址,用32 位地址中的31-22位的内容作页目录的页目录项的索引,于CR3种的页目录的起始地址相加 。得到相应页表的地址 从指定的地址中取出32 位页目录项 。它的提12 位是0用这32 位地址中21-12位作为页表中的页面的索引 。将它乘以4和页表的起始地址相加,得到32位地址 奖11-0位作为相对一页面地址的偏移量,于32位页面地址相加 。形成32 位的物理地址 。
4,页面CACHE
当然,系统频繁的访问二级页表,会造成很大的时间浪费,因此引入了页表CACHE,用来保存最近使用的页面,或者频繁使用的页面,关于CACHE 的原理这里不再详细讲解,有兴趣的朋友可以查一些,计算机专业的基础教材
至此,LINUX使用的836保护模式,基本上讲解完毕 。至于控制转移和任务切换 。和一般的汇编编程差不多少,本人汇编水平太低 。不在献丑
总的说来,多任务的切换,以及保护模式的应用 。虚拟存储系统的实现,是建立在硬件的技术支持之上的 。
【六 读核日记】个人认为,LINUX的存储管理 。在不同的机器上是完全不同的,至于linux是否为他们提供了统一的接口 。我还不太清楚 。可以参见其他机型的源码
推荐阅读
- 七 读核日记 --linux的内存管理机制(1)
- 三 读核日记
- 一 读核日记
- 二 读核日记
- 龙族幻想六级圣核怎么弄
- 羊病观察诊断六方法
- 六座车suv有哪些车型哪些车型是六座SUV
- 机长试飞tcl787系列六:电话簿功能
- 护理高烧病牛有“六多”
- 英华OK六款已通过联盟测试的机卡分离产品
