用户程序的主要处理阶段 连续分配方式 虚拟存储器的基本特征 分页、分段存储管理技术 存储管理的功能 (1) 内存分配——为每个进程分配一定的内存空间 (2) 地址映射——把程序中所用的相对地址转换成内存的物理地址 (3) 内存保护 (4) 内存扩充 程序的装入和链接 从用户的源程序进入系统到相应程序在机器上运行,所经历的主要处理阶段有 , 编译阶段 ,连接阶段,装入阶段和 运行阶段。 1), 编译程序:将用户源代码编译成若干个目标模块; 2), 链接程序:将一组目标模块及它们所需要的库函数链接在一起,形成一个完整的装入模块 3), 装入程序:将装入模块装入内存。 内存空间(或物理空间、绝对空间)由内存一系列存储单元所限定的地址范围 逻辑地址空间(或地址空间)由程序中逻辑地址组成的地址范围 -相对地址(或逻辑地址) 用户程序经编译之后的每个目标模块都以0为基地址顺序编址,这种地址称为相对地址 -绝对地址(或物理地址) **程序的装入 1.绝对装入方式 { 逻辑地址与实际地址相同 要求程序员熟悉内存的使用情况 通常在程序中采用符号地址 } 2.可重定位装入方式 { 目标模块从0编址,其它地址相对于起始地址计算 重定位:装入时对目标程序中指令和数据的修改过程。地址映射 } 3.动态运行时装入方式 { 在程序执行时将相对地址转换成为绝对地址 允许程序在内存中移动 } 程序的链接 (1)静态链接。 (2)装入时动态链接。 (3)运行时动态链接。 1) 静态链接 :执行前将目标模块和它们的库函数,连接成一个完整的装配模块。 两个问题: 对相对地址修改 变换外部调用标号 2) 运行时动态链接 -连续分配方式 有 4 种 为一个用户程序分配一个连续的内存空间。 分为: 1)单一连续分配 { 内存分系统区和用户区,系统区供os使用 在内存中仅驻留一道程序,整个用户区为一用户独占。 这种分配方式仅能用于单用户、单任务os中. 如:MS-DOS CP/M } 2)固定分区分配 { 最简单的多道程序的存储管理方式 将内存分为几个固定大小的区域,每个区域装入一道作业。 } 3)动态分区分配 { 数据结构 分区分配算法 分配与回收操作 } 4)动态重定位分区分配 系统区 分区1 分区 1 分区2 分区3 分区 2 分区4 分区5 用户区 分区6 分区 3 …… 单一连续分配 固定分区分配(分区相等)固定分区分配(分区不等) 分区分配操作 1)分配内存 { 设请求的分区大小:u.size 设空闲分区大小: m.size 不可再切割的剩余分区大小:size 如果m.size- u.size≤ size将整个分区分配给请求者,否则剩余部分留在空闲分区链(表)中。 将分区的首址返回给调用者 } 2)回收内存 { 当进程释放内存时,系统根据回收区的首值,从空闲区链(表)中找到相应的插入点,回收区可能出现四种情况: (1)与插入点的前一个空闲区F1相邻接。 (2)与插入点的后一空闲分区F2相邻接。 (3)同时与插入点的前、后两个分区邻接。 (4)既不与F1邻接,又不与F2邻接。 } **动态重定位的引入 **** 操作系统 碎片:内存中不能被利用的小分区称为“零头”或“碎片”。-------- 用户程序1 10KB 用户程序3 30KB 用户程序6 14KB 用户程序9 26KB 操作系统 分散的小分区拼接成一个大分区的方法,称为“拼接”或“紧凑”--------- 用户程序1 用户程序3 用户程序6 用户程序9 80KB 动态重定位的实现 地址变换过程是在程序执行期间,随着对每条指令或数据的访问自动进行的,故称为动态重定位。 增设硬件机构:重定位寄存器 动态重定位分区分配算法 增加了紧凑功能 设请求的分区大小:u.size 设空闲分区大小: m.size 不可再切割的剩余分区大小:size *对 换* 差不多中级调度 把内存中暂时不能运行的进程或者暂时不用的程序和数据调到外存,把已具备条件的进程或进程所需数据调入内存。 -对换分类- { 整体对换:以整个进程为单位, 又称进程对换。 部分对换: (1)页面对换:以“页” 为单位 (2)分段对换:以 “段”为单位 } 进程对换实现功能: 对换空间的管理 进程的换出 进程的换入 对换空间的管理 文件区 为提高空间利用率采用离散分配方式 对换区 为提高对换速度采用连续分配方式 -外存-