用户程序的主要处理阶段
连续分配方式
虚拟存储器的基本特征
分页、分段存储管理技术
存储管理的功能
(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)分段对换:以 “段”为单位
}
进程对换实现功能:
对换空间的管理
进程的换出
进程的换入
对换空间的管理
文件区 为提高空间利用率采用离散分配方式
对换区 为提高对换速度采用连续分配方式
-外存-