下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

深入讲解计算机操作系统存储器管理

作者:课课家教育     来源: http://www.kokojia.com点击数:941发布时间: 2017-07-05 10:26:58

标签: 存储器系统特征计算机硬件基础网络工程师

软考,您想通过吗?一次通过才是硬道理

  为了让大家更好的使用计算机操作系统存储器管理,课课家就给大家讲解一下,有需要的各位小伙伴,可以参考一下。

程序运行

  将用户的一个源程序变成一个可在内存中执行的程序,通常要经过以下几个步骤:

  l编译:由编译程序,将程序编译成若干个目标模块

  l链接:由链接程序将编译后形成的一组目标模块,以及他们所需要的库函数链接在一起,形成一个完整的装入模块。

  l装入:由装入程序将装入模块装入内存

  具体讨论一下如何把一个装入模块,装入内存:

  l绝对装入方式:编译程序产生带有绝对地址的目标代码,只适合于单道程序环境。

  l可重定位装入方式:所得到的模块都是以0开始的,程序中的其它地址也都是相对于起始地址计算的,此时可重写位装入方式,根据内存的情况,将装入模块装入到内存的适当位置。通常把在装入时对目标程序中指令和数据的修改过程称为重定位。又因为地址变换通常是在装入时一次完成的,以后不再改变,故称为静态重定位。

  l动态运行时装入方式:上一种方式,可将装入模块装入到内存中任何位置,故可用于多道程序环境,但并不允许程序运行时在内存中移动位置。而动态运行时装入方式,是在把装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行。因此,装入内存后的所有地址都仍是相对地址。为了不影响转换带来的不良影响,一般使用一个重定位寄存器。

  程序的链接

  源程序经过编译后,可得到一组目标模块,再利用链接程序将这组目标模块链接,形成装入模块。根据链接的时间的不同,可把链接分成如下三种:

  l静态链接:在程序运行之前,先将各目标模块和它们的所用的链接库,链接成一个完整的装配模块,以后不再拆开。

  l装入时动态链接:在把一系列的目标模块装入内存时,采用边装入边链接的链接方式。

  l运行时动态链接:这是指对某些目标模块的链接,是在程序执行中要该模块时,才对它进行链接。

  对换:

  为什么要用到对换?

  在多道程序环境下,在内存中的某些进程由于某事件尚未发生,而被阻塞了,但它却占用了大量的内存空间,另一方面,其他的作业却在外存上等待。这样就形成了浪费。因此引用了“对换”这个概念。

  对换是把内存中能运行的进程或者暂时不用的程序和数据,调出到外存上,以便腾出足够的内存,再把已经具备运行条件的进程或进程所需要的程序和数据,调入内存。

  如果对换的单位是整个进程,则称为整体对换,如果对换的单位是段或页,则称为部分对换。

  对换空间的管理

  在具有对换功能的OS中,通常把外存分为文件区和对换区。前者用于存放文件,后者用于存放从内存换出的进程。

  由于对换分区的分配是连续分配方式,因而对换空间的分配与回收,与动态分区方式时的内存分配与回收方法雷同。一般用首次适应算法,循环首次适应算法或最佳适应算法。

  进程的换入与换出:

  l如果某一个进程被阻塞了或是优先级最低的,一般会把它的程序与数据换出到对换区

  l系统应定时地查看所有的进程的状态,从中找出“就绪”状态但已经换出的进程,将其中换出时间最久的进程作为换入进程,将之换入。

  基本的分页存储管理方式

  引言

  连续分配方式会形成许多的碎片,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大的开销。如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无须再进行“紧凑”。基于这一思想,产生了离散的分配方式。如果离散分配的基本单位是页,则称为分页存储管理方式;如果是段,则称为分段存储管理方式。

  在分页存储管理中,如果不具备页面对换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具有支持实现虚拟存储器的功能。它要求把每个作业全部装入内存后才能运行。

  页面与物理块

  分页存储管理,是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面。也把内存空间分成和页面大小相等的存储块,称为物理块或页框。由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称为“页内碎片”

  页面的大小

  页面太小,可以减小页内碎片,提高利用率。但是这样会使得页表过长。如果页面过大,虽然页面可以变得很短,但是页内碎片太大。所以一般选择大小适中,且页面大小就是2的幂,通常是512B-8KB。

  地址结构

  分页地址中的地址如下:

  一共32位,0-11位是位移量(页内地址,所以一页为4KB),12-31是页号,所以最多可以有1M页。

  地址变换机构---页表

  为了能将用户地址空间中逻辑地址,变换为内存空间中的物理地址,在系统中必须设置地址变换机构。该机构的基本任务是实现从逻辑地址到物理地址的转换。由于页面内的地址与物理块内的地址是一一对应的。所以只要把逻辑地址的页号转换为内存中的物理块号就可以了。

  而页面映射表(页表)就是用于实现从页号到物理块号的变换。因此,地址变换的任务是借助于页表来完成的。

计算机操作系统之存储器管理解析_存储器系统特征_计算机硬件基础_网络工程师_课课家教育

  基本的地址变换机构

  页表的功能可以借助一组专门的寄存器来实现。一个页表项用一个寄存器来实现,但是由于页表太长,寄存器比较小,而且贵。所以一般把页表放在内存上。在系统中只设置一个页表寄存器PTR,在其中存入页表在内存中的始址和大小。当程序未执行时,这两个值是放在PCB中的。当调度程序调度到某个进程时,才将这两个数据装入页表寄存器中。因此在单处理机环境下,虽然系统中可以运行多个进程,但只要一个PTR就可以。

  当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址分为页号和页内地址两部分。再以页号为索引去检索页表。查找操作由硬件来执行,提高效率。首先判断是不是越界,如果不越界,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。这样便完成了从逻辑地址到物理地址的变换。

与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。这样便完成了从逻辑地址到物理地址的变换。

  具有快表的地址变换机构

  由于页表是放在内存中的,这使得CPU在每存取一个数据时,要访问内存两次。

  第一次,是找到指定页面的物理块号,再将物理块号和页内地址相加,得到物理地址。

  第二次,从第一次得到的地址中,把对应的数据找到。

  那现在有没有改进的方案呢。是不是可以不用第一次访存呢?如果不需要的话,那应该有一个地方存储这个页表,或页表的一部分。

  为了提高地址变换速度,可在地址变换机构中,增设一个具有并行查寻能力的特殊高速缓冲寄存器,又称为“联想寄存器”或快表。

  此时的地址变换过程是这样子的:

  在CPU给出有效地址后,由地址变换机构自动地将页号P送入高速缓冲寄存器,并将此页号与高速缓存中的所有页号进行比较,若其中有与此相匹配的页号,便送到物理地址寄存器中。如在快表中未找到对应的页表项,则还须再访问内存中的页表。找到后,把从页表项中读出的物理块号送到地址寄存器,同时,再将此页表项存入快表的一个突破器单元中,即重修快表。但如果此快表已经满了,则OS必须找到一个老的且已经被认为不再需要的页表项,将它换出。

  由于成本的考虑,快表不可能做的太大,一般只存16-512个页表项。

由于成本的考虑,快表不可能做的太大,一般只存16-512个页表项

  现在的计算机还可以有两级和多级页表

  存储系统

  计算机的主存储器不能同时满足存取速度快、存储容量大和成本低的要求,在计算机中必须有速度由慢到快、容量由大到小的多级层次存储器,以最优的控制调度算法和合理的成本,构成具有性能可接受的存储系统。存储系统的性能在计算机中的地位日趋重要,主要原因是:①冯诺伊曼体系结构是建筑在存储程序概念的基础上,访存操作约占中央处理器(CPU)时间的70%左右。②存储管理与组织的好坏影响到整机效率。③现代的信息处理,如图像处理、数据库、知识库、语音识别、多媒体等对存储系统的要求很高。[1]

  沿革

  计算机最初采用串行的延迟线存储器,不久又用磁鼓存储器。50年代中期,主要使用磁芯存储器作为主存。60年代中期以后,半导体存储器已取代磁芯存储器。在逻辑结构上,并行存储和从属存储器技术的采用提高了主存的供数速度,缓和了主存和高速的中央处理器速度不匹配的矛盾。1968年IBM-360/85最早采用了高速缓冲存储器——主存储器结构。高速缓冲存储器的存取周期与中央处理器主频周期一样,由硬件自动调度高速缓冲存储器与主存储器之间信息的传递,使中央处理器对主存储器的绝大部分存取操作,可以在中央处理器和高速缓冲存储器之间进行。1970年,美国RCA公司研究成功虚拟存储器系统。IBM公司于1972年在IBM370系统上全面采用了虚拟存储技术。[1]

  由于科学计算和数据处理对存储系统的要求越来越高,需要不断改进已有的存储技术,研究新型的存储介质,改善存储系统的结构和管理。大规模集成电路和磁盘依然是主要的存储介质。利用新型材料制作大规模集成电路、大容量的联想存储器可大大提高速度,对于计算机系统和软件都会发生影响。磁盘技术、光盘技术、约瑟夫逊结器件,以至研究新的存储模型,都是计算机存储系统发展的研究课题。此外还要进行新的存储机制的研究。这方面的研究方向是:①由一维线性存储发展到面向二叉树存储结构,提供更广阔数据结构所需的动态存储空间。②由单纯的数据存储发展到能融合图像、声音、文字、数据等为一体的多维存储系统。③由存储精确的数据到能接收模糊数据的输入。④面向对象的存储管理的研究。⑤智能存储技术的研究,探索新的记忆原理,发明新的存储器件,构造新的存储系统。

  基本的分段存储管理方式

  如果说推动存储管理方式从固定分区到动态分区分配,进而又发展到分页存储管理方式的主要动力,是提高内存利用率,那么引入分段存储管理方式的目的,则主要是为了满足用户(程序员)在编程和使用上多方面的要求。

  1)方便编程

  通常,用户把自己的作业按照逻辑关系划分为若干个段,每个段都是从0开始的。并且有自己的名字和长度。因此,希望要访问的逻辑地址是由段名和段内地址偏移量决定的。如下指令:

  Load1,[A]|<d>

  其中,含义是将分段A中D单元内的值读入到寄存器1.

  2)信息共享

  在实现程序和数据的共享时,是以信息的逻辑单位为基础的。比如共享某个函数,页面只是存放信息的物理块,不具备完整的意义。而段是信息的逻辑单位。为了实现段的共享,希望存储管理能与用户程序分段的组织方式相适应。

  3)信息保护

  同样是对信息的逻辑单位进行保护

  4)动态增长

  在实际应用中,有些段,特别是数据段,是不断增长的,而事先无法知道大小。分段存储管理可以很好的解决这个问题。

  5)动态链接

  在作业运行之前,并不是把几个目标程序段链接起来。要运行时,先将主程序对应的目标程序装入内存启动运行,当运行过程中又要调用某段时,才将该段调入内存并进行链接。可见,动态链接也要求以段作为管理的单位。

  分段系统的基本原理

  1分段原理

  在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。例如主程序段,子程序段,数据段,栈段。为了实现简单起见,通常可用一个段号来代替段名,每个段都从0开始编址,并采用一段连续的地址空间。

  对于一个作业,由于是分成多个段,因而是一个二维的。所以说逻辑地址是由段号和段内地址组成的。

  2段表

  在分段式存储管理系统中,为每一个分段分配一个连续的分区,而进程中的各个段可以离散地移入内存中不同的分区中。为使程序能正常运行,亦即,能从物理内存中找出每个逻辑段所对应的位置,就像分页系统那样,在系统中为每个进程建立一张段映射表,简称“段表”。

  每个段在表中占有一个表项,其中记录了该段在内存中的起始地址和段的长度。段表可以放在寄存器中,这样有利于提高地址转换速度;但更常见的是把段表放在内存中。在配置了段表后,执行中的进程可通过查找段表,找到每个段所对应的内存区。可见,段表是用于实现从逻辑到物理内存区的映射。

这样有利于提高地址转换速度;但更常见的是把段表放在内存中。在配置了段表后,执行中的进程可通过查找段表,找到每个段所对应的内存区。可见,段表是用于实现从逻辑到物理内存区的映射。

  3地址变换机构

  为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址和段表长度。

  在进行地址变换时,系统将逻辑地址中的段号与段表长度进行比较,如果段号太大,表示越界,于是产生越界中断信息。如果没有越界,则用段表的始址+段号,得到所在段表的项。之后,就找到了此段的基址。然后,决断位移量与此段的长度大小,如果越界,发现越界中断信息,否则就可以找到物理地址了。

如果没有越界,则用段表的始址+段号,得到所在段表的项。之后,就找到了此段的基址。然后,决断位移量与此段的长度大小,如果越界,发现越界中断信息,否则就可以找到物理地址了。

  4分页与分段的区别

  1)页是信息的物理单位,分页是为了实现离散分配方式,以消减内存的外零头,提高内存的利用率。分页只是为了系统管理的需要;而分段则是为了程序员的需要。

  2)页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的。所以说系统中只有一种长度的页面。而段的长度不是固定的,决定它的长度的是用户编写的程序。通常是编译程序在对源程序进行编译时,根据信息的性质来划分。

  3)分页的作业地址空间是一维的,即单一的线性地址空间,而分段的作业地址是二维的。

  段页式存储管理

  我们知道了分页可以提高内存的利用率,而分段则可以实现信息保护,信息共享,动态链接,动态增长等,那能不能合二为一呢?这就是段页式存储管理。

  基本原理

  先把用户程序分成若干段,再把每一个段分成若干个页面。如一个作业有三个段,页面大小为4KB。在段页式系统中,其地址结构由段号,段内页号及页内地址三部分所组成。如下图:

先把用户程序分成若干段,再把每一个段分成若干个页面。如一个作业有三个段,页面大小为4KB。在段页式系统中,其地址结构由段号,段内页号及页内地址三部分所组成。如下图

  地址变换过程

  为了方便实现地址变换,须配置一个段表寄存器,其中存放段表始址和段长。过程如下:

为了方便实现地址变换,须配置一个段表寄存器,其中存放段表始址和段长。过程如下

  在段页式系统中,为了得到一个数据,要进行三次访问内存。

  l第一次访问内存的段表,从中取得页表的始址;

  l第二次访问是访问内存的页表,取得物理块号;

  l第三次访问才是真正从第二次访问所得的地址中,取出指令和数据;

  虚拟存储器的基本概念

  在前面所讲的两种存储管理方式中,都要求将一个作业全部装入内存后方能运行,于是出现了两种情况:

  l有的作业很大,不可能一下子装入内存

  l有大量作业要求运行时,但由于内存容量不足以容纳所有的这些作业,只能将少数作业装入内存让它们先运行,而将其它大量的作业放在外存上等待。

  解决上述问题:

  l最常见的是扩大内存。但这往往受到机器自身的限制,而且无疑要增加系统成本;

  l另一种方法是从逻辑上扩充内存容量,这下是虚拟存储技术。

  虚拟存储器的引入

  常规存储管理方式的特征

  l一次性:一次装入。

  l驻留性:作业从装入内存,便一直驻留在内存中,直到作业运行结束。尽管在整个进程中,可能有多次IO,但是它仍然占用着内存。

  局部性原理

  l时间局限性:如果程序中的某条指令一旦执行,则不久以后该指令可能再次执行,如果一个数据被访问过,则不久以后,还可能再次被访问。

  l空间局限性:一旦程序访问了某个存储单元,在不久以后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内。典型的例子是顺序执行。

  虚拟存储器的定义

  是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存容量和外在容量之后所决定,其运行速度接近于内存速度,每位的成本接近于外存。所以是一个很好的解决方案。

  虚拟存储器的实现方法

  它的实现,都是建立在离散分配的存储管理方式的基础上。一般有两种方法:

  分页请求系统

  请求分段系统

     结束语:看完文章的小伙伴,学会了一些知识了吧!如果大家还想学习更多这方面的知识,可以登陆课课家教育平台。觉得自己的基础不是很好,没关系的课课家上面有很多入门知识,我们可以一步一步的来。

赞(0)
踩(0)
分享到:
推荐查看
华为认证网络工程师 HCIE直播课视频教程