操作系统期末复习——课时十内存管理(一)

news/2024/11/28 1:35:46/

1、内存管理的基本原理和要求

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

2)内存管理的功能
(1)内存空间的分配和回收:由操作系统完成对主存的分配和回收,对编程人员透明。
(2)地址转换:使逻辑地址转换为真实的物理地址。
(3)内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上 扩充内存。
(4)存储保护:保证各道作业在各自的存储空间内运行,互不干扰。

3)程序的装入和链接
创建进程首先要将程序和数据装入内存,将用户源程序变为可在内存中执行的程序。
(1)步骤描述:
编译:由编译程序将用户源代码编译为若干目标模块。
链接:由链接程序将编译后的一组目标模块和所需的库函数链接在一起,形成一个完整的装入模块。
装入:由装入程序将装入模块装入内存运行。
在这里插入图片描述
(2)程序链接的方式
静态链接:在程序运行之前,先将各目标模块及他们所需的库函数链接成一个可执行程序,此后不再拆开。
装入时动态链接:编译后所得的一组目标模块在装入时,边装入边链接。
运行时动态链接:对某些目标模块的链接,是在程序执行中需要该目标模块时才进行的。便于修改和更新以及实现对目标模块的共享。

(3)装入内存的方式
绝对装入:在编译时即知道程序将装入的内存的具体地址,则编译程序将产生绝对地址的目标代码。而后将程序和数据装入内存,只适用于单道程序环境。
可重定位装入:在多道程序环境中,多个目标模块的起始地址均为0开始。装入内存时,通过所分配的内存起始地址加上程序内的相对地址进行地址的动态变换,一次完成,又称为静态重定位。(必须一次性全部装入,运行期间不能动态扩充和移动)。
动态运行时装入:装入模块装入内存后并不立即进行地址转换,而是等到程序执行时才进行。需要重定位寄存器的支持(可以将程序分到不连续的存储区中,程序运行前只需要装入部分代码,运行期间根据需要动态分配内存,便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间)。
在这里插入图片描述
在这里插入图片描述
(4)逻辑地址空间与物理地址空间
逻辑地址空间:程序编译后的每个模块都是以0开始编址,称为目标模块的逻辑地址。当链接为一个完整的可执行目标程序时,链接程序将按顺序以0开始编址,构造统一的逻辑地址空间。
物理地址空间:内存中物理单元的集合,是地址转换的最终地址,当装入程序将可执行代码装入内存中时,必须将逻辑地址转化为物理地址。

(5)内存保护
内存分配前,需要保护操作系统不受用户进程的影响,同时保护用户进程不受其他用户进程的影响。

内存保护的两种方式:
a.在CPU中设立一对上、下限寄存器,存放用户作业在主存中的上下限地址,每当CPU要访问一个地址时,先根据这对上下限寄存器判断是否越界访问。
b.采用重定位寄存器限长寄存器来实现这种保护。重定位寄存器保存最小的物理地址限长寄存器保存逻辑地址的最大值。(注意:一个是最小的物理地址,一个是逻辑地址最大值)进行内存访问时,先判断逻辑地址是否大于限长寄存器值,若未越界,则加上重定位寄存器的值映射成物理地址,再进行内存访问。

在这里插入图片描述

2、覆盖与交换

覆盖与交换技术是在多道程序环境扩充内存的两种方法。

1)覆盖
早期系统主存小,仅存放一道用户程序,但存储空间放不下用户进程也时有发生,这一问题可以通过覆盖技术解决。
==覆盖技术的思想:==将程序分为多个段(多个模块)。常用的段常驻内存,不常用的段在需要时调入内存。
把内存划分为一个固定区和若干个覆盖区,固定区存放用户程序经常活跃的部分,调入后就不再调出(除非运行结束),其余部分按调用关系分段,将即将访问的段放在覆盖区,需要用到时调入内存,用不到时调出内存。其他放在外存,在需要调用前,系统将其调入覆盖区,替换原有的段。
必须由程序员声明覆盖结构,操作系统完成自动覆盖。
在这里插入图片描述
缺点:对用户不透明,增加了用户编程负担,覆盖技术只用于早期的操作系统中。

2)交换
基本思想:把处于等待状态的进程或者被CPU剥夺运行权限的进程从内存移除到辅存,这一过程称为换出;把准备好竞争CPU的进程从辅存移到内存,这一过程称为换入。
暂时换出外存等待的进程状态为挂起状态(挂起态)。
挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态。
在这里插入图片描述
(1)具有兑换功能的操作系统中,通常把磁盘空间分为文件区和对换区两部分,文件区主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式;

离散分配方式
1、分页存储管理方式
2、 分段存储管理方式
3、段页式存储管理方式

对换区空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区,由于对换的速度直接影响到系统的整体速度,因此对换区空间的管理主要是求换入换出速度,因此通常对换区采用连续分配方式。总之,对接I/O速度比文件区的更快。

连续分配方式
单一连续分配
固定分区分配
动态分区分配
动态可重定位分区分配

(2)交换通常在许多进程运行且内存吃紧时运行,而系统负有降低就暂停。例如:在发现许多进程运行时进程发生缺页,就说明内存紧张,此时可以换出一些进程,如果缺页明显下降,就可以暂停换出。
(3)可优先换出阻塞进程:可换出优先级低的进程;为了防止优先级低的进程在被调入内存后很快又被换出,有的系统还会考虑进程在内存的驻留时间。
(注意,PCB会常驻内存,不会被换出外存)
在这里插入图片描述


http://www.ppmy.cn/news/105219.html

相关文章

最热门高效的Node.JS开源第三方开发库和特点(持续更新......)

目录 1. Express 2. Socket.io 3. Mongoose 4. Passport 5. Async 6. PM2 7. Nodemailer 8. Request 9. Cheerio 10. Lodash 11. Bluebird 12. Winston 13. Socket.io-client 14. Node-sass 15. Moment 16. Gulp 17. Grunt 18. Chai 19. Sinon 20. Nodemon…

「SQL面试题库」 No_82 报告系统状态的连续日期

🍅 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试&#xff0…

电子科技大学编译原理复习笔记(六):自上而下的语法分析

目录 前言 重点一览 引言 语法分析的功能 语法分析的分类 自上而下分析方法 回溯分析法 回溯分析法例子 方法 存在的问题 产生的原因 特点 解决缺陷 消除回溯(重点) 递归下降分析器 递归下降分析法 递归过程的构造 扩充BNF 改进的递…

20230529----重返学习-复合组件通信redux-redux源码-redux工程化开发-自定义hook

day-080-eighty-20230529-复合组件通信redux-redux源码-redux工程化开发-自定义hook 复合组件通信redux 要想实现复合组件通信,一般采用公共状态管理方案。常见的公共状态管理方案: 官方推荐的:redux。 redux react-redux redux-logger/r…

Java利用JOL工具分析对象分布

文章目录 对象的组成对象头[Header]实例数据[Instance Data]内存对齐[Padding] JOL工具分析对象Java项目引入依赖创建对象与结果分析创建简单无锁对象输出结果分析创建有属性的对象输出结果分析创建数组结果输出分析创建重量级锁对象输出结果分析 局限性 参考文章: …

【数据分析之道-Numpy(八)】numpy统计函数

文章目录 专栏导读1、np.mean()2、np.median()3、np.std()4、np.var()5、np.min()6、np.max()7、np.sum()8、np.prod()9、np.percentile()10、np.any()11、np.all() 专栏导读 ✍ 作者简介:i阿极,CSDN Python领域新星创作者,专注于分享python领…

用chatGPT来NEW个对象让“码农”的节日不再仅仅只有1024(赶鸭子上架式的成长、无效不得不立的flag)

用chatGPT来NEW个对象让“码农”的节日不再仅仅只有1024 前言一、大部分的成长都是赶鸭子上架二、节日是为了告诉自己不孤单三、做不到也要立下的flag四、New个对象吧1.php定义一个科技工作者形象2.python定义一个科技工作者形象3.javascript定义一个科技工作者形象 总结 前言 …

被黑客攻击了?无所谓,我会拔网线。。。

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 最近老是有粉丝问我,被黑客攻击了,一定要拔网线吗?还有…