您的位置:首页 > 其它

操作系统学习笔记(三)-内存管理

2019-05-05 13:27 106 查看

三、内存管理

1 存储器抽象-地址空间

地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间,除了在某些特殊情况下进程需要共享他们的地址空间外。

(1)基址寄存器与界限寄存器

实现了重定位,但使用基址寄存器和界限寄存器的缺点是每次访问内存都要进行加法和比较运算,加法运算是复杂运算。

(2)交换技术

有两种处理内存超载的通用方法,交换虚拟内存
交换 把一个进程完整调入内存,使该进程运行一段时间,然后把它存回磁盘
交换会在内存产生多个空闲区,也称为空洞
通过把所有的进程尽可能的向下移动,有可能将这些小的空闲区合成一大块,该技术称为内存紧缩,但通常不进行这个操作,因为它要耗费大量的CPU时间
考虑到进程的数据段可以增长,为了减少因内存区域不够而引起的进程交换和移动所产生的开销,一种可用的方法是,当换入或移动进程时为它分配一些额外的内存。

(3)空闲内存管理

使用位图的存储管理

使用位图方法时,内存可能被划分成小到几个字或大到几千字节的分配单元。每个分配单元对应于位图中的一位,0表示空闲,1表示占用
问题   在决定把一个占K个分配单元的进程调入内存时,存储管理器必须搜索位图,在位图中找出有k个连续0的串,这是一项耗时的工作

使用链表的存储管理

  • 首次适配法
  • 下次适配法
  • 最佳适配法
  • 最差适配法
  • 快速适配法

2 虚拟内存

虚拟内存的基本思想是:每个程序有自己的地址空间,这个空间被分成多个块,每一块称作一页或页面,每一页有连续的地址范围。这些页被映射到物理内存,但并不是所有的页必须在内存中才能运行程序。当程序引用到一部分在物理内存的地址空间时,由硬件立刻执行必要的映射。当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。

分页

  • 由程序产生的地址是虚拟地址,虚拟地址->内存管理单元MMU->总线
  • 虚拟地址空间按照固定大小分成被称为页面的若干单元,在物理内存中对应的单元称为页框
  • 当程序访问了一个未被映射的页面,会引起缺页中断缺页错误,使得CPU陷入到操作系统,操作系统找到一个很少使用的页框且把它的内容写入磁盘(如果它不在磁盘上),随后把需要访问的页面读到刚才回收的页框中,修改映射关系,然后重新启动引起陷阱的指令。

页表

  • 虚拟地址被分为虚拟页号(高位部分)和偏移量(低位部分)。如对于16位地址和4KB的页面大小,高四位可以指定16个虚拟页面中的一页,低12位可以确定所选页面的偏移量
  • 根据虚拟页号可以找到虚拟页面对应的页框号,然后把页框号拼接到偏移量的高位端,形成物理地址

页表项的结构

  1. 页号
  2. 块号(页框号)
  3. 中断位: 用于判断该页是不是在内存中,如果是0,表示该页面不在内存中,会引起一个缺页中断
  4. 保护位(存取控制位):用于指出该页允许什么类型的访问,如果用一位来标识的话:1表示只读,0表示读写
  5. 修改位(脏位):用于页面的换出,如果某个页面被修改过(即为脏),在淘汰该页时,必须将其写回磁盘,反之,可以直接丢弃该页
  6. 访问位:不论是读还是写(get or set),系统都会设置该页的访问位,它的值用来帮助操作系统在发生缺页中断时选择要被淘汰的页,即用于页面置换
  7. 高速缓存禁止位(辅存地址位):对于那些映射到设备寄存器而不是常规内存的页面有用,假设操作系统正在循环等待某个I/O设备对其指令进行响应,保证硬件不断的从设备中读取数据而不是访问一个旧的高速缓存中的副本是非常重要的。即用于页面调入。

加速分页过程

转换检测缓冲区TLB

将经常访问的页表项放入缓冲区,对于一个虚拟地址,首先查找缓冲区,看是否命中

软件TLB管理

针对大内存的页表

  • 多级页表
  • 倒排页表

3 页面置换算法

  • 最近未使用页面置换算法
  • 先进先出页面置换算法
  • 第二次机会页面置换算法
  • 时钟页面置换算法
  • 最近最少使用页面置换算法
  • 老化算法
  • 工作集页面置换算法
  • 工作集时钟页面置换算法

4 分段

  • 每个段都构成了一个独立的地址空间,所以它们可以独立的增长或减小而不会影响到其他的段
  • 简化对长度经常变动的数据结构的管理
  • 有利于在几个进程之间共享过程和数据。一个常见的例子是共享库

分段和分页的结合 intel x86

目前x86 64位并不支持真正的分段

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: