3.3 内存管理
由于任何程序和数据必须占用内存空间才能执行,因此,内存管理的优劣直接影响系统的性能。尽管现代计算机内存容量不断增大,但仍不能保证有足够的空间来支持大型应用程序和数据的使用,因此操作系统的任务之一就是尽可能地方便用户使用和提高内存的利用效率,此外,有效的内存管理也是多道程序设计系统的关键支撑。具体包括:
- 内存空间的分配与回收
- 配合硬件进行地址转换工作,把用户使用的逻辑地址转换成处理器能访问的物理地址。
- 内存空间的共享和保护,使得若干进程能够同时访问公共程序所占的内存区,同时,能够防止多个程序在执行中互相干扰。并保护区域内的信息不被破坏。
- 当内存不足的时候,操作系统要求采取某种措施,在不改变实际内存容量的前提下,借助于大容量的外存来解决内存不够用的问题。
用户作业的程序通常用高级语言编写,称为源程序。但源程序不能被计算机直接执行,需要通过编译程序或汇编程序编译获得目标程序。目标程序的地址不是内存的实际地址,一般是将用于目标程序使用的地址单元称为逻辑地址。逻辑地址一般是0为基地址进行编址,是程序经过编译或者汇编后形成的目标模块或装配连接程序的地址编码。
当程序运行时,它将被装入内存地址空间的某些部分,此时程序和数据的实际地址一般不可能与原来的逻辑地址一致,将内存中的实际储存单元称为物理地址。
物理地址 = 起始物理地址 + 逻辑地址
分区存储管理
1.固定分区
固定分区也称为静态分区,是在作业装入之前,内存就被划分为若干个分区。划分工作可以由系统管理员完成,也可以由操作系统实现。
2.可变分区
可变分区也称为动态分区,是指在作业装入内存时,从可用的内存中划出一块连续的区域分配给它,形成新的分区。
- 首次适应算法
- 最佳适应算法
- 最坏适应算法
3.可重定位分区
可重定位分区是解决储存器碎片问题的简单而有效的方法。其基本思路是在适当的时候,吧零散的空白区合并为一个大的空白空间,称为拼接。实现方式是移动某些已分配区域中的信息,使所有的分配信息都紧挨着储存器的一端,而空白区在另一端。
4.多重分区
多重分区的基本思想是为一个作业在其运行过程中动态的申请附加存储空间,该空间不必和已有的作业分区相连接。多重分区的优点是便于使用和共享子程序中或数据,确定是需要较多的硬件支持,因为该分区方式一定要有动态重定位结构来支持,管理也较复杂。
5.存储器保护
存储器保护的基本思想是系统对每个作业或者进程进行内存分配时,对同一作业的各页面多对应的内存块都要指定一个相同的、不与其他作业相重的键。这个键保存于快速寄存器和该作业的程序状态中。当程序访问某一块时,将程序状态字中的键与被访问块的键进行比较,若相符,则表明允许访问,否则就发生中断,请求系统处理。
段页式储存管理
分区存储管理存在产生储存碎片和空间管理较复杂的问题。原因在于这种管理方式要求把作业放在内存的一片连续区域中。为了避免这种连续性要求,可以将作业的逻辑地址空间分成若干个长度相等的区域(页),内存空间也划分成若干个与页长度相等的区域(页帧或者块),程序装入时,每页对应一个页帧,这就是分页存储管理的思想。
1.页式存储管理
在分页存储管理中,页帧可以是连续的,也可以是不连续的。系统为每道作业建立一张 页面映射表(页表),记录相应页在内存中对应的页帧号。这种管理消除了可变分区中紧致存储空间所带来的开销,同时又能实现内存信息共享和虚拟存储技术。
2.段式存储管理
段式储存管理按用户作业中的自然段来划分逻辑空间,每段占用连续的地址空间,其逻辑地址是二维的,由段号和段内地址组成。系统为每个作业建立一张段表,记录该段在内存中的起始地址和段长,各段可以存放在内存不同的分区中,段的分配和回收与可变分区存储管理相同。
3.段页式存储管理
基本思想就是讲段式存储管理和页式存储管理结合起来,克服各自的问题。
虚拟存储管理
虚拟存储:在程序运行之前并不必全部装入内存,仅需将当前运行到的那部分程序和数据装入内存便可启动程序运行,其余部分仍驻留在外存上。
局部性原理指程序在执行时呈现出局部性规律,即在一较短时间内,程序的执行仅局限于某个部分。
工作集在虚拟内存储存管理中,可能会出现刚被替换出去的页,立即又要被访问,需要将它调入,因无空闲内存又要替换另一页,而后者是即将被访问的页,于是造成了系统花费大量的时间忙于进行频繁的页面交换,致使系统的实际效率很低,严重时导致系统瘫痪,这种现象称为抖动现象。工作集是指在某段时间间隔内,进程实际要访问的页面集合。
页面置换算法
- 随机淘汰算法
- 轮转算法
- 先进先出算法(FIFO)
- 最近最久未使用(LRU)