⑴ 内存管理
在一段时间内,程序的执行仅限于某个部分,相应地,它所访问的存储空间也局限于某个区域。
局部性原理的 分类 :
将编译后的目标模块装配成一个可执行程序。
可执行程序以 二进制可执行文件 的形式存储在磁盘上。
链接程序的 任务 :
程序的链接,可划分为:
重定位 :将逻辑地址(相对地址)转换为物理地址(绝对地址)的过程。
物理地址 = 逻辑地址 + 程序在内存中的起始地址
程序的装入,可划分为:
任何时刻主存储器 最多只有一个作业 。
每个分区 大小固定不变 :分区大小相等、分区大小不等。
每个分区可以且 仅可以装入一个作业 。
使用 下限寄存器 和 上限寄存器 来保存当前作业的起始位置和结束位置。
使用 固定分区说明表 区分各分区的状态。
分区 大小不是预先固定的 ,而是按作业(进程)的实际需求来划分的。
分区 个数也不是预先固定的 ,而是由装入的作业数决定的。
使用 空闲分区表 说明空闲分区的位置。
使用 空闲分区链 说明空闲分区的位置。
首次适应算法的 过程 :
外部碎片:空闲内存 没有在 分配的 进程 中。
内部碎片:空闲内存 在 分配的 进程 中。
从 上次找到的 空闲分区的 下一个 空闲分区开始查找。
优点:空闲区分布均匀、查找开销较小。
缺点:缺乏大空闲区。
最佳适应算法的 过程 :
优点:提高内存利用率。
注意点:每次在进行空闲区的修改前,需要先进行 分区大小递增 的排序。
页 :将一个 进程 的 逻辑地址空间 分成若干个 大小相等 的 片 。
页框 :将 物理内存空间 分成与页大小相同的若干个 存储块 。
分页存储 :将进程的若干 页 分别装入多个 可以不相邻 的 页框 中。
页内碎片 :进程 最后一页 一般装不满一个页框,形成 页内碎片 。
页表 :记录描述页的各种数据,实现从 页号 到 页框号 的映射。
注意: 页内偏移量 的单位是 字节 。
分页地址变换指是: 逻辑地址 通过 地址变换机构 变换为 物理地址 。
分页地址变换的 过程 :
操作系统在修改或装入页表寄存器的值时,使用的是 特权级 指令。
页大小:512B ~ 4KB,目前的计算机系统中,大多选择 4KB 大小的页。
页大小的 选择因素 :
快表也称为“转换后援缓冲”,是为了提高CPU访问速度而采用的专用缓存,用来存放 最近被访问过的页表项 。
英文缩写:TLB。
组成: 键和值 。
在TLB中找到某一个页号对应的页表项的百分比称为 TLB命中率 。
当 能 在TLB中找到所需要的页表项时:
有效访问时间 = 一次访问TLB 的时间 + 一次访问内存 的时间(访问内存读写数据或指令)
当 不能 在TLB中找到所需要的页表项时:
有效访问时间 = 一次访问TLB 的时间 + 两次访问内存 的时间(一次访问内存页表,一次访问内存读写数据或指令)
将页表再分页,形成两级或多级页表,将页表离散地存放在物理内存中。
在进程切换时,要运行的进程的页目录表歧视地址被写入 页表寄存器 。
在二级分页系统中,为页表再建立一个页目录表的目的是为了能在地址映射时得到页表在物理内存中的地址,在页目录表的表项中存放了每一个 页表 在物理内存中所在的 页框号 。
虚拟存储器 :是指具有 请求调入功能 和 置换功能 ,能 从逻辑上对内存容量进行扩充 的一种存储系统。
请求调入 :就是说,先将进程一部分装入内存,其余的部分什么时候需要,什么时候请求系统装入。
置换 :如果请求调入时,没有足够的内存,则由操作系统选择一部分内存中的进程内容移到外存,以腾出空间把当前需要装入的内存调入。
为了实现请求分页,需要:
保证进程正常运行的所需要的最小页框数。
最小页框数与进程的大小没有关系,它与计算机的 硬件结构 有关,取决于 指令的格式、功能和寻址方式 。
内存不够时,从进程本身选择淘汰页,还是从系统中所有进程中选择?:
采用什么样的算法为不同进程分配页框?:
常用的两种 置换策略 : 局部置换 和 全局置换 。
从分配给进程的页框数量上看,常使用的两种 分配策略 : 固定分配 和 可变分配 。
用新调入的页替换 最长时间没有访问 的页面。
找到 未来最晚被访问 的那个页换出。
,P为缺页率。
有效访问时间与缺页率成 正比 ,缺页率越高,有效访问时间越长,访问效率越低。
工作集 :某段时间间隔里,进程实际要访问的页的集合。
引入工作集的 目的 :降低缺页率,提高访问内存效率。
抖动 :运行进程的大部分时间都用于页的换入换出,几乎不能完成任何有效果工作的状态。
抖动的 产生原因 :
抖动的 预防方法 :
在分段存储管理的系统中,程序使用 二维 的逻辑地址,一个数用来表示 段 ,另一个数用来表示 段内偏移量 。
引入分段的 目的 :
引入分段的 优点 :
进程的地址空间被划分成 若干个段 。
每个段定义了一组逻辑信息,每个段的大小由相应的逻辑信息组的长度确定, 段的大小不一样 ,每个段的逻辑地址从0开始,采用一段 连续的地址空间 。
系统为每个段分配一个 连续的物理内存区域 ,各个 不同的段可以离散 地放入物理内存不同的区域。
系统为 每个进程建立一张段表 ,段表的每一个表项记录的信息包括: 段号、段长和该段的基址 ,段表存放在内存中。
分段的 逻辑地址结构 :
段表是由操作系统维护的用于支持分段存储管理 地址映射 的数据结构。
每个进程有一个段表,段表由段表项构成。每个段表项包括: 段号、段长(段的大小)和该段的基址(段的起始地址) 。
若已知逻辑单元的地址为 S:D (段号:段内偏移量),求相应物理地址的步骤如下:
相同点 :分页和分段都属于 离散 分配方式,都要通过数据结构与硬件的配合来实现 逻辑地址到物理地址 的映射。
不同点 :
将用户进程的逻辑空间 先划分为若干个段 , 每个段再划分成若干个页 。
进程以页为单位在物理内存中 离散 存放,每个段中被离散存放的页具有 逻辑相关性 。
为了实现地址映射,操作系统为 每个进程建立一个段表 ,再为 每个段建立一个页表 。
进程段表的段表项组成:
满足以下条件的两个块称为 伙伴 :