计算机操作系统-存储器管理

学习总结目录:

对于通用计算机而言,存储层次至少应具有三级:最高层为CPU寄存器,中间为主存,最底层是辅存。在较高档的计算机中,还可以根据具体的功能细分为寄存器、高速缓存主存储器、磁盘缓存、固定磁盘、可移动存储介质等6层。
在这里插入图片描述

装入程序的几种方式:

  • 绝对装入方式(Absolute Loading Mode) ,要提前知道程序将驻留在内存的是什么位置,不好实现
  • 可重定位装入方式(Relocation Loading Mode),装入内存时逻辑地址立即改为物理地址。装入不一定立即执行,执行的时候再把逻辑地址改为物理地址也可以,重定位不利于地址的移动。
  • 动态运行时的装入方式(Dynamic Run-time Loading),装入时不修改地址,用到的时候再修改地址。

物理地址和逻辑地址:

  • 逻辑地址:是在编译过程中形成的,与内存无关
  • 物理地址:是真实存在的地址

程序的链接:
静态链接方式:(适合连续分配)

  • 对相对地址进行修改
  • 变换调用符号
    缺点:①当某个模块出错时不好修改、②当只用某个模块时,所有模块都要装入,不方便共享。

装入时动态链接:(适合离散的分配)
优点:①便于修改和更新、②便于实现对目标模块的共享。
缺点:在装入时就链接了,模块装入时不一定使用。

运行时动态链接:装入时不链接,在程序执行需要时才装入内存链接。
优点:不仅能加快程序的装入过程,还能节省大量内存空间。

连续分配存储管理方式

为了将用户程序装入内存,必须为它分配一个一定大小的内存空间。

单一连续分配:

在单道程序环境下,把内存分为系统区和用户区两部分,系统区仅提供给OS使用,它通常是放在内存的低址部分。而在用户区内存中,仅装有一道用户程序,即整个内存的用户空间由该程序独占。这样的存储器分配方式被称为单一连续分配方式。

只适用于单用户、单任务操作系统中,内存利用率很低,会产生内部碎片

固定分区分配:

为了能在内存中装入多道程序,并使每个程序之间不会相互干扰,于是将整个用户空间划分为若干个固定大小的区域,在每个分区之装入一道作业,这样形成了最早的也是最简单的一种可运行多道程序的分区式存储管理方式。

固定分区分配是最早出现的、可用于多道程序系统中的存储方式,由于分区固定,会造成存储空间浪费,对于某些用于控制多个相同对象的控制系统,每个对象控制程序大小相同,仍采用固定分区分配。

划分分区的方法

  • 分区大小相等(指所有的内存分区大小相等),缺点:缺乏灵活性,当程序太小时会造成空间浪费,程序太大时无法装入
  • 分区大小不等。增加了灵活性

动态分区分配:
又叫做可变分区分配,根据进程实际需要,动态的为之分配内存空间,分配时会涉及到数据结构、分区分配算法和分区分配与回收操作三方面的问题。

基于顺序搜索的动态分区分配算法:

首次适应(first fit,FF)算法
FF算法要求空闲分区链以地址递增的次序链接。在分配内存时,从链首开始顺序査找,直至找到一个大小能满足要求的空闲分区为止。然后再按照作业的大小,从该分区中划出一块内存空间,分配给请求者,余下的空闲分区仍留在空闲链中。若从链首直至链尾都不能找到一个能满足要求的分区,则表明系统中已没有足够大的内存分配给该进程,内存分配失败,返回。

保留了高址部分的大空闲区,有利于大作业,但是永远从头开始查找,增加了查找的开销,会产生外部碎片。

循环首次适应(next fit,NF)算法
为避免低址部分留下许多很小的空闲分区,以及减少查找可用空闲分区的开销,循环首次适应算法在为进程分配内存空间时,不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始査找,直至找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。

减小了系统的开销,使内存在空闲分区分布的更加均匀了,但是缺乏大的空闲分区。

最佳适应( best fit,BF)算法
每次为作业分配内存时,总是把能满足要求、又是最小的空闲分区分配给作业,避免“大材小用”。为了加速寻找,该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。

会产生外部碎片

最坏适应( worst fit,WF)算法
与最佳适应算法相反:它在扫描整个空闲分区表或链表时,总是挑选一个最大的空闲区,从中分割一部分存储空间给作业使用,以至于存储器中缺乏大的空闲分区,故把它称为是最坏适应算法。

查找效率高,但是当工作一定时间,当真的有个较大作业时,无大的空闲区。

动态可重定位分区匹配

紧凑:当程序中的分区都不能够装入程序,但是分区的总和大于程序时,可以采用一种方法:将内存中所有作业进行移动,是他们都相邻接,这样就可以把原来分散的多个空闲区域拼接成一个大的空闲区域。

动态重定位:地址变换过程在程序执行期间,随着对每条指令或数据的访问自动进行

在这里插入图片描述

对换(Swapping)

对换的类型

  • 整体对换:是以进程为单位的对换,又叫“进程对换”
  • 页面(分段)对换(部分对换):目的是支持虚拟存储系统

为实现对换,系统必须实现的功能:

  • 对换空间的管理
  • 进程的换入
  • 进程的换出

对换空间管理的主要目标:

  • 对文件区管理的主要目标:提高文件存储空间的利用率, 其次:提高对文件的访问速度(采用离散分配的方式进行管理)
  • 对对换空间管理的主要目标:提高进程换入换出速度, 其次:提高文件存储空间利用率

进程的换出:
对换进程在实现进程换出时,是将内存中的某些进程调出至对换区,以便腾出内存空间。换出过程可分为以下两步:

  • (1)选择被换出的进程
  • (2)进程换出过程。

进程的换入:
对换进程将定时执行换入操作,它首先查看PCB集合中所有进程的状态,从中找出“就绪”状态但已换出的进程。当有许多这样的进程时,它将选择其中已换出到磁盘上时间最久(必须大于规定时间,如2s)的进程作为换入进程,为它申请内存。如果申请成功,可直接将进程从外存调入内存;如果失败,则需先将内存中的某些进程换出,腾出足够的内存空间后,再将进程调入。

分页存储管理方式

根据离散分配时所分配地址空间的基本单位不同,又可将离散分配分为以下三种:

  • 分页存储管理方式: 将用户地址空间分为若干个固定大小的区域,称为“页”,相应地也将内存空间分为若干个物理块或页框(frame),页和块的大小相等,用户可以在任一页放入任一物理块,实现离散分配
  • 分段存储管理方式: 为了满足用户要求(编程和使用)形成的一种存储方式,把用户程序地址分为若干个大小不同的段,每段可以定义一组相对完整的信息。(段在内存中可以不相连接)
  • 段页式存储管理方式: 分页与分段相结合的产物,目前应用较广泛。

分页地址中的地址结构:
在这里插入图片描述

页表:
在分页系统中,允许将进程的各个页离散地存储在内存的任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每个页面所对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表。(页表的作用是实现页号到物理块号的地址映射)

在这里插入图片描述
基本地址变换机构:

当未出现越界错误时,页表始址与页号和页表项长度的乘积相加,可以得到该表在页表中的位置,于是可以从中得到该页的物理块号。
在这里插入图片描述
具有快表的地址变换机构:
由于页表是存放在内存中的,这使CPU在每存取一个数据时,都要两次访问内存。第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,以形成物理地址。第二次访问内存时,才是从第一次所得地址中获得所需数据(或向此地址中写入数据)。因此,采用这种方式将使计算机的处理速度降低近1/2。

为了提高地址变换速度,可以在地址变换机构中增设一个具有并行查询能力的特殊高速缓冲寄存器(联想寄存器:Associative Memory),也叫做快表,在IBM系统中取名为:TLB(Translation Look aside Buffer),用以存放当前访问的那些页表项。
在这里插入图片描述
访问内存的有效时间(EAT):
没有引入块表:EAT=2t
引入块表:EAT = aλ + (t+λ) (1-a) + t = 2t+λ-ta
a:命中率
t:访问一次所需时间
λ:快表访问时间

虚拟存储器

虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量加依扩充的一种存储系统,其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本却又接近外存。(牺牲时间换取空间)

引入虚拟存储器的原因:较大的作业无法一次性装入内存大量作业要求运行时,没有足够的内存。

常规存储器的特征:

  • 一次性:作业在运行之前需要一次性全部装入内存。但是并非全部的程序和数据都需要用到。一次性装入是对内存空间的浪费
  • 驻留性:作业装入内存后,便一直驻留在内存中,其中任何部分都不会被换出,直至作业运行结束。

虚拟存储器的特征:

  • 多次性:最重要的特征。
  • 对换性:提高了内存的利用率。
  • 虚拟性:能够从逻辑上扩充内存的容量。只是虚拟存储器所表现出来的最重要的特征,也是实现虚拟存储器的最重要的目标。(离散分配)虚拟性是以多次性和对换性为基础的;而多次性和对换性又必须建立在离散分配的基础上。

虚拟存储器的实现都建立在离散的存储管理方式的基础上。

请求分页中的内存分配:

最小物理块数:能保证进程正常运行所需的最小物理块数

内存分配策略:
在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略。在进行置换时,也可采取两种策略,即全局置换和局部置换。于是可组合出以下三种适用的策略。

  • 固定分配局部置换( Fixed Allocation, LocalReplacement): 每个进程分配一组固定数目的物理块,在进程运行期间不再改变。局部置换是指:如果进程在运行中发生缺页,则只能从分配给该进程的n个页面中选择一个页面换出,然后再调入一页。
    实现时的困难:每个进程分配多少物理块难以确定,太少,会频繁出现缺页,降低系统吞吐量,太多,必然使内存中驻留的进程数目减少,可能造成CPU空闲或其他资源空闲。
  • 可变分配全局置换( Variable allocation, GlobalReplacement): 全局置换是指:进程再运行中发生缺页,则将OS所保留的空闲物理块取出一块分配给该进程,或者以所有进程的全部物理块为标的,选择一块,换入。
    最易实现的一种物理块分配,会导致进程缺页率增加
  • 可变分配局部置换( Variable allocation, LocalReplacement),实现较复杂

物理块分配算法:

  • 平均分配算法
  • 按比例分配算法
  • 考虑优先权的分配算法

请求分页系统:
在分页系统的基础上增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统。硬件支持:请求分页的页表机制,缺页中断机构,地址变化机构。软件支持:请求掉页的软件和实现页面置换的软件。
请求分段系统:
在分段系统的基础上,增加请求调段及段置换功能所形成的虚拟存储系统。置换单位为:段
硬件支持:请求分段的段表机制、缺段中断机构、地址变换机构。软件支持:请求调段的软件和实现段置换的软件。

请求分页每次调换的页面大小固定,分段不固定类似于动态分区,常用请求分页。

请求分页的页表机制:

  • 状态位P: 指示该页是否已调入内存,以供程序在运行时参考;
  • 访问字段A:记录该页在一段时间内被访问的次数,或记录该页最近有多长时间未被访问,以供系统在换出页面时参考。
  • 修改位M: 表示该页在调入内存后是否被修改过。
  • 外存地址:指出该页在外存上的地址,通常是物理块号/盘块号。

在这里插入图片描述

内存分配策略和分配算法:最小物理块数的确定、物理块的分配策略、物理块的分配算法

在请求分页系统中的外存分为两部分:用于存放文件的文件区和用于存放对换页面的对换区。通常,由于对换区是采用连续分配方式,而文件区是采用离散分配方式。

影响缺页因素:

  • 页面大小
  • 进程所分配物理块的数目
  • 页面置换算法
  • 程序固有属性

缺页率
假设一个进程的逻辑空间为n页,系统为其分配的内存物理块数为m(m<=n)。如果在进程的运行过程中,访问页面成功(即所访问页面在内存中)的次数为S,访问页面失败(即所访问页面不在内存中,需要从外存调入)的次数为F,则该进程总的页面访问次数为A=S+F,那么该进程在其运行过程中的缺页率即为f=F/A

页面置换算法

抖动:刚被换出的页很快又被访问

1. 最佳( Optimal)置换算法
选择的被淘汰页面将是最长(未来)时间内不再被访问的页面。采用最佳置换算法通常可保证获得最低的缺页率。但由于人们目前还无法预知,一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。
在这里插入图片描述
2.先进先出(FIFO)页面置换算法
淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,但与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO算法并不能保证这些页面不被淘汰
在这里插入图片描述
3.最久未使用LRU( Least recent ly Used)置换算法的描述
FIFO置换算法的性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。最近最久未使用(LRU)的页面置换算法是根据页面调入内存后的使用情况做出决策的。(实现代价很高,需要软件与硬件方面的支持)

在这里插入图片描述
4.最少使用( Least frequent ly Used),LFU置换算法
在采用LFU算法时,应为在内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率。该置换算法选择在最近时期使用最少的页面作为淘汰页。

5.转轮(Clock)置换算法:近似LRU算法,为每页设置一位访问位,再将内存中所有的页面通过链接指针链接成一个循环队列。当某页被访问时,其访问位被置成1。置换算法在选择淘汰页面时,只需要检查页的访问位。如果是0,就选择该页换出;若为1,则重新将它置0,暂不换出,给该页第二次驻留内存的机会,再按照FIFO算法检查下一个页面。

6.页面缓冲算法PBA
PBA算法的主要特点是:
①显著地降低了页面换进、换出的频率,使磁盘ⅣO的操作次数大为减少,因而减少了页面换进、换出的开销;
②正是由于换入换出的开销大幅度减小,才能使其采用一种较简单的置换策略,如先进先出(FIFO算法,它不需要特殊硬件的支持,实现起来非常简单(空闲页面链表、修改页面链表)

段表:

  • 存取方式:只执行、只读,读/写
  • 存在位:表示该页在不主存
  • 访问字段:表示该页最近被访问的频繁程度
  • 修改位:表示该页内容是否被修改
  • 增补位:请求分段管理中所特有的字段(固定长/可扩充 )
    在这里插入图片描述

分段管理的优缺点:

  • 便于动态申请内存
  • 管理和使用统一化
  • 便于共享
  • 便于动态链接
  • 产生碎片

练习题

一、单项选择题
1、存储管理的目的是( ) 。
A、方便用户 B、提高主存空间利用率
C、方便用户和提高主存利用率 D、增加主存实际容量

2、存储器管理中,下列说法正确的是( )
A、无论采用哪种存储管理方式,用户程序的逻辑地址均是连续的
B、地址映射需要有硬件支撑地址变换
C、段表和页表都是由用户根据进程情况而建立的
D、采用静态重定位可实现程序浮动

3、动态重定位是在作业的( )中进行的。
A、编译过程 B、装入过程 C、修改过程 D、执行过程

4、( )要求存储分配时具有连续性。
A、固定分区存储管理 B、页式存储管理
C、段式存储管理 D、段页式存储管理

5、( )存储管理支持多道程序设计,算法简单,但内部碎片多。
A、段式 B、页式 C、固定分区 D、段页式

6、提高主存利用率主要是通过( )实现的。
A、内存分配 B、内存保护 C、地址转换 D、内存扩充

7、动态分区管理方式按作业需求量分配主存分区,所以( )。
A、分区的长度是固定
B、分区的个数是确定的
C、分区长度和个数都是确定
D、分区的长度不是预先固定的,分区的个数是不确定的

8、( )存储管理不适合多道程序系统。
A、单一连续分配 B、固定分区 C、可变分区 D、段页式

9、碎片现象的存在使( )。
A、主存空间利用率降低 B、主存空间利用率提高
C、主存空间利用率得以改善 D、主存空间利用率不受影响

10、较好地解决了外部碎片问题的存储管理方法是( )。
A、动态分区管理 B、段式存储管理
C、固定分区管理 D、页式存储管理

11、下列选项中,不会产生内部碎片问题的存储管理方法是( )。
A、分页存储管理 B、分段存储管理
C、固定分区存储管理 D、段页式存储管理

12、最佳适应分配算法把空闲区( )。
A、按地址递增顺序登记在空闲区表中
B、按地址递减顺序登记在空闲区表个
C、按长度以递增顺序登记在空闲区表中
D、按长度以递减顺序登记在空闲区表中

13、某基于动态分区存储管理的计算机,其主存容量为 55MB(初始为空闲),采用最佳适配算法,分配和释放的顺序为:分配 15MB,分配 30MB,释放 15MB,分配 8MB,分配 6MB,此时主存中最大空闲分区的大小是( )。
A、7MB B、9MB C、10MB D、15MB

14、在未引入快表的分页存储管理时,每读写一个数据,要访问( )主存。
A、1次 B、2次 C、3次 D、4次

15、动态分区存储管理的( )总是按作业要求挑选一个最大的空闲区。
A、顺序分配算法 B、最先适应分配算法
C、最优适应分配算法 D、最坏适应分配算法

16、一个分段存储管理系统中,地址长度为 32 位,其中段号占 8 位,则最大段长是 ( )。
A、28 B B、216B C、224B D、232B

17、抖动是指( )。
A、使用机器时,造成屏幕闪烁的现象
B、刚被调出的页面又立即被装入所形成的频繁装入\调出的现象
C、系统盘有问题,造成系统不稳定的现象
D、由于主存分配不当,偶然造成主存不够的现象

18、虚拟存储管理系统的基础是程序的( )理论。
A、动态性 B、全局性
C、局部性 D、虚拟性

19、在段式存储管理中,( )。
A、段间绝对地址一定不连续
B、段间逻辑地址必定连续
C、以段为单位分配,每段分配一个连续主存区
D、每段是等长的

20、虚拟存储技术不能以( )为基础。
A、分区存储管理 B、段式存储管理 C、页式存储管理 D、段页式存储管理

21、在动态分区存储管理中的拼接技术可以( )。
A、集中空闲区 B、增加主存容量
C、缩短访问周期 D、加速地址转换

22、在分页系统环境下,程序员编制的程序,其地址空间是连续的,分页是由( )完成的。
A、程序员 B、编译地址 C、用户 D、系统

23、下列关于虚拟存储器的叙述中,正确的是( )。
A.虚拟存储只能基于连续分配技术 B.虚拟存储只能基于非连续分配技术
C.虚拟存储容量只受外存容量的限制 D.虚拟存储容量只受内存容量的限制

24、请求分页系统中的页表项中,访问位供( )时参考。
A、分配页面 B、调入页面 C、程序访问 D、选择换出页面

25、请求分页系统中的页表项中,外存地址供( )时参考。
A、分配页面 B、调入页面 C、程序访问 D、换出页面

26、在段页式存储管理系统中,内存等分成( ),程序按逻辑模块划分成若干( )。
A、块 B、分区 C、段长 D、段

27、下述( )页面淘汰算法会产生Belady现象。
A、先进先出 B、最近最少使用 C、最近最久未使用 D、最佳

28、考虑一个分页系统,其页表存放在内存。
(1)如果内存读写周期为1.0微秒,则CPU从内存取一条指令或一个操作数需时间为( ) 微秒。
(2)如果设立一个可存放8个页表项的快表,80%的地址变换可通过快表完成,内存平均存取时间为( )微秒。(假设快表访问时间可忽略)
A、 1.0 B、 1.1 C、 1.2 D、 2.0

二、计算题

1、在一分页存储管理系统中,某作业的逻辑地址空间为4页(页面大小为2048字节),且第0、1、2、3页依次存放在物理块2、4、6、7中,现有逻辑地址为4865和10020,将它们转换成物理地址。

2、现有一个作业,在段式存储管理的系统中已为主存分配建立了如下表示的段表。
在这里插入图片描述

计算该作业访问[0,550],[2,186],[1,300]和[3,655](方括号中第一个元素为段号,第二个元素为段内地址)时的绝对地址。

3、在页式虚拟存储管理的计算机系统中,运行一个共有8页的作业,且作业在主存中分配到4块主存空间,作业执行时访问页面顺序为7,0,1,2,3,0,4,3,2,3,6,7,3,1,5,7,6,2,6,7。请问用FIFO和LRU调度算法时,它们的缺页中断率分别是多少?

4、某操作系统采用可变分区分配存储管理方法,用户区为512K且始址为0,且初始时用户区的512K空间空闲,用户请求下列操作:
Req(300K), req(100K), release(300K), req(150K), req(30K), req(40K), req(60K), release(30K)
回答下列问题:
(1)采用首次适应算法,空闲分区中有哪些空闲块(给出图示,并给出始址、大小)?
(2)采用最佳适应算法,空闲分区中有哪些空闲块(给出图示,并给出始址、大小)?

答案:
一、选择题
1—5:CBDAC 6—10:ADAAD
11—15:BCBBD 16—20:CBCCA
21—25:ADBDB 26:A、D 27、A 28、D、C
二、计算题
1、逻辑地址依次为:13057,越界
2、绝地地址依次为:2310,1746,段内地址越界中断,3455
3、FIFO中断率65%,LRU中断率60%
4、(1)空闲区域分别为:①起始地址150,大小30K②起始地址280,大小20K ③起始地址400,大小112K。
(2)空闲区域分别为:①起始地址210,大小90K②起始地址400,大小30K ③起始地址470,大小42K。

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙源lll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值