Linux内核-存储管理之段页式存储管理

引言

本文为第九篇,存储管理之段页式存储管理 ,前边的文章介绍到了存储管理的内存分配和回收,从物理的角度了解了存储管理,本文从进程的角度去了解进程的存储管理。也就是操作系统是如何管理进程的空间

页式存储管理

在这之前先来了解页面 的概念

在计算机组成原理中有字块 的概念,字块是相对物理设备的定义(像内存条)。而页面是相对逻辑空间的定义 (也就是相对进程空间的定义)。字块和页面都指的是大小一样的一块内存

页式存储管理 会将进程逻辑空间等分成若干大小的页面

相应的也会把物理内存空间分成与页面大小一样的物理块

以页面为单位,把进程空间装进物理内存中分散的物理块中

这就是也是存储管理,在了解页式存储管理时,通常会和内存碎片一起来理解

下边是一个空闲链表,假设有一个页面比节点1大,比节点2和节点3小,因此在分配页面时,需要将页面分配到节点2节点3这个节点,因此就会有一部分内存没有被使用,就会造成内存碎片 的存在

所以如果使用页式存储管理 的话,需要:

页面大小适中,过大难以分配,过小内存碎片过多

页面大小通常是512B~8K

通过页式存储管理,就可以把进程的逻辑空间的每一个页面都放在内存的物理块中去,但是我们怎么知道进程的某一个页面分配到哪一个字块中去呢?因此需要了解页表

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

左边是进程的逻辑空间,进程的逻辑空间分成了5个页面,这5个页面是分散在主存的分散的物理块中,因此需要页表记录映射关系:

如果直接使用页式存储管理也会遇到一些问题:

如果有一段连续的逻辑分布在多个页面中,将大大降低执行效率

内核资料直通车:Linux内核源码技术学习路线+视频教程代码资料

学习直通车:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈

段氏存储管理

将进程逻辑空间划分成若干段(非等分 )

段的长度由连续逻辑的长度决定

主函数main、子程序段X、子函数Y等(这个时候就会根据每一个函数的逻辑的长度去分配逻辑空间)

段氏存储管理 也需要一个表来存储逻辑空间到物理空间的映射,这个就是段表

每一段的长度都是不固定的,因此段表比页表多一个段长

对比两种存储管理的方法:

共同点:

段氏存储和页式存储都离散地管理了进程的逻辑空间

不同点:

页是物理单位,段是逻辑单位

分页是为了合理利用空间,分段是为了满足用户要求

页的大小由硬件固定,段的长度可以动态的变化

页表信息是一维的,段表信息是二维的

段页式存储管理

采用了前两种存储管理的优点形成的一种存储管理方法

分页可以有效提高内存利用率

分段可以更好满足用户需求

段页式存储管理

先将逻辑空间按段氏管理分成若干段

再把段内空间按页式管理分成若干页

从左到右分别是段页式、页式、段氏的内存分配情况

在快速变化的技术中寻找不变,才是一个技术人的核心竞争力。知行合一,理论结合实践

原文作者:精通Linux内核

原文地址:https://zhuanlan.zhihu.com/p/616214193(版权归原文作者所有,侵权留言联系删除)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值