存储器
存储器多级存储结构
- 外部存储器:用于存储不立即使用的数据和程序
- 主存储器:用于存储一个正在运行的程序
- 高速缓冲存储器:用于存储CPU处理时的数据
功能:可以使数据传输更加平滑,节约资源,提高硬件利用率。
存取器空间的分类
主存储器空间一般分为系统区和用户区:
- 系统区:主要存放操作系统常驻内存部分,和一些系统软件常驻主存部分以及相关系统数据
- 用户区:主要存放用户程序和数据
虚拟存储技术
当我们的内存只有1G,而某个程序运行需要2G时,我们应该怎么运行这个程序呢?
解决办法是就是虚拟存储技术。
虚拟存储技术采用逻辑地址,内存中只存放程序当前所需数据,当有所需数据不在内存中时(这种情况叫作中断),会去磁盘中寻找相应数据放入主存中。
例如,内存1G,程序运行需要2G内存,但是在运行时,处于计算状态的只有100M,所以我们只需要将这100M放入内存即可,当需要其他数据时,再从磁盘中取出放入内存中。
作业,程序,进程,线程
一个作业通常包括程序、数据和操作说明书3部分。每一个进程由PCB、程序和数据集合组成。这说明程序是进程的一部分,是进程的实体。因此,一个作业可划分为若干个进程来完成,而每一个进程有其实体——程序和数据集合。
单道程序和多道程序
多道程序设计技术是在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制下,相互穿插运行,两个或两个以上程序在计算机系统中共享着计算机系统资源。
与之相对应的是单道程序,即在计算机内存中同一时刻只允许一个的程序运行。
存储器的主要任务
存储器的主要任务如下:
- 使多道程序的并发能在不受干扰的环境中运行
- 提高存储器利用率
- 实现虚拟存储技术,逻辑上扩充主存空间,使大程序能在小主存中运行
- 方便用户使用存储器,用户无需考虑存储器的分配,回收和保护等工作
存储分配的形式
存储分配要解决的问题是,多道程序之间如何共享主存的存储空间。
- 直接存储分配方式(不推荐)
- 通过实际物理存储地址直接操作内存
- 要求知道存储器的可用空间有哪些,并且要知道其他程序已经应用了哪些存储空间
- 使用起来很不方便,要求程序编写人员要了解硬件
- 静态存储分配(不推荐)
- 采用逻辑地址
- 程序装入内存后,只有运行完毕,才会释放该空间,利用率较低
- 动态存储分配(推荐)
- 只将程序运行所需的一部分装入内存进行执行
- 采用逻辑地址
- 当不执行时,会释放占用内存
- 可以动态的申请存储空间以满足程序的需求
- 动态存储分配采用覆盖和交换技术实现
地址的重定位
为了实现动态存储分配,我们需要通过逻辑地址去映射物理地址。
首先我们要了解逻辑地址和物理地址
- 逻辑地址是人们为了方便变成,用一些符号或名称表示的内存地址,是虚拟的。
- 物理地址是实实在在对应存储器的地址。
重定位,也叫地址映射,作用是将逻辑地址转换为物理地址,常用两种方法:
- 静态地址重定位
- 地址变换只是在装入时一次完成,以后不改变
- 优点:
- 实现容易
- 缺点:
- 用户必须分配一个连续的存储空间
- 难以实现程序和数据的共享
- 动态地址重定位
- 在程序执行过程中,通过地址变换机构进行转换
- 优点:
- 有利于提高主存的利用率和存储空间使用的灵活性
- 有利于实现数据的共享
- 缺点:
- 实现存储器管理的软件比较复杂
- 需要附加的硬件支持
覆盖与交换
覆盖和交换是从逻辑上扩充主存的两种方法,解决了在较小主存空间中如何执行大程序的问题。
覆盖
当CPU要求某一段程序执行时,才将该程序装入主存中覆盖以前的某一段程序。
要求程序设计人员给出程序段之间的覆盖结构,主要在同一个进程或作业中进行。
针对的是同一作业。
可以在较小的存储空间中运行容量较大的进程或作业。
交换
将系统暂时不用的程序或数据部分从主存中调出来,以腾出更大的存储空间。
主要在进程或作业之间进行。
针对的是不同作业。
可以在较小的存储空间中运行较多的进程或作业。
单道环境下的存储管理
单道系统的存储空间一般划分为三部分:系统区,用户区,剩余空间区。
采用单一连续区存储管理,同一时刻只允许一个用户进程使用,主要采用静态存储分配方式,即用户程序一旦调入主存后,必须等到该程序执行结束后才能释放主存空间。
这种方式的特点:
- 优点:
- 管理简单
- 只需要很少的软硬件支持
- 缺点:
- 系统存储空间浪费较大
- 执行效率低
- 数据不能共享
多道程序的存储管理
分区存储管理
固定分区法
固态分区是指系统在初始化时,将主存空间划分为若干固定大小的区域,用户进程在执行过程中,不允许改变划分区域的大小。
缺点:不能充分利用存储器资源,有一部分内存会由于未被进程占用而浪费,这一部分浪费称为“碎拼”或“内零头”
动态分区法
采用动态分区时,主存部分只有一个空闲区域,随后根据程序大小分配合适的存储空间。
缺点:在程序运行时,有些数据是当前不需要的,而这部分数据仍然占据内存空间,导致空间利用率低。
分区存储管理的优缺点
- 优点:
- 要求的硬件支持少,管理容易,实现简单
- 缺点:
- 由于每次装入的都是一整个程序,有些程序数据不会被利用,导致内存资源利用率低
- 当内存有一定空间时,由于不能满足某个作业的所需大小,这块内存空间就会被闲置,导致浪费。
- 没有实现虚拟存储,即在小内存的计算机中,不能运行需要大内存才能运行的程序。
页式存储管理
页式管理的思想是:将程序分配在不连续的大小相同的存储区域中,实现主存“见缝插针”式的分配,同时保证作业的连续执行。
页式存储取消了存储分配的连续性,他能使用户进程分配到不连续的存储单元中。
静态页式存储管理
静态页式存储管理是指用户作业在开始执行以前,将作业的程序和数据全部装入到主存中(数同一作业数据在内存中的可以使分散的),然后,操作系统通过地址转换,利用逻辑地址完成相应操作。
缺点:无法实现虚拟存储技术
虚拟页式存储管理
采用了虚拟存储技术,在用户作业开始执行以前,只将运行时所需数据存入主存中,而后利用逻辑地址完成相应操作。
当出现所需数据不在内存中时,这种情况叫做“缺页中断”,这时我们需要采用合适的页面置换算法,将磁盘中的所需数据替换掉内存中不需要的数据。
优化算法(OPT)
这种方法是最优解,产生的缺页中断最少,但这种算法是需要根据结果来求得置换过程的,因此是一种理论上的算法。
先进先出算法(FIFO)
按照顺序进入内存,当发生缺页中断时,取出队列最底部的元素
最近最少用置换算法(LRU)
淘汰的是最近未被访问的页
时钟算法
各个页形成环形链表,淘汰最老和最近没有用的页面
段式存储管理
在页式存储管理中,要求用户程序的逻辑地址空间是连续的。就这要求用户源程序进行编译时,将各种数据按照线性装配,不方便,不灵活。
而段式存储管理把用户作业按照功能分段,分别装入内存的不同位置
段页式存储管理
段页式即将段式和页式相结合,克服了上述两种方式的缺点。