004-1内存管理(完)

概述

内存管理的作用

  1. 保证适当数量的进程能够占用可用的处理器时间

内存管理的需求

  • 重定向
  1. 为了使处理器的利用率最大化,将会使用交换技术
  2. 程序换出到磁盘后,下次换入时很难再放到与换出前相同的内存区域
  • 保护
  1. 用户进程不能访问操作系统的任何部分,无论是程序还是数据。
  2. 一个进程中的程序通常不能跳转到另一个进程中的指令。
  3. 若无特别许可,一个进程中的程序不能访问另一个进程中的数据区。
  4. 内存保护需求通常由处理器(硬件)而非操作系统(软件)来满足。
  • 共享
  1. 内存管理系统在不损害基本的内存保护的前提下,必须允许对内存共享区域进行受控访问:
    (1)多个进程正在执行同一个程序时,允许每个进程访问该程序的同一个副本
    (2) 合作完成同一个任务的进程可能需要共享访问相同的数据结构

分区

固定分区

  1. 固定分区: 分区的大小和数目在系统生成阶段已经确定,且无法改变。
  2. 固定分区分为大小相等大小不等两种
  3. 大小相等分区的缺点:
    (1)程序可能因太大而不能放到一个分区中;
    (2)程序太小也会占用一个完整分区,使内存利用率低;
  4. 大小不同的分区只能缓解这两个问题,但不能完全解决
  5. 固定分区会在分区内部产生内部碎片

在这里插入图片描述

  • 放置算法(大小相等):
  1. 只要存在可用分区,进程就能装入分区
  • 放置算法(大小不等):
  1. 把每个进程分配到能够容纳它的最小分区中,即每个分区都维护一个调度队列,用于保护从这个分区换出的进程
    (1)可以保证每个分区内部浪费的空间(内部碎片)最小
    (2)从单个分区的角度来看,这种技术是最优的,但是从整体看却并不是最佳的
  2. 为所有进程只提供一个队列,当需要把一个进程装入内存中时,选择可以容纳该进程的最小可用分区

在这里插入图片描述

  • 固定分区的优缺点:
优点缺点
简单由于分区的数量在系统生成阶段已经确定,因此限制了系统中活动进程的数目
操作系统软件和处理开销小由于分区的大小是在系统生成阶段已经确定,因此无法有效利用分区空间

动态分区

  1. 在动态分区中,分区的大小和数目是可变的
  2. 在内存中形成许多小空洞,称为外部碎片,会使内存利用率降低

在这里插入图片描述

  • 压缩技术:
  1. 定义: 移动进程,使得进程占用的空间连续,从而使所有可用空间连成一片
  2. 压缩能够克服外部碎片,但压缩过程非常费时,且会浪费处理器时间
  3. 压缩需要具有动态重定位能力: 把进程从内存中的一块区域移动到另一块区域,且不会使进程中的内存访问失效
  • 放置算法:*
  1. 最佳适配: 选择与要求大小最接近的块
  2. 首次适配: 从头开始扫描内存,选择大小足够的第一个可用块
  3. 下次适配: 从上一次放置的位置开始扫描内存 选择下一个大小足够的可用块
  1. 首次适配算法不仅是最简单的,通常也是最好和最快的
  2. 下次适配常常会在存储空间的尾部分配内存,使得尾部大的空闲存储块,分裂成小碎片
  3. 最佳适配算法性能是最差的,会使内存中很快形成许多小到无法满足任何内存请求的小块
  4. 内存压缩的频繁度:最佳适配算法最频繁、下次适配次之、首次适配算法最不频繁

在这里插入图片描述

  • 内存回收
    在这里插入图片描述
  1. (a):将两个分区合并,修改前一分区页项的大小
  2. (b):将两个分区合并,修改后一分区页项的首地址和大小
  3. (c): 将三个分区合并,修改前一分区表项的大小
  4. (d):为回收区单独建立一个新表项

伙伴系统

在这里插入图片描述

重定位

  1. 交换技术压缩技术会使进程在内存中位置的改变,因此需要重定位技术保证位置改变后内存访问能正常进行
地址类型含义
逻辑地址由程序产生的与段相关的偏移地址部分
相对地址逻辑地址的特例,它是相对于某些已知点(通常是程序的开始处)的存储单元的地址
物理地址(绝对地址)数据在内存中的实际位置
  1. 在执行对内存的访问之前必须将逻辑地址转换为物理地址
  2. 把相对地址转换为物理地址需要是一种硬件机制
  • 重定向的实现:
    在这里插入图片描述
  1. 使用相对地址的程序加载到内存中,进程的所有内存访问都是相对于程序的起始点
  2. 基址寄存器存放程序在内存中的起始地址,界限寄存器指出程序的终止地址
  3. 每次移动进程的位置时,必须重新设置基址寄存器和界限寄存器的值

分页

  1. 页框: 内存被划分为固定且大小相等的块,且块的大小比较小
  2. 页: 每个进程也被分成和页框同样大小的块
  3. 每个进程中在内存中浪费的空间,仅是进程最后一页的一小部分形成的内部碎片,没有外部碎片
  4. 一个进程的不同页可以不连续

在这里插入图片描述

  • 逻辑地址转物理地址:
  1. 在分页式内存管理系统中:逻辑地址 = 页号 + 页中的偏移量
  2. 操作系统为每个进程维护了一个页表:页表:给出了该进程的每页对应页框的位置
  3. from 逻辑地址(页号 + 页内偏移) to 物理地址(页框号 + 页内偏移)

在这里插入图片描述

分段

  1. 把程序和与其相关的数据划分到几个段中,段的大小不需要相等
  2. 逻辑地址 = 段号 + 偏移量
  3. 在分段方案中,一个程序可以占据多个分区,并且这些分区可以是不连续的
  4. 分段系统中没有内部碎片,但会产生外部碎片,由于进程被分成多个小段,因此外部碎片也会很小
  5. 分段式内存管理系统中段和段之间可以离散,但是每一段内需要连续空间
  • 逻辑地址转物理地址:
  1. 每个进程都有一个段表,系统也会维护一个内存中的空闲块列表
  2. 每个段表项必须给出相应段在内存中的起始地址,还必须指明段的长度,以确保不会使用无效地址

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_46427273

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值