part5 内存管理

5.1 一个用户程序的运行需要经历以下几个步骤

编写源程序:
编译:将源代码编译成若干目标模块,形成逻辑地址
链接:与库函数链接在一起
装入:装入内存,完成地址映射,形成物理地址
执行:

5.2覆盖与交换

1.覆盖思想:程序运行时并不是一直要访问全部程序和数据,所以可将用户空间分成一个固定区和若干覆盖区,经常活跃的部分放在固定区,其余部分分段装入外存,当即将访问某段时就将它调入覆盖区,当要访问另一个段时,再将其调入覆盖区覆盖原段内容。
2.交换思想:把处于等待状态的进程(或CPU调度下被抢占处理机的进程比如时间片用完但还没结束的进程)从内存移到辅存,称为换出。把准备好竞争CPU的程序从辅存移到内存,称为换入。

5.3连续分配管理方式

1.内存映射和保护

2.单一连续分配:分为系统区和用户区
硬件支持:界地址寄存器、越界检查机构,解决空间不足时采取覆盖的策略。
优点:简单、无外部碎片,可采用覆盖技术。
缺点:只能用于单用户、单任务的操作系统中,有内部碎片,存储器的利用率极低。

3.固定(静态)分区分配:将用户内存空间划分为若干固定大小的且区域数目固定的区域,每个分区只装入一道作业。当有空闲分区时,就从外存的后备队列中选一个作业加入到空闲分区中。
硬件支持:界地址寄存器、越界检查机构;基地址寄存器、长度寄存器 等。
固定分区表:记录分区位置、大小和使用情况便于管理。
缺点:不能实现多进程共享一个主存区(因为只要用一次就会标记‘’已使用‘’);如果一个程序太小也会占用一个分区,形成内部碎片;如果一个程序太大可能没有分区能放下它。存储空间利用率低;
在这里插入图片描述
4. 动态分区匹配:不预先分区,而是根据进程大小动态地建立分区,故分区大小和数量是可变的。
分区表:对已分配的分区进行管理;
空闲分区表:对空闲分区进行管理。
分区回收:回收的块和空闲块相邻就要合并起来。

分区分配算法:使用数组/链表
1)首次适应:空闲分区按照地址递增的顺序进行链接,分配内存时顺序查找到的第一块大小满足的。(最简单、性能也最好)
2)最佳适应:空闲分区按容量递增的顺序链接,找到的第一块适合的。(产生最多的外部碎片)
3)最差适应:容量递减的顺序链接,找到的第一块分区,即找到的是最大的一块。(把最大的连续内存划开,产生很多碎片)
4)邻近适应:基于首次适应算法,不同的是可以根据上次查找结束的位置继续查找。

缺点:随着时间的推移,会产生越来越多的外部碎片

地址映射与存储保护
在这里插入图片描述

5.4非连续分配管理方式

该部分内容比较多且重要,由于时间关系就不在博客上记录,只记录小标题,具体的对应到书上去复习。

1.基本分页存储管理方式
分页思想、页面、页面大小、地址结构、页表、基本地址变换机构、分页管理存在的两个问题、具有快表的地址变换机构、两级页表。
分页对于用户是透明的。
题目中给出的逻辑地址一般是十进制,具体情况具体观察。

分页思想:内存分块(页框,frame),作业分页(page),页与页框大小相等。内存分配以页为单位,一个作业在内存中的各页面可以分配不相邻的页框,但一个页面在内存中是连续的(在一个页框中)

存储保护:页号越界检查、设置相应的标志位(有效位)、共享页的访问权限。
在这里插入图片描述
在这里插入图片描述

2.基本分段存储器管理方式
分段思想、地址结构、段表结构、地址变换机构、段的共享、保护方法
分段对用户是不透明的,段号和段内偏移都由用户提供。
题目中给出的逻辑地址一般是二进制,具体情况具体观察。
在这里插入图片描述

3.段页式管理方式
段页式思想、逻辑地址、段表、页表、地址变换机构
在这里插入图片描述

4.页表结构 层次结构
题目中出现的帧即物理块,物理块大小和页面大小相等。(物理地址中的偏移量和逻辑地址的偏移量也相等)
在这里插入图片描述
在这里插入图片描述

例子2:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
逻辑地址为000,111,1001,对应页表可找出对应的块号50=110010,骗地址是9=1001,那么物理地址是110010 1001。

5.分段与分页的区别
在这里插入图片描述

思考:
你会绘制各种管理方式的寻址图吗?
你清楚各个管理方式的表项结构吗?
你会计算出寻址结果即物理地址吗?
这几种管理方式有两个共同特征?你知道是哪两个吗?这些特征会带来什么缺陷?(P182)
这几种管理方式都需要硬件支持,你知道是哪些吗?(P183)

5.5虚拟内存管理

1.局部性原理
时间局部性:某条指令一旦执行或者数据被访问不久后可能再次执行或访问,比如循环结构。
空间局部性:某个存储单元被访问,那么其附近的存储单元也可能被访问,因为指令是顺序存放并执行的,数据一般是向量、数组、表等形式存储的。

2.虚拟存储器的定义和特征
定义:在程序装入时,只装入一部分,其余部分保留在外存。在程序执行时,当所访问的信息不在内存时,由操作系统将其从外存调入内存。操作系统还会把暂时不使用的内容换出到外存。系统就为用户提供了一个比实际内存大得多的存储器即虚拟存储器。虚拟存储器的大小由地址结构决定,不是内存和外存简单相加的结果。

特征:
多次性:作业无需一次性调入,允许多次调入。
对换性:无需常驻内存,允许换进和换出。
虚拟性:逻辑上扩充内存,使用户看到的内存容量远大于实际。

3.实现:不能使用连续分配方式,要基于离散分配的内存管理方式上。三种方式:请求分页式管理、请求分段式管理、请求段页式管理。课本中只详讲了第一种方式。
请求分页管理:是最常用的方法。在基本分页管理基础上,增加了请求调页功能和页面置换功能。只要将当前需要的一部分页面装入内存,便可启动运行,在作业运行时,当要访问的页面不在内存则用调页功能调入,并且可以通过置换功能将不需要的页面换出。

硬件支持:一定容量的内存和外存、页表机制、缺页中断机制、地址变换机构。
页表机制:相对于基本分页中的页表项,这里增加了四个字段,分别是状态位P(是否已调入内存)、访问字段A(被访问次数或已多长时间未被访问)、修改位M(是否被修改)、外存地址(通常是物理块号)。
缺页中断机构:每当要访问的页不在内存,就产生缺页中断,请求操作系统调入该页,此时该进程阻塞(页调入后唤醒)。如果内存中有空闲块,就直接调入并修改页表中相应页表项,若没有空闲块,则要淘汰某页(若淘汰页已做修改要将其写回外存)。
地址变换机构:先查看是否越界,再检索快表,如果找到页,修改相应的页表项(比如访问位),形成物理地址;若未找到页,就去内存中查找页,如果其状态位P显示调入即找到页,若未调入则产生缺页中断从外存中调入内存。

4.页面置换算法(决定应该换入哪页,换出哪页)
1)最佳置换算法(OPT):被淘汰的页面是后面永远不用的或者是最长时间不使用的。该算法“展望未来”,无法实现。(注意:这个“最长时间不使用”和“以后访问次数最少” 完全不是一回事!)。

2)先进先出页面置换算法(FIFO):有限淘汰最早进入内存的页面,即驻留时间最长的页面。注意:该算法存在Belady异常,如果页面访问顺序是3,2,1,0,3,2,4,3,2,1,0,4,会出现分配给进程的物理块增多缺页次数不减反增。基于队列实现。
特点:实现简单、性能差
做题的时候在草稿本上写出先进顺序的队列,这样不容易出错。

3)最近最久未使用置换算法(LRU):“回望过去”。选择最近最长时间未被访问过的以页面予以淘汰(页表项中的访问字段可以体现访问次数)。
该算法性能比较好,但是需要寄存器和栈的硬件支持。属于堆栈类的算法。
特点:实现困难、开销大、性能好。
做题的时候在草稿之上及时画出页面最近使用的顺序队列,不易出错。

4)时钟(CLOCK)置换算法:也叫最近未用算法。给每帧关联一个附加位(使用位),当某页首次调入内存将使用位置为1,随后再被访问时,也被置为1。在替换算法中,用于替换的候选帧集合可视为一个循环缓冲区,并有一个指针与之关联。当某页被替换时,该指针指向缓冲区的下一帧。当需要替换一页时,操作系统扫描缓冲区,每遇到使用位为1的就置为0 ,直到查找到一个本来(!!)使用位就是0的帧并将其页替换。
改进:在使用的基础上增加修改位。改进后的算法优点在于:替换时首选没有变化的页,修改的页在被替换之前会被写回,从而节省时间。
改进算法的执行过程:
第一遍扫描:从当前位置,对使用位不做修改,遇到u=0,m=0的进行替换。若没找到进行第二遍扫描。
第二遍扫描:选择第一个u=0,m=1的进行替换。若还是未找到,就进行第三遍扫描。
第三遍扫描:指针回到最初位置,且集合所有帧的使用位均为0,重复第一遍扫描,又是还需要重复第二遍扫描。

5.页面分配策略
5.1.驻留集:进程准备执行时不可能把一个进程所有页都读入主存,操作系统必须决定读取多少页,也就是给特定的进程分配多少个页框。物理页框的集合正是驻留集。
注意:
1)分配给一个进程的存储量越小,那么驻留在主存中的进程越多,从而提高处理机的时间利用率。
2)若给进程分配的页框过少,页错误率仍然很高。
3)若页框过多,由于局部性原理,给进程分配更多的主存空间对该进程错误率没有明显的影响。

5.2 三种策略
1)固定分配局部置换:为进程分配一定数目的物理块且整个运行期间不改变。若发生缺页,只能从该进程在内存中的页面取出一块换出,然后调入。
缺点:物理块太少会频繁发生缺页,太多又会降低资源利用率。

2)可变分配全局置换:为进程分配一定数目的物理块,操作系统自身也保持一个空闲物理块队列,当发生缺页时,就从空闲物理块队列中取出一块分配给进程并把页调入其中。
特点:可动态增加物理块数目。但若盲目增加,会降低并发能力。

3)可变分配局部置换:前两种的结合。一般情况下,如果缺页,则将该进程在内存的一页换出并调入需要的页。但是!若进程频繁发生缺页,就是可变分配全局置换,若缺页次数少,就适当减少分配给进程的物理块。

6 确定调入页面的时机
有两种调页策略:
预调页策略:(运行之前调入)以预测为基础的预调页策略,将预计在不久之后会被访问的页调入。主要用于进程的首次调入,正确率50%。
请求调页策略:(运行之间调入)进程在运行中需要访问的页面不在内存而提出请求,系统将其调入。虚拟存储器大多采用这种方法。缺点:一次只调入一页。多次调入调出会浪费I/O开销。

7 从何处调入
外存分为两部分:对换区(连续分配方式,I/O速度比较快)、文件区(离散分配方式,I/O速度比较慢)。从何处调入页面可分为如下三种情况:
1)对换区足够大:进程运行前,将与该进程有关的文件从文件区复制到对换区,之后调页就可以全部从对换区调。
2)对换区不足:不会被修改的文件直接从文件区调入(它们不会被修改,那么也不会存存在把它们调出写回主存的情况),可能被修改的部分在将它们换出时就要将它们调到对换区,以后需要时再从对换区调出。
3)UNIX:未运行的页面从文件区调入,曾经运行过而又被换出的页面放在对换区。另外,如果进程需要的共享页已经被其他进程调入内存,那么就不要再调入了。

8 抖动/ 颠簸:刚刚换出的页面马上又要换入主存,刚刚换入主存的页面马上又要被换出,这种频繁的页面调动使进程换页时间多于执行时间。
造成原因:访问的页面多于可用物理页帧。
解决方法:工作集。工作集反应了进程在接下来的一段时间内很有可能会频繁访问的页面集合,分配给进程的物理块数(驻留集大小)要大于工作集大小。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值