操作系统考试复习——第四章 对换 分页存储管理方式

news2024/9/23 11:22:34

对换技术也成为交换技术,由于当时计算机的内存都非常小,为了使该系统能分时运行多个用户程序而引入了对换技术。

1.对换的引入:

所谓“对换”,是指把内存中暂时不能运行的进程或者暂时不用的程序和数据调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据调入内存

2.对换的类型:

1)整体对换

处理机中级调度实际上就是存储器的对换功能。其目的用于解决内存紧张问题。由于中级调度是以进程为单位的,故又称之为“进程对换”或“整体对换”。

2)页面对换

以进程的一个“页面”或“分段”为单位进行的,分别称为“页面对换”、“分段对换”,又统称为“部分对换”。

在对换技术当中我们只讨论进程对换,而分页或分段对换将放在虚拟存储器中介绍。

对换空间的管理

1.对换空间管理的主要目标:

在具有对换功能的 OS 中,通常把外存分为文件区对换区
1)对文件区管理的主要目标。
是提高文件存储空间的利用率,为此,对文件区采取离散分配方式。
2)对对换区管理的主要目标。
对换操作较频繁。故是提高进程换入和换出的速度。为此,采取的是连续分配方式,较少考虑外存中的碎片问题。

2.对换区空闲盘块管理中的数据结构

与动态分区分配方式中的数据结构相似,即空闲分区表或空闲分区链。在每个表目中包含两项:对换区的首址及其大小,分表用盘块号和盘块数表示。

3.对换空间党的分配和回收

与之前动态分区分配的内存分配和回收方式雷同,也是分为四种情况。回收区上面一个空闲分区,回收区下面一个空闲分区,空闲区上面和下面都有空闲分区,空闲区上面和下面都没有空闲分区。

进程的换入和换出进程的换出:

换出过程:
1)选择被换出的进程。首先选择处于阻塞或睡眠状态的进程,如果有多个,则选择优先级最低的进程。在有的系统除了考虑优先级,还需考虑进程在内存的驻留时间。如果系统中已无阻塞进程且内存仍不足时,则选择优先级最低的就绪进程换出。
2)进程换出过程。只能换出非共享的程序和数据段,对于共享的只要还有进程需要,就不能换出。在进行换出时,①需要申请对换空间。②若申请成功,就启动磁盘,将该进程的程序和数据传送到磁盘的对换区上。③若传送成功,便可回收该进程所占的内存空间,并对该进程的PCB和内存分配表等进行相应的修改,若还有可换出进程,则继续换出,直至内存中再无阻塞进程为止。

进程的换入。
定时执行换入操作。找出“就绪”状态但已换出的进程,将其中换出时间最久的进程作为换入进程,为它申请内存。若申请成功则调入,若失败则需先将内存中的某些进程换出,再将进程换入。直到外存中再无“就绪且换出”状态的进程为止,或者已无足够的内存来换入进程时,对换进程停止换入。

分页存储管理方式:

连续分配方式会形成许多"碎片",虽然可以用"紧凑"方式将许多碎片拼接成可用的大块空间,但须为之付出很大开销。如果允许将进程直接分散地装入许多不相邻的分区中,便可充分地利用内存空间,而无须再进行"紧凑"。

1)分页存储管理方式:将用户程序的地址空间分为若干个固定大小的区域,称为“页”或者“页面”。也将内存空间分为若干个物理块或页框,页和框的大小相同。
2)分段存储管理方式:把用户程序的地址空间分为若干个大小不同的段。分配以段为单位。
3)段页式存储管理方式:是分页和分段两种存储方式相结合的产物

分页存储管理的基本方法

1.页面和物理块

1)页面:将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号。相应地,也把内存的物理空间分成若干个块,并为各块加以编号。在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片”。
2)页面大小:页面的大小应选择适中,且页面大小应是 2 的幂,通常为 1 KB~8 KB。页面太小的话就会使进程的页面数太多,这样页表就会太长,占有大量内存,而且也会增加硬件地址转换的开销,降低页面换入/换成的效率。页面太大又会使得业内碎片增多,降低内存利用率。

2.地址结构

分页地址中的地址结构如下:

                      31                                       12  11                                                         0

页号P位移量W

它包含两部分:前一部分是页号P,后一部分是位移量W,即页内地址。如图我们可以知道每个块大小是2^12也就是4KB。而31-12位是页号所以页号是2^20也就是1M页。

3.页表

为保证进程的正确运行,即能在内存中找到每个页面所对应的物理块。为此,系统又为每个进程建立了一张页面映像表,简称页表。在进程地址空间内的所有页,依次在页表中有一页表项,其中记录了相应页在内存中对应的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射。

地址变换机构:

设置地址变换机构的目的:将用户地址空间地逻辑地址转换为内存空间中的物理地址。

具有快表的地址变换机构:

由于页表是存放在内存中的,这使CPU在每存取一个数据时,都要两次访问内存。第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,以形成物理地址。第二次访问内存时,才是从第一次所得地址中获得所需数据。
为了提高地址变换速度,可在地址变换机构中增设一个具有并行查寻能力的特殊高速缓冲寄存器,又称为“联想寄存器”,或称为“快表”。

在 CPU 给出有效地址后,由地址变换机构自动地将页号 P 送入高速缓冲寄存器,并将此页号与高速缓存中的所有页号进行比较,若其中有与此相匹配的页号,便表示所要访问的页表项在快表中。于是,可直接从快表中读出该页所对应的物理块号,并送到物理地址寄存器中。如在块表中未找到对应的页表项,则还须再访问内存中的页表,找到后,把从页表项中读出的物理块号送地址寄存器;同时,再将此页表项存入快表的一个寄存器单元中,亦即,重新修改快表。但如果快表已满,则 OS 必须找到一个老的且已被认为不再需要的页表项,将它换出。

访问内存的有效时间:

在基本分页存储管理方式中,有效访问时间分为第一次访问内存时间(即查找页表对应的页表项所耗费的时间t)与第二次访问内存时间(即访问页表项中的物理块号与页内地址所拼接成的实际物理地址所耗费的时间t)之和: EAT = t + t = 2t;

在快表中查找到所需表项存在着命中率的问题。所谓命中率,是指使用快表并在其中成功查找到所需页面的表项的比率。
则:EAT = а×λ + (t+λ)(1-а) + t = 2t + λ - t×а;
上式中,λ表示查找快表所需要的时间,а表示命中率,t表示访问一次内存所需要的时间。

两级和多级页表

现代的大多数计算机系统,都支持非常大的逻辑地址空间,因此页表就变得非常大,要占用相当大的内存空间。因为每个页表项占用一个字节,故页表长度 * 1字节就是页表所占的内存空间大小。且页表内存空间还要求是连续的,显然这是不现实的。解决方法:
(1) 对于页表所需的内存空间,可采用离散分配方式来解决难以找到一块连续的大内存空间的问题;
(2) 只将当前需要的部分页表项调入内存,其余的页表项仍驻留在磁盘上,需要时再调入。

两级页表。
将页表进行分页,然后离散地将各个页面分别存放在不同的物理块中。也要为离散分配的页表再建立一张页表,称为外层页表,在每个页表项中记录了页表页面的物理块号。
以前面的 32 位逻辑地址空间为例来说明,当页面大小为 4 KB 时,采用两级页表结构时,再对页表进行分页,使每页中包含 2^10 (即 1024)个页表项,最多允许有 2^10个页表分页。此时的逻辑地址结构如下:

在页表的每个表项中存放的是进程的某页在内存中的物理块号,而在外层页表的每个页表项中,所存放的是某页表分页的在内存中的物理块号。可以利用外层页表和页表这两级页表,来实现从进程的逻辑地址到内存中物理地址间的变换。在地址变换机构中同样需要增设一个外层页表寄存器,用于存放外层页表的始址,并利用逻辑地址中的外层页号,找到指定页表分页的始址,再根据外层页内地址找到指定的页表项,再从该页表项中读出该页在内存中的物理块号。
虽然解决了对大页表无需大片连续存储空间的问题,但并未解决用较少的内存空间去存放大页表的问题。只用离散分配空间的办法并未减少页表所占用的内存空间。解决方法是把当前需要的一批页表项调入内存,以后再根据需要陆续调入。在采用两级页表结构的情况下,对于正在运行的进程,必须将其外层页表调入内存,而对页表则只需调入一页或几页。为了表征某页的页表是否已经调入内存,还应在外层页表项中增设一个状态位 S,其值若为 0,表示该页表分页尚未调入内存;否则,
说明其分页已在内存中。进程运行时,地址变换机构根据逻辑地址中的外层页号 P1,去查找外层页表;若所找到的页表项中的状态位为 0,则产生一中断信号,请求 OS 将该页表分页调入内存。关于请求调页的详细情况,这是下一章虚拟存储器中的知识。
多级页表。
对于 32 位的机器,采用两级页表结构是合适的;但对于 64 位的机器,必须采用多级页表,将外层页表再进行分页。

反置页表的引入
在现代计算机系统中,通常允许一个进程的逻辑地址空间非常大,因此就需要有许多的页表项,而因此也会占用大量的内存空间。 引入反置页表,一般页表的页表项是按页号进行排序的,页表项中的内容是物理块号。而反置页表则是为每一个物理块设置一个页表项,并按物理块的编号排序。其中的内容是页号和其所隶属进程的标识符。

地址变换
利用反置页表进行地址变换时,是根据进程标识符和页号,去检索反置页表。如果检索到与之匹配的页表项,则该页表项(中)的序号i便是该页所在的物理块号,可用该块号与页内地址一起构成物理地址送内存地址寄存器。
在反置页表可能只包含已经调入内存中的页面,并未包含尚未调入内存的页面。因此还必须为每个进程建立一个外部页表。当发现所需之页面不在内存时,因在外部页表中包含了各个页面在外存的物理地址,通过它可将所需之页面调入内存。
当内存容量很大时,也表项的数目还是会非常大的。要利用进程标识符和页号去检索这样大的一个线性表是相当费时的。可利用Hash算法来进行检索,可以很快找到在反置页表中相应页表项,不过可能会出现所谓的“地址冲突”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/498968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zk之数据的发布与订阅

数据的发布和订阅: (1)数据的发布与订阅是一个一对多的关系。多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态发生变化时,会通知所有的订阅者对象,使它们能够自动的更新自己的状态。发布和订阅可以让发…

SpringBoot项目修改application.yml,application-prod.yml配置文件中的端口,数据库链接等信息后,项目突然不能运行

SpringBoot项目修改application.yml,application-prod.yml配置文件中的端口,数据库链接等信息后,项目突然不能运行 问题记录 ,SpringBoot项目修改application.yml,application-prod.yml配置文件中的端口,数…

跟姥爷深度学习5 浅用卷积网络做mnist数字识别

一、前言 前面用TensorFlow浅做了一个温度预测,使用的是全连接网络,同时我们还对网上的示例做了调试和修改,使得预测结果还能看。本篇我们更进一步使用CNN(卷积)网络,不过再预测温度就有点大材小用&#x…

Stable Diffusion Webui 本地部署【踩坑记录】

1、安装python Python Release Python 3.10.6 | Python.org 2、安装git git是一个代码管理工具,通过它可以将开源项目仓库克隆到本地 下载地址:Git - Downloading Package 3、下载stable-diffusion-webui 可以新建一个目录,在文件夹内单…

代数余子式怎么求

代数余子式是矩阵中每个元素的代数余数,可以通过以下步骤求得: 1. 找到该元素所在的行和列,将其删除,得到一个新的矩阵。 2. 计算新矩阵的行列式,乘以(-1)^(行号列号),即为该元素的代数余子式。 例如 对…

vulnhub靶场之nasef1

1.信息收集 探测存活主机,发现192.168.239.176存活 对目标主机192.168.239.176进行端口扫描,发现存活22、80端口 浏览器访问http://192.168.239.176/,发现为apache2的页面,查看源码,未发现异常。 对http://192.16…

-笔记 tps qps

页面请求异步处理 将请求 扔进 kafka, Mq等 MQ单机抗几万并发也是ok的 底层批量处理 sql 处理 尽量批量处理,减少耗时 分库分表, 可能到了最后数据库层面还是免不了抗高并发的要求,好吧,那么就将一个数据库拆分为多个库&#xf…

Java ---System类

System 类位于 java.lang 包,代表当前 Java 程序的运行平台,系统级的很多属性和控制方法都放置在该类的内部。由于该类的构造方法是 private 的,所以无法创建该类的对象,也就是无法实例化该类。 System 类提供了一些类变量和类方…

PBDB Data Service:Thumbnail images of lifeforms(生命形式的缩略图)

Thumbnail images of lifeforms(生命形式的缩略图) 描述用法参数方法响应值格式术语表 描述 此操作返回表示指定分类的图像,或关于图像的信息。如果后缀是 .png,则返回图像内容数据。否则,将以指定的格式返回一个描述…

2023年全国硕士研究生入学统一考试英语(二)试题

2023年全国硕士研究生入学统一考试英语(二)试题 Section I Use of English Directions: Read the following text. Choose the best word ( s) for each numbered blank and mark A, B , C or D on the ANSWER SHEET. ( 10 points) Here’s a common …

OSS文件打包下载

前言 OSS 存放了很多项目(项目是 TMagic 低代码平台编辑生成,自动上传 OSS),现在需要在管理后台将项目打包ZIP下载,并不在本地生成文件。 OSS 要下载项目文件: 一、思路实现 创建 OSSClient 实例获取 Bu…

K8s基础6——应用配置管理方案、调度策略、污点和污点容忍

文章目录 一、应用配置管理方案1.1 ConfigMap1.1.1 注入变量1.1.2 挂载数据卷 1.2 Secret 二、调度策略2.1 nodeSelector定向调度2.1.1 正例2.1.2 反例 2.2 nodeAffinity亲和力调度2.2.1 In硬策略2.2.2 NotIn硬策略2.2.3 软策略 2.3 PodAffinity亲和力调度2.3.1 pod共存2.3.2 p…

【机器学习】信息量、香农熵、信息增益

这节可以搭配 【机器学习】Logistic回归(重新整理)信息量(信息)信息量公式的推理过程 香农熵信息增益 【机器学习】Logistic回归(重新整理) B站视频:“交叉熵”如何做损失函数?打包…

RabbitMQ、RabbitMQ发布/订阅模式

1.RabbiMQ RabbitMQ是一个消息中间件 MQ的基本结构 1.1RabitMQ安装 参考:Docker安装 Docker中部署RabbitMQ 2.入门案例 2.1.publisher实现 package cn.itcast.mq.helloworld;import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; im…

链表中倒数第k个结点

描述 输入一个链表,输出该链表中倒数第k个结点。 示例1 输入: 1,{1,2,3,4,5} 复制返回值: {5}看代码 struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {struct ListNode* fast pListHead, *slow pListHead;whi…

Redis实现分布式锁详细解读

文章目录 什么是分布式锁?如何用Redis实现分布式锁?分布式锁的改进锁过期处理集群环境下Redis宕机问题RedLock的引入RedLock的实现步骤RedLock带来的弊端 什么是分布式锁? 我们在学多线程的时候遇到过ReetrantLock,这种锁主要应用…

node install编译失败原因

关键报错信息 npm ERR! gyp verb check python checking for Python executable "python2.7" in the PATH npm ERR! gyp verb which failed Error: not found: python2.7 或者 npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! Whi…

车载以太网时间同步之EthTsync

车载以太网时间同步之EthTsync 前言 首先,请问大家几个小小问题,你清楚: 你知道EthTsync模块的主要作用是什么吗?EthTsync模块与其他AUTOSAR基础软件模块交互关系;Eth Tsync模块使用的时间同步协议是什么&#xff1f…

Java—JDK8新特性—函数式接口

目录 函数式接口 3.1 什么是函数式接口 3.2 functionalinterface注解 源码分析 3.3 Lambda表达式和函数式接口关系 3.4 使用函数式接口 函数式接口 3.1 什么是函数式接口 如果一个接口中只包含一个抽象方法,这个接口称为函数式接口 如果一个接口包含&#xff0…

mac php8 安装xdebug模块失败

安装 xdebug 模块,官网有详细介绍Xdebug: Documentation Installation 本机是mac php使用brew安装,想着可以直接使用以下方式安装,还是美滋滋的 但是安装途中发生了错误 PHP Warning: mkdir(): File exists in /usr/local/Cellar/php/8.0.10/share/php/pear/System.php on…