存储管理——段页式存储管理

从进程的角度来理解进程的存储管理即操作系统是如何管理进程的内存空间

下面的三个方法都是针对进程的空间进行内存管理的。

页式存储管理

什么是页面
字块是相对于内存条物理设备的定义,而页面是相对于逻辑空间的定义,即相对于进程的空间的定义,字块和页面指的都是大小一样的一块内存。

页式存储管理会把进程的逻辑空间等分成若干个大小的页面,相应的也会把物理内存空间分成与页面大小一样的物理块。然后以页面为单位把进程空间装进物理内存中分散的物理块中。如果有一段连续的逻辑分散在多个页面中,将大大降低执行的效率。

通常联系内存碎片一起来理解
假设空闲链表:节点1<=>节点2-3<=>节点4
它的容积范围:1<=>2<=>1
此时页面的大小为1.5,它比节点1大,比节点2-3小,因此分配页面时则会把它分配到节点2-3这个节点。此时就会导致剩下的2-1.5=0.5的这一块是无法被页面所使用的,就造成了内存碎片的存在。

使用页式存储时,需要注意页面大小适中,过大导致难以分配,过小会造成内存碎片过多。一般来说页面大小是512B~8K

通过页式存储管理可以把进程逻辑空间的每个页面放到内存的物理块里面,如何知道进程的某一个页面分配到具体的内存里哪一个物理块?

页表是记录进程逻辑空间与物理空间的映射关系表

页面 1 2 3 4 5
字块 1 3 5 7 11

页面保存在内存不同的字块中,上表说明了页面1保存在第一个字块里,页面2保存在第三个字块里面等

页式存储管理地址也是分为两个部分的,第1部分为页号,第2部分页内偏移页号相当于字块,页内偏移相当于字块的字内偏移。

如果直接使用页式存储管理,也会遇到一些问题。
现代计算机中可以支持非常大的逻辑地址空间(232~264),如此一来,页表就占用非常大的内存空间。如具有32位逻辑地址空间的分页系统,规定页面大小为4kb,则在每个进程页表中的页表项就可以达到1M(220)个,如果每个页表项占用1Byte,那么仅每个进程的页表就要占用1MB的内存空间。
32位系统进程的寻址空间为4G,页表项为4G/4KB=220
在这里插入图片描述
图片来源:慕课网实战课程《编程必备基础》
因此在这种情况下会出现多几页表,多级页表首先有一个根页表,页表里的每一个字块指向的地址是内存里面的一片空间,这个空间存储的是二级页表,假设每个2级页表有1024项,每一项指向的字块才是进程实际使用的内存。页表可以指向多个二级页表,这样可以大大减少进程的页表数所使用的空间,运行时只需要把跟页表加载到内存里面。如果说调用某一个字块发现二级页表没有在内存里面,这时再把二级页表加载到内存里,这样可以按需取用页表,节省内存空间。

段式存储管理

使用页式存储管理,如果有一段连续的逻辑分散在多个页面中,将大大降低执行的效率。因此有了段式存储管理这一方法。

段式存储管理会将进程的逻辑空间划分成若干段(非等分),段的长度由进程的连续逻辑长度决定,比如主函数、各个子函数等

段式存储管理同样需要段表来保存逻辑空间到物理空间的映射。
段表
图片来源:慕课网
上图由于每一段长度都是不固定的,因此段表相对于页表多一项段长的数据。每一个段表有三个基本内容,段号、段的起始地址、段的段长。段式存储管理的段地址分为段号和段内偏移。

比较页式存储管理和段式存储管理

  1. 他们都离散的管理了进程的逻辑空间
  2. 页是物理单位,主要从物理角度划分;段是逻辑单位,主要从进程的逻辑划分
  3. 分页是为了合理的利用空间,分段是为了满足用户需求
  4. 页的大小由硬件固定,段的大小是动态可变化
  5. 页表信息一维,段表信息二维(需要记录基址和段长)

段页式存储管理

采用前两种方法的优点
分页可以有效提高内存利用率,分段可以更好满足用户需求。

先把进程的逻辑空间按段式管理分成若干段,再把段内空间按照页式管理等分若干页

页地址分为页号和页内偏移,段地址分为段号和段内偏移。段页地址结合前两者形成段页地址。它分为段号,段内页号,页内地址

猜你喜欢

转载自blog.csdn.net/wankcn/article/details/108314315
今日推荐