4,对换

要实现内存、外存之间的对换,系统中必须要有一台I/O速度较好的外存,且其容量也必须足够的大,能容纳正在分时运行的所有用户作业,目前最常用的是大容量磁盘存储器。

4.1,多道程序环境下的对换

1,对换的引入

多道程序环境下的矛盾:一方面:在内存中的某些进程由于某事件尚未发生而被阻塞运行,但它却占用了大量的内存空间,甚至有时可能出现在内存中所有进程都被阻塞而迫使CPU停止下来等待的情况;另一方面:却又有着许多作业在外存上等待,因无内存而不能进入内存运行的情况。

解决的办法:引入对换(Swapping)技术

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

对换是改变内存利用率的有效措施,它可以直接提高处理机的利用率和系统的吞吐量。

2,对换的类型

每次对换时,都是将一定数量的程序或数据换入或换出内存。根据每次对换时所对换的数量,可分为整体对换和页面(分段)对换。为实现对换,系统必须实现三方面的功能:对对换空间的管理、进程的换出和进程的换入。

整体对换:处理机的中级调度实际上就是存储器的对换功能,其目的是用来解决内存紧张问题,并可进一步提高内存的利用率和系统吞吐量。由于在中级调度中对换是以整个进程为单位的,故也叫进程对换或整体对换。这种对换被广泛地应用于多道程序系统中,并作为处理机中级调度。

页面(分段)对换:如果对换是以进程的一个“页面”或“分段”为单位进行的,则分别称为页面对换或分段对换,统称为部分对换。这种对换方法是实现请求分页和请求分段式存储管理的基础,其目的是为了支持虚拟存储系统。

4.2,对换空间的管理

1,对换空间管理的主要目标

对具有对换功能的OS中,通常把磁盘空间分为文件区对换区两部分。

(1)对文件区管理的主要目标:文件区占用磁盘空间的大部分,用于存放各类文件。由于通常的文件都是较长时间地驻留在外存上,对它访问的频率是较低的,故对文件区管理的主要目标是提高文件存储空间的利用率,然后才是提高对文件的访问速度。因此对文件空间的管理采取离散分配方式。

(2)对对换空间管理的主要目标:对换空间只占用磁盘空间的小部分,用于存放从内存换出的进程。由于这些进程在对换区中驻留的时间是短暂的,而对换区操作的频率却较高,故对对换区管理的主要目标,是提高进程的换入换出速度,然后才是提高文件存储空间的利用率。为此,对对换区空间的管理采取连续分配方式,较少考虑外存中的碎片问题。

2,对换区空闲盘块管理中的数据结构

可以用空闲分区表或空闲分区链。在空闲分区表的每个表目中,应包含两项:对换空间的首地址及大小,分别用盘块号和盘块数表示。

3,对换空间的分配与回收

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

4.3,进程的换出与换入

1,进程的换出

对换进程在实现进程换出时,是将内存中的某些进程调出对换区,以便腾出内存空间。

(1)选择被换出的进程:对换进程在选择被换出的进程时,将检查所有驻留在内存中的进程,首先选择处于阻塞状态或睡眠状态的进程,当有多个这样的进程时,应当选择优先级最低的进程作为换出进程。在有的系统中,为了防止低优先级进程在被 调入内存后很快又被换出,还需考虑进程在内存的驻留时间。如果系统中已无阻塞进程,而现在的内存空间仍不足以满足需求,便选择优先级最低的就绪进程换出。

(2)进程换出的过程:应当注意,在选择换出进程后,在对进程换出时,只能换出非共享的程序和数据段,而对于那些共享的程序和数据段,只要还有进程需要它,就不能被换出。在进行换出时,应先申请对换空间,若申请成功,就启动磁盘,将该进程的程序和数据传送到磁盘的对换区上。若传送过程未出现错误,便可回收该进程所占用的内存空间,并对该进程的进程控制块和内存分配表等数据结构做相应的修改。若此时内存中还有可换出的进程,则继续执行换出过程,直至内存中再无阻塞进程为止。

2,进程的换入

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

在对换进程成功地换入一个进程后,若还有可换入进程,则再继续执行换入换出过程,将其余处于“就绪且换出”状态的进程陆续换入,直到外存中再无“就绪且换出”状态的进程,或者已无足够的内存来换入进程,此时对换进程才停止换入。

由于交换一个进程需要很多的时间,因此对于提高处理机的利用率而言,它并不是一个非常有效的解决办法。目前采用较多的对换方案是,在处理机正常运行时,并不启动对换程序。但如果发现许多进程运行时进程发生缺页且明显出现内存紧张的情况,才启动对换程序,将一部分进程调至外存。如果发现所有进程的缺页率都已明显减少,而系统的吞吐量已下降时,则可暂停运行对换程序。

5,分页存储管理方式

产生的原因:连续分配方式会产生很多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。

如果允许一个进程直接分散地装入到许多不连续的分区中,则无须“紧凑”。基于这一思想而产生了离散分配的方式。根据在离散分配时所分配地址空间的基本单位的不同,又可将离散分配分为以下三种:

(1)分页存储管理方式:在该方式中,将用户程序的地址空间分为若干固定大小的区域,称为页或页面。相应地,也将内存空间分为若干物理块或页框,页和块的大小相同。这样可将用户程序的任一页放入任一物理块中,实现了离散分配。

(2)分段存储管理方式:这时为了满足用户要求而形成的一种存储管理方式。它把用户内存地址分为若干大小不同的段,每段可定义一组相对完整的信息。在存储器分配时,以段为单位,这些段在内存中可以不相邻接,所以也同样实现了离散分配。

(3)段页式存储管理方式:这时分页和分段两种存储管理方式相结合的产物。它同时也具有两者优点,是目前应用比较广泛的一种存储管理方式。

5.1,分页存储管理的基本方式

页面:分页存储管理将进程的逻辑地址空间分为若干个页,并为各业加以编号,从0开始;也把内存的物理地址空间分成若干个块,同样加以编号;在为进程分配内存时,以块为单位,将进程中的若干个页分别装入到多个可以不相邻的物理块中。由于进程的最后一页经常装不满一块,而形成了不可利用的碎片,称之为“页内碎片”;

页面大小

若太小:可使内存碎片减小,从而减少了内存碎片的总空间,有利于提高内存利用率;但另一方面每个进程会占用较多的页面,从而导致进程的页表过长,占用大量内存;降低页面换进换出的效率。

若太大:可以减少页表的长度;提高页面换进换出的速度;页内碎片增大。页面大小应为2的幂次,通常为512B~8KB

地址结构:包含两部分,前一部分为页号P,后一部分为位偏移量W,即页内地址。地址长度为32位,其中0~11位为页内地址,即每页的大小为4KB2^1212~31位为页号,地址空间最多允许有1M2^20页。

页表:在分页系统中,允许将进程的各个页离散地存储在内存不同的物理块中,但系统应能保证进程的正确运行,即能在内存中找到每个页面所对应的物理块。为此,系统为每个进程建立了一张页面映像表,简称页表

页表的组成:进程地址空间中的所有页(0~n),依次在页表中有一页表项,其中记录了相应页在内存中对应的物理块号。

页表的作用:进程执行时,通过查找该表,即可找到每页在内存中的物理块号。

保护的实现:通过在页表的表项中增加一存取控制字段,即可实现对该页的存取控制。当存取控制字段仅有一位时,可用来规定该存储字块中的内容时允许读/写还是只读;若存取控制字段为两位,则可规定为读写、只读和只执行等存取方式。

5.2,地址变换机构

分页存储管理方式的地址变换:实质是将逻辑地址中的页号,转换为内存中的物理块号。可借助于页表实现,由于页面大小是1KB的页内地址是0~1023,其相应的物理地址也是0~1023,一一对对应,无需进行转换。

若页表驻留在内存中,则在系统中设置一个页表寄存器来存放页表在内存中的首地址和页表的长度。这时的地址变换称为基本的地址变换。

若为了提高地址变换速度,引入了快表,则此时的地址变换称为具有快表的地址变换。

1,基本的地址变换机构

进程在运行期间,需要对程序和数据进行变换,即将用户地址空间中的逻辑地址变换为内存空间中的物理地址,由于它的执行频率非常高,每条指令的地址都需要进行变换,因此需要采用硬件来实现。页表功能是由一组专门的寄存器来实现的。一个页表项用一个寄存器。由于寄存器具有较高的访问速度,因而有利于提高地址变换的速度,但由于寄存器成本较高,且大多数现代计算机的页表又可能很大,使页表项的总数可达几千甚至几十万个,显然这些页表项不可能都用寄存器来实现。因此,页表大多驻留在内存中。在系统中只设置一个页表寄存器PTR,在其中存放页表在内存的地址和页表的长度。进程未执行时,页表的始址和页表长度存放在本进程的PCB中。当调度程序调度到某进程时,才将这两个数据装入页表寄存器。

地址变换过程:分页地址变换机构将有效地址(相对地址)分为页号和页内地址两部分,以页号为索引去检索页表。将页号与页表长度相比,若页号≥页表长度,则越界中断,否则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置,得到物理块号,将之装入物理地址寄存器。与此同时,将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。

2,具有快表的地址变换机构

问题:由于页表是存放在内存中的,CPU每存取一个数据,都要两次访问内存。第一次访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,以形成物理地址。第二次访问内存时,从第一次所得地址中获得所需数据(或向此地址中写入数据),CPU速度降低1/2

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

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

5.3,访问内存的有效时间

内存的有效访问时间:从进程发出指定逻辑地址的访问请求,经过地址变换,到在内存中找到对应的实际物理地址单元并取出数据,所需要花费的总时间。

在基本分页存储管理方式中,有效访问时间分为第一次访问内存时间和第二次内存访问时间之和。EAT=2t

在引入快表的存储管理方式中,EAT和快表命中率有关。如果命中率为a,EAT=[ a * λ + (1-a) * (t+λ) ] + t(λ表示查找快表所需的时间,t表示访问一次内存所需的时间

5.4,两级和多级页表

现代的大多数计算机系统都支持非常大的逻辑地址空间,在这样的情况下逻辑地址空间的扩大导致单页表不可用。

32位逻辑地址空间采用分页系统时,若页面大小为标准值(4KB),则每个进程页表中的页表项将有1M个,每项占用 一字节时,存储页表需要1MB空间。而且还要求是连续的。

可类比为:页表登记了各位同学的宿舍号,如果班里同学只有20人,则一页A4纸即可登记完毕。假如登记全院1万名同学的宿舍号信息,此时可能需要一张很长的表格。可借鉴两级页表的策略,先将同学分成每20位一组,一张纸上20行,1万名同学需要500页纸。这500页纸可放在不同的若干档案格中。又有一张登记表记下了每组所在的档案盒号(外层页表)。

解决办法:

  • 离散存放  解决难以找到一块连续的大内存空间的问题。
  • 按需调入页表项  只将当前需要的部分页表项调入内存,其余的页表项仍驻留在磁盘上,需要时再调入。

1,两级页表

例:设32位逻辑地址空间中各页面大小为4KB,采用两级页表结构分配内存时,需要对页表再分页,使每个分页中含有1024个页表项,最多允许有1024个页表分页,则此时的逻辑地址结构为:

页表的离散分配不能解决使用较少内存空间存放大页表的需求

解决办法:按需调入页表项:进程或作业装入内存时仅选择当前所需的一批页表项调入内存,以后再根据需要陆续调入,以两级页表为例,外层页表必须调入内存,内层页表只调入需要的若干页,内层页是否调入内存需要在外部页表的对应表项的状态位中有所体现,程序运行时若发现该位为“尚未调入”,则产生中断,请求OS调入该页

2,多级页表

设页面大小为4KB,页表可用的位数为64-12=52,其中低10用来标识每个页表分页(内页表)中的各表项(每个页表分页是1024行),这些表项分别对应一个物理帧;高42用来标识外层页号。此时外层页表有4096G个页表项,若每一页表项占用4个字节,则需要的连续内存空间为16384GB。对更加大型的逻辑地址空间(如64位),两级页表无能为力。一种可能的解决方法是使用多级页表,即对页表进一步分割,形成三级甚至更多层次的页表。

6,分段存储管理方式

段式是从方便用户角度提出的管理方案,为方便用户引入段式管理。

段式管理优越性:(1)方便用户编程;(2)便于信息共享;(3)便于信息保护;(4)便于段动态增长;(5)便于动态链接;(6)可以分别编写和编译;

6.1,分段系统的基本原理

1,分段

  • 作业的地址空间被划分成若干个段,每个段定义了一组逻辑信息;
  • 每段都有自己的名字,通常用段号代替段名;
  • 每段都从0开始编址,并采用一段连续的地址空间;
  • 段的长度由逻辑信息组的长度决定;
  • 逻辑地址是二维的,由段号和段内地址组成。

2,段表

  • 为每一分段分配一个连续的分区,各段可以离散地移入内存中不同的分区中;
  • 为实现地址变换,应提供一张段映射表,简称“段表”;
  • 每个段在表中占有一个表项,其中记录了该段在内存中的起始地址和段的长度;

3,地址变换结构

段表寄存器:存放段表基址和段表长度TL

地址变换过程:1、逻辑地址中的段号STL比较,若STL,越界中断;反之,根据段表基址和段号所指示的段表项找到所需段在内存中的基址。2、逻辑地址中的段内偏移d和上一步找到的段长SL相比较,若d SL,越界中断;反之,将d与段基址相加得到数据物理地址。

8K是8x1024是8192,还有位移量100,8192+100就是8292 

4,分页和分段的主要区别

  • 分页是出于系统管理的需要,分段是出于用户应用的需要
  • 一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处
  • 页大小是系统固定的,而段大小则通常不固定
  • 逻辑地址表示:分页是一维的,各个模块在链接时必须组织成同一个地址空间;分段是二维的,各个模块在链接时可以每个段组织成一个一维地址空间;通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。

6.2,信息共享

分段系统的一个突出优点是易于实现段的共享,允许若干个进程共享一个或多个分段,且对段的保护也十分简单易行。

例如:有一个多用户系统,可同时接纳40用户,他们都执行一个文本编辑程序。如果文本编辑程序有160KB的代码和另外40KB的数据区,则总共需要有8MB40 × 200K的内存空间来支持40个用户。

如果160KB的代码是可重入的,则无论是分页系统还是在分段系统中,该代码都能被共享,在内存中只需保留一份文本编辑程序的副本,此时所需的内存空间是1760KB40*40+160,而不是8000KB。假定每个页面大小是4KB160KB的代码将占用40页面,数据区占10页面。为实现代码共享,应在每个进程的页表中都建立40个页表项,它们的物理块号都是21#~60#。在每个进程的页表中,还须为自己的数据区建立页表项,它们的物理块号分别是61#~70#71#~80#80#~90#

由于是以段为基本单位的,不管该段又多大,我们都只需为该段设置一个段表项,因此实现共享变得非常容易。

6.3,段页式存储管理方式

1,基本原理

段页式系统的基本原理是分段和分页原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每个段赋予一个段名。

地址结构:由段号、段内页号和页内地址三项共同构成地址

既具有分段系统的便于实现、分段可共享、易于保护、可动态链接等优点,又能像分页系统那样很好地解决内存的外部碎片,以及可为各个分段离散地分配内存等问题。

操作系统:存储器管理(下)相关推荐

  1. 操作系统——存储器管理

    操作系统--存储器管理 程序的装入和链接 用户程序想要在系统中运行,必须先将他装入内存,然后再将其转变为一个可执行的程序,步骤: 编译-->链接-->装入 程序的装入: 绝对装入方式:(只 ...

  2. 操作系统—存储器管理

    存储器管理 1 存储器的层次结构 ​ 计算机执行时,几乎每条指令都涉及对存储器的访问.因此要求对存储器的访问速度跟得上处理机的运行速度.考虑到价格和现实因素,如今的计算机大都采用了多层结构的存储器系统 ...

  3. 操作系统——存储器管理(连续分配存储管理方式)

    文章目录 一.单一连续分配 二.固定分区分配 1. 划分分区的方法 2. 内存分配 三.动态分区分配 1. 动态分区分配中的数据结构 2. 动态分区分配算法 3. 分区分配操作 四.基于顺序搜索的动态 ...

  4. 操作系统存储器管理管理试验

    存储器管理 一.目的 本课题实验的目的是,使学生实验存储器管理系统的设计方法:加深对所学各种存储器管理方案的了解:要求采用一些常用的存储器分配算法,设计一个存储器管理模拟系统并调试运行. 二.要求及提 ...

  5. 操作系统-存储器管理实验

    存储器管理 一.目的 本课题实验的目的是,使学生实验存储器管理系统的设计方法:加深对所学各种存储器管理方案的了解:要求采用一些常用的存储器分配算法,设计一个存储器管理模拟系统并调试运行. 二.题目 存 ...

  6. 操作系统——存储器管理的功能

    一. 内容总览 二. 内存空间的分配和回收 为了能将用户程序装入内存,必须为它分配一定大小的内存空间.连续分配方式是最早出现的一种存储器分配方式 该分配方式为一个用户程序分配一个连续的内存空间,即程序 ...

  7. 操作系统存储器管理实验报告_献上膝盖!华为工程师抛出一份堪称“举世无双”操作系统笔记...

    写在前面 操作系统在计算机行业中是一门最基础的技术,无论是在开发项目还是在算法岗,我们都是基于计算机上进行的,我们对操作系统的了解体现我们从事计算机相关岗位的资深素质,因此,接下来,这篇文章给大家介绍 ...

  8. 模拟存储器管理C语言,操作系统-存储器管理实验C语言.doc

    #include "stdio.h" #include "stdlib.h" #include "string.h" #define Siz ...

  9. 【操作系统——存储器管理习题】 某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB,假定某时刻一用户页表中已调入内存的页面对应的物理块号如下:则逻辑地址0A5C(H)物理地址为?

    解题步骤: 第一步: 将十六进制逻辑地址转换为十进制 0A5C=160*12+161*5+162*10+163*0=12+80+2560+0=2652 第二步: 根据书上P103公式: P=INT[A ...

  10. 【408预推免复习】操作系统之存储器管理

    [408&预推免复习]操作系统之存储器管理 文章目录 1 基础部分 2 分页存储管理 3 分段存储管理 1 基础部分 物理地址空间(或物理空间.绝对空间):由内存一系列存储单元所限定的地址范围 ...

最新文章

  1. halcon与QT联合:(5.3)瓶盖检测以及QT界面搭建
  2. java http get json_java实现Http post(参数json格式)、get 请求
  3. 物联网网关linux带串口,物联网网关|串口转HTTP GET协议
  4. 用Java Servlets代替CGI
  5. centos php日志分析,记录一下CentOS7安装GoAccess日志分析工具
  6. ListBox和ComboBox绑定数据简单例子
  7. python -m SimpleHTTPServer
  8. 0618----Shell(二)
  9. unity3d开发微信小游戏2
  10. oracle执行计划分析
  11. 微信红包体系设计分析
  12. 条码打印机无法正常打印该如何解决
  13. 项目销售实用技巧(精华,销售,售前必看)
  14. 未来的不确定性到底是好是坏
  15. 技术分享 | 无人机集群——分布式控制算法
  16. 设计模式概述_繁星漫天_新浪博客
  17. IntelliJ IDEA 2019从入门到癫狂
  18. 矩阵分析与应用(7)
  19. mysql将时间戳转换成日期_mysql 中查询时如何将时间戳转换为日期格式 / 日期格式转换为时间戳...
  20. @Pointcut 配置用法浅析

热门文章

  1. 基于Qt 5.7.0的适合Window XP系统的应用开发
  2. 王者服务器维护6月8日,《NBA范特西-王者篇》6月8日维护公告
  3. python下载pip3_pip3 离线下载安装
  4. 写博客的一些感想和想对读者说的话
  5. gin embed打包静态资源文件
  6. 手机芯片战争:英特尔追ARM 联发科战高通
  7. java开发工程师面试自我介绍_Java程序员面试如何自我介绍HR这一关
  8. 不定积分 定积分 计算方法
  9. 不定积分、定积分 复习笔记
  10. element表格 频繁切换维度,导致表头渲染有误