操作系统离散存储方式

存储分配方式

上一篇博客笔者谈到了存储器的分配方式包括连续存储离散存储。我们再回顾一下那个图:

上一篇博客中我们提到联系存储的一些概念,包括:单一连续分配,固定分区分配,动态分区分配,其中对动态分区分配的分配算法做了介绍。这一次我们继续来聊一聊离散存储的几种方式。之所以出现离散分配方式,是因为连续分配方式会出现“碎片”,造成空间浪费。

离散分配方式分为三种:

  • 分页存储管理
  • 分段存储管理
  • 段页式存储管理

一、分页存储管理方式

1、分页结构

分页存储方式引出了三个概念,一个叫页面(在页表中对应页号),一个叫物理块(在页表中对应块号),一个叫页表。

  • 页面:指的是将程序按逻辑地址空间分成若干个页,每个页的大小是相同的,给他们编号得到页号。
  • 物理块:指的是将程序的实际物理地址空间分成若干个块,给他们编号得到块号。
  • 页表:系统为每一个进程建立了一张页面和物理块的映射表。

结构如下:

这里我们不妨先分析一下,这样的结构有哪些优势和问题。

优势在于,通过将逻辑地址和物理地址分开划分,然后设置映射建立联系的方式,我们可以实现程序在内存上的离散存储。

劣势在于,页面固定的情况下,总会出现程序填不满完整的一个页面的情况,那样也会出现“碎片”现象,我们称之为“页内碎片”,同时,增加映射关系也会增加我们的访问成本。

前人大佬当然也想到了这一点, 大佬们发现如果仅仅采用页表来映射逻辑地址和物理地址的关系,那么,在程序运行的过程中CPU每一次存取一个数据的时候,都要先去内存访问页表,获得块号,然后将其与页内偏移量拼接,形成物理地址;获得物理地址后再去内存处理数据。这样一来处理速度降低了将近1/2。

这当然不行,于是大佬们提出了“快表”的概念。也就是设立一个处理速度很快的高速缓冲寄存器,用来存放一些当前程序正在访问的那些页表项,CPU每次访问的时候,先去快表里面找找有没有“捷径”,如果有,就直接访问得到块号;如果没有,再去内存读取,读取后将这个新的被访问页表放到快表中;如果快表满了,那么就从快表中找出最少使用的页表和这个新页表交换,我们称之为更新快表。

那既然有了新的机制,当然我们也需要一些方法来判断这个机制是否有用,所以我们引出了访问内存的有效时间的概念,具体的公式和结果比较,大家可以通过《操作系统》等书籍了解。

最后,分页存储还有一个好处就是页面是虚拟地址,我们可以设置一层,也可以设置很多层,针对难于找到大的连续空间的内存空间来存放页表的问题,我们就可以使用多级页表如图(图片来源:https://blog.csdn.net/ergouge/article/details/7460058

二、分段存储管理方式

首先我们依然要知道,为什么要引入分段存储管理方式,毕竟分页管理已经可以做到将数据离散存放。引入分段存储管理的原因,一方面是将程序分成若干个程序段后,可以使程序更直观;另一方面,分段实现和满足了信息共享,信息保护,信息动态增长等需要。简单来说就是方便编程。

那么分段的方式是怎样的呢?

分段存储福管理方式中,作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。系统为每一个分段分配一个连续的分区。同时引入段表的概念,段表表示了逻辑段和物理地址的映射。

三、段页式存储管理方式

段页式存储管理其实就是把分段和分页原理结合,即先将用户程序分成若干个段,然后再将每个段分为若干个页,并为每一个段赋予一个段名。

猜你喜欢

转载自blog.csdn.net/qq_36125072/article/details/82698847