【软考学习12】页式存储、段式存储、段页式存储和物理逻辑地址转换

本文讲解了操作系统中进程的存储管理内容,学习了页式存储段式存储段页式存储的原理,熟悉逻辑地址和物理地址的转换计算方式。

在这里插入图片描述


一、进程存储概论

进程数据存储是操作系统中比较重要的内容。

比如我的计算机有 16G 运行内存,如下图所示。

在这里插入图片描述


我将计算机开机后,假设操作系统消耗了 2G 的运行内存,我打开了某开发工具消耗了 5G 运行内存,又打开了某通讯工具消耗了 1G 运行内存,如下图所示。

在这里插入图片描述
此时我又需要运行一个软件,消耗 900M 的内存,请问应该如何分配?

目前存在四种分配方法,分别是首次适应法最佳适应法最差适应法循环首次适应法


1.1 首次适应法

首次适应法的原理,就是从上到下寻找第一个能放的内存块,找到后放下,所以会放在如下图所示的位置。

在这里插入图片描述

1.2 最佳适应法

最佳适应法的原理,就是遍历所有现有内存块后,找到能满足的最小内存块,如下图所示。

在这里插入图片描述

1.3 最差适应法

最差适应法的思路刚刚和最佳适应法相反,遍历所有现有内存块后,找到能满足的最大内存块,如下图所示。

在这里插入图片描述

1.4 循环首次适应法

循环首次适应法将当前空闲的内存块从上到下(3G、1G、1G、3G)串成一个圈,如下图所示。

在这里插入图片描述
接着每次遍历最先可放的空闲块,遍历到 3G 发现可以放下,所以直接放,如下图所示。

在这里插入图片描述
同理,第二次若再找一个 900M 内存块,那就放在 1G 块这里,如下图所示。

在这里插入图片描述


但这种内存分配方式总体上存在着缺陷,理论上来说,计算机运行内存总共为 16G,我已经用了 8G,还剩下 8G 内存。

但是此时如果我再运行 5G 的软件,就已经无法运行了,因为没有 5G 的内存块供我使用,所以我们需要使用页式存储

在这里插入图片描述


二、页式存储管理

2.1 页式存储原理

高级程序语言在设计时使用逻辑地址,但在运行时需要用物理地址在内存中寻找,这就涉及到逻辑地址和物理地址的转换问题,软考中经常考到。

页式存储是把计算机的存储器划分成大小相等的多个区域,每个区域称为一块,并对它们按照顺序编号。

物理地址 = 块号 X 块长 + 页内地址

而程序的逻辑地址是将内存划分为何块大小相等的页,同样按顺序编号。

在分页式存储模式中,允许将每一页分散存储在物理块中,要求程序能在主存(内存)中找到每个页面所对应的物理块,确保作业的正确运行。物理地址的块是真实存在的,而逻辑地址是人们在编程时拟定的,所以有一个关联表,即页表

总体的结构图如下:

在这里插入图片描述

使用了页式存储,比如每一页设定为 4K 大小。

我们运行一个需要 503K 内存的程序,只需要为其分配 126 页即可,剩下浪费的 1K 可以忽略不计,也就是利用率高、碎片小

有了固定页面大小之后,取址计算可通过乘法计算,分配和管理比较简单

但使用页式存储需要实时维护页表,增加了系统开销

根据经验表明,使用页式存储可能会出现倒挂现象,即内存给与越多,缺页率可能反而更改,这个后续章节会讲到。


总的来说,页式存储的流程如下:

  • 将进程虚拟空间划分为长度相等的多个页,并按顺序编号。
  • 将内存空间同样划分为多个存储块(物理块),和页一样大,同样按顺序编号。
  • 为进程分配内存时,以块为单位,根据页表匹配,将若干页分别装入可以不相邻的物理块中。

2.2 逻辑地址和物理地址转换

页式存储地址可分为页号(P)和页内地址(W),如下图所示。
在这里插入图片描述
物理地址也可分为块号和页内地址,如下图所示。

在这里插入图片描述
由此可得,在进行逻辑地址和物理地址转换时,只需要根据页表,将页号替换为块号(页帧号)即可,而后面的页内地址无需变动

在这里插入图片描述

题目:比如进程 P 有 6 个页面,页号分为是 0 到 5,页面大小为 4K,页表如下所示,已知逻辑地址为 5A29H,求十六进制的物理地址。

因为页面大小为 4K,4K = 2 的 12 次方,可得页内地址为 12 位

已知逻辑地址为 5A29H,转换为二进制就是 0101 1010 0010 1001,后面的 12 位(1010 0010 1001)就是页内地址。

可得前面四位 0101 就是页号,查表可得块号为 6,转换二进制为 0110。

所以物理地址的二进制为 0110 1010 0010 1001,转换十六进制为 6A29H


三、段式存储管理

简单来说,段式存储管理是将页式存储组织的页大小设置为不固定

因为程序一般都是由主程序、子程序、堆栈等元素组成,每一段都有自己独立的作用,我们不能去断章取义,所以将一段作为单位存储在内存中,也是一种很好的方式,这就是段式存储

每个作业都由独立段组成,可以给段做个编号,即逻辑地址从 0 开始编号。

段内地址是连续的,段和段之间的地址是不连续的,段式存储的逻辑地址由段号和段内地址组成,如下所示。
在这里插入图片描述
段式存储的结构如下所示:

在这里插入图片描述

  • 优点:多个程序可共享内存,而且读写互不影响。
  • 缺点:内存利用率低碎片大

四、段页式存储管理

段页式存储管理方式结合了页式存储和段式存储的方法,采用了分段的方式,每一段作业独立编程,再把段分成若干个页面,相当于在段式的基础上再套了一层页式存储算法,存储结构如下所示。

在这里插入图片描述

  • 优点:利用率高、物理地址连续存储
  • 缺点:使用段页式存储需要实时维护段页表,增加了系统开销,使得执行速度下降。

五、总结

除了页式存储段式存储段页式存储之外还有一种快表

快表是一种高速缓存(Cache)组成的小容量的存储器,特点是速度快,一般用于存放瞬时访问最多的数据,也是很好的进程存储容器,在本文中不再详细讲解。

本文讲解了操作系统中进程的存储管理内容,学习了页式存储段式存储段页式存储的原理,熟悉逻辑地址和物理地址的转换计算方式。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值