【OS】四、存储器管理

1、存储系统的结构

p1

基本概念

  • 逻辑地址
    • 用户程序经过汇编或编译后形成目标代码
    • 目标代码采用相对地址(首地址为0)。
    • 不能用逻辑地址在内存中读取信息。
  • 物理地址
    • 内存中存储单元的地址
    • 直接寻址
  • 名空间
    • 高级语言的源程序,存在于符号名字空间
  • 地址空间
    • 逻辑地址的集合
    • 编译程序生成。
  • 存储空间
    • 主存中物理单元的集合。
    • 单元的编号就是物理地址
    • 大小由主存实际容量决定。
  • 一个编译好的目标程序存在于它自己的地址空间中,运行时才装入存储空间

2、程序的装入和链接

  • 编辑->编译->链接->装入->运行

程序的装入

绝对装入方式

  • 编译程序产生绝对地址的目标代码
  • 逻辑地址与实际内存地址完全相同

可重定位装入方式

  • 引入原因
    • 目标模块得到的是相对地址,与实际的物理地址不同
    • 装入内存时,相对地址需要做出修改以得到实际的物理地址

静态重定位

  • 装入内存时一次完成的,之后不能改变
  • 物理地址=逻辑地址+内存中的起始地址

动态重定位

  • 利用重定位寄存器RR)。
    • 取决于作业分配到的存储空间起始地址

程序的连接

静态链接

  • 目标模块和所需库函数,链接成一个完整的装入模块。
  • 需要解决问题
    • 修改相对地址
    • 变换外部调用符号
  • 存在问题
    • 不方便对目标模块修改和更新
    • 无法对目标模块的共享

动态链接

装入时动态链接

  • 装入内存时再链接。
  • 优点
    • 便于版本修改和更新
    • 实现共享

运行时动态链接

  • 运行时,发现调用的模块尚未装入,由操作系统去找并且装入。
  • 优点
    • 装入快
    • 节省内存

3、连续分配方式

  • 为用户程序分配一个连续的内存空间

单一连续分配

  • 系统区
  • 用户区

分区目的:保护内核。

固定分区

  • n个分区,可同时装入n个作业/任务。
  • 分区大小
    • 不相等时,利用率更高。
  • 内存分配
    • 分区按大小排序。
  • 特点
    • 简单
    • 有碎片(内零头)

可变式分区

数据结构

  • 空闲分区表
  • 空闲分区链

顺序分配法

首次适应算法FF

  • 方法
    • 每次链首开始,找到满足大小的空闲分区
  • 特点
    • 外零头,低地址用得频繁,高地址保留大分区。

循环首次适应

  • 方法
    • 上次分配分区的下一个分区开始查找。
  • 特点
    • 提高了查找速度。
    • 缺乏大的空闲分区。

最佳适应算法BF

  • 要求
    • 分区按大小递增排序,释放时也满足该条件。
  • 方法
    • 从小分区开始找空余最小的分区。
  • 特点
    • 单次最优,总体未必。

最坏适应算法

  • 方法
    • 总是选择最大的分区来分割分配。
  • 特点
    • 缺乏大的空闲分区。
    • 查找效率高。

分区分配

书p4-8

基于索引搜索的动态分区分配算法

快速适应算法(不考)

伙伴系统

  • 方法
    • 内存块的大小为2^k
    • 空闲分区按照大小链接为一个双向空闲链表
  • 优点
    • 分配回收内存快,不会产生很多小碎片。
  • 缺点
    • 产生内部碎片

可重定位分区分配

动态重定位的引入

  • 内零头
    • 分配给作业,但作业不需要的部分。
  • 外零头
    • 太小无法分配给任何作业。
  • 紧凑
    • 分散的小分区合并成一个大分区。

动态重定位的实现

  • 重定位寄存器

4、对换

  • 内存中暂时不能运行的进程或程序/数据,调出到外存。

对换实现

  • 实现三方面的功能
    • 对换空间的管理
    • 进程的换入换出

5、基本分页存储管理方式

  • 连续分配会产生内/外零头
  • 离散分配让程序在内存中不一定连续存放

分页存储管理

    • 将进程的逻辑地址空间分成若干个大小相等的片。
  • 页框
    • 内存空间分成与页面大小相同的若干个存储块。

进程调度时,必须一次性装入所有页。

基本方法

  • 页表
    • 通过页号和块号的对应,建立程序空间到内存空间的映射
      页面大小
  • 太小
    • 内存碎片减小。
    • 页表过长。
  • 太大
    • 太小相反。
  • 标准应该2的幂
    s i z e ∈ [ 512 B , 8 K B ] size\in [512B,8KB] size[512B,8KB]

空间组织
空间

数据结构

  • 页表
    • 每个进程拥有一个页表,放在PCB
    • 存放在主存的系统专用区中,只有系统有权访问。
  • 作业表
    • 整个系统只有一张
    • 记录作业的页表情况
  • 空闲块表
    • 整个系统只有一张
    • 记录主存当前空闲块

组织结构

组织

地址变换(重要)

  • 页表寄存器PTR
    • 存放进程的页表内存中的起始地址
    • 该进程的页表长度

示意图

nat

地址变换过程

  • 将有效地址(相对地址)分为页号和页内地址两部分。

快表

  • 保存当前进程最近访问过的页表项。

两级和多级页表

二级页表

  • 为之建立二级页表,记录被分割的各个页面存储在哪些中。
    二级

多级页表

  • 就是 多级

6、分段存储管理方式

原因

  • 方便编程
  • 信息共享
  • 信息保护
  • 动态增长
  • 动态链接

原理

分段

  • 作业地址空间按逻辑信息的完整性被划分为多个段。
  • 每段有段名段号),从0开始编址。
  • 段内地址空间是连续的
  • 一个作业最大64K个段,每个段最大为64KB
  • 分段管理
    • 管理若干分段组成的作业,按分段来进行存储分配

段表

  • 每个分段分配一个连续的分区
  • 每个进程建立一张段表(放在内存中),每个段占有一个表项,表项纪录该段在内存中的起始地址段长度
  • 可实现从逻辑段物理内存区的映射。

地址变换机构

p117

信息共享

  • 分页系统程序段共享困难。
  • 分段易于实现段的共享和保护

分页共享

  • 程序和数据没有分开

分段共享

share

段页式存储管理方式

  • 分页内存管理效率高,没有外零头,内零头小。
  • 分段符合模块化

段页式存储

  • 先将用户程序分段每段划分为若干,每段有段名
    duanye
  • 段表、段内页表
    段内页表

地址变换方式

  1. 段表寄存器获得进程的段表起始地址,从而找到段表
  2. 找到段表中的页表起始地址,找到页表
  3. 根据指定页号,在页表中找到块号
  4. 用块号加上页内偏移量,形成物理地址
    nat

分页和分段区别

  • 页是信息的物理单位
    • 段是逻辑单位
  • 页的大小固定
    • 段长度不固定,取决于用户程序
  • 分页的作业地址空间是一维的
    • 分段的作业地址空间是二维的
  • 分段比分页更利于信息的共享和保护

习题

题目一

题目二


题目三


题目四

题目五

题目等

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值