unix内核-内存管理机制

unix内核-内存管理机制

ID:20082668

大小:24.00 KB

页数:3页

时间:2018-10-08

unix内核-内存管理机制_第1页
unix内核-内存管理机制_第2页
unix内核-内存管理机制_第3页
资源描述:

《unix内核-内存管理机制》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、UNIX内核-内存管理机制 内存管理UNIX内存管理是内核最复杂的任务之一。重要因为它用到许多CPU提供的功能,而且和这些功能关系密切。因此,在我们讨论内存管理时,先要讨论CPU及其在内存管理中的作用。1.受保护的编址方式CPU执行的许多指令需要访问内存,看起来很简单,在机器代码指令中指定要提取或修改的内存单元的地址就行了。其实没有这么简单。当需要在内存中同时运行许多进程时,使每个进程都好像在它们自己的机器上运行一样就方便了。做到这一点的办法是在CPU内部完成不同形式的地址转换,将指令指定的地址(

2、称为逻辑地址或有效地址)转换为硬件对实际内存的访问。进程按指令、数据和堆栈分成若干段每一段都有段描述符(segmentdescriptor)。每一段描述符包含8个字节。内容包括段开始的基地址、段的容量和段的访问权限。段的描述符集中放在段描述表中。一个CPU内部寄存器保存访问段描述符表的基地址。除此之外,CPU还包含一组段寄存器。每个寄存器指向描述表中的一个段描述符项。如果发生了任何类型的内存访问,将选择一个CPU段寄存器(或者由访问内存的类型的隐含说明,或者由访问内存的指令的明确说明)用来进行地址

3、计算。计算的结果得到线性地址。这里说得是每一次的内存访问,CPU都用一个内部寄存器的内容找到描述表的基地址。基地址和一个段寄存器的内容(它的最低3位的值为0)相加。相加的结果是指向描述符表的一个8字节的项的指针。注意:段的描述府项包含段在内存中的基地址,段的容量和对本段的访问权限。访问内存的指令本身也提供一个地址,这个地址是已取得段描述符的内存段内部的逻辑地址(或有效地址)。指令的逻辑地址和段的基地址相加得到线性地址。必须对线性地址进行检查,保证它落在段的范围内(不超过段的容量),并检查是否允许在

4、段内进行请求的访问类型(读、写或执行)。如果这些检查被通过,CPU现在有了用来访问内存的地址。我们已经看到的段描述符主表称为全程段描述表或者GDT,而指向GDT起点的CPU寄存器称为GDTR.在多任务环境中,可能愿意每个进程访问它自己的内存段。为满足这一要求,CPU也为每个进程提供另外一个描述符表,称为局部描述符表或者LDT,它通过GDT的项和处理机内部寄存器LDTR进行访问。如果每次内存访问都要查找描述符表(它本身又在内存中)的值,这将消耗大量的CPU时间。为了大大加速这一过程,CPU内部有一些

5、隐藏的,不能由程序直接访问的寄存器。这些寄存器用作快速缓存,保存当前每个段寄存器所指的段描述符的值。只有有关的段寄存器的值改变时,或者描述符表的GDTR或LDTR的基地址改变时,才用相应的段描述符值加载隐藏的寄存器。 2.分页技术在前面讨论的组织内存访问的功能的基础上,可以建立起一个完全切实可行的多任务系统。只要在开始运行时每个进程知道它实际需要的内存容量,一开始就可以为这一进程在合适的位置分配它所需的内存块。在进程存在期间也不用再改变内存的分配。然而,有些UNIX版本要比上面的简单模型更为灵活。

6、例如,它允许进程不必考虑周围实际上还有其他的进程存在的现实而增加它的内存要求。有的UNIX系统还允许同时运行比实际内存所能容纳的更多的进程。之所以能这样做,因为利用了处理机提供的分页(paging)功能。在CPU中是否进行调页由处理机控制寄存器中的1位来进行控制。如果调页位设置,32位的线性地址将一分为二。高20位用作页号,而低12位用作页内的位移地址。这表示32位的线性地址可以用来访问100万4KB页。分页所做的主要工作之一是将线性地址中提供的20位页号转换位对应于机器实际4KB内存页的另一个2

7、0位页号。结果是,任何实际4KB内存页可以出现在处理机线性地址空间的100万4KB页边界内的任何位置。地址变换用内存中的对照表完成,其中线性地址的高20位用作大的32位元素的数组的索引。从数组取得的32位值提供所需的20位转换值,其余12位则用来指定类似下面的一些事项:·本页允许读、写还是只允许读访问?·本页是用户进程访问页,还是管理进程访问页?·是否对任何页内地址进行了读或写访问?·是否对任何页内地址进行了写操作?·本页在内存中还是在磁盘上?用两级页表取代单个大的页表可以不必用很大的连续线性地址

8、空间来保存页表,两级页表将线性地址空间的高20位划分为两个独立的10位值。CPU的3号控制寄存器包含内存中用作第一级页目录表的4KB的地址。每一4KB页分成1024项,每项占32位。线性地址中页号的前10位正好用来选择页表中的项。这样选出的32位包含20位实际页号,以及前面讨论过的12位。段的增长当你希望从包围在中间的内存段(segment)中提高内存容量时,分页技术显得特别重要。交换分页的另一个主要用途称为交换(swapping)。交换概念的实质在于允许在系统中同时运行比内存实际

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。