操作系统概念阅读笔记8

内存管理

Posted by Xiaoxi on January 14, 2016

操作系统概念阅读笔记8

##内存管理


背景

  1. CPU所能直接访问的存储器只有内存和处理器内的寄存器。机器指令可以用内存地址作为参数,而不能用磁盘地址作为参数
  2. 为了协调CPU高速与内存访问的相对低速,高速缓存技术应运而生
  3. CPU所生成的地址通常称为逻辑地址,而内存单元所看到的地址(即加载到内存地址寄存器中的地址)称为物理地址。编译和加载时的地址绑定方法生成相同的逻辑地址和物理地址。但是,执行时的地址绑定方案导致不同的逻辑地址和物理地址。
  4. 由程序所生成的所有逻辑地址的集合成为逻辑地址空间,所有物理地址的集合成为物理地址空间
  5. 运行时从虚拟地址到物理地址的映射是由被称为内存管理单元(MMU)的硬件设备来完成的。

image

  1. 采用动态加载时,一个子程序只有在调用时,才被加载。所有子程序都以重定位的形式保存在磁盘上。

交换

交换需要注意的是:

  1. 不能换出有待处理I/O的进程
  2. I/O操作的执行只能是用操作系统缓冲区

image


连续内存分配

内存通常分为两个区域:1.用于驻留操作系统 2.用于用户程序

内存映射

重定位寄存器含有最小的物理地址值;界限地址寄存器含有逻辑地址的范围值。 image

内存分配三种方法

  1. 首次适应:分配第一个足够大的孔
  2. 最佳适应:分配最小的足够大的孔
  3. 最差适应:分配最大的孔

碎片

  1. 内部碎片

    内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;(分配后,一个块剩余空闲部分)

    内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而在进程占有这块存储块时,系统无法利用它。直到进程释放它,或进程结束时,系统才有可能利用这个存储块。

  2. 外部碎片

    外部碎片指的是还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。

    外部碎片是出于任何已分配区域或页面外部的空闲存储块。这些存储块的总和可以满足当前申请的长度要求,但是由于它们的地址不连续或其他原因,使得系统无法满足当前申请。(多个小空闲块组成,其累加和可用于分配,单个却一般却无法满足需求) 解决方法:紧缩或允许物理地址空间为非连续


分页

分页内存管理方案允许进程的物理地址空间可以是非连续的。分页避免了将不同大小的内存块匹配到交换空间上这样的麻烦。

基本方法

  1. 将物理内存分为固定大小的帧,将逻辑内存也分为同样大小的块,称为页

image

image

  1. 采用分页技术不会产生外部碎片,但有内部碎片

  2. 快表 TLB

image


页表结构

层次页表

image

哈希页表

image

反向页表

image


分段

逻辑地址空间是由一组段组成的。每个段都有名称和长度。地址指定了段名称和段内偏移。用户可通过两个量来指定地址:段名称和偏移。(分页中,为页码和偏移) image


典型例题

8.1

解释内部碎片和外部碎片的区别?

内部碎片是指分配一个页后,(页大小大于实际需求)该页剩余的空闲部分。 外部碎片是由一系列未分配的页组成,这些页的空间非常小无法满足一个进程的需要,但是如果将所有的页的内存空间累加起来能满足进程需要。

8.3

按顺序给出 5 个部分的内存,分别是 100KB,500KB,200KB,300KB 和 600KB,用 firstfit,best-fit 和 worst-fit 算法,能够怎样按顺序分配进程 212KB,417KB,112KB, 和 426KB?哪个算法充分利用了内存空间? Answer:

a. First-fit:
b. 212K is put in 500K partition c. 417K is put in 600K partition
d. 112K is put in 288K partition (new partition 288K = 500K − 212K) e. 426K must wait f. Best-fit:
g. 212K is put in 300K partition h. 417K is put in 500K partition i. 112K is put in 200K partition j. 426K is put in 600K partition k. Worst-fit:
l. 212K is put in 600K partition m. 417K is put in 500K partition
n. 112K is put in 388K partition o. 426K must wait Best-fit: 算法充分利用了内存空间。

####8.9 考虑一个分页系统在内存中存储着一张页表。a.如果内存的查询需要 200 毫秒,那么一个分页内存的查询需要多长时间?b.如果我们加上相关联的寄存器,75%的页表查询可以在相关联的寄存器中找到,那么有效的查询时间是多少?(假设如果入口存在的话,在相关的寄存器中找到页表入口不花费时间)

  1. 一次页表访问需要先查找页表,再查找内存中的字。200*2=400ns
  2. 0.75*200+0.25*200*2=250ns