读核日记(六)

读核日记(六)
本文出自:http://os.silversand.net 作者: sunmoon (2001-09-01 09:05:00)

我们讲完了分段机制。接下来我们需要分析保护模式的第二种存储管理机制:分页方式。

在前面我们提到过转台和控制寄存器组。他们包括

EFLAGSELP。和4 32 位的控制寄存器CRO CR1CR2 CER3。其中CRO中有一位PE 用于标志是使用保护模式还是实模式的。有一位PG定义是否使用分页方式(10)。

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是否为他们提供了统一的接口。我还不太清楚。可以参见其他机型的源码
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值