计算机操作系统 第四章 存储器管理知识总结

4.1 存储器的层次结构

4.11 多层结构的存储器系统

1.存储器的多层结构
对通用计算机而言,存储层至少应具有三级:最高层为CPU寄存器,中间为主存,最底层为辅存。
在较高档的计算机中,还可根据具体的功能细分为寄存器、高速缓存、主存储器、磁盘缓存、固定磁盘、可移动存储介质等六层。
层次越高(越靠近CPU),存储介质的访问速度越快,价格也越高,相对所配置的存储容量也越小。
2.可执行存储器
寄存器主存储器又被称为可执行存储器。
进程可以在很少的时钟周期内使用一条load或store指令对可执行存储器进行访问。但对辅存的访问则需要通过I/O设备实现。

4.12 主存储器与寄存器

1.主存储器
主存储器简称内存或主存,是计算机系统中的主要部件,用于保存进程运行时的程序和数据,也称可执行存储器。
2.寄存器
寄存器具有与处理机相同的速度,故对寄存器的访问速度最快,完全能与CPU协调工作,但价格十分昂贵,因此容量不可能做得很大。

4.13 高速缓存和磁盘缓存

1.高速缓存
高速缓存是现代计算机结构中的一个重要部件,它是介于寄存器和主存储器之间的存储器,主要用于备份主存中较常用的数据,以减少处理机对主存储器的访问次数,这样可大幅度地提高程序执行速度。高速缓存容量远大于寄存器,比内存约小两到三个数量级左右。
2.磁盘缓存
由于目前磁盘的I/O速度远低于对主存的访问速度,为了缓和两者之间在速度上的不匹配,而设置了磁盘缓存,主要用于暂时存放频繁使用的一部分磁盘数据和信息,以减少访问磁盘的次数。但磁盘缓存与高速缓存不同,它本身并不是一种实际存在的存储器,而是利用主存中的部分存储空间暂时存放从磁盘中读出(或写入)的信息。

4.2 程序的装入和链接

用户程序在系统中运行,必须先将它装入内存,然后再将其转变为一个可以执行的程序,通常都要经过以下几个步骤:
(1)编译,由编译程序对用户源程序进行编译,形成若干个目标模块;
(2)链接,由链接程序将编译后形成的一组目标模块以及它们所需要的库函数链接在一起,形成一个完整的装入模块;
(3)装入,由装入程序将装入模块装入内存。

4.21 程序的装入

1.绝对装入方式(Absolute Loading Mode)
当计算机系统很小,且仅能运行单道程序时,完全有可能知道程序将驻留在内存的什么位置,此时可以采用绝对装入方式。
2.可重定位装入方式(Relocation Loading Mode)
在多道程序环境下,编译程序不可能预知经编译后所得到的目标模块应放在内存的何处,此时应采用可重定位装入方式,它可以根据内存的具体情况将装入模块装入到内存的适当位置。
3.动态运行时的装入方式(Dynamic Run-time Loading)
可重定位装入方式可将模块装入到内存中任何允许的位置,故可用于多道程序环境。但该方式不允许程序运行时在内存中移动位置,这种情况下,就应采用动态运行时装入的方式。

4.22 程序的链接

链接程序的功能是将这组目标模块以及它们所需要的库函数装配成一个完整的装入模块。
1.静态链接(Static Linking)方式
在程序运行之前,先将各目标模块及它们所需的库函数链接成一个完整的装配模块,以后不再拆开。
在将几个目标模块装配成一个装入模块时,须解决以下两个问题:
(1)对相对地址进行修改;
(2)变换外部调用符号。
2.装入时动态链接(Load-time Dynamic Linking)
将用户源程序编译后所得到的一组目标模块装入内存时,采用边装入边链接的链接方式。
该方式的优点是:便于修改和更新、便于实现对目标模块的共享。
3.运行时动态链接(Run-time Dynamic Linking)
该连接方式将对某些模块的链接推迟到程序执行时才进行。
这样不仅能加快程序的装入过程,而且可节省大量的内存空间。

4.3 连续分配存储管理方式

4.31 单一连续分配

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

4.32 固定分区分配

多道程序系统为了能在内存中装入多道程序,且使这些程序之间又不会发生相互干扰,于是将整个用户空间化分为若干个固定大小的区域,在每个分区中只装入一道作业,这样就形成了最早的、也是最简单的一种可运行多道程序的分区式存储管理方式。
1.划分分区的方法
(1)分区大小相等。其缺点是缺乏灵活性,即当程序太小时,会造成内存空间的浪费。当程序太大时,一个分区又不足以装入该程序,致使该程序无法运行。
(2)分区大小不等。为了增加存储器分配的灵活性,应将存储器分区划分为若干个大小不等的分区。
2.内存分配
为了便于内存分配,通常将分区按其大小进行排队,并为之建立一张分区使用表,其中各表项包括每个分区的起始地址、大小及状态(是否已分配)。
4.33 动态分区分配
根据进程的实际需要,动态地为之分配内存空间。
1.动态分区分配中的数据结构
(1)空闲分区表。在系统中设置一张空闲分区表,用于记录每个空闲分区的情况。每个空闲分区占一个表目,表目中包括分区号、分区大小和分区始址等数据项。
(2)空闲分区链。为了实现对空闲分区的分配和链接,在每个分区的起始部分设置一些用于控制分区分配的信息,以及用于链接个分区所用的前向指针,在分区尾部则设置一后向指针。通过前、后向链接指针,可将所有的空闲分区链接成一个双向链。
2.动态分区分配算法
稍后介绍
3.分区分配操作
(1)分配内存。
(2)回收内存。

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

1.首次适应(first fit,FF)算法
在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区位置。
该算法倾向于优先利用内存中低址部分的空闲分区,从而保留了高址部分的大空闲区。这为以后到达的大作业分配大的内存空间创造了条件。其缺点是低址部分不断被划分,会留下许多难以利用的很小的空闲分区,称为碎片。而每次查找又都是从低址部分开始的,这无疑又会增加查找可用空闲分区时的开销。
2.循环首次适应(next fit,NF)算法
不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。
该算法能使内存中的空闲分区分布得更均匀,从而减少了查找空闲分区时的开销,但这样会缺乏大的空闲分区。
3.最佳适应(best fit,BF)算法
该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。这样第一次找到的能满足要求的空闲区必然是最佳的。但存储器中会留下许多难以利用的碎片。
4.最坏适应(worst fit,WF)算法
该方法的策略正好与最佳适应算法相反。
它的优点是可使剩下的空闲区不至于太小,产生碎片的可能性最小,对中、小作业有利。同时最坏适应分配算法查找效率很高,该算法要求将所有的空闲分区按其容量以从大到小的顺序形成一空闲分区链,查找时,只要看第一个分区能否满足作业要求即可。

4.35 基于索引搜索的动态分区分配算法

1.快速适应(quick fit)算法
(1)第一步是根据进程的长度,从索引表中去寻找到能容纳它的最小空闲区链表;
(2)第二步是从链表中取下第一块进行分配即可。
优点:不会产生内存碎片、查找效率高;
缺点:为了有效合并分区,在分区归还主存时的算法复杂,系统开销较大、分配空闲空间是以进程为单位的,或多或少存在着浪费,这是典型的以空间换时间的做法。
2.伙伴系统
在回收空闲分区时,需要对空闲分区进行合并,所以其时间性能比快速适应算法差,但由于它采用了索引搜索算法,比顺序搜索算法好。而其空间性能,由于对空闲分区进行合并,减少了小的空闲分区,提高了空闲分区的可使用率,故优于快速适应算法,比顺序搜索法略差。
3.哈希算法
进行空闲分区分配时,根据空闲分区大小,通过哈希函数计算,即得到在哈希表中的位置,从中得到相应的空闲分区链表,实现最佳分配策略。

4.36 动态可重定位分区分配

1.紧凑
把原来多个分散的小分区拼接成一个大分区的方法,称为“拼凑”或“紧凑”。
经过拼凑后的用户程序在内存中的位置发生了变化,为此在每次“紧凑”后,都必须对移动了的程序或数据进行重定位。
2.动态重定位
为使地址的转换不会影响到指令的执行速度,必须有硬件地址变换机构的支持,即须在系统中增设一个重定位寄存器,用它来存放程序(数据)在内存中的起始地址。
当系统对内存进行了“紧凑”,而使若干程序从内存的某处移至另一处时,不需对程序做任何修改,只要用该程序在内存的新起始地址去置换原来的起始地址即可。
3.动态重定位分区分配算法
该算法与动态分区分配算法基本上相同,差别在于增加了紧凑的功能。

4.4 对换(Swapping)

4.41 多道程序环境下的对换技术

1.对换的引入
一方面,在内存中的某些进程由于某事件尚未发生而被阻塞运行,但它却占用了大量的内存空间,甚至有时可能出现在内存中所有进程都被阻塞,而无可运行之进程,迫使CPU停止下来等待的情况;另一方面,却又有着许多作业,因内存空间不足,一直驻留在外存上,而不能进入内存运行。显然这对系统资源是一种严重的浪费,且是系统吞吐量下降。因此,系统中又增设了对换(也称交换)设施。
所谓“对换”,是指把内存中暂时不能运行的进程或者暂时不用的程序和数据换出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据换入内存。对换是改善内存利用率的有效措施,它可以直接提高处理机的利用率和系统的吞吐量。
2.对换的类型
(1)整体对换。即处理机中级调度。
(2)页面(分段)对换。这种对换方法是实现请求分页和请求分段式存储管理的基础,其目的是为了支持虚拟存储系统。
为了实现进程对换,系统必须提供三方面的功能:对对换空间的管理、进程的换出和进程的换入。

4.42 对换空间的管理

1.对换空间的主要目标
(1)对文件区管理的主要目标:提高文件存储空间的利用率,然后是提高对文件的访问速度。
采取离散分配方式。
(2)对对换空间管理的主要目标:提高进程换入和换出的速度,然后是提高文件存储空间的利用率。
采取连续分配方式,较少考虑外存中的碎片问题。
2.对换区空闲盘块管理中的数据结构
与内存在分区分配方式中的数据结构相似,即同样可以用空闲分区表或空闲分区链。
空闲分区表的每个表目中应包含:对换区的首址及其大小,分别用盘块号和盘块数表示。
3.对换空间的分配和回收
由于对换分区的分配采用的是连续分配方式,因而对换空间的分配和回收与动态分区方式时的内存分配与回收方法雷同。

4.43 进程的换出与换入

1.进程的换出
(1)选择被换出的进程。首先选择处于阻塞或睡眠状态的进程,当有多个这样的进程时,应当选择优先级最低的进程作为换出进程。为了防止低优先级进程在被调入内存后很快又被换出,还需考虑进程在内存的驻留时间。如果系统中已无阻塞进程,而现在的内存空间仍不足以满足需要,便选择优先级最低的就绪进程换出。
(2)进程换出过程。在对进程换出时,只能换出非共享的程序和数据段,而对那些共享的程序和数据段,只要还有进程需要它,就不能被换出。
2.进程的换入

4.5 分页存储管理方式

离散分配方式分为以下三种:
分页存储管理方式;
分段存储管理方式;
段页式存储管理方式,是目前应用较广泛的一种存储管理方式。

4.51 分页存储管理的基本方法

1.页面和物理块
(1)页面。分页存储管理将进程的逻辑地址空间分成若干个页,并为各页加以编号。相应的也把内存的物理地址空间分成若干个块,也为它们加以编号。在为进程分配内存时,以块为单位,将进程中的若干个页分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经常装不满一块,而形成了不可利用的碎片,称之为“业内碎片”。
(2)页面大小。若选择的页面大小,虽然一方面可以减少内存碎片,起到减少内存碎片总空间的作用,有利于内存利用率的提高,但另一方面却会造成每个进程占用较多的页面,从而导致进程的页表过长,占用大量内存,还会降低页面换进换出的效率。如果选择的页面过大,虽然可以减少页表的长度,提高页面换进换出的速度,但却又会使页内碎片增大。因此页面的大小应选择适中,且页面大小应是2的幂,通常为1KB~8KB。
2.地址结构。
它包含两部分,前一部分为页号P,后一部分为位(偏)移量W,即业内地址。地址空间最多允许有1M页。
若给定一个逻辑地址空间中的地址为A,页面的大小为L,则页号P和业内地址d可按下式求得:
P=INT[A/T],d=[A] MOD L
其中INT是整除函数,MOD是取余函数。
3.页表
页表的作用是实现从页号到物理块号的地址映射。
在简单的分页系统中,也常在页表的表项中设置一存取控制字段,用于对该存储块中的内容加以保护。当存取控制字段仅有一位时,可用来规定该存储块中的内容是允许读/写还是只读;若存取控制字段为二位,则可规定为读/写、只读和只执行等存取方式。如果有一进程试图去写一个只允许读的存储块时,将引起操作系统的一次中断,如果要利用分页系统去实现虚拟存储器,则还须增设一个数据块。

4.52 地址变换机构

该机构的基本任务是实现从逻辑地址到物理地址的转换。地址变换机构的任务实际上只是将逻辑地址中的页号转换为内存中的物理块号。
1.基本的地址变换机构
2.具有快表的地址变换机构
为了提高地址变换速度,可在地址变换机构中增设一个具有并行查寻能力的特殊高速缓冲寄存器,又称为“联想寄存器”(Associative Memory),或称为“快表”,用以存放当前访问的那些页表项。

4.53 访问内存的有效时间

从进程发出指定逻辑地址的访问请求,经过地址变换,到在内存中找到对应的实际物理地址单元并取出数据,所需要花费的总时间,称为内存的有效访问时间(Effective Access Time,EAT)。
假设访问一次内存的时间为t,在基本分页存储管理方式中,有效访问时间为第一次访问内存时间(查找页表对应的页表项所耗费的时间t)与第二次访问内存时间(将页表项中的物理块号与页内地址拼接成实际物理地址所耗费的时间t)之和:
EAT=t+t=2t
在引入快表的分页存储管理方式中,有效访问时间的计算公式即为:
EAT=a×λ+(t+λ)(1-a)+t=2t+λ-t×a
式中,λ表示查找快表所需要的时间,a表示命中率,t表示访问一次内存所需要的时间。
正是由于引入了快表,CPU访问数据所耗费的时间明显减少。

4.54 两级和多级页表

(1)对于页表所需的内存空间,可采用离散分配方式,以解决难以找到一块连续的大内存空间的问题;
(2)只将当前需要的部分页表项调入内存,其余的页表项仍驻留在磁盘上,需要时再调入。
1.两级页表(Two-Level Page Table)
针对难于找到大的连续的内存空间来存放页表的问题,可利用将页表进行分页的方法,使每个页面的大小与内存物理块的大小相同,并为它们编号。然后离散地将各个层面分别存放在不同的物理快中。同样也要为离散分配的页表再建立一张页表,称为外层页表,在每个页表项中记录了页表页面的物理块号。
对页表实施离散分配的方法虽然解决了对于大页表无需大片连续存储空间的问题,但并未解决用较少的内存空间去存放大页表的问题。能够用较少的内存空间存放页表的唯一方法是,仅把当前需要的一批页表项调入内存,以后再根据需要陆续调入。
2.多级页表

4.55 反置页表(Inverted Page Table)

1.反置页表的引入
2.地址变换

4.6 分段存储管理方式

4.61 分段存储管理方式的引入

1.方便编程
2.信息共享
在实现对程序和数据的共享时,是以信息的逻辑单位为基础的。
3.信息保护
信息保护同样是以信息的逻辑单位为基础的,而且经常是以一个过程、函数或文件为基本单位进行保护的。
4.动态增长
往往存在着一些段,尤其是数据段,在它们的使用过程中,由于数据量的不断增加,而使数据段动态增长,相应的它所需要的存储空间也会动态增加。然而对于数据段究竟会增长到多大,事先又很难确切地知道。对此很难采取预先多分配的方法进行解决。
5.动态链接
动态链接要求的是以目标程序(即段)作为链接的基本单位。

4.62 分段系统的基本原理

1.分段
在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。
2.段表
类似于分页系统,需为每个进程建立一张段映射表,简称“段表”。
3.地址变换机构
像分页系统一样,当段表放在内存中时,每要访问一个数据,都须访问两次内存,从而成倍地降低了计算机的速率。解决的方法和分页系统类似,也增设一个联想存储器,用于保存最近常用的段表项。与没有地址变换的常规存储器相比而言,其存取速度约慢10%~15%。
4.分页和分段的主要区别
(1)页是信息的物理单位,分段存储管理方式中的段则是信息的逻辑单位。
(2)页的大小固定且由系统决定,而段的长度却不固定,决定于用户所编写的程序。
(3)分页的用户程序地址空间是一维的,分页完全是系统的行为。而分段是用户的行为,故在分段系统中,用户程序的地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。

4.63 信息共享

分段系统的一个突出优点,是易于实现段的共享,即允许若干个进程共享一个或多个分段,且对段的保护也十分简单易行。
1.分页系统中对程序和数据的共享
远不如分段系统来得方便。
2.分段系统中对程序和数据的共享
在分段系统中,由于是以段为基本单位的,不论该段有多大,我们都只需为该段设置一个段表项,因此使实现共享变得非常容易。
可重入代码又称为“纯代码”,是一种允许多个进程同时访问的代码。为使各个进程所执行的代码完全相同,绝对不允许可重入代码在执行中有任何改变。

4.64 段页式存储管理方式

分页系统以页面作为内存分配的基本单位,能有效地提高内存利用率,而分段系统以段作为内存分配的基本单位,它能够更好地满足用户多方面的需要。将两种存储管理方式各取所长的段页式存储管理方式既具有分段系统的便于实现、分段可共享、易于保护、可动态链接等一系列优点,又能像分页系统那样,很好地解决内存的外部碎片问题。
1.基本原理
基本原理是分段和分页原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。
2.地址变换过程
在段页式系统中,为了便于实现地址变换,须配置一个段表寄存器,其中存放段表始址和段长TL。
在段页式系统中,为了获得一条指令或数据,须三次访问内存。第一次访问是访问内存中的段表,从中取得页表始址;第二次访问是访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正从第二次访问所得的地址中取出指令或数据。
这使访问内存的次数增加了近两倍。为了提高执行速度,在地址变换机构中增设一个高速缓冲寄存器。每次访问它时,都须同时利用段号和页号去检索高速缓存,若找到匹配的表项,便可从中得到相应页的物理块号,用来与页内地址一起形成物理地址;若未找到匹配表项,则仍需第三次访问内存。它的基本原理与分页及分段的情况相似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值