上一节,从物理内存角度讲述了内存管理,这一节,将会从进程的角度来讲述一下存储管理。
所以,我们思考一下,操作系统是怎么去管理进程的内存空间的呢?
一共有三种管理模式,我会一一来介绍:
1. 页式存储管理
首先先明白两个重要的概念:
字块是相对物理设备的定义。
页面是相对逻辑空间的定义。
而我们的页式存储管理,是将进程逻辑空间等分成若干大小的页面,相应的把物理内存空间分成与页面大小相同的物理块,以页面为单位把进程空间装进物理内存中分散的物理块。
由此可见,我们如果将页面强行塞到空闲节点的话,定会产生空间碎片,所以页面大小塞进去的物理空间应该大小适中。
页面大小通常为512B-8KB。
那么问题就来了,在这么多的字块里,我们如何正确的分配页面的存储地址呢?
这时候就需要我们的页表了。
页表:记录进程逻辑空间与物理空间的映射关系。
由上图可见,页表可以帮助我们记录页面对应的存储地址。
总结一下,页式存储管理可以做到:
- 将进程逻辑空间等分成若干大小的页面。
- 相应的把物理内存空间分成与页面大小的物理块。
- 以页面为单位把进程空间装进去物理内存中分散的物理块。
它的缺点是:
如果有一段连续的逻辑分布在多个页面中,将大大降低执行效率。
2. 段式存储管理
段式存储管理:
- 将进程逻辑空间划分成若干段(非等分)
- 段的长度由连续逻辑的长度决定
- 拥有主函数MAIN、子程序段X、子函数Y
然后我们来对比一下段式存储管理和页式存储管理:
相同点是:
- 段式存储管理和页式存储管理都离散的管理了进程的逻辑空间。
不同点是:
- 页是物理单位,段是逻辑单位。
- 分页是为了合理利用空间,分段是满足用户要求
- 页大小由硬件固定,段长度可动态变化
- 页表信息是一维的,段表信息是二维的。
3. 段页式存储管理
段页式存储管理,集成了前面两种存储管理的优点形成的。
- 先将逻辑空间按照段式管理分成若干段。
- 再把段内空间按照页式管理等分成若干页。