基本分页存储管理的基本概念

基本分页存储管理的基本概念

思考:连续分配方式的缺点
考虑支持多道程序的两种连续分配方式:
1.固定分区分配:缺乏灵活性,会产生大量的内部碎片,内存的利用率很低。
2.动态分区分配:会产生很多外部碎片,虽然可以利用“紧凑”技术来处理,但是“紧凑”的时间代价很高。
所以
如果允许将一个进程分散地装入到许多不相邻的分区中,便可以充分地利用内存,而无需再进行“紧凑”。

灵魂一问:

固定分区分配和分页式存储的区别?

和动态分区分配和分段式存储的区别?

内存空间的分配和回收可以分为两种方式
1.连续分配管理
2.非连续分配管理:分页、分段、段页式
注:连续分配:为用户进程分配的必须是一个连续的内存空间
非连续分配:为用户进程分配的可以是一些分散的内存空间

1. 基本分页存储管理的思想:把进程分页,各个页面可离散地放到各个的内存块中

基本分页的存储管理的思想:
在这里插入图片描述

2. 重要概念

(1)“页框、页帧、内存块、物理块”和“页、页面”
(2)“页框号、页帧号、内存块号、物理块号”和“页号、页面号”

分页存储管理的基本概念:
注:页框的页框号是从0开始的。页号也是从0开始的。页的大小除了最后一个其他的都和页框的大小相等。页框是对内存进行分框,页是对进程进行分页。各个页面不必连续存放在页框中,也不必按先后顺序
在这里插入图片描述

3. 如何实现地址转换

(1)计算出逻辑地址对应的页号
(2)找到对应页面在内存中的存放位置
(3)算出逻辑地址对应的页内偏移量
(4)物理地址=页面始址+页内偏移量

灵魂一问:
将进程地址空间分页后,操作系统该如何实现逻辑地址到物理地址的转换?

回答这个问题之前先思考一下进程在内存中连续存放时,操作系统是如何实现逻辑地址到物理地址的转换的?
重定位寄存器存放装入模块的起始位置
思想:模块在内存中的“起始地址”+目标内存单元相对于起始位置的“偏移量”
在这里插入图片描述
那么如果采用分页技术,应该如何实现地址转换?
将进程的逻辑地址空间分页,那么会分成若干个页。
在这里插入图片描述
其主要的想法是,在每一个页都记录其起始地址,然后加上偏移量即可。
在这里插入图片描述
计算:
计算其实很简单:
就是现在逻辑地址中算出页号和偏移量,由页号决定起始地址,再将起始地址+偏移量就得到了物理地址。
在这里插入图片描述

4. 页号、页内偏移量的计算

(1)页号=逻辑地址/页面大小;页内偏移量=逻辑地址%页面大小
(2)或根据逻辑地址结构计算,逻辑地址=【页号P,页内偏移量W】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 页表

(1)页表记录进程页面和实际存放的内存块之间的对应关系
(2)

一个进程对应一张页表所以

可以知道对应程序的外存地址

在这里插入图片描述
,进程的每一页对应一个页表项,每一个页表项由“页号”和“块号“组成
(3)每个页表项的长度是相同的,页号是”隐含“的。
为了能够知道进程的每个页面在内存中的存放位置,操作系统要为每个进程建立一张页表。
1.一个进程对应一张页表
2.进程的每一页对应一个页表项
3.每个页表项由“页号”和“块号/页框号”组成
4.页表记录进程页面和实际存放的内存块之间的对应关系
5.每个页表项的长度是相同的,页号是“隐含”的

在这里插入图片描述
为什么每个页表项的长度是相同的,页号是“隐含”的?
如果知道了页表存放的起始位置,和页表项占几个字节,如果是按字节编址,否则按字编址的话,就是页表项占几个字;之后由页表的起始位置和每个页表项所占的地址个数可以计算出各个页号对应页表项存放的位置,自然就不需要标记页号。
在这里插入图片描述

页表会按顺序连续地存放在内存中

如果该页表在内存中存放的起始位置为X,则M号页对应的页表项一定是存放在内存地址位X+3*M的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值