内存管理(三)——非连续分配管理方式(分页)

一、概要

基本概念: 操作系统对内存的划分和动态管理。
带来的好处: 方便用户实用存储器、提高内存利用率、通过虚拟技术从逻辑上扩充内存。
OS提供的功能: ①内存空间的分配和回收 ②地址转化 ③内存扩充 ④存储保护

二、连续和非连续的比较

(1)回顾:

上期的博客中,我们梳理了,操作系统内存分配的连续分配管理方式,分别有:单一分配、固定分配、动态分配。本期我们梳理关于非连续分配管理方式
在这里插入图片描述

(2)简述:

连续分配管理方式是将程序整个装入一块连续的内存空间,如果用户需要1GB的内存空间,连续分配方式就是在内存空间中为用户分配一块连续的1GB内存。但是如果没有连续的1GB的空间,则该作业仍然是无法运行的。所以我们引入非连续分配管理方式,使得该作业可以分散地在内存地各个区域,当然,也需要额外地空间区存储它们(分散区域)的索引。这也导致连续分配管理方式的存储密度相比连续更低。

(3)分类:

根据运行作业是否要把作业的所有页面装入内存才能运行,又细分为:基本分页和请求分页。

三、分页?

(1)引入:

固定分区会产生内存碎片,动态分区会产生外部碎片,这两种技术对内存的利用率都比较低。我们希望内存的使用能够尽量避免碎片的产生,就引入了分页的思想:把内存划分为大小相等且固定的“块”,“块”相对较小,作为主存的基本单位。把进程也分为以“块”为单位进行划分,进程在执行时,以块为单位逐个申请内存空间。 (注意这里的块在后续叫法有变)

(2)区分:块、页、页框、页帧、内存块、物理页面、物理块?

区分:
进程的”称为:页(page或者页面);内存中的“块”称为页框(Page Frame或者页帧);外存中称为块(Block) ——《王道考研》
进程的地址空间被划分为若干个相等大小的区域,称为:页或页面;内存的存储空间也分为与页面大小相等的区域,称为:块或物理块;在为作业分配存储空间时,以块为单位来分配,可以将作业中的任意一页放到内存的任意一块中。内存中与页面大小相等的块也可以称为:页框 ——《天勤考研》
在这里插入图片描述

(3)页表:

为了将逻辑地址上连续的页号映射到物理地址上,需要将页面和每个物理块一一对应,这就有操作系统建立页表 来体现这种映射关系。
在这里插入图片描述

1) 每个页表项多大?占几个字节?

块号: 必须满足能够存放块号的所有范围。
页号: 页表项连续存放, 因此页号可以是隐含的,不占存储空间(类比数组) 【重点后续会用到】
在这里插入图片描述
页表项中块号起记录作用,但是它本身也需要存放在内存中,并且连续存放。
在这里插入图片描述
如果每个页表项占 4字节,则每个页框刚好可存放 1024个页表项1024 号页表项虽然是存放在下一个页框中的,但是它的地址依然可以用 X + 4*1024 得出:
结论:理论上,页表项长度为 3B 即可表示内存块号的范围,但是,为了方便页表的查询,常常会让一个页表项占更多的字节,使得每个页面恰好可以装得下整数个页表项。
在这里插入图片描述

2)如何通过页表实现逻辑地址到物理地址的转换?

首先我们需要找到逻辑地址对应的页号和偏移量。
在这里插入图片描述

3)如何确定一个逻辑地址对应的页号、页内偏移量?

在这里插入图片描述
重要结论:
①在计算机内部,地址是用二进制表示的,如果页面大小 刚好是 2 的整数幂,则计算机硬件可以很快速的把逻辑地址拆分成(页号,页内偏移量)。
②如果每个页面大小为 2(K次)B,用二进制数表示逻辑地址,则末尾 K 位即为页内偏移量,其余部分就是页号。
在这里插入图片描述
重要结论:
①如果页面大小刚好是2的整数幂,则只需把页表中记录的物理块号拼接上页内偏移量就能得到对应的物理地址。
②根据页号可以查询页表,而页表中记录的只是内存块号,而不是内存块的起始地址!J 号内存块的起始地址 = J * 内存块大小

在这里插入图片描述

4)为何页面大小要取2的整数幂?

在这里插入图片描述

(3)逻辑地址结构:

页面的大小由机器的地址结构决定。在确定地址结构时,若选择的页面较小,可使页面内碎片较小,提高内存利用率;但是也会导致进程要求的页面过多,从而页表过长,占用内存过多,还会减低页面换进换出的效率。
在这里插入图片描述

四、基本分页存储

(1)基本地址变化机构

1)基本地址转化

在这里插入图片描述
在这里插入图片描述

2)练习题

在这里插入图片描述
注意: 在分页存储管理(页式管理)的系统中,只要确定了每个页面的大小,逻辑地址结构就确定了。 因此,页式管理中地址是一维的。即,只要给出一个逻辑地址,系统就可以自动地算出页号、页内偏移量 两个部分,并不需要显式地告诉系统这个逻辑地址中,页内偏移量占多少位

五、具有快表的地址变换机构

(1)什么是快表?

简单地说:是基本地址变换机构的改进版本。
在这里插入图片描述

(2)升级了那些?

流程对比:
在这里插入图片描述
表格对比:
在这里插入图片描述

(3)局部性原理:

在这里插入图片描述

(4)引入快表后地址的变化:

在这里插入图片描述
在这里插入图片描述

(5)能否把整个页表都放在TLB中?

那肯定不行,但是在快表满了的时候,我们可以通过置换算法将一些页表项进行替换。
在这里插入图片描述

六、两级页表

(1)单级页表存在的问题:

从页表大小的计算公式可知,页表大小和页表长度成正比,而页表长度又随着页号位数的增长而呈指数式增长。所以,如果系统的逻辑地址的位数比较多,页表会很大,而整张页表要求需要连续地存放在内存中,这是一件很困难地事情。所以引出两级页表。
在这里插入图片描述

(2)如何解决单级页表的问题?

①问题一:页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框。

解决办法: 把页表再分页并离散存储,然后再建立一张页表记录页表各个部分的存放位置,称为页目录表,或称外层页表,或称顶层页表。这样解决了需要给它分配一块很大的连续空间问题
在这里插入图片描述
在这里插入图片描述

②问题二:没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。在这里插入图片描述

(3)如何实现地址变换?

先用一级页号在一级页表上查找,找出单元内容是二级页表地首地址,页表地首地址加二级地址就是页表项地地址,取出里头数值,就是物理块号。然后物理块号与页内地址拼接就得到了物理地址。
在这里插入图片描述

(4)页的共享与保护

在这里插入图片描述
到改页面对应的块号,同时还要检查本次操作与存取控制字段允许的操作是否相符,若不相符由硬件捕获并发出保护中断。

七、分页存储管理方式的优缺点

在这里插入图片描述

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
内存的连续存放和连续存放是指在计算机内存分配管理进程或数据的方式。 1. 连续存放: 在连续存放,进程或数据被分配在一段连续的内存地址空间。这意味着进程或数据在内存是按照顺序排列的,每个进程或数据块占据一块连续的内存区域。这种方式可以简化内存的管理和访问。 管理连续存放的主要任务是分配和释放内存区域。常见的管理算法有首次适应(First Fit)、最佳适应(Best Fit)和最坏适应(Worst Fit)等。这些算法根据可用内存块的大小选择最合适的区域进行分配,并在进程结束后将已使用的内存释放。 2. 连续存放: 在连续存放,进程或数据可以分散地分配在内存的不同位置。这种方式可以解决连续存放可能导致的内存碎片问题,但也增加了内存管理的复杂性。 常见的连续存放方式包括分页(Paging)、分段(Segmentation)和虚拟内存(Virtual Memory)等。这些方式将进程或数据划分为更小的单元,允许它们在内存的不同位置进行存放。管理连续存放需要维护相应的页表、段表或页面置换算法等数据结构和策略,以实现内存的分配和访问。 总的来说,连续存放和连续存放都是内存管理方式,选择哪种方式取决于具体的需求和系统设计。连续存放简单直观,但可能会造成内存碎片;连续存放可以更有效地利用内存空间,但需要更复杂的管理机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿天堂没有C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值