5.2 段式存储管理方案
- 设计思想用户进程地址空间:按程序自身的逻辑关系划分为若干个程序段,每个段都有一个段名
- 内存空间被动态划分为若干长度不相同的区域,称为物理段,每个物理段由起始地址和长度确定
- 内存分配:以段为单位进行分配,每段在内存中占据连续空间,但各段之间可以不相邻。其实就是将程序分为若干段,每段占用一块内存空间。
- 逻辑地址
- **说明:**和页式类似,逻辑地址分为段号和段内地址。
不同的是段号和段内地址不是自动划分的。看个例子:
- **说明:**同样的,和页式类似,每个段的位置都不一样或不连续。而我们这里使用段表来将逻辑段号和物理内存映射起来。其中段表包含长度和段起始地址。
相关数据结构及地址转换
- 段表
- 每项记录了段号,段首址和段长之间的关系
每个进程一个段表,存放在内存
段表起始地址保存在何处? - 物理内存管理
我们可以使用不等长的分配方案进行管理 - 地址转换(硬件)
**cpu
**取到逻辑地址,用段号查段表,得到该段在内存的起始地址,与段内偏移地址计算出物理地址
5.3 段页式存储管理方案
- 背景
综合页式、段式方案的优点,克服二者的缺点 - 思想
用户进程划分:先按段划分,每一段按页面划分
逻辑地址: - 内存划分:同页式存储管理方案
内存分配:以页为单位进行分配 - 数据结构及有关操作
段表:记录了每一段的页表起始地址和页表长度
页表:记录了逻辑页号与页框号对应关系,每一段有一张页表,一个进程有多个页表
空闲区管理:同页式管理
内存分配、回收:同页式管理 - 地址转换
由硬件支持
5.4 小结
六、交换技术
6.1 内存不足时如何管理
即如何在一个较小的物理内存空间中运行一个会占用较大地址空间的进程?
6.2 内存“扩充”技术
- 内存紧缩技术(例如:可变分区。即有时候可以使用内存紧缩技术来满足进程所需内存),但是这种技术一般不能解决问题
- 覆盖技术(
overlaying
) - 交换技术(
swapping
) - 虚拟存储技术(
virtual memory
)
6.3 覆盖技术
- 解决问题:程序大小超过物理内存总和
- 程序执行过程中,程序的不同部分在内存中相互替代。
- 按照其自身的逻辑结构,将那些不会同时执行的程序段共享同一块内存区域
- 要求程序各模块之间有明确的调用结构
- 程序员声明覆盖结构,操作系统完成自动覆盖
- 这种技术主要用于早期的操作系统,现在使用不多。
6.4 交换技术
- 设计思想
内存空间紧张时,系统将内存中某些进程暂时移动到外存,把外存中某些进程交换进内存,占据前者所占用的区域(进程在内存与磁盘之间的动态调用)。 - 讨论:实现时遇到的问题
进程的哪些内容要交换到磁盘?会遇到什么困难?
在磁盘的什么位置保存被换出的进程?
交换时机?
如何选择被换出的进程?
如何处理进程空间增长? - 哪些内容要交换到磁盘?会遇到什么困难?
- 1、运行时创建或修改的内容:栈和堆
2、交换区:一般系统会指定一块特殊的磁盘区域作为交换空间,包含连续的磁道,操作系统可以使用底层的磁盘读写操作对其高效访问。
3、何时需要发生交换?只要不用就换出;内存空间不够或有不够的危险时换出,一般与调度器结合使用
4、考虑进程的各种属性;不应换出处于等待I/O状态的进程
进程空间增长的困难及解决
- **说明:**这里给出了两种解决方案,一种是左边的为栈预留一部分空间;一种是右边的让数据区和栈去同向增长,即在一个预留区中增长。
七、虚拟存储技术
- 所谓虚拟存储技术是指:当进程运行时,先将其一部分装入内存,另一部分暂留在磁盘,当要执行的指令或访问的数据不在内存时,由操作系统自动完成将它们从磁盘调入内存的工作
- 虚拟地址空间即为分配给进程的虚拟内存
- 虚拟地址是在虚拟内存中指令或数据的位置,该位置可以被访问,仿佛它是内存的一部分
- 特点(重点)
- 离散性
- 多次性
- 对换性(交换性)
- 虚拟性
7.1 存储器的层次结构
7.2 虚拟内存与存储体系
- 把内存与磁盘有机地结合起来使用,从而得到一个容量很大的“内存”,即虚拟内存
- 虚存是对内存的抽象,构建在存储体系之上,由操作系统协调各存储器的使用
- 虚存提供了一个比物理内存空间大得多的地址空间,扩大逻辑内存容量
7.3地址保护
- 确保每个进程有独立的地址空间
- 确保进程访问合法的地址范围,即我们需要访问地址越界
- 确保进程的操作是合法的
7.4 虚拟页式(请求页式)(重点)
我们将虚拟存储技术和页式存储管理方案结合起来得到了虚拟页式存储管理系统。具体有两种方式,一是请求调页,二是预先调页。以cpu
时间和磁盘换取昂贵内存空间,这是操作系统中的资源转换技术。
- 基本思想
- 进程开始运行之前,不是装入全部页面,而是装入一个或零个页面
- 之后,根据进程运行的需要,动态装入其他页面
- 当内存空间已满,而又需要装入新的页面时,则根据某种算法置换内存中的某个页面,以便装入新的页面
八、页表及页表项的设计
2.1 页表项设计
- 页表由页表项组成
- 页框号、有效位、访问位、修改位、保护位
页框号(内存块号、物理页面号、页帧号):通过页框号给出具体对应的物理页面 - 有效位(驻留位、中断位):表示该页是在内存还是在磁盘
访问位:引用位。当要使用某个页面时,需要访问位作出相应的记录,表示此页面被访问过
修改位:此页在内存中是否被修改过
保护位:读/可读写
通常,页表项是硬件设计的。
2.2 页表
32
位虚拟地址空间的页表规模?
页面大小为4k
,页表项大小为4
字节,则一个进程地址空间有2^20页。这里首先是虚拟地址空间可以达到2^32字节,这里注意:在二级页表中才可以表示2^32的地址空间,除以页面大小可以得到有多少个页面。而一个页表项可以表示1k的页面,于是页表项就要占用1024页(页表页,就是页表项占用的空间)。
**64**位虚拟地址空间
页面大小为4k,页表项大小为8字节,则页表规模为32000TB。这里没说清楚,到底是几级页表中的结果?
页表页在内存中若不连续存放,则需要引用页表的地址索引表,即页目录。即一个多级页表结构。
2.3 二级页表结构及地址映射
**说明:**这里还是32位的虚拟地址空间。每个进程有一个页目录,根据页目录得到页表地址,然后从页表中的页表项的页框号找到真正的物理内存地址。32位的虚拟地址分为页目录偏移、页表偏移和页内偏移。页目录地址保存在一个寄存器中,根据此地址找到页目录起始地址,然后根据月页目录偏移找到对应的页表地址,根据页表偏移找到页表项,从页表项中取得页框号,然后结合页内偏移找到对应的物理内存。对于二级页表,在32位系统中可以表示4G的虚拟地址空间。如果需要超过4G的虚拟地址空间,则二级页表满足不了。
2.4 I386页目录和页表项
**说明:**总共有32
位地址。
2.5 反转(倒排)页表
- 地址转换
从虚拟地址空间出发:虚拟地址–>查页表–>得到页框号–>形成物理地址,其中每个进程一张表,这样页表会占用很大的空间。注意:反转页表和实际物理地址大小是固定比例的,与进程个数无关。 - 解决思路
从物理地址空间出发,系统建立一张页表
- 页表项记录进程的某个虚拟地址(虚页号)与页框号的映射关系。
- **说明:**系统建立一张页表可以节省很大的空间,这被很多
64
位系统采用,但是每次进行运行都需要查整张表,这样会耗费很大的资源,于是我们采用了一个哈希表,这样查找更快。
2.6 地址转换过程及TLB
**说明:**上图是虚拟地址通过页表和物理地址映射的关系。这个过程是有内存管理单元完成的。
2.6.1 快表(TLB)的引入
问题
页表:两次或两次以上的内存访问。如果是二级页表就要访问两次,四级页表访问四次.cpu的指令处理速度与内存指令的访问速度差异较大,cpu的速度得不到充分利用。
那如何加快地址映射速度,以改善系统性能?这里我们利用程序访问的局部性原理:引入快表(TLB)。
2.6.2 快表
TLB
(Translation Look-aside Buffers
)
在cpu
中引入的高速缓存,可以匹配cpu
的处理速度和内存的访问速度。是一种随机存取型存储器,除连线寻址机制外,还有接线逻辑,能按特定的匹配标志在一个存储周期内对所有的字同时进行比较。- 快表一般称为相连存储器:按内容并行查找
- 保证正在运行进程的页表的子集(部分页表项)
2.6.3 加入TLB后地址转换过程
**说明:**首先根据虚拟地址去查TLB,如果能找到页框号,则直接和偏移结合找到对应的物理内存;如果TLB中没有页框号,则需要去查页表,之后在找到对应的物理内存;在页表中如果对应的页表项无效,则会出现page fault的异常,然后由系统处理之后再进行同样的操作。
2.7 页错误(page fault)
- 又称页面错误、页故障、页面失效
- 地址转换过程中硬件产生的异常
- 具体原因
1、所访问的虚拟页面没有调入物理内存,即缺页异常
2、页面访问违反权限(读/写、用户/内核),比如用户访问内核空间。
3、错误的访问地址,比如
图中标注的位置都是有内容的,如果访问地址指向没有标注(没有内容)的位置,则就是错误的访问地址。
2.8 缺页异常处理
- 是一种页错误
- 在地址映射过程中,硬件检查页表时发现所要访问的页面不在内存,则产生异常–缺页异常
操作系统执行缺页异常处理程序:获得磁盘地址,启动磁盘,将该页调入内存
如果内存中有空闲页框,则分配一个页框,将调入页装入,并修改页表中相应页表项的有效位及相应的页框号
若内存中没有空闲页框,则要置换内存中某一页框;若该页框内容被修改过,则要将其写回磁盘。