【操作系统期末速成】​内存管理|内存的装入模块在装入内存的方式|分配管理方式|页面置换算法|页面置换

  •   🎥 个人主页:深鱼~
  • 🔥收录专栏:操作系统
  • 🌄欢迎 👍点赞✍评论⭐收藏

推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

 前言:

最近在备战期末考试,所以本专栏主要是为了备战期末操作系统这门考试,讲的比较浅显,但是都是期末常考的考点和题型,仅限于“期末不挂”的层面

​​


一、内存管理

1.内存管理的概念

计算机不可能将所有用户进程和系统所需要的全部程序和数据放入主存,因此操作系统必须对内存空间进行合理的划分和有效的动态分配

内存管理的概念就是操作系统对内存的划分和动态分配


2.内存管理功能

(1)内存空间的分配与回收:由操作系统完成主存储器空间的分配和管理

💡(2)地址转换: 将逻辑地址转换成相应的物理地址

(3)内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充主存

(4)存储保护:保证各道作业在各自的存储空间内运行,互不干扰


3.将用户源程序变为可在内存中执行的程序的步骤:

(1)编译:由编译程序将用户源代码编译成若干目标模块(把高级语言翻译成机器语言)

(2)链接:由链接程序将编译后形成的一组目标模块及所需的库函数连接在一起,形成一个完整的装入模块(由目标模块生成装入模块,链接后形成完整的逻辑地址)

(3)装入:由装入程序将装入模块装入内存运行,装入后形成物理地址


程序的链接有以下三种方式:

(1)静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开

(2)装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式

(3)运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享


💡(考选择)内存的装入模块在装入内存时,有以下三种方式:

(1)绝对装入:在程序编译时就知道程序需要放在内存中的什么地方,编译后的程序不是从0开始的逻辑地址,而是真实的物理地址按照编译程序产生的绝对地址进行装入

(2)静态可重定位装入:编译后的模块需要连续装入内存,但是在内存中的物理地址可与逻辑地址不同,可以存在一定偏移,比如逻辑地址是0-100,它可以在内存中存储在100-200的内存单元中,需要设定-个偏移量就是100,同时也需要为其分配连续的存储空间,不然通过偏移量是无法找到的,现在就可以通过作业的逻辑地址+偏移量获得作业在内存中的绝对地址(💡考大题)

(3)动态运行时装入:将不同的模块可以装入在不同的内存地址,不同模块可以不连续,但是同一模块还是要连续存放的,同一模块需要设定一个重定位寄存器,每个模块的重定位寄存器中的值就是对应的偏移量。装入程序会把模块装入内存,但是并不会立即将装入模块的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正执行时才进行

可以将程序分配到不连续的存储区


4.覆盖

覆盖技术的基本思想:将程序分为多个段,常用的段常驻内存,不常用的段在需要时调入内存。

特点:打破了必须将一个进程的全部信息装入主存后才能运行的限制,解决了程序大小超过物理内存总和的问题


5.交换

交换技术的基本思想:内存空间紧张时,系统将内存中的某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存


二、分配管理方式

1.连续分配管理方式

连续分配方式是指为一个用户程序分配一个连续的内存空间。主要包括单一连续分配、固定分区分配和动态分区分配

(1)内部碎片:分配给某进程的内存区域中,有些部分没用上

(2)外部碎片:是指内存中的某些空闲分区由于太小而难以利用


<1>单一连续分配(无外部碎片,有内部碎片)

在单一连续分配方式中,内存被分为系统区和用户区,系统区用于存放操作系统相关数据;用户区用于存放用户进程相关数据

内存中只能有一道用户程序,用户程序独占整个用户区空间


<2>固定分区分配(无外部碎片,有内部碎片)

它将用户内存空间划分为若干固定大小的分区,每个分区只装入一道作业,当有空闲分区时,便可再从外存的后备队列中选择适当大小的作业装入该分区

固定分区分配分为分区大小相等分区大小不等两种方式


<3>动态分区分配(没有内部碎片,但有外部碎片)

动态分区分配不预先分配内存,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。(某些空闲分区由于太小而难以利用)


动态分区分配的策略有以下几种算法:

(1)首次适应算法First-Fit

每次都从低地址开始查找,选择第一个能够满足大小的空闲分区

优点:综合看性能最好。算法开销小,回收分区后一般不需要对空闲分区队列重新排序

(2)最佳适应算法Best-Fit

优先使用更小的空闲分区,将空闲分区按照容量递增链接,每次寻找大小能够满足的第一个空闲分区
优点:会有更多的大分区被保留下来,更能满足大进程需求
缺点:开销大,产生很多小碎片

(3)最坏适应算法Worst-Fit

为了防止留下太多细碎的空闲空间,每次分配时优先使用最大的空闲分区。可以将空闲分区按照容量递减链接

缺点:由于每次都使用最大的空闲分区,因此较大的连续分区会很快被利用完,导致大进程到来时可能不足以分配

优点:可以减少难以利用的小碎片

(4)邻近适应算法Next-Fit

由于首次适应算法每次都从链头开始查找,可能导致低地址 部分出现很多小的空闲分区,而每次查找时都会遍历这些分区,增加了查找开销。因此将空闲分区按照地址递增的顺序排成一个循环链表,每次都从上次结束的位置开始查找,使用第一个满足的空闲分区

优点:不用每次都从低地址的小分区开始检索


2.非连续分配管理方式

非连续分配概念

如果可以将一个进程分散的装入到许多不相邻的分区中,便可以充分的利用内存

<1>基本分页存储的管理方式(💡考大题:根据页表求地址)

将用户进程的地址空间也分为与页框大小相等的一个个区域,称为页、或称页面,每个页面也有一个编号,即页号,页号也是从0开始的

各个页面不必连续存放,也不必按先后顺序来,可以放到不相邻的各个页框中

 

<2>基本地址变换机构

步骤:
(1)根据逻辑地址计算出页号、页内偏移量
(2)判断页号是否越界
(3)查询页表,找到页号对应的页表项,确定页面存放的内存块号
(4)用内存块号和页内偏移量得到物理地址
(5)访间目标内存单元

(💡考大题)例题:

例:若页而大小L为1K字节,页号2对应的内存块号b=8,将逻辑地址A=2500转换为物理地址E

答:1KB=1024B,说明页内偏移量占10位

页号2对应的内存号b=8

第一步:计算页号、页内偏移量

页号P=A/L=2500/1024=2

页内偏移量W=A%L=2500%1024=452

第二步:求块号

页号为2,对应的内存块号为8

第三步:求物理地址

E=b*L+W=8*1024+452=8644

<3>分段存储管理方式

进程的地址空间,按照程序程序自身的逻辑关系划分为若干个段,每个段都有一个段名,每段从0开始编址

<4>段页式管理方式

先分段,再将各段分页,再将内存空间分为大小相同的内存块,然后进程内各个分页装入各个内存块中


局部性原理

时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行;如果某个数据被访问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环)

空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。因为很多数据在内存中都是连续存放的)


虚拟内存的基本概念

基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行。

在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。在操作系统的管理下,在用户看来似乎有一个比实际内存大得多的内存,这就是虚拟内存


虚拟内存技术的实现

虚拟内存技术的实现需要建立在离散分配的内存管理方式的基础上

虚拟内存的实现有以下三种方式:

1.请求分页存储管理

2.请求分段存储管理

3.请求段页式存储管理


缺页中断

在请求分页系统中,每当要访问的页面不在内存中时,便产生一个缺页中断,请求操作系统将所缺的页调入内存。此时应将缺页的进程阻塞(调页完成唤醒),若内存中有空闲块,则分配一个块,将要调入的页装入该块 ,若此时内存中没有空闲块,则要淘汰某页,若被淘汰的页在内存期间被修改过,则要将其写回外存


快表

快表就是存放在[高速缓冲存储器]的部分页表。作为页表的Cache,它的作用与页表相似,但是提高了访问速率。由于采用页表做地址转换,读写内存数据时CPU要访问两次主存。有了快表,有时只要访问一次高速缓冲存储器,一次主存,这样可加速查找并提高指令执行速度。

地址转换流程

1.按照逻辑地址中的页号查快表

2.若该页*己存在*快表中,则由页架号和单元号形成绝对地址

3.若该页*不在*快表中,则再查主存页表,与单元号形成绝对地址,同时将该页登记到快表中

4.当快表填满后,又要登记新页时,则需要按照一定替换策略淘汰一个旧的登记项


💡 页面置换算法

最佳置换算法(OPT)

最佳页面置换算法选择的被淘汰页面是以后永不使用的页面,或是在最长时间内不再被访问的页面,以便保证获得最低的缺页率,但是,人们无法预知进程在内存下的若干页面中的哪个是未来最长时间内不再被访问的,因为该算法无法实现

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

优先淘汰最早进入内存的页面,即再内存中驻留时间最久的页面

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

选择最近最长时间未访问过的页面予以淘汰,它认为过去一段时间内未访问过的页面,在最近的将来可能也不会被访问。该算法为每个页面设置一个访问字段,来记录页面自上次被访问以来所经历的时间,淘汰页面时选择现有页面中值最大的予以淘汰

近期最少使用算法(LFU算法

选择近期最少访问的页面作为被替换的页面


页面抖动

概念:刚刚换出到外存的页面马上要调入内存,刚刚调入内存的页面马上要调出到外存

原因:系统为进程分配的物理块大小不足。内存驻留的进程太多


页面置换策略

固定分配局部置换:

系统为每个进程分配一定数量的内存块(物理块),在整个运行期都不改变。若进程在运行过程中发生了缺页,则只能在本进程的内存页面中选出一个进行调出,再调回需要的页面

缺点:不好确定一个进程到底应该分配多大的实际内存才合理

可变分配全局置换:

系统为每个进程分配一定数量的内存块。操作系统还会保持一个空闲物理块的队列。若某个进程发生缺页,可以从空闲物理块中取出一块分配给该进程。如果空闲物理块没有了,那么会选择一个未锁定(不那么重要,可能是其它进程的)的页面换出到外存,再将物理块分配给缺页的进程

缺点:在空闲物理块没有的情况下,如果将其它进程的页面调出外存,那么这个进程就会拥有较小的驻留集(即拥有的物理块),如此会导致该进程的缺页率(访问某个页面,这个页面不在内存中的概率)上升

可变分配局部置换:

刚开始为每个进程分配一定数量的物理块。当进程发生缺页时,只允许从当前进程的物理块中选出一个换出内存。如果当前进程在运行的时候频繁缺页,系统会为该进程动态增加一些物理块,直到该进程缺页率趋于适中程度;如果说一个进程在运行过程中缺页率很低或者不缺页,则可以适当减少该进程分配的物理块。通过这些操作可以保持多道程序的并发度较高

与可变分配全局置换 区别:

可变分配全局置换:只要发生缺页,就会分配新的物理块

可变分配局部置换:根据缺页率动态增加或者减少物理块的数量


真题速通

💡1.根据页表求地址

由页表可知,绝对页号是8,物理地址=E=b(块号)*L(页面大小)+W(偏移量)=1Kx8+451=1024x8+451=8643


💡2.页面置换

在一个请求分页存储管理系统中,一个作业的页面走向4,3,2,1,4,3,5,4,3,2,1,5.当分配给作业的物理块数为3时,试计算采用下述页面淘汰算法时的缺页率(假设开始执行时主存中没有页面),并比较结果

1) 最佳置换算法(从左往右看,第一次出现的地方,最远的那个被替换)

当页面走向为第一个1的时候,向后找第一次出现的地方最远的那个(4,3,2中2离的最远),后面如果有,说明没有缺页,就不用管,下一个就是5;然后再走到2,这个时候发现后面没有3,4,那么默认3,4都在最后一个位置(即最后一个5的后面),所以随机置换一个3/4都可以

缺页率=7/12

2)先进先出置换算法(看这行元素出现的次数,淘汰掉次数最大的)

当页面走向为第一个1的时候,看物理页这行,4出现3次,3出现2次,2出现1次,那么就需要置换出现最多次数的那个(也就是4)

缺页率=9/12

3)最近最久未使用算法(从右往左看,第一次出先的地方,最远的那个被替换)

当页面走向为第一个1的时候,看页面走向这行,从右往左看,4出现的最远,置换4 

缺页率=10/12

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

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

相关文章

栈和队列讲解

文章目录 栈栈的实现栈的初始化压栈出栈获取栈顶元素获取栈内有效元素个数检查是否为空销毁栈栈的使用 栈全部代码队列的初始化队尾入队列队头出队列获取队列头部元素获取队列队尾元素获取队列中有效元素个数检测队列是否为空&#xff0c;如果为空返回非零结果&#xff0c;如果…

矿用泄爆装置之——水封式防爆器使用说明

矿用泄爆装置之——水封式防爆器使用说明。 在这个快节奏的时代&#xff0c;您需要一款能够与您一同成长&#xff0c;满足您需求的产品。我们为您带来的不仅仅是一件产品&#xff0c;更是一份属于您不一样的新体验。【1-5-9】 一、水封式防爆器产品使用介绍 安装在抽放瓦斯泵进…

汇昌联信:做拼多多网点需要具备什么能力?

在当前电商行业高速发展的背景下&#xff0c;拼多多以其独特的商业模式迅速崛起&#xff0c;成为众多创业者和商家关注的焦点。想要运营一家成功的拼多多网点&#xff0c;不仅需要对平台规则有深入的了解&#xff0c;还需要具备多方面的能力。这些能力是确保网点稳定运营并实现…

使用python将`.mat`文件转换成`.xlsx`格式的Excel文件!!

要将.mat文件转换成.xlsx格式的Excel文件 第一步&#xff1a;导入必要的库第二步&#xff1a;定义函数来转换.mat文件第三步&#xff1a;调用函数注意事项 要将.mat文件转换成.xlsx格式的Excel文件&#xff0c;并保持文件名一致&#xff0c;你可以使用scipy.io.loadmat来读取.m…

【getopt函数用法】

这里写目录标题 一、概述二、选项字符串规则&#xff1a;三、getopt 返回值四、会用到的全局变量&#xff1a;三、示例代码四、上机实验 一、概述 int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg; //这个最常用&#xff0c;保存一个…

Geopandas以及CMakeList程序编写技巧

Geopandas官方文档 Geopandas官方文档 reset_index()函数 pandas库中的reset_index()函数是用于重新设置数据框索引的方法。 例如&#xff1a;当我对于文件数据进行了一系列操作后&#xff0c;例如设置了索引set_index&#xff0c;那么会导致数据的索引框发生变化&#xff…

医疗行业面临的网络安全挑战及应对策略

网络攻击已经成为各行各业日益严重的威胁&#xff0c;但医疗行业尤其容易受到影响。2023年&#xff0c;医疗领域的黑客事件占数据泄露的79.7%。 医疗领域 虽然患者、医疗服务提供者和决策者都对保护医疗信息有所关注&#xff0c;但关键的弱点在于提供电子健康记录&#xff08;…

【iOS】RunLoop详解(二)

RunLoop详解&#xff08;二&#xff09; RunLoop 的概念RunLoop 与线程的关系RunloopRunloop与线程的关系RunLoop对外的接口Runloop的Mode应用场景举例举例说明小结 RunLoop 的内部逻辑RunLoop的底层实现苹果用RunLoop实现的功能AutoreleasePool事件响应手势识别界面更新定时器…

[OpenGL高级光照] 阴影改善

目录 一 阴影失真 二 阴影改善 2.1 减小片段深度值 2.2 降低纹理 2.3 注意事项 三 消除Repeat的问题 3.1 让裁剪矩阵的立方体变大 ​3.2 利用采样范围重置 四 精度问题 本章节源码 点击此处 一 阴影失真 在上一篇中,实现了阴影效果之后,但是我们会发现阴影效果中地面…

draw.io 网页版二次开发(3):打包和部署(war包)

目录 一 说明 二 环境配置 1. 下载并安装 Apache Ant 2. 下载并安装JDK和JRE 3. 下载tomcat 4. Ant、JDK和JRE 环境变量的配置 三 draw.io打包 四 部署 五 最后 一 说明 应公司项目要求&#xff0c;需要对draw.io进行二次开发&#xff0c;并将html界面通过iframe 嵌…

Linux网络编程】传输层中的TCP和UDP(UDP篇)

【Linux网络编程】传输层中的TCP和UDP&#xff08;UDP篇&#xff09; 目录 【Linux网络编程】传输层中的TCP和UDP&#xff08;UDP篇&#xff09;传输层再谈端口端口号范围划分认识知名端口号netstatiostatpidofxargs UDP协议UDP协议端格式UDP的特点面向数据报UDP的缓冲数据UDP使…

【算法】竞赛常用知识之字符串1

前言&#xff1a; 本系列是学习了董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 动态规划系列&#xff08;还没学完&#xff09; 【算法】动态规划之线性DP问题-CSDN博客 【算法】动态规划之背包DP问题&#xff08;2024…

IP地址定位技术在网络安全中的作用

在当今数字化时代&#xff0c;网络安全已经成为企业、政府和个人面临的重要挑战之一。随着互联网的普及和网络攻击的增加&#xff0c;保护个人隐私和防止网络犯罪变得尤为重要。在这一背景下&#xff0c;IP地址定位技术作为网络安全的重要组成部分之一&#xff0c;发挥着关键作…

宝塔面板Java项目部署,五步轻松搞定

当涉及到正规的开发项目时&#xff0c;最终的上线部署是至关重要的一个环节。本文旨在以最简单便捷的方法来教你如何完成项目的部署工作。 1. SSH下载地址 项目完成后需要使用SSH终端进行项目部署&#xff0c;以确保安全的远程访问、和操作远程服务器。 Xshell (支持Windows系…

树莓派遇到ping的奇葩问题解决办法

首先&#xff0c;先 ping raspberrypi 一下。获得树莓派的ip 然后开始配置静态ip winR后输入命令ipconfig查询当前网关ip 输入命令sudo nano /etc/dhcpcd.conf 在最末尾输入以下信息 -----------------------------------------------------------------------------------…

多态的学习

1. &#x1f3f7;多态的概念 多态的概念&#xff1a; 通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会 产生出不同的状态。 举个栗子&#xff1a;比如买票这个行为&#xff0c;当普通人买票时&#xff0c;是全价买票…

将Flutter程序打包为ios应用并进行安装使用

如果直接执行flutter build ios: Building com.example.myTimeApp for device (ios-release)...════════════════════════════════════════════════════════════════════════════════No vali…

Web自动化 - selenium

文章目录 一、selenium的使用selenium的安装 二、元素1. 定位选择元素1.id 定位2. class_name 定位find_element 和 find_elements的区别3. TAG_NAME 定位4. 超链接 定位 2. 操控元素1. 查询内容2. 获取元素文本内容3. 获取元素属性 3. 浏览器常用操作API4. 鼠标操作 - perform…

Python 全栈系列244 nginx upstream 负载均衡 踩坑日记

说明 最初是因为租用算力机(Python 全栈系列242 踩坑记录:租用算力机完成任务)&#xff0c;所以想着做一个负载均衡&#xff0c;然后多开一些服务&#xff0c;把配置写在nginx里面就好了。 一开始租用了一个3080起了一个服务&#xff0c;后来觉得速度不够快&#xff0c;再起了…

DOM 文档对象模型

一、DOM简介 1、什么是DOM DOM 文档对象模型简称&#xff0c;是W3C组织推荐的处理可扩展标记语言的标准编程接口 W3C已经定义了一系列的DOM接口&#xff0c;通过这些接口可以改变网页的内容、结构、样式 2、DOM树 DOM把以上内容都看做是对象 二、获取元素 获取页面元素&am…