本章节目录如下
1. 存储器的层次结构
1.1 存储器的层次结构
1.2 存储器的局部性原理
定义:在一段较短时间里,程序的执行仅限于某个部分,相应的它所访问的存储空间也局限于某个区域。
局部性原理分为时间局部性和空间局部性。
时间局部性:某条指令一旦执行,不久后该指令可能再次执行
空间局部性:一旦程序访问了某个单元,不久后附近的存储单元也将被访问
2. 程序的链接和装入
2.1 程序的链接
定义:将编译后的目标模块装配成一个可执行程序
程序的链接分为静态链接和动态链接
静态链接:程序运行前完成。程序运行前,用链接程序将目标模块链接成一个完整的装入模块。(运行速度快)
动态链接:程序运行时完成。可将某些目标模块的链接推迟到这些模块中的函数被调用执行时才进行。(节省空间)
2.2 程序的装入
2.3 程序装入的三种方式
2.3.1 方式一:绝对装入方式
编译时产生物理地址的目标代码
2.3.2 方式二:可重定位装入方式(静态重定位)
编译时是地址是逻辑地址,装入时通过重定位转换为物理地址
2.3.3 方式三:动态运行时装入(动态重定位)
程序执行时通过重定位转换为物理地址
3. 连续分配存储管理方式
3.1 单一连续分配
任何时刻主存储器最多只有一个作业
3.2 固定分区分配
每个分区大小是预先固定的,大小可以不相同,每个分区仅可以装入一个作业
3.3 动态分区分配
分区大小不是预先固定的,而是按作业的实际需求来划分的
分区的个数也不是预先固定的,而是由装入的作业数目来决定的
4. 基于分页存储管理方式
4.1 分页存储管理的基本原理
4.1.1 分页存储管理中的相关名词
页:将一个进程的逻辑地址空间分成若干个大小相等的片
页框:将物理内存空间分成与页大小相同的若干个存储块
分页存储:将进程中的若干页分别装入多个可以不相邻的页框中
页内碎片:进程最后一页一般装不满一个页框,形成页内碎片
页表:实现从页号到页框号的映射
4.1.2 分页地址变换过程
1. 进程执行,PCB中页表起始地址和页表长度送CPU的页表寄存器
2. CPU访问某个逻辑单元A
3. 由分页地址变换硬件自动将A分为页号和页内偏移两部分
4. 由硬件检索页表,得到A所在的页对应的页框号
5. 页框号和页内偏移地址送物理地址寄存器,计算物理地址。
物理地址=页框大小*页框号+页内偏移量
4.2 快表
4.2.1 定义
快表也叫“转换后援缓冲”,是为了提高CPU访问速度而采用的专用缓存,用来存放最近被访问过的页表项。
4.2.2 快表情景下的地址变换过程
1. CPU产生分页的逻辑地址页号和页内偏移地址后,将页号提交给快表
2. 查找快表,如果找到页号,得到该页所对应的页框号;否则,继续查找内存页表,得到页框号
3. 如果查找的页表项不在快表中,访问完内存页表后,把该页表项写到快表中
4.3 两级和多级页表
将页表再分页,形成两级或多级页表,将页表离散地存放在物理内存中
5. 基本分页的虚拟存储系统
5.1 虚拟存储器
虚拟存储器是指具有调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。
请求调入:先将进程的一部分装入内存,其余部分在需要的时候请求系统装入
置换:如果请求调入时,没有足够的内存,则由操作系统选择一部分内存中的进程移到外存,
以腾出空间把当前需要装入的内存调入。
特点是:
1. 离散性,实现虚拟存储管理的基础
2. 多次性
3. 对换性
4. 虚拟性,实现虚拟存储系统的最重要目标
优点是:
1. 提高内存利用率
2. 提高多道程序度
3. 把逻辑地址空间和物理地址空间分开
5.2 请求分页系统
请求分页系统是最基本、最常用的虚拟存储系统的实现方式
5.2.1 请求分页中的硬件支持
为了实现请求分页,需要特殊的页表、缺页异常机构和支持请求分页的地址变换机构
缺页异常机构:在访问内存过程中发现缺页时产生缺页异常信号
地址变换:
1. 分页地址变换机构计算出页号和页内偏移地址
2. 查找快表,如果找到页号,读出页框号,计算物理地址
3. 若快表无该页信息,转到内存页表中查找页表,如果该页已调入,读出页框号,计算物理地址
4. 如果该页尚未调入内存,则产生缺页异常,请求调入该页,修改页表,重新执行因缺页被中断的指令
5.2.2 页分配策略
最少页框数:保证进程正常运行所需要的最少页框数
最少页框数与进程的大小没有关系,它与计算机的硬件结构有关, 取决于指令的格式、功能和寻址方式。
在基于分页的虚拟存储系统中,常采用两种置换策略:局部置换和全局置换策略
在请求分页系统中,从分配给进程的页框数量上来看,可以采用固定分配和可变分配策略
5.2.3 页置换算法
定义:页置换算法就是从内存页中选择换出页的算法
分为三种:
1. 最佳置换算法:选择以后永远不会被访问的页或者在未来最长时间内不再被访问的页作为换出页
2. 先进先出置换算法FIFO:为每个页记录该页调入内存的时间,选择换出页时,选择进入内存时间最早的页
3. 最近最久未使用置换算法LRU:选择最近最久未使用的页换出(用一个字段记录一个页自上次被访问以来所经历的时间)
其中,最佳置换算法主要用于理论研究,先进先出置换算法是最简单的页置换算法,最近最久未使用置换算法是实现最佳算法的近似算法。
5.2.4 请求分页系统的性能
1. 缺页率
缺页率对有效访问时间的影响
定义P为缺页率,有效访问时间 = 0.1 + 24999.9*P
有效访问时间和缺页率成正比,缺页率越高,有效访问时间越长,访问效率越低
2. 工作集
工作集:某段时间间隔里,进程实际要访问的页的集合
引入工作集的目的:降低缺页率,提高访问内存效率
3. 抖动
抖动:运行进程的大部分时间都用于页的换入换出,几乎不能完成任何有效果工作的状态
抖动产生的原因:系统中的进程数量太多,每个进程能分配到的页框太少,以至于使该进程运行过程中频繁请求调页。
预防抖动的方法:采取局部置换策略、引入工作集、挂起若干进程
6. 分段存储管理
6.1 分段机制的引入
在分段存储管理的系统中,程序员使用二维的逻辑地址,一个数用来表示段,另一个数用来表示段内偏移。
6.2 分段
1. 进程的地址空间被划分成若干个段。
2. 每个段定义了一组逻辑信息,每个段的大小由相应的逻辑信息组的长度确定,段的大小不一样,每个段的逻辑地址从0开始,采用一段连续的地址空间。
3. 系统为每个段分配一个连续的物理内存区域,各个不同的段可以离散地放入物理内存不同的区域。
4. 系统为每个进程建立一张段表,段表的每一个表项纪录的信息包括段号、段长和该段的基址,段表存放在内存中。
6.3 段表
段表是由操作系统维护的用于支持分段存储管理地址映射的数据结构。
每个进程有一个段表,段表由段表项构成。每个段表项包括段号、段基址(段的起始地址)和段长(段大小)3个部分。
6.4 分页和分段的主要区别
相同点:分页和分段都属于离散分配方式,都要通过数据结构与硬件的配合来实现逻辑地址到物理地址的映射。
不同点:
1. 页是按物理单位划分的,分页的引入是为了提高内存的利用率和支持虚拟存储;而段是按逻辑单位划分的,一个段含有一组意义相对完整的信息,引入分段的目的是为了方便程序员编程。
2. 页的大小是固定的,而段的大小不固定,取决于用户编写的程序
3. 分页的地址空间是一维的,分段的地址空间是二维的。
6.5 分段机制的优点
方便编程、分段共享、分段保护、动态链接,以及动态空间的增长。
6.6 段页式存储管理的基本原理
1. 将用户进程的逻辑空间先划分成若干个段,每个段再划分成若干个页
2. 进程以页为单位在物理内存中离散存放,每个段中被离散存放的页具有逻辑相关性
3. 为了实现地址映射,操作系统为每个进程建立一个段表,再为每个段建立一个页表
4. 进程段表的每一个段表项存放某个段的页表起始地址和页表长度
——本章节介绍完毕