计算机操作系统 | 3.1_1~3.1_4 内存及内存管理 | 参考自王道考研 | 无知的我费曼笔记(图文排版无水印)
为了深入计算机底层,无知的我正在参考《王道考研》学习计算机操作系统。
笔记特点是 我重新整理了涉及资料的一些语言描述、排版,而使用了自己比较容易理解的描述、同样是回答了一些常见关键问题
文章目录
- 3.1_1_内存的基础知识
- 内存-定义和作用
- 内存-根据其计算地址长度
- 指令的工作原理
- 逻辑地址 vs 相对地址
- 从写程序到程序运行的过程
- 装入模块装入内存-逻辑地址法
- 如果从地址为0的地方开始装入
- 如果从地址为100(其他)的地方开始存入
- 装入的三种方式——绝对装入
- 装入的三种方式——可重定位装入
- 装入的三种方式——动态运行时装入
- 链接的三种方式——静态链接
- 链接的三种方式——装入时动态链接
- 链接的三种方式——运行时动态链接
- 知识回顾与重要考点
- 3.1_2_内存管理的概念
- 内存空间的分配与回收
- 内存空间的扩展
- 地址转换
- 内存保护
- 设置一对上、下限寄存器
- 重定位寄存器和界地址寄存器
- 知识回顾与重要考点
- 3.1_3_覆盖与交换
- 覆盖技术
- 交换技术
- 知识回顾与重要考点
- 3.1_4_连续分配管理方式
- 单一连续分配
- 固定分区分配
- 动态分区分配
- 知识回顾与重要考点
3.1_1_内存的基础知识
内存-定义和作用
内存定义 && 作用
- 内存可存放数据。
- 缓和CPU与硬盘之间的速度矛盾。程序执行前需要先放到内存中才能被CPU处理
思考:在多道程序环境下,系统中会有多个程序并发执行,也就是说会有多个程序的数据需要同时放到内存中。那么,如何区分各个程序的数据是放在什么地方的呢?
方案:给内存的存储单元编地址
内存地址从0开始,每个地址对应一个存储单元
内存中也有一个一个的“小房间”,每个小房间就是一个“存储单元”
- 如果计算机“按字节编址**”**, 则每个存储单元大小为 1字节,即 1B,即 8个二进制位
- 如果字长为16位的计算机 “按字编址**”**,则每个存储单元大小为 1个字;每个字的大小为 16 个二进制位
内存-根据其计算地址长度
一台手机/电脑 有 4GB 内存,是什么意思?
是指该内存中可以存放 4* 2^30个字节。如果是按字节编址的话,也就是有 4*2^30 = 2^32个“小房间”
这么多“小房间”,需要 2^32个地址才能一 一标识,所以地址需要用 32 个二进制位来表示(就是0~ 2^32 -1)
补充知识
2^10 = 1K (千)
2^20 = 1M (兆,百万)
2^30 = 1G (十亿,千兆)
考点
有的题目会告诉我们内存的大小,让我们确定地址长度应该是多少(即要多少个二进制位才能表示相应数目的存储单元)
指令的工作原理
工作原理
指令的工作基于“地址”。 每个地址对应一个数据的存储单元
工作机制
可见,我们写的代码要翻译成CPU能识别的指令。
这些指令会告诉CPU应该去内存的哪个地址读/写数据, 这个数据应该做什么样的处理。
在这个例子中,我们默认让这个进程的相关内容从地址#0开始连续存放,指令中的地址参数直接给出了变量 x 的实际存放地址(物理地址)。
思考:如果这个进程不是从地址#0 开始存放的,会影响指令的正常执行吗?
会。这是因为如果在执行过程中改变了存放地址指令的位置。那么还是按照物理地址来找到数据存放地址的话,找到的结果是错误的。还有等等原因。
逻辑地址 vs 相对地址
逻辑地址又称相对地址
相对地址又称物理地址
编译时产生的指令只关心“相对地址”
在实际放入内存时,再根据存放的起始位置得到“绝对地址”
从写程序到程序运行的过程
- 编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言)
- 链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块
- 装入(装载):由装入程序将装入模块装入内存运行
装入模块装入内存-逻辑地址法
如果从地址为0的地方开始装入
如果从地址为100(其他)的地方开始存入
引出问题-如果还是按照逻辑地址来存入,那么实际存入数据的地方不是我们期望的
解决思路 如何将指令中的逻辑地址转换为物理地址?如下介绍装入的三种方式
装入的三种方式——绝对装入
绝对装入定义
- 在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。
- 装入程序按照装入模块中的地址,将程序和数据装入内存。
Eg:如果知道装入模块要从地址为 100 的地方开始存放…如下
缺陷 绝对装入只适用于单道程序环境。 这是因为这种环境是在同一时刻,内存当中只会有一个程序在执行,这可以使得在编译或汇编时就确定内存的物理地址
转换时机
- 程序中使用的绝对地址,可在编译或汇编时给出,也可由程序员直接赋予。
- 通常情况下都是编译或汇编时再转换为绝对地址
装入的三种方式——可重定位装入
定义
- 编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。
- 装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。
执行机制如下
特点
- 静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间(如果没有足够的内存,就不能装入该作业)
- 作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间。//这是因为作业地址不会随着移动而相应地改变
装入的三种方式——动态运行时装入
动态重定位定义 又称动态运行时装入。
- 编译、链接后的装入模块的地址都是从0开始的。
- 装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。
=>因此装入内存后所有的地址依然是逻辑地址。
//这种方式需要一个重定位寄存器的支持。
执行机制如下
链接的三种方式——静态链接
定义
- 在程序运行之前, 先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块)
- 之后不再拆开
执行机制如下
链接的三种方式——装入时动态链接
定义
将各目标模块装入内存时,边装入边链接的链接方式
执行机制如下
链接的三种方式——运行时动态链接
定义
在程序执行中需要该目标模块时,才对它进行链接。
执行机制如下
优点是 便于修改和更新,便于实现对目标模块的共享。
知识回顾与重要考点
3.1_2_内存管理的概念
内存空间的分配与回收
内存空间的扩展
地址转换
意义
为了使编程更方便,程序员写程序时应该只需要关注指令、数据的逻辑地址。而逻辑地址到物理地址的转换(这个过程称为地址重定位(三种装入方式))应该由操作系统负责,这样就保证了程序员写程序时不需要关注物理内存的实际情况。
方式
内存保护
设置一对上、下限寄存器
- 在CPU中设置一对上、下限寄存器,存放进程的上、下限地址。
- 进程的指令要访问某个地址时,CPU检查是否越界。
重定位寄存器和界地址寄存器
采用重定位寄存器(又称基址寄存器)和界地址寄存器(又称限长寄存器)进行越界检查。
@重定位寄存器中存放的是进程的起始物理地址。@界地址寄存器中存放的是进程的最大逻辑地址。
知识回顾与重要考点
3.1_3_覆盖与交换
覆盖技术
机制
将程序分为多个段(多个模块)。
- 常用的段常驻内存
- 不常用的段在需要时调入内存。
内存中分为一个“固定区”和若干个“覆盖区”
- 需要常驻内存的段放在“固定区”中,调入后就不再调出(除非运行结束)
- 不常用的段放在“覆盖区”,需要用到时调入内存, 用不到时调出内存
特点
必须由程序员声明覆盖结构,操作系统完成自动覆盖。
缺点:
- 对用户不透明,增加了用户编程负担。
- 在应用上,覆盖技术只用于早期的操作系统中,现在已成为历史
交换技术
机制
内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)
- 中级调度(内存调度),就是要决定将哪个处于挂起状态的进程重新调入内存
暂时换出外存等待的进程状态为挂起状态(挂起态,suspend)
- @挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态
应该在外存(磁盘)的什么位置保存被换出的进程?
具有对换功能的操作系统中,通常把磁盘空间分为文件区和对换区两部分。
- 文件区主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式;
- 对换区空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响到系统的整体速度,因此对换区空间的管理主要追求换入换出速度,因此通常对换区采用连续分配方式(学过文件管理章节后即可理解)。总之,对换区的I/O速度比文件区的更快。
什么时候应该交换?
交换通常在许多进程运行且内存吃紧时进行;系统负荷降低就暂停。
例如:在发现许多进程运行时经常发生缺页,就说明内存紧张,此时可以换出一些进程;如果缺页率明显下降,就可以暂停换出
应该换出哪些进程?
可优先换出阻塞进程;可换出优先级低的进程;
- 引出问题-为了防止优先级低的进程在被调入内存后很快又被换出,有的系统还会考虑进程在内存的驻留时间…
- PCB 会常驻内存,不会被换出外存
知识回顾与重要考点
3.1_4_连续分配管理方式
连续分配:指为用户进程分配的必须是一个连续的内存空间。
单一连续分配
内存被分为系统区和用户区。 系统区通常位于内存的低地址部分,用于存放操作系统相关数据;用户区用于存放用户进程相关数据。
内存中只能有一道用户程序,用户程序独占整个用户区空间。
**优点:**实现简单;无外部碎片;可以采用覆盖技术扩充内存;不一定需要采取内存保护(eg:早期的 PC 操作系统 MS-DOS)。
缺点:只能用于单用户、单任务的操作系统中;有内部碎片;存储器利用率极低。
//@内部碎片的含义 分配给某进程的内存区域中,没有被用上的内存空间。
如下图分配
固定分区分配
历程 20世纪60年代出现了支持多道程序的系统,为了能在内存中装入多道程序,且这些程序之间又不会相互干扰, 于是将整个用户空间划分为若干个固定大小的分区,在每个分区中只装入一道作业,这样就形成了最早的、最简单的一种可运行多道程序的内存管理方式。
固定分区分配又分为
二者的优劣
分区大小相等:
缺乏灵活性(可能会出现一个小的进程占用了一个大的分区,导致部分内存没有被使用)
但是很适合用于用一台计算机控制多个相同对象的场合(比如:钢铁厂有n个相同的炼钢炉,就可把内存分为n个大小相等的区域存放n个炼钢炉控制程序)
分区大小不等:增加了灵活性,可以满足不同大小的进程需求。根据常在系统中运行的作业大小情况进行划分(比如:划分多个小分区、适量中等分区、少量大分区)
操作系统如何记录内存使用情况
操作系统需要建立一个数据结构——分区说明表,来实现各个分区的分配与回收。
每个表项对应一个分区,通常按分区大小排列。
每个表项包括对应分区的大小、起始地址、状态(是否已分配)。
下图是内存分区表 用数据结构的数组(或链表)即可表示这个表
内存固定分配 机制
当某用户程序要装入内存时,由操作系统内核程序根据用户程序大小检索该表, 从中找到一个能满足大小的、未分配的分区,将之分配给该程序,然后修改状态为“已分配”。
**优点:**实现简单,无外部碎片。
缺点:a. 当用户程序太大时,可能所有的分区都不能满足需求,此时不得不采用覆盖技术来解决,但这又会降低性能;b. 会产生内部碎片,内存利用率低。
动态分区分配
动态分区分配(可变分区分配)。这种分配方式不会预先划分内存分区,而是在进程装入内存时, 根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统分区的大小和数目是可变的。(eg:假设某计算机内存大小为 64MB,系统区 8MB,用户区共 56 MB…)
操作系统如何记录内存使用情况
**空闲分区表:**每个空闲分区对应 一个表项。表项 中包含分区号、 分区大小、分区 起始地址等信息 进程4 (4MB)
**空闲分区链:**每个分区的起始部分和末尾部分分别设置前向指针和后向指针。起始部分处还可记录分区大小等信息
当很多个空闲分区都能满足需求时, 应该选择哪个分区进行分配?
动态分区分配算法。从空闲分区表(或空闲分区链)中选出最合适的一个分区分配给该作业。
分区的分配与回收操作
回收后,内存分区会合并
知识回顾与重要考点
计算机操作系统 | 3.1_1~3.1_4 内存及内存管理 | 参考自王道考研 | 无知的我费曼笔记(图文排版无水印)相关推荐
- <<计算机操作系统(慕课版)>>第十二章参考答案
- 算法与数据结构王道天勤_复习计算机专业课是买王道考研好还是天勤笔记好?...
单就数据结构来说,天勤.(一定要做你要考的学校的真题) 网络操作系统什么的,除数据结构以外我没看到好的备考书.王道天勤啥的题可以做一下,关键还是要结合不同院校的资料具体问题具体分析. 我今年考的,在平 ...
- 计算机操作系统笔记(一) 南京大学慕课版
一.计算机系统概览 计算机系统的组成:硬件子系统和软件子系统 硬件子系统:电,磁,光,机械与原理构成的各种物理部件的有机组合,是系统工作的载体,包含CPU,主存储器,I/O控制系统,外围设备: 软件子 ...
- 计算机操作系统中程序的功能是,计算机操作系统的功能和分类研究
摘 要:计算机操作系统是一种系统的体系,是计算机运行的核心,同时它精确的掌管着计算机软件,资源硬件,精确的管理着计算机的各项工作,组织计算机工作的各个重要的流程.随着时代的发展和科技的日新月异,计算机 ...
- 七年级上计算机课教学记录,【备课参考】(川教版)七年级信息技术上册第9课《计算机操作系统》教学设计...
第九课-计算机操作系统 一.教学内容分析: 本课内容参考四川教育出版社<信息技术>七年级(上)第九课-计算机操作系统,本课内容有:计算机系统的管理者-操作系统,Windows操作系统的发展 ...
- 计算机操作系统 内存_计算机内存的类型| 操作系统
计算机操作系统 内存 什么是记忆? (What is Memory?) The essential component of the computer is its Memory. It is ass ...
- 计算机操作系统 - 内存管理
计算机操作系统 - 内存管理 目录 计算机操作系统 - 内存管理 虚拟内存 分页系统地址映射 页面置换算法 1. 最佳 2. 最近最久未使用 3. 最近未使用 4. 先进先出 5. 第二次机会算法 6 ...
- 国防科大计算机考研大纲,2022年国防科技大学F1003计算机操作系统考研大纲及参考书目...
2022年研究生入学考试自命题科目考试大纲 科目代码:F1003 科目名称:计算机操作系统 一.参考书目 1.<操作系统教程>(第5版),费祥林,高等教育出版社,2014年. 2.< ...
- 【操作系统】【C/C++开发】内存管理
内存管理 操作系统对内存的划分和动态分配,就是内存管理的概念.有效的内存管理在多道程序设计中非常重要,不仅方便用户使用存储器.提高内存利用率,还可以通过虚拟技术从逻辑上扩充存储器.内存管理的功能有: ...
最新文章
- Linux内存管理 (26)内存相关工具
- Demo学习: CalendarPanel
- CSP认证201612-4	压缩编码[C++题解]:区间dp、huffman树、石子合并
- 实验——LINUX常用网络测试命令
- 关于mobiscroll插件的使用
- 【matlab】将matlab中数据输出保存为txt或dat格式
- leetcode917
- 少走弯路:Mac+python+opencv
- java spark读写hdfs文件,Spark1.4从HDFS读取文件运行Java语言WordCounts
- iptables -F 后断开连接
- V831学习日记之串口通信
- android删除通知栏图标,Android开发系列---UI篇---添加和消除通知栏图标
- FreeSWITCH的传真发送
- 首批5G手机概念热炒,但你真的敢用?
- 服务器信息怎么备份,DNS服务器信息备份与还原教程
- 炉石传说 古墓惊魂 灾祸领主 英雄技能
- 10招有效预防电脑辐射
- MSRA显著性检测数据集
- JQuery插件——progressbar进度条
- \t\tsizeof(char*)几个字节?
热门文章
- 创业 股份比例与合伙人
- 利用GPU训练的配置方法(Keras)
- html间隔大的虚线,html如何增加虚线边框之间的间距_html_开发99编程知识库
- 吐槽一下网上那些售房信息
- 2021年起重机械指挥考试内容及起重机械指挥模拟考试系统
- java中级面试题及答案,java线程安全面试题
- Linux缓存之TLB
- 华为的操作系统鸿蒙多久出来,华为OS操作系统“鸿蒙”什么时候上市?华为OS操作系统有什么用处?...
- mupdf添加图片水印_如何在图片上加上水印
- Android:手机关闭相机拍照声音