操作系统的存储管理

一、存储器抽象


1.无存储器抽象


早期的大中小型计算机都没有存储器抽象。每一个程序都直接访问物理内存,这么做相当于把物理地址暴露给进程,这样会带来几个严重的问题:

  1. 如果用户程序可以寻址内存的每个字节,他们就可以很容易地破坏操作系统,从而使系统慢慢停止运行
  2. 使用这种模型,想要同时运行多个程序是很困难的

2.一种存储器抽象:地址空间


要保证多个应用程序同时处于内存中并且不互相影响,需要解决两个问题:保护重定位。这就要创造一个新的内存抽象:地址空间。地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有自己的地址空间,并且这个地址空间独立于其他进程的地址空间。


二、基址寄存器和界限寄存器


那么,如何为每一个进程独立出地址空间呢?这里有一种曾经很常见的策略:基址寄存器和界限寄存器。每次一个进程访问内存,取一条指令,读或者写一个数据字,CPU硬件就会把地址发送到内存总线前,如果访问的地址超过了界限,会产生错误并中止访问。
但是,使用这种方式进行重定位的缺点是,每次访问内存都需要进行加法和比较运算。比较可以做得很快,但是加法由于进位传递时间的问题,在没有使用特殊电路的情况下会显得很慢。
现在已经有更好的机制代替此策略。

三、操作系统的空闲内存管理机制


在动态分配内存时,操作系统必须对其进行管理。一般而言,有两种方式跟踪内存使用情况: 位图空闲链表

1.使用位图的存储管理


使用位图方法时,内存可能被划分成小到几个字或大到几千字的分配单元。每个分配单元对应于位图中的一位,0表示空闲,1表示占用(或者相反)。一块内存区和对应的位图如下图左半部分所示:

2.使用链表的存储管理


这种方法维护一个记录已分配内存段和空闲内存段的链表。其中链表中的一个节点或者包含一个进程,或者是两个进程间的一个空的空闲区。如上图右半部分所示,链表中的每一个节点都包含以下域:空闲区(H)或进程(P)的指示标志、起始地址、长度和指向下一节点的指针。


空间分配算法

当按照地址顺序在链表中存放进程和空闲区时,有几种分配算法可以用来为创建的进程分配内存,下面介绍:

  • 首次适配算法
存储管理器沿着段链表进行搜索,知道找到一个足够大的空闲区,除非空闲区的
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值