存储器的层次结构 512KB~8MB 400GB/S 1~8GB 12GB/S CPU Cache RAM 500GB DISK 200MB/S
重定位及其方式 1 逻辑地址(空间相对地址) 2 存储空间(绝对地址) os 目标 源 代码 程 目标 序 代码 逻辑地址空间 名空间 符号名字空间 int a,b; a=10; 逻辑地址空间(编译后目标程序的地址范围) 2 存储空间(绝对地址) 存储空间:所有物理存储单元的集合/物理地址的集合 os 源 程 序 目标 代码 目标 代码 逻辑地址空间 名空间 存储空间
重定位的概念 0000 程序A的代码 . 1000 000 … … … 1100 100 Load R1,106 1102 … 102 1104 1106 1108 物理内存 OS 程序A的代码 000 … 100 102 104 106 108 … Load R1,106 Add R1,108 Store R1,110 234 128 … Load R1,106 Add R1,108 Store R1,110 234 128 1106 1108 1110 逻辑地址 举例:教学计划及其实施
重定位分类:静态重定位 0000 . 1000 1100 1102 1104 1106 1108 物理内存 OS … Load R1,1106 Add R1,1108 Store R1,1110 234 128 加载时定位 程序A的代码 000 … 100 102 104 106 108 … Load R1,106 Add R1,108 Store R1,110 234 128 … Load R1,1106 Add R1,1108 Store R1,1110 234 128
静态重定位特点 优点 缺点 无需硬件支持,OS装载时由软件实现 需要分配一个连续的存储空间 用户需要事先确定所程序所需的存储量 装载后不能在内存中移动
重定位分类:动态重定位 0000 . 1000 1100 1102 1104 1106 1108 物理内存 OS 1000 程序A的代码 重定位寄存器 (位于CPU中) 0000 . 1000 1100 1102 1104 1106 1108 物理内存 OS 1000 程序A的代码 000 … 100 102 104 106 108 … Load R1,106 Add R1,108 Store R1,110 234 128 … Load R1,106 Add R1,108 Store R1,110 234 128 +
动态重定位特点 优点 缺点 不要求分配连续的存储空间,可按页或段分配 用户作业可动态申请附加的存储空间,并可在内存中移动 有利于程序段的共享 需要硬件的支持 实现存储管理的软件算法比较复杂
存储器管理的功能 内存的分配和回收 内存容量的“扩充” 地址转换 存储保护 记录内存使用情况 存储的按需分配 存储的回收 常采用动态重定位,需要硬件支持 存储保护 为了保护区域内信息不被破坏,必须实现存储保护。存储保护的工作必须由硬件和软件配合来实现。
存储分配方式 静态分配 动态分配 采用静态重定位方式 装入时确定其在内存中的位置 运行中不能再申请内存 运行中不能在内存中移动 采用动态重定位方式 运行中可申请内存 可在内存中移动
存储管理中的分配技术 一 连续分区管理 连续分区管理 二 页式管理 三 段式管理 四 段页式管理
存储管理: 连续分配 一道作业的全部内容(程序和数据)装入到内存的一个连续存储区中,作业在执行过程中不会发生内存与外存交换的现象,作业的容量要受到物理内存容量的限制。 属于实存管理技术 四种方案 单道连续区管理 多道固定分区管理 多道可变分区管理 多道可重定位分区管理
1.单道连续区管理 存储管理:连续分配 0000 OS 20KB 用户程序 100KB 需80KB存储空间 256KB 空闲区 一次只能装入一个作业
2.多道固定分区管理 存储管理:连续分配 0000 20KB 40KB 60KB 80KB 100KB 120KB ... 256KB OS OS 8KB 作业1 需14KB 16KB 32KB 作业2 需60KB 64KB 116KB .... 分区大小相等 分区大小不等
2.多道固定分区管理(续) 存储管理:连续分配 需建立固定分区说明表 内零头(碎片)问题 作业J1 14KB 作业J1 14KB 0000 20KB 28KB 44KB 76KB 140KB 256KB OS 16KB 8KB 32KB 64KB 116KB 需建立固定分区说明表 内零头(碎片)问题 作业J1 需14KB 作业J1 14KB 作业J1 14KB 作业J2 60KB 作业J2 60KB 作业J2 需60KB 分区号 起始地址 长度 状态 作业名 1 20KB 8KB 2 28KB 16KB 3 44KB 32KB 4 76KB 64KB 5 140KB 116KB 1 J1 1 J2 物理内存
3.多道可变分区管理(概念) 存储管理:连续分配 内存地址 0000 20KB OS 区大小 14KB J1 14KB 30KB 外零头(碎片) 10KB 72KB J3 需60KB J4 需60KB 已分配区 空闲区
3.多道可变分区管理(数据结构) 方案一:设置两张存储管理表 存储管理:连续分配 大小 位置 状态 14K 20K 已分 空表目 60K OS 0000 20KB 256KB J1 需14KB J5 需20KB J2 需30KB 大小 位置 状态 14K 20K 已分 空表目 60K 64K 124 34K 大小 位置 状态 10K 54K 空闲 空表目 72K 184 10KB 72KB J3 需60KB J4 需60KB 已分分区表UBT 空闲分区表FBT
3.多道可变分区管理(数据结构) 方案二:空闲存储区链 存储管理:连续分配 1 N+2 N个字(已分区) N+2 向前指针 N+2 向前指针 N个字(空闲分区) 向后指针 Free指针 L+2 M+2 N+2
3.多道可变分区管理(回收与合并) 回收可能出现的四种情况 存储管理:连续分配 JobB 回收区 Free1 JobA 回收区 Free2
3.多道可变分区管理(分配算法) 最佳适应算法 最差适应算法 首次适应算法 下次适应算法 存储管理:连续分配 总是找最接近作业大小的区分配 需按分区大小排序 最差适应算法 总是找能装下作业的最大的区分配 易发生大作业不能装入的情况 首次适应算法 按分区起始地址排序 顺序找到第一个满足要求的分区就分 下次适应算法 按分区起始地址排列并构成一个环 每次都从上次分配位置向后找到满足要求的分区分配
4.多道可重定位分区管理 避免出现“内零头”与“外零头” 通过移动已分配区收集零头(需要耗费处理资源) 存储管理:连续分配 4.多道可重定位分区管理 避免出现“内零头”与“外零头” 通过移动已分配区收集零头(需要耗费处理资源) 采用动态重定位方式, 作业在内存中移动后,只要改动重定位寄存器的值即可 分配算法与可变分区基本相同,区别在于“拼接” 拼接的时机 回收时拼接(拼接较频繁) 不能满足分配时拼接(拼接次数较少) 缺点 需要硬件支持 耗费处理机时间
分区的存储保护 界限寄存器方式 处理机中设置上界和下界寄存器,处理机对每一条访存指令中的地址与界限寄存器比较,若不在上/下界间则产生越界中断,禁止访问。 也可用基址/限长寄存器方式实现 OS 下界寄存器 80KB 80KB 168KB Job 上界寄存器 168KB
分区的存储保护 存储保护键 A块 B块 C块 1 1 … 0 1 1 0 1 可实现存/或取的单独保护 可实现多个用户程序间更好的共享内存 1 PSW 存储键 取保护位 程序状态字PSW 1 … 0 1 1 0 1 CPU 内存