首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 开发>linux 内核>文章内容
深入学习LINUX内核之三(图文讲解)
来源:http://www.unix5.com 作者:riechelr_hl 发布时间:2008-04-15  



为了減少确定位址变換所需要的资讯,变換或映射通常以记忆体块作为操作单位。分段机制和分页机制是两种广泛使用的位址变換技术。它们的不同之处在於逻辑位址是如何组织成被映射的记忆体区块、变換资讯如何指定以及程式设计人员如何进行操作。分段和分页操作都使用驻留在记忆体中的表来指定它们各自的变換资讯。这些表只能由作业系统存取,以防止应用程式擅自修改。


80X86在从逻辑位址到实体位址变換行程中使用了分段和分页两种机制,见图4-4所示。第一阶段使用分段机制把程式的逻辑位址变換成处理器可定址记忆体空问(称为線性位址空间)中的位址。第二阶段使用分页机制把線性位址转换为实体位址。在位址变換行程中,第一阶段的分段变換机制总是使用的,而第二阶段的分页机制则是供选用的。如果沒有啟用分页机制,那麼分段机制產生的线性位址空间就直接映射到处理器的实体位址空间上。实体位址空间定义为处理器在其位址汇流排上能夠產生的位址范围。







⒈ 分段机制

分段提供了隔絕各个代码、资料和堆栈区域的机制,因此多个程式(或任务)可以执行在同一个处理器上而不会互相干扰。分页机制为传统需求页、虛拟记忆体系统提供了实现机制。其中虛拟记忆体系统用於实现程式码按要求被映射到实体记忆体中。分页机制当然也能用於提供多工之间的隔离措施。

如图4-5所示,分段提供了一种机制,用於把处理器可定址的線性位址空间划分成一些较小的称为段的受保护位址空间区域。段可以用来存放程式的代码资料和堆栈,或者用来存放系统资料结构(例如TSS或LDT)。如果处理器中有多个程式或任务在执行,那麼每个程式可分配各自的一套段。此时处理器就可以加強这些段之间的界限,並且确保一个程式不会透过存取另一个程式的段而干扰程式的执行。分段机制还允许对段进行分类。这樣,对特定类型段的操作能够受到限制。


一个系统中所有使用的段都包含在处理器線性位址空间中。为了定位指定段中的一个位元组,程式必须提供一个逻辑位址。逻辑位址包括一个段选择符号和一个偏移量。段选择符号是一个段的唯一标识。另外,段选择符号提供了段描述符号表(例如全域描述符号表GDT)中一个资料结构(称为段描述符号)的偏移量。每个段都有一个段描述符号。段描述符号指明段的大小、存取许可权和段的特权级、段类型以及段的第l个位元组在線性位址空间中的位置(称为段的基底位址)。逻辑位址的偏移量部分加到段的基底位址上就可以定位段中某个位元组位置。因此基底位址加上偏移量就形成了处理器線性位址空间中的位址。


線性位址空间与实体位址空间具有相同的结构。相对於二维的逻辑位址空间来说,它们两者都是一维位址空间。虛拟位址(逻辑位址)空间可包含最多16K的段,而每个段最长可达4GB,使得虛拟位址空问容量达到64T。線性位醱和实体位址空间都是4GB(2³²)。实际上,如果禁用分页机制,那麼線性位址空间就是实体位址空间。






⒉ 分页机制

因为多工系统通常定义的线性位址空间都要比其含有的实体记忆体容量大得多,所以需要使用某种“虚拟化”线性位址空间的方法,即使用虚拟储存技术。虚拟储存是一种记忆体管理技术,使用这种管理技术可让程式人员产生记忆体空间要比电脑中实际记忆体容量大很多的错觉。利用这种错觉,我们可以随意编制大型程式而无考虑实际实体记忆体究竟有多少。


分页机制支援虛拟储存技术。在使用虛拟储存的环境中,大容量的線性位址空间需要使用小块的实体记忆体(RAM或ROM)以及某些外部储存空间(例如大容量硬碟)来模拟。当使用分页时,每个段被划分成页面(通常每页为4KB大小),页面会被储存於实体记忆体中或硬碟上。作业系统透过维护一个页目錄和一些页表来留意这些页面。当程式(或任务)试图存取線性位址空间中的一个位址位置时,处理器就会使用页目錄和页表把線性位址转換成一个实体位址,然后在该记忆体位置上执行所要求的操作(读或写) 。

如果当前被存取的页面不在实体记忆体中,处理器就会中断程式的执行(透过產生一个页错误異常)。然后作业系统就可以从硬碟上把该页面读入实体记忆体中,並继续执行刚才被中断的程式。当作业系统严格实现了分页机制时,那麼对於正确执行的程式来說页面在实体记忆体和硬碟之间的交換就是透明的。

80X86分页机制最适合支援虛拟储存技术。分页机制会使用大小固定的记忆体块,而分段管理则使用了大小可变的区块来管理记忆体。无论在实体记忆体中遗是在硬碟上,分页使用固定大小的区块更为适合管理实体记忆体。另一方面,分段机制使用大小可变的区块更适合处理复杂系统的逻辑分区。可以定义与逻辑区块大小适合的记忆体单元而无需受到固定大小页面的限制。每个段都可以作为一个单元来处理,从而简化了段的保护和共用操作。


分段和分页是两种不同的位址变換机制,它们都对整个位址变換操作提供独立的处理阶段。尽管两种机制都使用储存在记忆体中的变換表,但所用的表结构不同。实际上,段表储存在線性位址空间,而页表则保存在实体位址空间。因而段变換表可由分页机制重新定位而无需段机制的资讯或合作。段变換机制把虛拟位址(逻辑位址)变換成線性位址,並且在線性位址空间中存取自己的表,但是並不知晓分页机制把这些線性位址转換到实体位址的行程。类似地,分页机制也不知道程式產生位址的虛拟位址空间。分页机制只是简单地把線性位址转換成实体位址,並且在实体记忆体中存取自己的转換表。


4.2.3 保护

80X86支持两类保护。其一是透过给每个任务不同的虛拟位址(逻辑位址)空间来完全隔离各个任务。这是透过给每个任务逻辑位址到实体位址不同的变換映射来做到。另一个保护机制对任务进行操作,以保护作业系统记忆体段和处理器特殊系统暂存器不被应用程式存取。


⒈ 任务之间的保护

保护的一个重要方面是提供应用程式各任务之间的保护能力。80X86使用的方法是透过把每个任务放置在不同的虛拟位址空间中,並给予每个任务不同的逻辑位址到实体位址的变換映射。每个任务中的位址变換功能被定义成一个任务中的逻辑位址映射到实体记忆体的一部分区域,而另一个任务中的逻辑位址映射到实体记忆体中的不同区域中。这樣,因为一个任务不可能生成能夠映射到其他任务逻辑位址对应使用的实体记忆体部分,所以所有任务都被隔絕开了。只需给每个任务各自独立的映射表,每个任务就会有不同的位址变換函数。在80X86中,每个任务都有自己的段表和页表。当处理器切換云执行一个新任务时,任务切換
共6页: 上一页 [1] [2] [3] 4 [5] [6] 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·使用 Linux 系统调用的内核命令
·Linux 2.6.11内核文件IO系统调用
·Linux操作系统的源代码目录树结
·Linux用户态与内核态的交互讲解
·Linux内核对I/O端口的管理实现(
·深入分析 Linux操作系统的内核链
·Linux内核可装载模块对设备驱动
·概述Linux系统的驱动框架及驱动
·详解Linux 2.6内核新文件系统变
·Linux系统可卸载内核模块完全指
·FreeBSD手册讲解(一)--配置FreeB
·编译Linux操作系统的内核讲解
  相关文章
·深入学习LINUX内核之四(图文讲解
·深入学习LINUX内核之二(图文讲解
·深入学习LINUX内核之五(图文讲解
·深入学习Linux内核文档一(图文讲
·深入学习LINUX内核之六(图文讲解
·深入学习LINUX内核之七(图文讲解
·Linux系统内核漏洞分析
·如何在Linux内核中的实现SYN Coo
·简析Linux与FreeBSD的syscall
·Linux操作系统“警惕”内核汉化
·Linux操作系统核心的汉字显示机
·如何利用异常表处理Linux内核态

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!