王道考研——操作系统(第三章 内存管理)

一、内存的基础知识

什么是内存?有何作用?

在这里插入图片描述

这么做的原因是,程序本来是放在外存中的,放在磁盘中的,但是磁盘的读写速度很慢,而cpu的处理速度又很快

存储单元就是存放数据的最小单元,每一个地址对应一个存储单元,而一个存储单元中能存储多少数据,要看计算机是按字节编址还是按字编址的,如果是按字节编址,一个存储单元

补充知识:几个常用的数量单位

在这里插入图片描述

这里的“4GB”中的“4G“其实是数量,而“B”是一个数据的单位,B指的是“字节”Byte,b指的是“一个比特位”bit

知识滚雪球:指令的工作原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

假设程序的装入模块装入内存时并不是从地址为0的地方开始的,而是从地址为100的地方开始,这就意味着操作系统给这个程序分配的地址空间其实是100~279。所以如果是这种情况的话,程序的逻辑地址和它最终存放的物理地址就会出现对应不上的情况

所以在这个小节中我们将介绍三种策略来解决地址转换的问题

装入的三种方式——绝对装入

在这里插入图片描述

装入的三种方式——可重定位装入

在这里插入图片描述

装入的三种方式——动态运行时装入

在这里插入图片描述

装入的三种方式——动态重定位

在这里插入图片描述
在之后学习了“虚拟存储管理”之后,就可以对这个特性有更深入的理解了

从写程序到程序运行

在这里插入图片描述
刚才介绍的三种装入策略可以实现 逻辑地址 到 物理地址 的转换

接下来介绍的是三种链接的方式

链接的三种方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

知识回顾与重要考点

在这里插入图片描述

二、内存管理的概念

内存空间的分配与回收

在这里插入图片描述

内存空间的扩展

在这里插入图片描述

地址转换

在这里插入图片描述

为了使编程更方便,程序员写程序时应该只需要关注指令、数据的逻辑地址。而逻辑地址到物理地址的转换(这个过程称为地址重定位(三种装入方式))应该由操作系统负责,这样就保证了程序员写程序时不需要关注物理内存的实际情况。

内存保护

  1. 操作系统需要提供内存保护功能。保证各进程在各自存储空间内运行互不干扰

方法一:
在这里插入图片描述
方法二:
重定位寄存器(就是上小节中的)即 在动态运行时装入这种方式中,设置一个重定位寄存器来记录每一个进程的起始物理地址

在这里插入图片描述

知识回顾与重要考点

在这里插入图片描述

三、覆盖与交换(大纲删除?)

知识总览

在这里插入图片描述

覆盖技术

在这里插入图片描述
在这里插入图片描述

如果程序有一个明显的调用结构

注意这里B和C不可能同时被调用,也就是说在同一个时间段内,内存中要么有B有么有C即可,不需要同时存在B和C,所以B和C共享一个覆盖区

交换技术

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对换区的速度,或者说输入输出的速度,是要比文件区更快的。所以我们的进程数据被换出时,一般是放在对换区,换入的时候也是从对换区换到内存

PCB会常驻内存,不会被换出外存:所以其实所谓的换出进程,并不是把进程相关的所有的数据一个不漏的全部调到外存里,操作系统为了保持对这些换出进程的管理,那PCB这个信息还是需要放在内存中)

知识回顾与重要考点

在这里插入图片描述

四、连续分配管理方式

知识总览

在这里插入图片描述
而非连续分配管理方式:不必须是连续的,可以是离散的

单一连续分配

在这里插入图片描述

并不支持多道用户程序并发运行,不管这个内存空间有多大

由于整个系统中同一时刻只有一个用户程序运行,所以不一定需要采用内存保护(有的系统中可能也会设置越界检查的机制)

固定分区分配

在这里插入图片描述
在这里插入图片描述

动态分区分配

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接下来看第三个问题,有若干种情况:

首先是看分配:
在这里插入图片描述
在这里插入图片描述
然后看回收:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当进程要上cpu运行之前,会把进程的起始地址信息放到重定位寄存器中,或者叫基址寄存器中

知识回顾与重要考点

在这里插入图片描述

五、动态分区分配算法

动态分区分配算法:在动态分区分配方式中,当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?

首次适应算法

在这里插入图片描述

最佳适应算法

在这里插入图片描述

最坏适应算法

在这里插入图片描述

邻近适应算法

在这里插入图片描述

知识回顾与重要考点

在这里插入图片描述

这里的算法开销指的是为了保证我们的空闲分区是按照我们规定的这种次序排列的,在最佳适应和最坏适应这两种算法中我们可能需要经常对空闲分区列进行重新排序,这就导致了算法开销更大的问题,而首次适应和邻近适应我们并不需要对整个空闲分区列进行顺序的检查和排序,所以这两种算法开销是要更小的

六、基本分页存储管理的基本概念

知识总览

在这里插入图片描述
概念回顾:
逻辑地址(相对地址)
物理地址(绝对地址)

什么是分页存储

在这里插入图片描述

页框页帧指的是内存在物理上被划分为这样一个一个的部分
页面指的是进程在逻辑上被划分为了一个一个部分
除了页框、页帧之外,有的教材也会它们称为物理块或者物理页面

那么操作系统是怎么记录进程的页面与内存的页框的一一对应的关系的呢?

重要的数据结构——页表

在这里插入图片描述

内存块 其实就是 页框,答题时更推荐使用页框这个术语

  1. 每个页表项多大?占几个字节?
  2. 如何通过页表实现逻辑地址到物理地址的转换?

问题一:每个页表项占多少字节?

在这里插入图片描述
那页号又要占多少字节呢??
在这里插入图片描述

一个页表项在逻辑上包含了页号和块号这两个信息,但是在物理上它其实只需要存放块号这个信息,只有块号需要占存储空间

在这里插入图片描述

通过页表可以知道各个页面存放在哪个内存块中,但是需要注意页表记录的只是内存块号,而不是内存块的起始地址!

问题二:如何实现地址的转换

也就是说逻辑地址转换到物理地址

在这里插入图片描述
在这里插入图片描述

子问题:如何确定一个逻辑地址对应的页号、页内偏移量?

在这里插入图片描述

显然这个进程会被分为四个页面

在这里插入图片描述

黑色的部分应该有12位,从全0到全1;则末尾的这12位其实就是页内偏移量,而红色的部分就是页号

在这里插入图片描述

子问题:为何页面大小要取2的整数幂?

在这里插入图片描述

逻辑地址结构

在这里插入图片描述

知识回顾与重要考点

在这里插入图片描述

七、基本地址变换机构

这个小节的内容也属于基本分页存储管理

所谓的基本地址变换机构就是在基本分页存储管理中用于实现逻辑地址到物理地址转换的一组硬件机构

结合上一小节理解基本地址变换机构(用于实现逻辑地址到物理地址转换的一组硬件机构)的原理和流程

基本地址变换机构

在这里插入图片描述
在这里插入图片描述

一个进程的页表长度M 指的是 这个进程的页表中有M个页表项,也就意味着这个进程的页面总共有M页。所以如果此时想要访问的页号超出了这个进程的页面数量,就会认为此时想要访问的这个逻辑地址是非法的,这样就需要抛出一个越界中断。如果这个页号是合法的,接下来就会用这个页号和页表始址来进行计算,找到这个页号对应的页表项是多少,页表中的每个页表项的长度其实是相同的,所以其实只要我们知道了页号,还有页表始址,再知道我们每个页表项的长度,我们就可以算出我们想要访问的页号对应的页表项所存放的位置。既然知道了内存块号,我们就可以结合偏移量,得到最终的物理地址,然后就可以顺利访问逻辑地址A所对应的内存单元了

在这里插入图片描述
注意:页面大小是2的整数幂
设页面大小为L,逻辑地址A到物理地址E的变换过程如下:
①计算页号P和页内偏移量W(如果用十进制数手算,则P=A/L,W=A%L;但是在计算机实际
运行时,逻辑地址结构是固定不变的,因此计算机硬件可以更快地得到二进制表示的页号、页
内偏移量)
②比较页号P和页表长度M,若PM,则产生越界中断,否则继续执行。(注意:页号是从0开始的,而页表长度至少是1,因此P=M时也会越界
③页表中页号P对应的页表项地址=页表起始地址F +页号P * 页表项长度,取出该页表项内容b,
即为内存块号。(注意区分页表项长度、页表长度、页面大小的区别。页表长度指的是这个页表中总共有几个页表项,即总共有几个页页表项长度指的是每个页表项占多大的存储空间;页面大小指的是一个页面占多大的存储空间)
④计算E = b * L + W,用得到的物理地址E去访存。(如果内存块号、页面偏移量是用二进制表
示的,那么把二者拼接起来就是最终的物理地址了)

在这里插入图片描述

按字节寻址 就意味着 这个系统中每个地址对应的是一个字节

页内偏移量占的位数其实就直接决定了一个页面的大小是多少

由于题目中给的是十进制的形式,所以我们用除法还有取余操作来计算页号和页内偏移量更方便

对页表项大小的进一步探讨

在这里插入图片描述
在这里插入图片描述

知识回顾与重要考点

在这里插入图片描述

八、具有快表的地址变换机构

具有快表的地址变换机构:是基本地址变换机构的改进版本

什么是快表(TLB)

在这里插入图片描述

页表是存在内存中的,在引入了快表之后,我们可以把存在内存中的页表称为慢表

快表的查询速度要比慢表快很多

缓存并不是内存,cpu访问告诉缓存的速度要比访问内存快很多

TLB和我们狭义上的高速缓存Cache是有区别的

在这里插入图片描述

快表是一个专门的硬件,当进程上处理机运行时,系统会清空快表的内容;当进程切换的时候,快表的内容也需要被清除

引入快表后,地址的变换过程

在这里插入图片描述
这里用甘特图来说明这两种方式的区别:
在这里插入图片描述

思考:能否把整个页表都放在TLB中?

在这里插入图片描述

局部性原理

在这里插入图片描述
这就是为什么快表能大幅提升效能的原因

知识回顾与重要考点

在这里插入图片描述

基本地址变换机构:两次访存:1、查询内存中的页表;2、访问想要访问的内存单元
具有快表的地址变换机构:

九、两级页表

知识总览

在这里插入图片描述

单级页表存在的问题

在这里插入图片描述
第二个问题:
在这里插入图片描述

如何解决单级页表的问题?

在这里插入图片描述

两级页表的原理、地址结构

在这里插入图片描述

虽然页表项和页面表示的好像是同一个东西,但是“页表项大小”指的是长度方面,“页面大小”指的就是内容方面

现在已经拆分成了若干个小的页表(二级页表),然后还要建立一个上一级的页表,也就是 页目录表
在这里插入图片描述

如何实现地址变换

在这里插入图片描述

如何解决单级页表的问题?

在这里插入图片描述
第二个问题的解决需要用到虚拟存储技术

需要注意的几个细节

在这里插入图片描述

页面大小与页内偏移量的位数直接关联

知识回顾与重要考点

在这里插入图片描述

十、基本分段存储管理方式

知识总览

在这里插入图片描述

分段

在这里插入图片描述
按字节寻址:一个地址对应的是一个字节的大小。
在这里插入图片描述

段表

在这里插入图片描述

地址变换

在这里插入图片描述
在这里插入图片描述

分页和分段最大的区别是在分页中每个页面的长度是相同的,而在分段中每个段的长度是不同的,所以在分页管理中并不需要对页内偏移量进行一个越界检查,而在分段管理中需要对分段管理进行越界检查

分段、分页管理的对比

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

知识回顾与重要考点

在这里插入图片描述

十一、段页式管理方式

知识总览

在这里插入图片描述

分页、分段的优缺点分析

在这里插入图片描述

分段+分页=段页式管理

在这里插入图片描述

段页式管理的逻辑地址结构

在这里插入图片描述

段表、页表

在这里插入图片描述
一个进程会对应一个段表,一个段表项对应一个页表,因此一个进程可能会对应多个页表
在这里插入图片描述

知识回顾与重要考点

在这里插入图片描述

需要注意的是段页式管理中的段表和分段管理中的段表结构是不一样的

十二、虚拟内存的基本概念

知识总览

在这里插入图片描述
在这里插入图片描述

传统存储管理方式的特征、缺点

在这里插入图片描述

局部性原理

在这里插入图片描述

虚拟内存的定义和特征

在这里插入图片描述

在这里插入图片描述

如何实现虚拟内存技术

在这里插入图片描述

知识回顾与重要考点

在这里插入图片描述

十三、请求分页管理方式

知识总览

在这里插入图片描述

页表机制

在这里插入图片描述

缺页中断机构

在这里插入图片描述
在这里插入图片描述

地址变换机构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意红框中的内容就是请求分页管理与基本分页管理相比增加的内容

知识回顾与重要考点

在这里插入图片描述

十四、页面置换算法

知识总览

在这里插入图片描述

最佳置换算法(OPT)

先进先出置换算法(FIFO)

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

时钟置换算法(CLOCK)

改进型的时钟置换算法

知识回顾与重要考点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值