linux 虚拟存储器

上传人:今*** 文档编号:106166703 上传时间:2019-10-14 格式:PPT 页数:27 大小:1.94MB
返回 下载 相关 举报
linux 虚拟存储器_第1页
第1页 / 共27页
linux 虚拟存储器_第2页
第2页 / 共27页
linux 虚拟存储器_第3页
第3页 / 共27页
linux 虚拟存储器_第4页
第4页 / 共27页
linux 虚拟存储器_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《linux 虚拟存储器》由会员分享,可在线阅读,更多相关《linux 虚拟存储器(27页珍藏版)》请在金锄头文库上搜索。

1、虚拟存储管理 虚拟存储器 分区存储管理中的内存扩充 页式虚拟存储管理 段式虚拟存储管理 段页式虚拟存储管理,教学内容,教学要求,掌握虚拟存储器的概念及实现虚拟存储器的条件 充分理解页式、段式、段页式虚拟存储管理的基本原理和地址变换,虚拟存储器,虚拟存储器的定义: 以透明的方式给用户提供一个比实际内存大得多的作业地址空间 它不是实际的物理存储器,是非常大存储器的逻辑模型 实现虚拟存储器必须具备以下条件: 实际内存空间 外存上的内存交换区 虚拟地址 换出、换进机制,分区存储管理中的内存扩充,覆盖技术,覆盖,就是指一个作业的若干程序段共享同一段内存空间 基于以下思想: 一个程序并不需要一开始就把所有

2、部分都装入内存后再执行 把程序划分为若干个功能相对独立的程序段,就可以按照程序的逻辑结构让不会同时执行的程序段共享同一块内存 当程序段的先头程序段部分已经执行结束后,再把后续程序段调入内存覆盖前面的程序段 用户看来,就好像内存扩大了,达到了内存扩充的目的,分区存储管理中的内存扩充,如,作业由程序段A和子程序段B、C、D、E、F组成 内部调用情况如图,覆盖结构如图:,采用覆盖技术后,只需要20+50+40=110K,作业要求的内存空间是:20+50+30+30+20+40=190K,分区存储管理中的内存扩充,交换技术,在多道程序系统中,内存中的作业有的处于运行或就绪态,有的作业处于阻塞态 一般处

3、于阻塞态的作业等待的事件相对较长,如果继续驻留在内存,将是对内存资源的浪费 因此,应该将阻塞态的作业换出内存,将在外存上准备运行的作业调入内存 这种交换可以使系统资源的利用更为有效 交换技术交换的单位是整个作业 交换技术的特点是,对用户的作业没有特别的要求,交换过程对用户是透明的,但需要更多的软件支持,页式虚拟存储管理,提出问题: 页式存储管理要将所有的页面一次性调入主存,当主存空间不足或作业太大时,就会限制作业进入主存运行 请求分页存储的基本原理: 页式虚拟存储管理是将作业信息的副本存放在外存上,当作业被调度运行时,至少要将作业的第一页内容装入内存,在执行的过程当中,访问到不在内存的页时,再

4、把它们调入内存,页式虚拟存储管理,一个运行中的作业既有在内存的部分,也有在外存的部分,系统为了掌握作业的存放情况,必须对页表进行修改。可修改为如下形式:,比较之前的页表,地址变换: 当所访问的页在内存时,其地址变换过程与分页存储管理相同 当所访问的页不在内存时,则应先将该页调入内存,再按与分页存储管理相同的方式进行地址变换 缺页中断:当被访问的页面不在主存时,就产生一个缺页中断,系统调用“调页程序” 从页表项中查出该页在外存的地址 根据该地址将该页调入主存 若主存有空闲存储块,则将调入的页面装入任何一个空闲存储块中,并修改页表相应表项 若主存没有空闲存储块,则必须先淘汰主存中的某一页,若被淘汰

5、的页有修改过,则还要将其写回外存 流程图见教材P120 图6-2,页式虚拟存储管理,页式虚拟存储管理,淘汰算法,缺页中断处理时,如果内存中无空闲块,则需要将内存中的一页调出,称为淘汰 如何从多页中选出一页进行淘汰,就要设置相应的淘汰算法,最佳算法(OPT),该算法选择“在很远的将来才被访问”的页进行淘汰 该算法偏理论,实际上比较难实现,很难预计到哪页才是在很远将来才访问,先进先出算法(FIFO),先进先出算法的实质是,总是选择在内存中驻留时间最长的那一页进行淘汰 理由是:最早调入内存的页,不再被使用的可能性最大,页式虚拟存储管理,最近很久未使用算法(LRU),该算法基于程序执行的局部性原理来考

6、虑,是一种通用的有效算法 该算法选择最近一段时间内最长时间未使用的页进行淘汰 为比较准确选中最近最少使用的页,可以采用栈来记录在内存中的各页使用情况 每访问一页时就调整一次栈,使栈顶总是最近使用的页,栈底总是最近很久未使用的页。每次产生缺页中断时总是淘汰在栈底的页,页式虚拟存储管理,最不经常使用算法(LFU),该算法选择被访问次数最少的页进行淘汰 为实现该算法,需要给每页设置一个访问次数计数器 每访问一次,该页的访问次数计数器增1 每隔一段时间,就对所有页的访问次数计数器清0 当发生缺页中断,需要淘汰在内存中的页时,则选择访问次数计数器的值最小的页进行淘汰 这种算法实现起来不难,但给每页都设置

7、一个计数器的代价比较高,不建议使用,段式虚拟存储管理,基本原理 作业都存放在外存中,当调入运行时,首先把该作业当前需要的若干段调入主存,执行中访问到不在内存的段时,再随时把它们装入内存 段式虚拟存储器为了管理作业在内存与外存上的段,也需要对段表进行扩充,扩充后的格式如下:,比较之前的段表,段式虚拟存储管理,段的动态连接,一个作业由主程序、若干子程序、数据组成 作业运行前,都要经过连接装配,将作业中所有的程序和数据连接装配为一个目标模块 这种作业运行前就已完成连接装配的连接方式称为静态连接 段式存储管理的作业不一定要求进行静态连接,可以使用动态连接 在程序运行开始时,只将主程序段装配好并调入内存

8、,其他各段的装配是在主程序段运行中逐步进行的。每当需要调用一个新段时,再将这个段装配好,并与主程序段连接,段式虚拟存储管理,首先需要区分直接寻址和间接寻址 假定100号单元存放数据800,800号单元存放数据1000 若直接寻址,则指令ADD 100表示取出100号单元的数据800作为操作数,若间接寻址,则指令ADD* 100表示取出100号单元的数据800作为地址,然后取出800号单元的数据1000作为操作数,采用间接寻址时,指令中的间接地址所指示的单元的内容称为间接字 段式虚拟存储管理中,间接字格式如下:,其中,L称为连接标志位。当L=1时,表示该段尚未连接;L=0表示已连接,段式虚拟存储

9、管理,假设分段3要对另一段X产生符号形式的调用CALL X| 在编译时就产生一个间接编址的指令CALL* X| 连接标志位L置为1 地址域指向本段的一个单元3|108 该单元存放代表被调用段的段名 即段内地址的字符串7 “X|” 当分段3执行指令CALL* 3|100时 由于L=1,需要进行动态连接,产生中断 操作系统负责完成对被调用段的查找 若该段不在内存中,必须将其调入内存,并给其分配段号 然后用其段号和段内地址来修改主调段中的连接间接字地址域 并将标志位清0,段式虚拟存储管理,段的共享与保护,把段作为共享和保护的基本单位不仅有实际意义,而且易于实现 可以把几个作业的段表中的某一项都指向主

10、存的同一地址 则主存中以该地址为起始地址的那一段便被共享了 对于同一个共享段,在不同的作业中可以有不同的段号,段式虚拟存储管理,作业1和作业2都使用了cos子程序 但内存中只存放了一个cos段的副本 Cos在作业1中的段号是5,在作业2中的段号是4 但这两个段表项的内存起始地址是同一个物理地址,段页式虚拟存储管理,基本原理 段页式虚拟存储管理仍是将用户的作业按逻辑意义划分为段,每个段再划分为大小相同的页。段页式虚拟地址由三部分组成:,假设地址寄存器的长度是32位,则: 段号S为10位,说明可允许1024段; 页号为10位,说明每段允许1024页; 页内偏移W为12位,说明页的大小为4K,段页式

11、虚拟存储管理,段表、页表和地址变换,为实现段页式管理,系统必须为每一个作业建立一张段表 由于一个段又被分成若干页,所以每个段又必须建立一张页表 这样可以把段中的页变换为内存中的块 页表中也应该有相应的实现缺页中断等功能的表项 但是在段页式管理中,页表不再属于作业而是属于作业的某个段 段表中的段表起始地址指向的应该是属于该段的页表起始地址 段表中的长度项应该是属于该段的页表的长度 页表长度在页的大小确定后由段长决定,段页式虚拟存储管理,段页式管理中段表、页表、内存的关系如图,使用段表和页表来实现虚拟地址到物理地址的变换 地址变换时,根据虚拟地址中的段号查段表,得到相应段的页表起始地址 然后根据页

12、号查页表得到内存块号 由块号和页内偏移形成内存物理地址,段页式虚拟存储管理,在段页式管理中,要对内存单元进行存取,至少要访问内存3次 第1次,由段表控制寄存器得到段表起始地址后访问段表,由此取出该段的页表在内存中的起始地址 第2次,访问页表得到所要访问的内存单元的物理地址 第3次,访问真正需要访问的内存单元 注意:这样程序执行的速度会大大降低 因此,为提高地址变换的速度,可以像页式管理那样使用高速存储器设快表 快表中,存放当前最常用的段号、页号、对应的内存块号,段页式虚拟存储管理,中断处理,段页式虚拟存储管理的软件算法主要集中在: 连接中断、缺段中断、缺页中断的处理上 产生这些中断的时机都是在

13、为访问某一单元二进行地址变换时,段页式虚拟存储管理,段页式虚拟存储管理的优缺点,段页式虚拟存储管理具有段式和页式虚拟存储管理的全部优点 缺点则是增加了硬件成本和软件复杂性、花费大量的处理时间、内存占用量增加(保存各种表格),Linux下内存管理相关的API在stdlib.h头文件中: void *malloc(size_t size);申请一内存 void *calloc(size_t nmemb, size_t size);申请内存,并清零 void free(void *ptr);释放内存 void *realloc(void *ptr, size_t size);调整内存大小 void * alloca(int len)申请空间,由系统自动释放,小 结,虚拟存储管理 页式虚拟存储管理 段式虚拟存储管理 段页式虚拟存储管理,文件管理 文件管理的任务和功能 文件的组织与结构 文件的结构和文件的存取 文件目录与目录文件 文件的共享,预习内容,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号