软件设计师5--OS存储管理

版权声明:文章编写不易,转载请注明原链接 https://blog.csdn.net/u012184539/article/details/84140054

操作系统存储管理

存储管理的对象时主存(内存)。存储管理的主要功能包括回收主存空间、提高主存利用率、扩充主存、对主存信息实施有效保护。

1. 基本概念

1.1 存储器的机构

一般存储器的机构有“寄存器-主存-外存”结构和“寄存器-缓存-主存-外存”结构。如下图所示,存储组织的功能时在存储技术和CPU寻址技术允许的范围内组织合理的存储结构,使得各个层次的存储器都处于均衡的繁忙状态。
在这里插入图片描述
(一)虚拟地址。对于程序员来说,数据的存放地址是由符号决定的,并不是主存中的真实地址。虚拟地址也称为相对地址、程序地址、逻辑地址
(二)地址空间。虚拟地址的空间称为虚拟地址空间、相对地址空间或逻辑地址空间,相对地址经过地址重定向转换为绝对地址空间,也称物理地址空间。
(三)存储空间。

1.2 地址重定位

地址重定位是把逻辑地址变为主存物理地址的过程。在可执行文件装入时,需要解决可执行文件地址(指令和数据)与主存地址的对于关系,这个个由操作系统的loader和地址重定位机构来完成。地址重定位分为静态地址重定位和动态地址重定位。
(一)静态地址重定位。程序装入主存时完成逻辑地址到物理地址的变换,在程序执行期间将不会再变化。无需硬件的支持,早期操作系统都用这种重定位方案。缺点是必须给作业分配一个连续的存储空间,作业执行期间不能扩充空间,不能在主存中移动,多个作业难以共享主存中的同一程序的副本和数据。
(二)动态地址重定位。在程序允许期间完成逻辑地址到物理地址的变换。依赖硬件地址变换机构来完成,如基地址寄存器BR。优点是作业执行期间程序和数据可以换入和换出主存,解决主存空间不足问题;可在主存中移动,把主存中的碎片集中起来,可以充分利用空间;不必连续的主存空间,可利用小的主存块;可以实现多作业数据共享。

2. 存储管理方案

存储管理方法是解决多用使用主存的问题。

2.1 分区存储管理

分区存储管理是早期的存储管理方案,把主存的用户区划分为若干个区域,每个区域分配给一个作业使用,并限定它们只能在自己的区域中运行。根据分区的划分方式不同,可分为固定分区、可变分区和可重定位分区。

标题 描述
内碎片 存储管理中,把分配给了用户而用户未用的存储区称为“内部碎片”
外碎片 存储管理中,把那些无法分配出去满足作业存储请求的空闲区称为“外部碎片”

(一)固定分区。是一种静态分区方式。在操作系统启动时就已经将主存划分为若干个分区,每个分区大小可不等。作业使用的空间不小不一定刚好等于分区的大小,造成了一定的浪费。
(二)可变分区。是一种动态分区方式。可变分区 存储管理 不是预先把内存中的用户区域划分成若干固定分区,而是在作业要求装入内存时,根据用户作业的大小和当时内存空间使用情况决定是否为该作业分配一个分区。因此分区大小不是预先固定的,而是按作业需求量来划分的;分区的个数和位置也不是预先确定的。它有效地克服了固定分区方式中,由于分区内部剩余内存空置造成浪费的问题。

  1. 采用地址动态重定位技术,使程序能在内存中移动,为空闲区合并提供保证。
  2. 记住各分区的使用情况,当一个分区被释放时,要能判定它的前、后分区是否为空闲区。若是空闲区,就进行合并,形成一个大的空闲区
  3. 给出分区分配算法,在有多个空闲区都满足作业的存储请求时,决定分配哪一个

(三)可重定位分区。解决碎片化问题的有效方法。基本思想是移动已经分配好的分区,使之成为一个连续区域。移动的时机可以是申请分区得不到满足时或作业执行完毕时,移动分区的代价很大,一般时申请分区无法满足时才进行。

分区保护

分区保护的目的是防止未经允许的用户访问分区,常用如下两种方式。

  1. 采用上界/下界寄存器保护。上界寄存器存放作业的装入地址,下界寄存器存放作业的结束地址,形成的物理地址满足如下条件:
上界寄存器 <= 物理地址 <= 下界寄存器
  1. 采用基址/限长寄存器保护。基址寄存器存放作业的装入地址,限长寄存器存放作业的长度,形成的物理地址满足如下条件:
基址寄存器 <= 物理地址 <= 基址寄存器+限长寄存器

2.2 分页存储管理

在上面的分区存储管理可以解决多道程序共享主存的问题,但是该方案的用户程序必须装入连续的一段空间,当空间不足时需要进行分区靠拢操作,而分区靠拢时非常耗费系统时间的。下面引入分页存储方案。
(一)分页原理。将一个进程的地址空间划分为若干个大小相等的区域,称为页。相应的,在主存空间中划分出相同大小的若干个物理块,成为块或页框。为进程分配主存时,将进程的若干也分别装入多个不相邻的块中。
(二)地址结构。分页系统的地址结构由页号和偏移量(页内地址)两部份组成。地址总共32位,0-11位为页内地址(每页大小为4KB),12-31位为页号,得出一个进程最多可以分配1MB个页。
在这里插入图片描述
(三)页表。将进程的每一页离散的分散到若干个物理快中后,系统要保证在主存中能找到每个页面所对于的物理快。每一个进程都有一个页面映射表(页表),记录了该进程的每一个页在主存中对应的物理快号。
在这里插入图片描述
(四)块表。从地址映射过程可发现,页式存储管理至少需要两次访问主存。第一次访问页表,得到数据的物理地址,第二次存取数据。若数据是间接地址则还需要地址变换。为了提高数据的存取速度,可以在地址映射机构中加一个高速寄存器,用来保存页表,但是这需要很大的硬件开销,经济上不可行。另一种方法是增加一个小容量的联想存储器。用来存储当前进程最活跃的几个页的物理块号(块表),程序存取数据时可以在联想存储器中找到数据的物理地址,也可以通过进程的页表找到数据的物理地址,一般两边时同时进行的,联想存储器中找到物理地址后结束页表查找。
(五)两级页表机制。分页地址由32个位组成,高20位表示页号,低12位表示页内地址,每页有212共4KB的空间。页号有220共1MB个页。每个进程都要维护一个页表,这个页表地址是连续的。那么这个页表占有的空间是1MB*4B = 4MB。这是不太现实的。故在80386中采用了两级页表的机制。
在这里插入图片描述

2.3 分段存储管理

进程的地址空间被划分位若干个段,每个段是一组完整的逻辑信息。例如有主程序段、子程序段、数据段以及堆栈段等。每个段有自己的名字,都是从0开始编址一段连续空间,各段长度不等。如下图,分段的地址结构的高16位是段号,低16位是段内地址。可知一个进程的最多可以有216共64KB个段,每个段的长度最多64KB。
在这里插入图片描述
在分段式存储管理的系统中,为每个段分配一个连续的分区,进程中的每个段可以离散的分配到主存的不同分区中。为每个进程建立一个分段映射表(段表),记录了该进程的每个段在主存中的基址和段的长度。
在这里插入图片描述
【例】某作业的段表如下:

段号 基地址 段长
0 219 600
1 2300 14
2 90 100
3 1327 580
4 1952 96

(1)逻辑地址(0,128)、(1,30)、(2,88)、(3,290)、(4,100)能否转换为对应的物理地址?为什么?
(2)将问题(1)中的逻辑地址分别转换为物理地址。
【解】
(1)(1,30)、(4,100)不能转换为物理地址,因为地址越界。
(2)逻辑地址到物理地址转换如下

逻辑地址 物理地址
0,128 219+128=347
2,88 90+88=178
3,290 1327+290=1617

2.4 段页式存储管理

分页式存储把进程的地址空间分为每4KB一个的页,分散到主存的各个位置,在需要进程间共享数据时很难知道数据在具体的哪个位置,不易实现数据的共享;分段式存储管理把进程的程序部分、数据部分、堆栈部分等分配到各个大小不一的段中。容易实现进程间的数据共享。段页式存储管理是把分段的每个段又按照分页的方式来存储。

段页式存储管理地址结构
在这里插入图片描述
在这里插入图片描述

2.5 虚拟存储管理

在上面介绍的存储管理方案中,当主存的空间不能满足作业要求时,作业无法装入主存执行。虚拟存储管理方案是一个作业可以只装入部分到主存中,其余的留在磁盘,在需要时才装入主存,这样存储器称为虚拟存储器。

(一)程序局部性原理

  • 时间局部性。某条指令被执行,不久的将来这条指令可能再次执行(如循环操作)
  • 空间局限性。某个存储单元被访问,不久的将来,其附近的单元可能被访问(如程序时顺序执行的)

(二)虚拟存储的实现

  • 请求分页系统。在分页式系统基础上加入虚拟存储,主存和虚拟存储器之间进行页的置换,主存中只调入用到的内容,不需要的内容放到虚拟存储器中。以页为单位进行置换。
  • 请求分段系统。在分段式系统基础上加入虚拟存储,主存和虚拟存储器之间以段位单位置换。
  • 请求段页式系统。在段页式系统基础上加入虚拟存储。

(三)请求分页管理的实现

当要访问的页不存在主存时,产生一个缺页中断,请求OS将所缺的页调入主存。缺页中断和一般中断的区别。

  • 缺页中断是在指令执行期间产生的中断处理信号,而一般中断是在指令执行完之后。
  • 发生缺页中断时,返回被中断指令的开始重新执行这条指令,而一般中断时执行下一条指令。
  • 一条指令在执行期间可能产生多个缺页中断。

在这里插入图片描述
在这里插入图片描述

(四)页面置换算法

  • 最佳(Optimal)置换算法。这是一种理想化算法,把最长时间不被使用的页面置换到虚拟存储器。实际上是很难知道哪些页面是最长时间不被使用的。
  • 先进先出(FIFO)置换算法。
  • 最近最少未使用(Least Recently Used)置换算法
  • 最近未用(Not Used Recently)置换算法

(五)工作集

频繁产生缺页中断很影响系统的性能,工作集是把进程在某时间的多个页保留在内存,避免产生缺页中断,提高系统吞吐量。

猜你喜欢

转载自blog.csdn.net/u012184539/article/details/84140054