M 用户编程的逻辑地址
U 段式程序设计
M 进程执行的物理地址
K 主存的划分方式
U 存储管理的主要模式
逻辑地址,又称相对地址,即用户编程所使用的地址空间。逻辑地址从0开始编号,有两种形式,一维和二维。二维包括短号和段内地址。
段式程序设计
把一个程序设计分成多个段CS DS SS等
用户可以自己应用段覆盖技术扩充内存空间使用,这是一种程序设计技术不是OS存储管理功能。
物理地址,即实际地址。
多道程序设计利用的是 主存储器的复用。可以按照分区复用,业架复用
存储管理的基本模式:
1.单连续存储管理:一维逻辑地址空间的程序占用一个主存固定分区和可变分区
2.段式存储管理:段二维逻辑地址空间的程序占用多个主存可变分区
3.页式存储管理:一维逻辑地址空间的程序占用多个主存页架区
4.段页式管理:二维程序占用多个主存页架区
U 地址转换
U 存储保护
U 主存分配
U 主存共享
K 虚拟存储
地址转换:重定位,逻辑地址->物理地址。
静态重定位:在程序装入内存时进行地址转换,由装入程序执行,早起小型OS使用。
动态重定位:CPU在执行程序时进行地址转换。
主存空间分配与去配
分配:进程转入主存时,存储管理软件进行具体主存分配操作并设表记录分配情况。
去配:进程归还主存资源,存储管理软件收回存储空间,调整主存分配表。
主存空间共享:多个进程共享主存;多进程共享主存的某些区域
存储保护:避免多个进程相互干扰,必须对主存的程序和数据进行保护
私有主存区的信息,可读,可写。
公共区中的共享信息,根据授权读写。
非本进程信息,不可读写。
存储保护需要软硬件协同完成
主存空间的扩充:把磁盘作为存储扩充
1.对换技术:把部分不运行的进程调出
2.虚拟技术:只调入进程的部分内容。
K 程序执行的局部性原理
M 虚拟存储的概念
U 虚拟存储实现的基本思路
M 实际地址与虚拟地址
虚拟存储的提出:1.主存容量限制,2.程序执行的局部性原理
程序执行的局部性原理:全面考虑各种情况下,程序执行时有互斥性、顺序性和循环性等空间局部性的行为,以及某一阶段时间局部性的行为。
虚拟存储的基本思想:存储管理把进程的全部信息放在辅中,执行时先将其中一部分装入主存,以后根据执行情况随用随调。如果主存没有足够的空间,存储管理暂时把不用的信息调入到辅存。
虚拟存储的实现思路:
建立与自主管理两个地址空间,其中
虚存空间:容纳进程装入
主存实际空间:承载进程执行
对于用户,计算机系统具有一个容量大得多的主存空间,即虚存空间,虚拟存储技术是一种地址空间扩展技术,通常对用户编程时透明的,除非用户需要进行高性能程序设计才考虑虚拟存储技术。
U 存储器的组织层次
U 存储管理设计的存储对象
U Cache及其组织
U 地址转换/存储保护的硬件支持
U 虚拟存储的硬件支持
存储管理涉及的对象
存储管理是OS管理主存的软件部分,
存储管理需对Cache管理,为了获得更好的性能,部分主存数据和代码调入Cache。为了获得更大的虚拟存储空间,存储管理对存放在硬盘、甚至网络硬盘上的虚拟文件进行管理。
Cache
介于CPU主存和主存之间的高速小容量存储器,由SRAM组成,容量较小,但比主
存DRAM技术更加昂贵而快速,接近CPU速度。
CPU往往需要重复读取同样的数据块,Cache的引入与缓存容量的增大,可以大幅
提升CPU的内部读写命中率。
Cache的构成:高速存储器、联想存储器、地址转换部件、替换逻辑
联想存储器:根据内容进行寻址的存储器。
地址转换部件:通过联想存储器建立目录以实现快速地址转换,命中时直接访问
Cache;未命中时从内存读取放入Cache
替换部件:在缓存已满时按一定的策略进行数据的替换,并修改地址转换部件。
L1 Cache{数据缓存和指令缓存};内置;成本最高,对CPU性能影响最大。
L2 Cache 分为内置和外置2种,外置性能低 512KB~8MB
L3 Cache 多为外置,在游戏和服务器领域比较有效;对于更多应用来说,总线
的改善比设置L3 Cache更有利于提升系统性能。
地址转换/存储保护的硬件支撑
基址寄存器->进程i
监狱程序执行与data访问局部性原理,存储管理软件使用cache可大幅提高程序
的执行效率。
动态重定位、存储保护若无硬件支撑在效率上无意义。
无虚拟地址中断,虚拟存储无法实现。
无页面替换等硬件支撑机制,虚拟存储在效率上无意义。
M 单连续分区存储管理
M 单用户连续分区存储管理
M 固定分区存储管理
K 可变分区存储管理
单连续分区存储管理
每个进程占用一个物理上完全连续的存储空间,分为单用户连续分区,固定分区和可变分区。
单用户连续分区存储管理
适用于单用户,单任务操作系统如DOS
主存区域划分为系统区和用户区
设置一个栅栏寄存器界分两个区域,硬件用它在执行时进行存储保护,一般采用静态重定位进行地址转换,硬件实现代价低。
静态重定位: 在装入一个作业时,把该作业中程序的指令地址和data地址全部
转换为绝对地址。
固定分区存储管理的基本思想:
支持多分区,分区数量、大小固定。可用静态重定位,硬件实现代价低,早期OS使用。
固定分区的主存分配:
主存分配表
主存分配与去配
固定方式的地址转换
硬件实现机制与动态重定位
可变分区技术概述:
固定分区不适合大尺寸程序,内存内零头浪费
M 基本思想
M 主存分配表
M 内存分配与去配
M 地址转换/存储保护
M 分区移动技术
可变分区存储管理->按内存需求来动态划分分区
创建一个进程时,根据进程所需主存量,查看主存中是否有足够连续空间,若有
则按需量分割一个分区,若无,则令该进程等待主存资源。
分配表:已分配区、未分配区、地址、长度、标志
内存分配算法
最先适应分配算法,最前面找
邻近适应分配算法,空闲区表组织成循环队列
最优适应分配算法,最小空闲区分配
最坏适应分配算法
内存回收
内存区重新调整
地址转换与存储保护
内存外零头不可避免,最优适配算法最容易产生。解决之道:移动技术(程序浮动技术)
需要动态重定位支撑。
M 页式存储管理的基本思想
U 地址转换思路
M 页式存储管理的空间分配
K 页式存储管理的页共享
基本思想:把主存划分为多个大小相等的页架,受页架尺寸限制,
程序逻辑地址也分不同的页,不同的页可以放在不同的页架中。
页表用于维系进程主存的完整性
页式存储管理的逻辑地址由页号和页单元组成
页式存储管理的物理地址由页架号和单元号组成
地址转换可通过查阅页表完成
页式存储管理的内存分配与去配
可用一张位示图记录主存分配情况
归还的时候把页架1置零
页式存储管理的页共享
Data共享:不同进程可以使用不同页号共享数据页。
Code共享:不同进程必须使用相同的页号共享Code
K 转换代价
M 块表的概念
U 联想存储器
M 页式存储器基于块表的地址转换
转换代价:页表存放主存,每次地址转换需要访问两次主存。
1.查页表,读出页表中的相应页架号
2.按计算出来的绝对地址读写
存在的问题:降低了存取速度。
解决之道:
设置一个专用的高速存储器,用来存放页表的一部分。
快表:存放在高速缓存器中的页表部分。
快表表项:页号、页架号
基于快表的地址转换流程
按逻辑地址中的页号查快表
若该页在快表中,则由页架号和单元号形成绝对地址
若不在快表中,则再查找主存页表形成绝对地址,同时将该页登记到快表中,
快表登记满,则淘汰部分。
多道程序设计下的进程表
进程表中登记了每个进程的页表
进程占有处理器运行时,其页表起始地址和长度送入页表控制寄存器。
M 基本思想
M 页式存储管理的时表
M 地址转换
M 缺页中断的处理流程
基本思想:当装入一个进程时,把全部页面装入虚拟存储器,执行时,把
部分页面装入实际内存,然后根据执行行为,动态调入不在内存中的页,
同时进行必要的页面调出。
现代OS的主流存储管理技术
首次只把进程第一页信息装入主存,称为请求页式存储管理。
页表
每页的实际地址和虚拟地址、
标志:主存驻留标志、写回标志、保护标志、引用标志、可移动标志
页式虚拟存储管理的实现
CPU处理地址
若页面驻留,则获得该块号形成绝对地址,若页不在,则CPU发出缺页中断
OS处理缺页中断
若有空闲页架,则根据辅存地址调入页,
更新页表与快表。
若无空闲页架,则决定淘汰页,调出已修改页,调入页,更新页表与快表。
M 基本概念
M 缺页中断率
M 各类页面调度算法
U 部分页面调度算法的实现
页面调度->当主存空间已满,又需装入新页时,页式虚存管理必须按照一定的
算法,把已在主存中断一些页调出区。
淘汰页的工作->页面调度
相应的算法->页面调度算法
如果设计不当,频繁调入调出,这种现象称为抖动,颠簸
缺页中断频率f=F/A A=S+F
f是衡量存储管理性能和用户编程水平的重要依据。
可用页架数越多A越小
页面大小128
用户编程方式 int a[128][128]
会产生128*128-1次缺页中断
先进先出FIFO页面调度算法
总是淘汰最先调入的那一页,或者驻留时间最长的页,模拟程序执行的顺序
性,有合理性。
最近最少用算法LRU,页面调度算法
淘汰最近一段时间较久未访问的那一页,即那些刚被使用过的页面可能会马上再
次被使用。
模拟了程序执行的局部性,即考虑了循环性又考虑了顺序性。
实现代价大,需维持特殊队列。
LRU算法的模拟实现
每页创建一个引用标志,供硬件使用。
设置一个时间间隔中断,中断时页引用标志置零。
地址转换时,页引用标志值1.
淘汰页面时,从页面引用标志为0的页面中间随机选择
时间间隔多长是一个难点。
最不常用LFU页面调度算法
基于时间间隔中断,给每个页面设置一个计数器。
成本高,硬件大,把页面调度变成了若干序列,并且可以刻画重复性,重复得多,一对循环模拟好。
时钟调度算法
页面调入主存时,其引用标志位置1
访问主存页面时,其引用标志位置1
淘汰页面时,从指针当前指向的页面并开始扫描循环队列,
把所遇到的引用标志是1的清零,并跳过
把所遇到的引用标志是0的页面淘汰掉,指针向前推进。
代价不大,模拟性比LRU好得多。
K 了解MMU Memory Management Unit
U 反置页表及其组成
U 基于反置页表的地址转换
反表的提出:页表在相关硬件机制在地址转换、存储保护、虚拟地址访问
中发挥了关键作用。
为页式存储管理设置专门硬件机构
MMU:CPU管理虚拟存储、物理存储的控制线路,把虚拟存储地址映射为物理地址
,并提供存储保护,必要时确定淘汰页。
反置页表 IPT Inverse Page Table MMU的Data Structure
反置页表的基本设计思想
针对内存中的每个页架建立一个页表,按照块号排序。
表项:正在访问该页架的进程标识、页号、特征位、哈希链指针
原来页表->按页号做索引,记页架号
反置页表->按页架号做索引,记进程号、页号
反置页表的作用:完成内存页架到访问进程的对应,即物理地址到逻辑地址的转换。
反置页表的页表项:
页号:虚拟地址页号
进程标志号:使用该页的进程号
页号+进程号 共同标志一个进程的虚拟地址空间中的一页
标志位:有效、引用、修改、保护、锁定等
链指针:哈希链
基于反置页表的地址转换过程:
MMU通过哈希表把进程标识和虚拟页号转换成一个哈希值,指向一个IPT的一个表
目,MMU遍历哈希链找到所需进程的虚页号,该项的索引就是页架号,通过拼接便可生成物理地址。
若遍历整个IPT中未能找到匹配表项,说明该页不在内存、产生缺页中断,请求操作系统调入。
U 理解段式程序设计
M 基本思想
M 段式存储管理的地址转换
U 理解段式存储管理的段共享
段式程序设计:每个程序由若干个段组成,每一段都可以从“0”开始编址,段内地址连续。
分段存储器的逻辑地由两部分组成:段号、单元号
基本思想:基于可变分区存储管理实现,一个进程占有多个分区。硬件需增加一组用户可见的段地址寄存区。CS、DS、SS、ES供地址转换使用。
存储管理需要增设一个段表,每个段占用一个段表项,包括:段始址、段限长、存储保护标志、可移动标志、可扩充标志
段式存储管理地址转换流程
段的共享:通过不同进程段表的项指向同一个段基址。对共享段信息必须保护。
规定只读,不满足条件OS保护中断。
M 基本思想
M 段表扩充
M 地址转换
基本思想:把进程所有分段都装进辅存中,进程运行时,先把当前所需要的一段
或几段装入内存,在执行过程中,访问到不在主存的段时,在动态掉进调出。
段式虚拟存储管理中,段的掉进调出是由操作系统自动实现的,对用户透明。
与段覆盖不同,它是用户控制的主存扩充,OS不感知。
段表扩充
主存始址+限长 存取权限
辅存始址+限长 扩充位
特征位 00(不在内存)01(在内存) 11(共享段)
M 基本思想
U 段表与页表
U 地址转换
U 段页式虚拟存储管理的地址转换
基本思想:
段式虚存管理基于页式存储管理,
每一段不必占用连续的存储空间,可存放在不连续的主存页架中,能够扩充
为虚拟存储管理。
装入进程的部分段或者装入段中的部分页面。
段表和页表
记录的不再是基址+限长,而是页表始址+限长