一、存储器抽象
1.无存储器抽象
早期的大中小型计算机都没有存储器抽象。每一个程序都直接访问物理内存,这么做相当于把物理地址暴露给进程,这样会带来几个严重的问题:
- 如果用户程序可以寻址内存的每个字节,他们就可以很容易地破坏操作系统,从而使系统慢慢停止运行
- 使用这种模型,想要同时运行多个程序是很困难的
2.一种存储器抽象:地址空间
要保证多个应用程序同时处于内存中并且不互相影响,需要解决两个问题:保护和重定位。这就要创造一个新的内存抽象:地址空间。地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有自己的地址空间,并且这个地址空间独立于其他进程的地址空间。
二、基址寄存器和界限寄存器
三、操作系统的空闲内存管理机制
1.使用位图的存储管理
使用位图方法时,内存可能被划分成小到几个字或大到几千字的分配单元。每个分配单元对应于位图中的一位,0表示空闲,1表示占用(或者相反)。一块内存区和对应的位图如下图左半部分所示:
2.使用链表的存储管理
这种方法维护一个记录已分配内存段和空闲内存段的链表。其中链表中的一个节点或者包含一个进程,或者是两个进程间的一个空的空闲区。如上图右半部分所示,链表中的每一个节点都包含以下域:空闲区(H)或进程(P)的指示标志、起始地址、长度和指向下一节点的指针。
空间分配算法
当按照地址顺序在链表中存放进程和空闲区时,有几种分配算法可以用来为创建的进程分配内存,下面介绍:
- 首次适配算法
- 下次适配算法