您的位置:首页 > 其它

页式内存管理

2015-06-11 18:53 218 查看
基本原理
1.等分内存
页式存储管理将内存空间划分成等长的若干区域,每个区域的大小一般取2的整数幂,称为一个物理页面有时称为块。内存的所有物理页面从0开始编号,称作物理页号。
2.逻辑地址
系统将程序的逻辑空间按照同样大小也划分成若干页面,称为逻辑页面也称为页。程序的各个逻辑页面从0开始依次编号,称作逻辑页号或相对页号。每个页面内从0开始编址,称为页内地址。程序中的逻辑地址由两部分组成:



3.内存分配
系统可用一张“位示图”来登记内存中各块的分配情况,存储分配时以页面(块)为单位,并按程序的页数多少进行分配。相邻的页面在内存中不一定相邻,即分配给程序的内存块之间不一定连续。
对程序地址空间的分页是系统自动进行的,即对用户是透明的。由于页面尺寸为2的整数次幂,故相对地址中的高位部分即为页号,低位部分为页内地址。
实现原理
1.页表
系统为每个进程建立一张页表,用于记录进程逻辑页面与内存物理页面之间的对应关系。地址空间有多少页,该页表里就登记多少行,且按逻辑页的顺序排列,形如:



2.地址映射过程
页式存储管理采用动态重定位,即在程序的执行过程中完成地址转换。处理器每执行一条指令,就将指令中的逻辑地址(p,d)取来从中得到逻辑页号(p),硬件机构按此页号查页表,得到内存的块号B’,便形成绝对地址(B’,d),处理器即按此地址访问主存。
3.页面的共享与保护
当多个不同进程中需要有相同页面信息时,可以在主存中只保留一个副本,只要让这些进程各自的有关项中指向内存同一块号即可。同时在页表中设置相应的“存取权限”,对不同进程的访问权限进行各种必要的限制。
另一种解释

页式存储管理:把主存储器物理地址分成大小相等的许多区,每个区称为一,与此对应,编制程序的逻辑地址也分成页的大小与块的大小相等

(1)地址转换:绝对地址=块号*块长+块内地址

(2)计算块号公式:块号=字号*字长+位号

基本思路:

把物理内存划分为许多固定大小的内存块,称为物理页面

把逻辑地址空间也划分为大小相同的块,称为逻辑页面

当一个用户程序被装入内存时,不是以整个程序为单位,把它存放在一整块连续的区域,而是以页面为单位来进行分配的。对于一个大小为N的页面程序,需要有N个空闲的物理页面来把它装载。这些物理页面不一定是要连续的

在页式存储管理中需要解决三个问题:数据结构、内存分配与回收、地址映射。

数据结构有两个:页表和物理页面表。

A.页表:给出了任务逻辑页面号和内存中物理页面号之间的对应关系。

B.物理页面表:描述内存空间中,各个物理页面的使用情况。

内存的分配过程:

A.对于一个新来的任务,计算它所需要的页面数N,然后查看位示图,看是否还有N个空闲的物理页面。

B.如果有足够的空闲物理页面,就去申请一个页表,其长度为N,并把页表的起始地址填入到该任务的控制块中。

C.分配N个空闲的物理页面,把他们的变换填到页表中,建立逻辑页面与物理页面直接的对应关系。

D.修改位示图,对刚刚被占用的那些物理页面进行标记。

地址映射的基本思路:

A.逻辑地址分析:对逻辑地址,找到它所在的逻辑页面,以及它在页面内的偏移地址。

B.页表查找:根据逻辑页面号,从页表中找出它对应的物理页面号。

C.物理地址合成:根据物理页面号和页内偏移地址,最终确定物理地址。

逻辑地址分析:

页面的大小都是2的整数次幂。对于给定的一个逻辑地址,可以直接把它的高位部分作为逻辑页面号,把它的低位部分作为页内偏移地址。例如,假设页面的大小是4KB,即2的12次幂,逻辑地址为32为,那么在一个逻辑地址当中,最低12位为页内偏移地址,而剩下的20位就是逻辑页面号。

计算方法:

逻辑页面号=逻辑地址/页面大小

页内偏移量=逻辑地址%页面大小

页表查找:

页表作为操作系统的一个数据结构,通常保存在内核的地址空间中。

页表基地址寄存器用来指向页表的起始地址;页表长度寄存器用来指示页表的大小,即对于当前任务,它总共包含有多少个页面。

物理地址合成:

假设物理页面号为f,页内偏移地址为offset,每个页面大小为2n,那么相应的物理地址为:f×2n+offset。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: