当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > 读核日记(六)

Unix/Linux
Linux 备份 恢复方法
Linux玩CS反恐精英的方法
在一个ISO镜像中集成多个不同的linux发行版,可刻盘,可引导
Linux 快捷键使用
Linux DHCP 服务器配置方法介绍
Linux 22端口的修改方法
Linux 记录会话过程的命令
Linux 后台执行程序如何操作?
linux Wget命令来浏览网页的方法
Linux tail命令的巧妙应用
Wine 中文存在很多的乱码怎么解决方法
linux 新手教程之创建锁文件的方法
配置Linux 保证其系统的安全
Linux DHCP协议实现过程
Linux系统下破解SAM密码
linux/unix vi 编辑器用法详解
Linux 误删文件的解决方法
Linux系统下的历史记录删除方法
Red Hat Linux 安全设置指南
Linux基本命令-注销、关机、重启

Unix/Linux 中的 读核日记(六)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 47 ::
收藏到网摘: n/a

 

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

在前面我们提到过转台和控制寄存器组。他们包括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,线性地址到物理地址的切换

  1. CR 包含页目录的起始地址,用32 位地址中的31-22位的内容作页目录的页目录项的索引,于CR3种的页目录的起始地址相加。得到相应页表的地址
  2. 从指定的地址中取出32 位页目录项。它的提12 位是0用这32 位地址中21-12位作为页表中的页面的索引。将它乘以4和页表的起始地址相加,得到32位地址
  3. 奖11-0位作为相对一页面地址的偏移量,于32位页面地址相加。形成32 位的物理地址。

 

4,页面CACHE

当然,系统频繁的访问二级页表,会造成很大的时间浪费,因此引入了页表CACHE,用来保存最近使用的页面,或者频繁使用的页面,关于CACHE 的原理这里不再详细讲解,有兴趣的朋友可以查一些,计算机专业的基础教材

至此,LINUX使用的836保护模式,基本上讲解完毕。至于控制转移和任务切换。和一般的汇编编程差不多少,本人汇编水平太低。不在献丑

总的说来,多任务的切换,以及保护模式的应用。虚拟存储系统的实现,是建立在硬件的技术支持之上的。

个人认为,LINUX的存储管理。在不同的机器上是完全不同的,至于linux是否为他们提供了统一的接口。我还不太清楚。可以参见其他机型的源码