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

Unix/Linux
Linux创建ADSL拨号上网方法
LINUX环境中配置WU-FTP服务器
Linux系统有效防御ARP攻击
linux sybase 安装全过程(写给初学者)
Sybase ASE数据库的常见问题解答
Linux中让进程在后台运行的方法
linux系统维护常见错误记录
CentOS支持reiserFS的设置方法
linux下安装Zend Optimizer的方法
linux内容批量替换的命令
linux vmstat输出方法解析
Smplayer播放wmv和avi的文件有箭头的问题解决方法
RHEL5 centos安装中文支持
linux构建动态WEB服务器安装篇
linux构建动态WEB服务器配置篇
Apache服务器优化方法小结
apache中并发控制参数prefork理解和调优
Gzip在apache2中的设置和squid对它的处理方法分析
apache Rewrite防盗链设置方法
linux下svn命令大全

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 57 ::
收藏到网摘: 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是否为他们提供了统一的接口。我还不太清楚。可以参见其他机型的源码