首页 > 其他 > 详细

OS存储器管理(二)

时间:2016-03-13 23:45:33      阅读:517      评论:0      收藏:0      [点我收藏+]

离散分配

分页(Paging),分段,段页式

 

一、分页

 

 
一个进程的物理地址可以是非连续的;
 
将物理内存分成固定大小的块,称为块(frame);

将逻辑内存分为同样大小的块,称为页(page);

将连续的页分配并存放到不连续的若干内存块中;

建立页表,记录每一页对应的存储块的块号,将逻辑地址转换为物理地址。

将产生内部碎片

 
 
地址转换方法
 
将逻辑地址转换为虚拟地址:
 
CPU生成的地址分成以下两部分:
1.页号(p):页号作为页表中的索引。页表中包含每页所在物理内存的基地址。
2.页偏移(d):与页的基地址组合就形成了物理地址,就可送交物理单元。
 
逻辑内存和物理内存的分页模型:
 
技术分享
 
例如:
 
技术分享
 
 
将逻辑地址转换为物理地址需要寄存器来支持,地址转换体系结构如下:
 
技术分享
 
 

地址变换机构如下:

 
技术分享
 
 

假定一页大小为1K(1024B),考察逻辑地址2056,地址变换过程工作原理如下所示:

 
技术分享
 
 

转换过程分析:逻辑地址机内表示(以16位为例)

无需计算,只需用块号代替高位的页号,就可立即得到对应的物理地址
 
技术分享
 
例如:
 
技术分享
 
 
 
页表的实现
 
1.页表保存在内存中
2.页表基寄存器(PTBR)指向页表
3.页表长度寄存器(PTLR)指示页表的大小
4.在这种方式下,每次数据/指令的访问需要访问两次内存。一次访问页表,另一次访问数据/指令
5.两次内存访问问题可以用特别的快速查找硬件缓冲(TLB,称为快表或联想存储器或关联内存或翻译后备缓冲器)来解决。
 
带TLB的分页硬件原理如下:
 
技术分享
 
 
 
页表结构:
①层次化分页
②Hash页表
 
①层次化分页
1.将逻辑地址空间分成多个页表
2.一种简单的方法是两层分页法
 
示意图如下:
 
技术分享
 
 
两层分页方法实例:
逻辑地址(32位机器,页大小为4K)分成以下两部分:页号(20位),页偏移(12位)
页表又分成页,所以页号又进一步分成:10位页号,10位页偏移
因此,逻辑地址表示如下:
 
技术分享
 
 
②Hash页表
 
1.处理超过32位地址空间的常用方法是使用Hash页表。
2.逻辑地址中的逻辑页号被放入hash页表中。hash页表的每一项都包括一个链接组的元素,这些元素hash成同一位置(碰撞)。
3.逻辑页号与链表中的每 一个元素的第一个域相比较。如果匹配,那么对应的块号就用来形成位置地址。如果不匹配,那么就对链表中的下一个域进行页码比较。
 
Hash页表实例:
 
技术分享
 
 
 
二、分段
 
 
支持用户观点的内存管理方法
程序是若干段的集合:主程序,子程序,函数,方法,对象,局部变量,全局变量,堆栈,符号表,数组
 
用户角度的程序:
 
技术分享
 
 
段的逻辑视角:
 
技术分享
 
 
段的体系结构:
 
逻辑地址由两个元素组成:<段号,偏移>
 
段表:将二维的用户定义地址映射为一维物理地址。段表的每个条目都有段基地址和段界限。
基地址:包含段的起始地址
界限:指定段的长度
段表基地址寄存器(STBR)指向内存中的段表的位置
段表长度寄存器(STLR)指示程序所用的段的个数
段号S小于STLR的时候才是有效的
 
段硬件实现:
 
技术分享
 
 
 
分段实例:
 
技术分享

 

OS存储器管理(二)

原文:http://www.cnblogs.com/z941030/p/5274040.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!