基本分页存储管理方式

259 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

一、页和物理块

分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。 物理块:把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框号。也加以编号,如第0块,第1块等。 两者的关系: 在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。

页面大小:由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片”,即页面大小。

分页地址中的地址结构有两部分:前一部分是页号P,后一部分为页内位移量W(或称为页内地址)。如下图所示:如果逻辑地址空间是2的m次方,页面大小是2的n次方(字节),那么逻辑地址的高m-n位是页号,低n位是页内偏移量。

6ba6a414ff3a41799e9b90f9071c0103_tplv-k3u1fbpfcp-zoom-1.png

二、请求分页存储管理方式

请求分页系统是建立在基本分页的基础上的,为了能支持虚拟存储器功能而增加了请求调页功能和页面置换功能。

页表:基本作用仍然是将用户空间中的逻辑地址变换为内存空间中的物理地址

两级页表的提出的原因

多级页表的出现:为了更好的提高内存的利用率,每一页就应该做得足够小,但是每一页都要在页表里面有一项与页框对应,也就是说页数越多页表也就会越大,页表如果很大的话就会对内存造成浪费,因为存放页表的这部分内存是不能给程序使用的,并且一直存放在该进程的PCB里面。那么究竟会造成多大的浪费?假设页面尺寸为4K,地址是32位,那么就有220个页面,页表里面就有220个页表项,如果每个页表项是4个字节,2^20个就是4M;系统并发十个进程,需要40M内存。如果并发一百个就是400M内存,这无疑是一个很大的开销。节省大量内存。

原理:一个逻辑地址用10bits的页目录号+10bits的页号+12bits的偏移组成。页目录表的每一项对应一个页表,然后再根据页表找到对应的页。

物理地址的确定:例题:

已知32位逻辑空间,页面大小4KB,每个页表项占4B,页目录号:0 ~ 1023,页号:0 ~ 1023,逻辑地址4098对应的物理地址?

外层:每个页表大小:4*1024=4096,4098/4096=1.....2,所以逻辑页号(页目录号+页号)=1,页内地址=2;

第二层:1/1024=0....1,所以页目录号=0,页号=1。