通俗的操作系统存储器了解一下!

存储器管理

对于存储器的管理直接影响到存储器的利用率,对系统的性能也有重大的影响。这里笔者所谈到的存储器主要管理的对象主要是是内存。计算机执行每条指令基本上都要涉及对存储器的访问,因此必须让存储器的成本低,速度快(快到能跟上CUP的速度),此外还要拥有比较大的容量,但是就目前而言,做不到。所以引出了具有多层结构的存储器系统。

一、存储器多层结构

首先我们来看一下存储器的层次示意图:(图片来自网络《操作系统》第四版第四章)

1、可执行存储器

在该多层结构中,主存储器和寄存器又被称为可执行存储器

主存储器:又被称为内存或者主存,用于保存程序运行时的程序和数据,

寄存器:具有和处理机相同的速度,运行程序时,处理机往往是从主存储器中取得指令和数据,然后将指令放入指令寄存器,将数据放入数据寄存器。

2、缓存结构

缓存结构顾名思义就是做到一个数据缓冲的左右,用来解决速度匹配的问题

高速缓存:它的速度介于寄存器和主存储器之间,它的作用就是备份主存中较常用的数据,减少处理机访问主存的次数。

磁盘缓存:由于磁盘的I/O速度远远低于主存的访问速度,所以需要设置磁盘缓存,主要用来存放频繁使用的磁盘数据和信息。

3、程序的装入和连接

用户程序要在系统中运行,必须先将它装入内存,过程包括:

(1)编译:由编译程序对用户源程序进行编译

(2)连接:由连接程序将编译后形成的一组目标模块以及它们所需要的库函数连接起来

(3)装入:由装入程序将装入模块装入内存。

(具体的装入过程有很多概念,例如绝对装入方式,可重定位装入方式,动态运行时的装入方式等等,这里笔者没有提到,有兴趣的朋友可以去了解一下~)

二、存储管理方式

我们还是首先来看看基本存储分类方式的图(图片的来源:https://blog.csdn.net/wang379275614/article/details/13765599):

1、连续分配

1.1单一连续分配

这种存储器的管理方式是把内存分为两部分,分别是系统区用户区系统区仅提供给OS使用用户区仅装有一个用户程序。这样做的好处是,在单用户的环境下,机器由一个用户独占,不会存在其他用户干扰,即使有破坏行为,也会自己的程序干扰了操作系统,可以恢复,后果不严重。但是适用范围太过单一,只能在单道程序环境下。

1.2固定分区分配

出现多道程序以后,为了能在内存中装入多道程序,开始把整个用户空间划分为若干个固定大小的区域,每个分区中只装入一道作业。

这种分配方式需要我们考虑到两个方面,一个是划分分区的方法,一个是内存的分配方法

分区的方法有两种:

一种是分区的大小相等,这样做的缺点是缺乏灵活性(因为不同程序需要的内存区域大小是不同的),程序太小会形空间浪费,太大一个分区不足以装入程序,程序将无法运行。

另一种是分区大小不等,这样做灵活性更高,但是也无法完全避免上一条中的问题。

内存分配的方法,通常是将分区按其大小进行排队。当有程序需要写入时,首先检索,找出一个能满足要求的的,尚未分配的分区,如果找不到,则拒绝给该用户程序分配内存。

1.3动态分区分配

这种方式可以这样理解,相当于就是在固定分区的基础上的优化,感觉就是,来一个程序,我就根据一个分区分配算法算出一块内存空间,将这个空间标记位这个程序的,当程序运行完毕了,我在将这块内存回收回来。实现这个功能需要用到三个“法宝”,涉及分配的数据结构,分区分配算法,分区的分配和回收操作。

  • 数据结构:这里用到一个双向链表,动态表示内存区域
  • 动态分区分配算法:请往下看。
  • 分区的分配和回收操作:这里笔者也没有提到(感兴趣的朋友自行了解一下吧)

这里笔者想要着重整理一下动态分区分配算法中基于顺序搜索的动态分区分配算法

(1)首次适应算法(first fit,FF)

这个算法要求如下,将空闲的分区按地址递增的次序连接,当分配内存时,首先从链表链首位置顺序查找,找到一块大小满足程序要求的区域,然后根据作业大小,在该区域中划分出一块内存空间。

该算法优先利用低址部分的内存空间,而保留高址部分的大空闲空间。这样分配会留下许多小的空闲分区,称为碎片。而且每次增加都从低址区域查找,增加了开销。

(2)循环首次适应算法(nextfit,NF)

这个相对一第一种,其实就是改变了一点,也就是每次查找都不从头开始查找,而是从上一次找到的空闲分区的下一个空闲分区开始查找。

(3)最佳适应算法(best fit,BF)

这个算法总是能把满足要求、有是最小的空闲分区分配给作业,避免“大材小用”。为了加速查找,该算法要求将所有的空闲分区按容量以小到大的顺序形成一最大空闲区。

(4)最坏适应算法(worst fit,WF)

这个算法总是挑选一个最大的空闲区,从中分隔一部分存储空间给作业使用。

这样做的好处是可使剩下的空闲区不至于太小,产生碎片的可能性最小。

下一篇我们会来聊一聊离散存储管理方式的三种情况。

猜你喜欢

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