本文最后更新于1655天前,其中的信息可能已经有所发展或是发生改变。
2020年3月30日
16:24
4.1 存储器的层次结构
-
- 主存储器(简称内存)
- 作用:保存进程运行时的程序和数据。
- 寄存器和高速缓存
- 作用:缓和内存的访问速度与CPU指令执行速度不匹配的矛盾。
- 磁盘缓存
- 作用:缓和磁盘I/O速度与内存的访问速度不匹配的矛盾。
- 主存储器(简称内存)
对用户程序的处理步骤:
4.2 程序的装入和链接
-
- 对用户程序的处理步骤:
-
- 物理地址(绝对地址):计算机内存单元 的真实地址。
- 内存空间:物理内存是各程序共享的物 质基础,由0~(m-1)个物理地址组成。
- 逻辑地址(相对地址):用户的程序地址。
- 逻辑空间:程序地址均从“0”开始。
- 程序的装入
装入方式 | 缺点 | 优点 | |
绝对装入方式 (Absolute Loading Mode) | 装入模块被装入内存后,程序中的逻辑地址与实际物理地址完全相同。 | 缺点:只适用于单道系统;要求程序员熟悉内存的使用情况等。 | 是CPU执行目标代码快 |
可重定位装入方式 (Relocation Loading Mode) | 1)程序重定位之后就不能在内存中搬动了;
2)要求程序的存储空间是连续的,不能把程序放在若干个不连续的区域中。 |
无需硬件支持 | |
动态运行时装入方式(Denamle Run-time Loading) | 需要硬件支持。 | 1)目标模块装入内存时无需任何修改,因而装入之后再搬迁也不会影响其正确执行,这对于存储器紧缩、解决碎片问题是极其有利的;
2)一个程序由若干个相对独立的目标模块组成时,每个目标模块各装入一个存储区域,这些存储区域可以不是顺序相邻的,只要各个模块有自己对应的定位寄存器就行。 |
绝对装入方式 (Absolute Loading Mode)问题:
多道程序环境下,逻辑空间中的逻辑地址和 内存空间中的物理地址不一致,如何解决?
解决方案: 借助于地址映射功能进行转换。 对地址部分的调整过程,称为重定位。
重定位的类型
类型 | 映射时间 | 特点 |
静态重定位 | 装入内存时,地址映射一次完成 |
|
动态重定位 | 执行期间,地址映 射由“硬件地址变 换机构”动态完成 |
|
-
- 程序的链接
- 静态链接方式(Static Linking)
解决两个问题:
-
- 修改相对地址
- 变换外部调用符号
-
- 装入时动态链接(Load time Dynamic Linking)
将几个目标模块装入内存时边装入边链接。
优点:
-
- 便于修改和更新。
- 便于实现对目标模块的共享
- 运行时动态链接(Run-time Dynamic Linking)
将某些目标模块的链接,推迟到执行时才进行。
优点:
-
- 加快程序的装入过程。
- 节省内存空间。
4.3 连续分配方式
4.3.1 单一连续分配
-
- 基本思想:
- 内存划分为:系统区和用户区
- 只能用于单用户、单任务的操作系统中
- 特点:
- 方法简单,易于实现
- 单道程序: 内存和CPU利用率低,难于实现共享
- 基本思想:
4.3.2 固定分区分配
-
- 基本思想:
- 把内存用户空间划分为若干个固定大小的分区; 每个分区中只装入一道作业。
- 划分分区的方法:
- 分区大小相等
- 分区大小不等
- 具体实现:
- 将分区按大小排队
- 建立分区使用表 表项包括:
- 分区号
- 分区起始地址
- 分区大小
- 分区状态
- 当程序装入时,由内存分配程序检索分区使用表
- 若找到符合要求的分区,则完成内存分配,并进行标记;
- 若未找到,则拒绝内存分配。
- 缺点:
- 基本思想:
内碎片问题;限制了并发执行的程序数目
4.3.3 动态分区分配
-
- 基本思想:
- 作业装入时,根据实际需要和内存空间的使用 情况进行动态分配。
- 特点:
- 分区个数、分区大小不固定。
- 分区分配中的数据结构
- 空闲分区表、已分配分区表
- 空闲分区链
- 基本思想:
-
- 分区分配算法:
算法思想: | 优点 | 缺点 | |
首次适应算法 |
空闲分区表或空闲分区链按照分区起址递增的次序排序。顺序查找,若找到第一 个大小满足要求的空闲分区,则从中划出一块 内存空间分配给作业;若未能找到,则此次内存分配失败。 | 高址部分的大的空闲分区得到保留,为大作业的内存分配创造了条件; |
|
循环首次适应算法 | 从上次分配的空闲区位置之后开始查找。若找到一个满足要求的空闲分区,则从中划出一块内存空间分配给作业。若最后一个 空闲分区大小仍不能满足要求,则返回到第一 个空闲分区继续查找。 |
|
高址部分的大空闲分区被分小,使得大作业进入无法分配内存; |
最佳适应算法 | 从满足要求的、最小的空闲分区中划出一块空间分配给作业。要求空闲分区表或 空闲分区链按照分区容量递增的次序排序,顺 序查找第一个满足要求的空闲分区。 | 第一次找到的空闲分区是大小最接近待分配内存作业大小的; | 产生大量难以利用的外部碎片。 |
最坏适应算法 | 从满足要求的、最大的空闲分区中划 出一块空间分配给作业。要求空闲分区表或空闲 分区链按照分区容量递减的次序排序。 | 查找速度快,分配后剩下的可用空间较大 | 一段时间后会缺乏较大空闲区。 |
快速适应算法 | 将空闲分区按照进程常用的空间大小 进行分类。分配时,根据进程长度,寻找到能容 纳它的最小空闲区链表,并取下第一块进行分配。 | 查找效率高 | 分区归还主存时算法复杂 |
-
- 分区分配操作:
- 分配内存
- 回收内存
- 分区分配操作:
内 存 分 配 流 程
4.3.4 可重定位分区分配
-
- 动态重定位的引入:
- 由于经过紧凑后的用户程序在内存中的位置发生 了变化,所以必须对发生移动的程序和数据进行重定位。
- 动态重定位的实现:
- 动态重定位的引入:
-
- 动态重定位分区分配算法:
4.3.5 对换(Swapping)
-
- 对换(Swapping)的引入:
- 整体对换:以进程为单位的对换,用于分时 系统
- 部分对换:以“页”或“段”为单位的对换, 支持虚拟存储系统
- 对换空间的管理:
- 外存划分:
- 文件区:存放文件,采用离散分配方式,管理目标是提高文件存储空间的利用率。
- 对换区:存放从内存换出的进程,采用连续 分配方式,目标是提高进程换入和换出的速度。
- 外存划分:
- 进程的换出与换入:
- 进程的换出:
- 对换(Swapping)的引入:
选择处于阻塞状态且优先级最低的进程;启动磁盘,将该进程的程序和数据传送到磁盘的对换区;回收 进程内存空间,修改PCB。
-
- 进程的换入:
系统定时查看所有进程的状态;找出“就绪”状态 但已换出的进程;
将其中换出时间最久的进程换入内存。
点击数:122