计算机操作系统(四)

news2024/12/23 13:46:02

存储器管理

计算机的存储层次至少有三层,分别是寄存器、内存、外存。还可以根据具体功能划分为寄存器、高速缓存、内存、磁盘缓存、固定磁盘、可移动存储。
其中,寄存器、高速缓存、内存和磁盘缓存均属于操作系统存储管理的管辖范畴,断电后信息不再存在。固定磁盘和可移动存储介质属于设备管理的管辖范畴,它们存储的信息将被长期保存。

一、各种存储器

寄存器

寄存器的访问速度最,与CPU相当,但价格昂,所以容量不会太大。寄存器的长度一般以字为单位由于内存的访问速度远低于CPU执行指令的速度,为缓和这一矛盾,在计算机系统中引入了寄存器和高速缓存。

特点:快、贵、小

高速缓存

一般情况下程序的指令和数据放在内存中,但是由于内存的读取速度慢于CPU会导致运行效率低,所以引入了高速缓存。高速缓存的读取速度比内存快价格比内存贵,所以容量比内存小。CPU访问信息时先到高速缓存中寻找,如果没有,再到内存中查找。一般计算机设有多级缓存。

内存

内存是计算机的重要部件,用于保存计算机运行的程序以及程序的数据。CPU只能从内存中读取指令和数据。

磁盘缓存

磁盘IO的速度远远低于内存的读取速度,所以在进行IO时会导致运行速度变慢,于是将一部分常用的磁盘数据放入内存中,减少磁盘访问量,提高CPU运行速度。磁盘缓存并不是一个实际存在的存储介质,只是对存放磁盘数据的内存的描述。

二、程序的装入与重定位

将一个用户源程序变成一个计算机可执行程序需要三步:
编译——>连接——>装入

编译:由编译程序将用户的源程序编译成若干个目标模块
链接:将这些目标模块所需的库函数用链接程序链接在一起,形成一个完成的装入模块
装入:使用装入程序将这些装入模块装入内存。

装入程序一般有三种装入方式:绝对装入方式、可重定位装入方式、动态运行时装入方式。

绝对装入

编译时知道程序将驻留在内存的什么位置,则编译程序将产生绝对地址的目标代码。装人模块被装入内存后,由于程序中的逻辑地址与实际内存地址完全相同,故不须对程序和数据的地址进行修改。

绝对装入方式只能将目标模块装人到内存中事先指定的位置,因此只适用于单道程序环境。

可重定位装入(静态重定位)

多道程序环境下,所得到的目标模块的起始地址通常从0开始,程序中的其它地址也都是相对于起始地址计算的,此时应采用可重定位装人方式,将装入模块装人内存的适当位置,这会使得装入模块中的所有逻辑地址与实际装人内存的物理地址不同,这个地址变换的过程称为地址重定位。因为把装入模块装入内存时,地址变换在装入时一次性完成,之后不再改变,故又称为静态重定位。

动态运行时装入(动态重定位)

可重定位装人方式并不允许程序运行时在内存中移动位置。而实际情况是,在运行过程中,程序在内存中的位置可能经常要改变,此时应采用动态运行时装入的方式:不在程序运行之前进行重定位,而是把这种地址转换推迟到程序执行期间进行,又称为动态重定位。

三、连续内存分配

连续内存分配是指给用户程序分配连续的内存空间。它可分为四种分配方式:单一连续分配、固定连续分配、动态分区分配、动态重定位分区分配。

单一连续分配

单一连续分配是最简单的内存分配方式,只能用于单用户、单任务的操作系统中。单一连续分配将内存分为系统区用户区,系统区提供OS使用,用户区指系统区以外的所有内存,仅能存放一道程序。

固定分区分配

固定分区分配是最早的多道程序存储管理方式。固定分区分配是指将内存提前划分为若干个大小不等或相等的分区,一旦划好就不再改变每个分区只能存放一个程序。

动态分区分配

动态分区分配是根据程序的需要动态的分配内存,在实现可变的分区分配时,涉及到分区分配中所使用的数据结构分区分配算法分区分配和回收三个问题。

分区分配的数据结构

为实现分区分配,系统中必须配置相应的数据结构,用来描述空闲分区和已分配分区的情况。常用的数据结构有以下两种形式:空闲分区表空闲分区链。

分区分配算法

常用的分区分配算法有:首次适应算法、循环首次适应算法、最佳适应算法、最坏适应算法、快速适应算法

1.首次适应算法
该算法将空闲分区按起始地址递增的次序排列,每次分配均从空闲分区表或空闲分区链首开始顺序查找直至找到第一个能满足要求的空闲分区为止,并按作业的大小从该分区中分割出一块内存空间分配给请求者,剩余的部分仍留在空闲分区表或链中。该算法优先使用内存低址部分的空闲分区,从而能在高址部分保留较大的空闲分区,但它会在内存的低端留下很多难以利用的小空闲分区,而每次分配时,对空闲分区的查找都必须经过这些分区,从而会增加查找的开销。

2.循环首次适应算法
和首次适应算法的区别在于,循环首次适应算法查找空闲内存从上一次查找到的空闲内存的终止位置开始。所以循环首次适应算法减少了从头开始查找空闲位置的开销,但他会使内存中缺少大的空闲分区。

3.最佳适应算法
该算法将内存分区按容量大小递增的次序排列,每次查找都从空闲分区表或空闲分区链之首查找,并将第一个满足要求的空闲分区分配出去。虽然名字叫最佳,但是实际上会在内存中存在很多小的无法分配的内存分区。

4.最坏适应算法
最坏适应算法将内存分区按容量递减的次序排列,每次查找都从队首开始,如果要求的容量大于队首分区容量,则分配失败,如果满足要求,则分配成功,然后调整空闲分区链(表)该算法的优点是产生碎片的几率最小,缺点是使内存中缺乏大的空闲分区

内存回收

当进程运行完毕释放内存时,需要进行内存的回收。系统根据回收区的首址,从空闲区链(表)中找到相应的插人点,此时可能出现以下几种情况:
1.回收区与插人点的前一个空闲分区F1相邻接。此时应将回收区与插人点的前一分区合并,不必为回收分区分配新表项,而只需修改其前一分区F1的大小。
在这里插入图片描述

2.回收分区与插人点的后一空闲分区F2相邻接。此时也可将两分区合并,形成新的空闲分区,但用回收区的首址作为新空闲区的首址,大小为两者之和。
在这里插入图片描述

3.回收区同时与插入点的前、后两个分区邻接。此时将三个分区合并,使用F1的表项和F1的首址,取消F2的表项,大小为三者之和。
在这里插入图片描述
4.回收区既不与F1邻接,又不与F2邻接。这时应为回收区单独建立一新表项,填写回收区的首址和大小,并根据其首址插入到空闲链中的适当位置。

可重定位分区分配

在动态分区分配方式中,经过一段时间的分配和回收后,内存中会产生很多小的空闲分区。此时,可能有用户程序因找不到足够大的空闲分区而难以装人,但所有空闲分区容量的总和却足以满足该程序的要求。
上述这些不能被利用的空闲分区可采用以下办法加以解决:将内存中的所有作业进行移动,从而将原来分散的多个空闲分区移到同一处拼接成一个大的空闲分区,以装入用户的作业这种技术被称为“拼接”或“紧凑”
可重定位分区分配方式就是在动态分区分配方式的基础上增加紧凑功能,即在找不到足够大的空闲分区、而空闲分区总和却能满足用户的要求时,对内存空间进行紧凑。由于紧凑时,作业要在内存中移动位置,因此,它需要得到动态重定位技术的支持,这也是它被称为动态重定位分区分配的原因。

四、离散内存分配

连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法加以解决,但须为之付出很大开销。因此,OS中又引入了离散分配方式,它将一个作业离散地存放到内存中,从而使系统无须紧凑便能很好地解决碎片问题。
如果离散分配的基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存储管理方式。

分页存储管理

分段存储管理

五、虚拟存储管理

局部性原理

程序局部性原理是指程序在执行时将呈现出局部性规律,即在一较短时间内,程序的执行仅局限于某个部分;相应地,它所访问的存储空间也局限于某个区域。

局限性还表现在下述两方面:
时间局限性
如果程序中的某条指令一旦执行,则不久以后该指令可能再次执行;如果某数据被访问过,则不久以后该数据可能再次被访问。产生时间局限性的典型原因是由于在程序中存在着大量的循环操作。

空间局限性
一旦程序访问“了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内,其典型情况便是程序的顺序执行。

基于局部性原理产生了虚拟存储器。

虚拟存储器的实现

虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。虚拟存储器中存放的是进程中的目标代码、数据等虚拟地址组成的虚拟空间。

虚拟存储器不考虑物理存储器的大小和信息存放的时机位置,只规定每个进程中相互关联信息的相对位置。与实际物理存储器数量有限,且被所有进程共享不一样,每个进程都拥有自己的虚拟存储器。

虚拟存储器的逻辑容量由内存容量和外存容量之和所决定,受计算机地址结构的限制,其运行速度接近于内存速度,而每位的成本却又接近于外存。

虚拟存储器的实现,建立在离散分配的存储管理方式的基础上。目前,虚拟存储器主要是采用下述方式之一实现的:

请求分页系统
在分页系统的基础上,增加了请求调页功能和页面置换功能,便形成页式虚拟存储系统。它允许只装人少数页面的程序及数据,便启动运行。之后再通过调页功能及页面置换功能,陆续地把即将要运行的页面调人内存,同时把暂不运行的页面换出到外存上。

请求分段系统:
在分段系统的基础上,增加了请求调段及分段置换功能后,便形成段式虚拟存储系统。它允许只装人少数而非所有段的用户程序和数据,即可启动运行。之后再通过调段功能和段的置换功能将暂不运行的段调出,同时调人即将运行的段。

请求段页式系统
段页式虚拟存储器是段式虚拟存储器和页式虚拟存储器的结合。它把程序按逻辑单位分段以后,再把每段分成固定大小的页。主存空间也划分为若千个同样大小的页。虚存和实存之间以页为基本传送单位,每个程序对应一个段表, 每段对应一个页表。虚地址包含段号、段内页号、页内地址三部分。CPU访问时,首先将段表起始地址与段号合成,得到段表地址,然后从段表中取出该段的页表起始地址,与段内页号合成,得到页表地址,最后从页表中取出实页号,与页内地址拼接形成主存实地址。

虚拟存储器的特征

虚拟存储器具有多次性、对换性、虚拟性三大主要特征。

多次性:多次性是指虚拟存储器将一个作业分多次调入内存。

对换性:在作业运行期间,虚拟存储器允许将内存中暂时不能运行的进程或暂时不用的程序或数据,调出到外存上,以便腾出足够的内存空间,再把具备运行条件的进程或进程所需要的程序和数据调入内存。
如果对换是以整个进程为单位的,便称之为“整体对换”或“进程对换"。这种对换被广泛地应用于分时系统中,其目的是用来解决内存紧张问题,并可进一步提高内存的利用率。而相应的,**如果对换是以“页”或“段”为单位进行的,则分别称之为“页面对换”或“分段对换”,又统称为“部分对换”。**它们是实现虚拟存储器的基础。

虚拟性:虚拟性是指能够从逻辑上扩充内存容量使用户所看到的内存容量远大于实际内存容量。虚拟性是实现虚拟存储器的最重要的目标
虚拟性是以多次性和对换性为基础的,仅当系统允许将作业分多次调入内存,并能将内存中暂时不运行的程序和数据换至盘上时,才有可能实现虚拟存储器;而多次性和对换性又必须建立在离散分配的基础上。

六、页面置换算法

置换算法的好坏直接影响系统的性能。若采用的置换算法不合适,可能出现这样的现象:刚被换出的页,很快又被访问,为把它调入而换出另一页,之后又访问刚被换出的页…如此频繁地更换页面,以致系统的大部分时间花费在页面的调度和传输上。此时,系统看起来很忙,但实际效率却很低。这种现象称为“抖动”。好的页面置换算法能够适当降低页面更换频率(减少缺页率),尽量避免系统“抖动”。为评价一个算法的优劣,可将该算法应用于一个特定的存储访问序列上,并且计算缺页数量,存储访问序列也叫页面走向

最佳置换算法(OPT)

最佳置换算法(Optimal,OPT)选择不再访问的页面或者是在未来最长时间内不再被访问的页面予以淘汰。最佳页面置换算法是在理论上提出的一种算法,具有最好的性能,但实现是困难的,因为它需要人们预先知道一个进程在整个运行过程中页面走向的全部情况。不过这个算法可用来衡量其他算法的优劣。
在这里插入图片描述
缺页中断的次数/访问序列数量=缺页率

先进先出页面置换算法(FIFO)

FIFO算法总是淘汰最先进人内存的页面即选择在内存中驻留时间最久的页面予以淘汰,该算法的出发点是最早调人内存中的页面,其不再被使用的可能性会比较高。其实现简单、直观,对按线性顺序访问的程序比较合适,面对其他情况则效率不高,因为经常被访问的页面,往往在内存中因停留得最久而被淘汰。
在这里插入图片描述
FIFO算法存在一个问题,一般情况下,能够分配的物理块的个数越多,缺页次数应该越少,但是FIFO存在Belady现象增加物理块,缺页次数可能多也可能少)。
增加一个物理块,却也次数反而变多了。
在这里插入图片描述

最近最久未使用算法(LRU)

LRU算法是根据页面调入内存后的使用情况进行决策的。由于无法预测各页面将来的使用情况,只能以“最近的过去”作为“最近的将来”的近似,选择在最近一段时间里最久没有使用过的页面予以置换。因此,LRU算法是与每个页面最后使用的时间有关的,当必须置换一个页面时,LRU算法选择过去一段时间内最久未使用的页面。
对于前面的样例,下表列出了物理块数为3时的页面置换情况,缺页次数为10,
缺页率为10/12≈83%。
在这里插入图片描述

Clock置换算法(NRU)

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

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

相关文章

“AI巨浪:ChatGPT等大模型重塑科研与创新的未来!“

AI大模型引领未来智慧科研暨ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的应用 以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数…

第十三篇:复习Java面向对象

文章目录 一、面向对象的概念二、类和对象1. 如何定义/使用类2. 定义类的补充注意事项 三、面向对象三大特征1. 封装2. 继承2.1 例子2.2 继承类型2.3 继承的特性2.4 继承中的关键字2.4.1 extend2.4.2 implements2.4.3 super/this2.4.4 final 3. 多态4. 抽象类4.1 抽象类4.2 抽象…

Epuck2机器人固件更新及IP查询

文章目录 前言一、下载固件更新软件包:二、查询机器人在局域网下的IP 前言 前面进行了多机器人编队仿真包括集中式和分布式,最近打算在实物机器人上跑一跑之前的编队算法。但由于Epuck2机器人长时间没使用,故对其进行固件的更新,…

B端能用就行,颜值无所谓?你现在还敢说吗,马上轮到工业HMI

在当前的商业环境下,用户体验和界面设计的重要性越来越受到重视,即使是B端用户也希望能够使用界面美观、易于操作的工业HMI系统。 漂亮的设计不仅可以提高用户的工作效率和满意度,还可以提升产品的竞争力和市场份额。因此,即使是…

Linux - 多线程

1、Linux线程概念 1.1、什么是线程 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是 “一个进程内部的控制序列”一切进程至少都有一个执行线程;线程在进程内部运行,本质是在进程地址空间内运…

『scrapy爬虫』05. 使用管道将数据写入mysql(详细注释步骤)

目录 1. 新建管道类,并启用2. 准备好mysql数据库新建表3. 实现管道写入数据库的代码测试一下 总结 欢迎关注 『scrapy爬虫』 专栏,持续更新中 欢迎关注 『scrapy爬虫』 专栏,持续更新中 如果对mysql和python不熟悉可看专栏【Python之pymysql库学习】 1.…

202206 CSP认证 | 角色授权

角色授权 fine,又是一道acwing上TLE但是平台通过了的,那就酱吧… 直接跟着题目来模拟的…先找到每个用户授予的所有角色,包括用户本身和它所属的用户组。 然后遍历这个角色集合,看是否有操作权限,种类权限以及资源名称…

uniapp样式穿透修改uview的按钮button图标

需求&#xff1a; 想给按钮icon和text改字体颜色&#xff0c;结果发现图标颜色并没有改变 .u-button{width: 300rpx;background-color: aliceblue;color: #aaaa7f;margin-top: 20rpx; }接下来用样式穿透解决 1、首先&#xff0c;给UI组件包裹一层view <view class"t…

【Algorithms 4】算法(第4版)学习笔记 19 - 6.0.4 网络流算法

文章目录 前言参考目录学习笔记1&#xff1a;介绍1.1&#xff1a;最小切分问题1.2&#xff1a;最大流问题1.3&#xff1a;小结2&#xff1a;Ford-Fulkerson 算法&#xff08;FF 算法&#xff09;2.1&#xff1a;介绍2.2&#xff1a;问题3&#xff1a;最大流量 - 最小切分定理 m…

QT----基于QT的人脸考勤系统

目录 1 编译opencv库1.1 下载源代码1.2 qt编译opencv1.3 执行Cmake一直卡着data: Download: face_landmark_model.dat 2 编译SeetaFace2代码2.1 遇到报错By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has2.2遇到报错Model missing 3 测试…

python爬虫-AES.CBS加密案例(mmz批量爬取)

下载mmz本页数据 批量下载请看主页&#xff01;&#xff01;&#xff01; 代码&#xff1a; import requests from Crypto.Cipher import AES import base64cookies {PHPSESSID: 48nu182kdlsmgfo2g7hl6eufsa,Hm_lvt_6cd598ca665714ffcd8aca3aafc5e0dc: 1710568549,SECKEY_A…

唯一约束

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 唯一约束 唯一约束的特点是在某一个列上的内容不允许出现重复。 例如&#xff0c;现在要收集用户的信息&#xff0c;假设包含编号&#xff08;mid&#xff09;、姓名&…

SpringBoot(文件上传功能,阿里云OSS存储,几种配置文件用法)【详解】

目录 一、新增员工 二、文件上传-技术点 1. 文件上传功能 1.客户端上传文件三要素 2 服务端接收文件 Controller接收文件示例 修改允许上传的文件大小 2. 本地存储文件 3. 阿里云OSS存储&#xff08;这里只写一种&#xff0c;可以用其它的&#xff09; 1.介绍 2.开通…

第 126 场 LeetCode 双周赛题解

A 求出加密整数的和 模拟 class Solution { public:int sumOfEncryptedInt(vector<int> &nums) {int res 0;for (auto x: nums) {string s to_string(x);char ch *max_element(s.begin(), s.end());for (auto &c: s)c ch;res stoi(s);}return res;} };B 执行…

QT网络编程之实现UDP广播发送和接收

推荐一个不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;内容全面&#xff0c;作为入门科普和学习提升都不错&#xff0c;分享一下给大家&#xff1a;前言https://www.captainbed.cn/ai 一.UDP通信 1.QT中实现UDP通信主要用到了以下类&#xff1a;QUdpSocket、QHost…

Type-C接口介绍

1、USB介绍 &#xff08;1&#xff09;标准USB A型连接器&#xff08;左&#xff09;及B型连接器&#xff08;右&#xff09; 引脚1 VCC&#xff08;5V&#xff09; 引脚2 Data- 引脚3 Data 引脚4 接地 &#xff08;2&#xff09;Micro USB 引脚定义及OTG (USB-HOST) …

如何使用GIT

如何使用GIT https://www.runoob.com/w3cnote/git-five-minutes-tutorial.html 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语…

Vue | 使用 ECharts 绘制折线图

目录 一、安装和引入 ECharts 二、使用 ECharts 2.1 新增 div 盒子 2.2 编写画图函数 2.3 完整代码结构 三、各种小问题 3.1 函数调用问题 3.2 数据格式问题 3.3 坐标轴标签问题 3.4 间隔显示标签 参考博客&#xff1a;Vue —— ECharts实现折线图 本文是在上…

【Linux】Shell编程【一】

shell是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。 Shell 是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问操作系统内核的服务。 Shell属于内置的…