地址转换
:又称为重定位,即是把逻辑地址转换成绝对地址。分为:
静态重定位:在程序装入内存时进行地址转换(由装入程序执行,早期小型OS使用)
动态重定位:才CPU执行程序时进行地址转换(从效率出发,依赖地址转换机构)
存储保护
:为避免主存中的多个进程相互干扰,必须对主存中的程序和数据进行保护。这一功能需软硬件协同完成,CPU检查是否允许访问,不允许则产生地址保护异常,由OS进行相应处理
存储器空间的共享
:多个进程共享主存储器资源,多个进程共享主存储器的某些区域。
主存储器空间的扩充
:把磁盘作为主存扩充,只把部分进程或进程的部分内容装入内存1、对换技术:把部分不允许的进程调出2、虚拟技术:只调入进程的部分内容
固定分区
:支持多个分区、分区数量固定、分区大小固定、可用静态/动态重定位、硬件实现代价低、早期OS采用(产生内部碎片)
动态分区
:按照进程的内存需求来动态划分分区(产生外部碎片)分配算法:最佳适配、首次适配、下次适配
总结:大小不等的固定分区和大小可变的分区技术在内存的使用上都是低效的,前者会产生内部碎片,后者会产生外部碎片。因此需要更加高效的内存分配方法。
原理
分页存储器将主存划分成多个大小相等的页架。
受页架尺寸限制,程序的逻辑地址也自然分成页
不同的页可以放在不同页架中,不需要连续
页表用于维系进程的主存完整性
逻辑地址
:页号+偏移量
页表
:给出了该进程的每一页对应的页框的位置
物理地址
:页框号+偏移量
页的共享
数据共享:不同进程可以使用不同页号共享数据页
程序共享:不同进程必须使用相同页号共享代码页
页式存储管理的地址转换
页式存储管理的地址转换代价页表存放在主存:每次地址转换必须访问两次主存
A、按页号读出页表中的相应页架号
B、按计算出来的绝对地址进行读写
存在问题:降低了存取速度
解决办法:利用Cache存放部分页表
快表
存放在高速缓冲器中的页表部分
快表项:页号,页架号
基于快表的地址转换流程
按逻辑地址中的页号查快表若该页已在快表中,则由页架号和单元号形成绝对地址若该页不在快表中,则再查主存页表形成绝对地址,同时将该页登记道快表中当快表填满后,又要登记新页时,则需在快表中按一定策略淘汰一个旧登记项
页式虚拟存储管理
基本思想
:把进程全部页面装入虚拟存储器,执行时先把部分页面装入实际内存,同时进行必要的页面调出
页式虚拟存储管理的页表
需要扩充页表项,指出:每页的虚拟地址、实际地址、主存驻留标志、写回标志、保护标志、引用标志、可移标识
虚拟页式存储涉及到的软硬件作用:
硬件:地址转换
软件:缺页中断处理
当主存空间已满而有需要装入新页时,页式虚拟存储管理必须按照一定的算法把主存的一些页调出去选择淘汰页的工作称为页面调度选择淘汰页的算法称为页面调度算法页面调度算法如果设计不当,会出现(刚被淘汰的页面立即又要调入,并如此反复)这种现象称为抖动或颠簸
页面调度算法(置换策略):
1、OPT最佳页面调度算法
2、FIFO先进先出页面调度算法总是淘汰最先调入主存的那一页,或者说主存驻留时间最长的那一页(常驻的除外)模拟的是程序执行的顺序性
3、LRU最近最少用页面调度算法淘汰最近一段时间较久未被使用的那一页,即那些刚被使用过的页面,可能马上还要被使用到模拟了程序执行的局部属性,既考虑了循环性又兼顾了顺序性严格实现的代价大(需要维持特殊队列)
4、clock算法页面调入主存时,其引用标志位置1访问主存页面时,其引用位置1淘汰页面时,从指针当前指向的页面开始扫描循环队列:
把所遇到的引用标志位置是1的页面的引用标志清0,并跳过
把所遇到的引用位置是0的页面淘汰,指针推进一步
概念
每个程序和其相关的数据可由若干段组成,每一段都可以从“0”开始编址,段内的地址是连续的分段存储器的逻辑地址由两部分组成:段号+偏移量
与分页的异同
(1)页是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要.段是信息的逻辑单位,它含有一组意义相对完整的信息,分段的目的是为了更好地实现共享,满足用户的需要,简单来说分段,用户自定义,消除了内部碎片,分页,系统完成,用户不可见,消除了外部碎片。
(2)页的大小固定,由系统确定,将逻辑地址划分为页号和页内地址是由机器硬件实现的.而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时根据信息的性质来划分.
基本思想
段式存储管理基于可变分区存储管理的实现,一个进程要占用多个分区硬件需要增加一组用户可见的段地址寄存器(代码段,数据段,堆栈段,附件段),供地址转换使用存储管理需要增加设置一个段表,每个段占用一个段表项,包括:段始址,段限长,已经存储保护,可移动,可扩充等标志位
段的共享
通过不同进程段表中的项指向同一个段基址来实现对共享段的信息必须进行保护,如规定只能读入不能写入,不满足保护条件则产生保护中断
引入分段的好处
方便编程分段共享分段保护动态链接动态增长
分段分页各有好处,分页对程序员是透明的,能提高内存的利用率,而分段对程序员是可见的,能反应程序的逻辑结构,具有处理不断增长的数据结构的能力以及支持共享和保护,结合两者,就产生了段页式存储管理。
基本思想
作业的地址空间首先被分成若干个逻辑分段,每段都有自己的段号,然后将每段分为若干个大小相等的页。
段页式存储管理中,虚拟地址为:段号+页号+偏移量
程序员按照分段系统的地址结构将地址分为段号与段内偏移量,地址转换机构将段内偏移量分解为页号和页内偏移量。
为了实现段页式存储管理,系统为每个进程设置一个段表,包括每段的段号,该段的页表始址和页表长度。每个段有自己的页表,记录段中每一页的页号和存放在主存中的页框号。
每一段不必占据连续的存储空间,可存放在不连续的主存页架中,能够扩充为段页式虚拟存储管理装入部分段,或者装入段中部分页面
地址转换
1、程序执行时,从进程控制块PCB中取出段表始址和段表长度,装入段表寄存器
2、有地址转换机构将逻辑地址自动分成段号、页号和偏移量
3、将段号与段表长度进行比较,若段号大于或等于段表长度,则表示本次访问的地址已越界,产生越界中断
4、将段表始址与段号和段表项长度的乘积相加,便得到该段表项在段表中的位置
5、取出段描述字得到页表始址和页表长度
6、将页号与页表长度进行比较,若页号大于或等于页表长度,则表示本次访问的地址已越界,产生越界中断
7、将页表始址与页号和页表项长度的乘积相加,便得到该页表项在页表中的位置
8、取出页描述字得到该页的页框号9、与偏移量相加得到实际的物理地址