分存储器管理
- 格式:docx
- 大小:16.02 KB
- 文档页数:7
虚拟存储器的管理和技术有哪些我们很多的人应该都听说过虚拟存储器,今天,本文为大家带来的是虚拟存储器管理方面的知识,虚拟存储器管理是怎么样的,它又有哪些类型呢。
一、分区式存储管理1、这类型的存储管理方法管理起来不复杂比较的简单,它的不足之处就会会对于内存空间造成大量的浪费,早期的单一用户以及单一任务的控制装置,把内存空间进行划分,形成两个分区,为我们的用户区域以及系统区域。
我们的操作系统则采用的是系统区域;应用程序则使用的是我们的用户区域,同时的可以对用户区域的所有的空间进行利用。
2、为了达到多个程序同时的一起被执行,在我们现代的控制系统里面则加入了分区式的存储方法管理,将内存划分为很多个区域,操作系统使用里面的其中一个区域,所有的剩下的区域则由应用程序进行利用,各个应用程序占据里面的一个或者是几个区域。
3、按照划分区域的空间有没有固定,又能够吧分区式的存储管理划分成为固定区域以及动态区域两个区域。
二、交换技术和分区技术1、按照程序的部分性的为原理,在一个不是很长的时间端里面,程序进行访问的存储器位置占有比较大的比例集聚在存储器位置比较少的空间里面。
交换技术则是采用了程序的部分性原理达到多个任务同时的进行环境存储管理工作。
2、交换的进程里面通过换入以及换出这两个进程构成,换入的进程把外村交换区的数据以及程序代码进行交换到内存里面,换出的进程则是把内存里面的数据进行交换到外村交换里面中去。
3、操作控制装置不会立刻的执行程序代码在外存里面进行保存的工作,同时的把这些过程排到过程请求中的长期调度里面中去,队列里面的一些过程被调进主存里面进行执行,当因为输入以及输出等操作而造成存储器里面没有过程处于准备就绪的情况时,操作装置就会把一些进程交换到外存里面来,同时的排进中期里面中去。
4、交换技术的优势则是将同时运行的进程的数量加大。
不足之处则是换入以及换出的工作把处理机的时间开销加长同时交换的单位是所有的进程地址的容积,并无思考程序运行的进程里面地址访问进行统计的功能。
第十一讲存储器管理之连续分配方式连续分配是指将存储器中的空间按照一定的方式连续划分给进程使用的一种存储器管理方式。
常见的连续分配方式有三种:单一连续分配方式、固定分区分配方式和动态分区分配方式。
单一连续分配方式是最简单的分配方式,每个进程只有一个连续的存储区域。
操作系统将整个存储器分成两部分,一部分为操作系统占用,另一部分为用户程序占用。
优点是实现简单,缺点是无法有效利用存储器空间和不能同时运行多个程序。
2.固定分区分配方式固定分区分配方式是将存储器划分成若干个固定大小的区域,每个区域对应一个作业或进程。
每个进程的大小必须小于等于所分配的存储区域大小。
操作系统为每个进程分配存储空间时,优先从大小与所需存储空间最接近的空闲分区开始分配。
优点是管理简单,缺点是会导致存储空间的浪费和外部碎片的产生。
3.动态分区分配方式动态分区分配方式是将存储器分为多个大小不等的存储块,每个进程可以根据需要分配不同大小的存储块。
当新的进程需要存储空间时,操作系统从存储器的起始地址开始查找,找到第一个可用空闲块,并将其分配给进程。
优点是存储空间利用率高,可以同时运行多个进程,但缺点是会导致内部碎片的产生。
对于动态分区分配方式,还可以采用三种具体的分区算法:a. 首次适应算法(First Fit):从前向后遍历所有空闲分区,找到第一个大小大于或等于所需存储空间的空闲分区进行分配。
优点是速度快,但容易产生较多的碎片。
b. 循环首次适应算法(Next Fit):与首次适应算法类似,但从上一次分配的位置开始查找,减少了空闲分区的时间。
可以避免每次都从头开始,但仍会产生较多的碎片。
c. 最佳适应算法(Best Fit):从所有空闲分区中找到最小且大于所需存储空间的空闲分区进行分配。
优点是最大限度地避免碎片,但速度相对较慢。
综上所述,连续分配方式是一种常见的存储器管理方式。
根据应用场景和需求不同,可以选择合适的连续分配方式来管理存储器,以实现存储空间的高效利用和进程的有效管理。
第十一讲存储器管理之连续分配方式所谓连续分配方式:是指为一个用户程序分配一个连续的内存空间。
又可把连续分配方式分为:单一连续分配,固定分区分配,动态分区分配,动态重定位分区分配,四种方式。
1 单一连续分配(单独分区分配)最简单的一种存储管理方式,但只能用于单用户、单任务的OS中。
概念:单一连续分配就是整个主存区域的用户空间均归一个用户作业使用。
存储管理方法:将内存分为系统区(内存低端,分配给OS用)和用户区(内存高端,分配给用户用)。
其中用户区是指除了系统区外的内存空间,提供给用户程序使用。
采用静态分配方式,即作业一旦进入内存,就要等待它运行结束后才能释放内存。
主要特点:管理简单,只需小量的软件和硬件支持,便于用户了解和使用。
但因内存中只装入一道作业运行,内存空间浪费大,各类资源的利用率也不高。
例子:一个容量为256KB的内存,操作系统占用32KB,剩下224KB全部分配给用户作业,如果一个作业仅需64KB,那么就有160KB的存储空间被浪费。
2 固定分区分配分区分配方式是满足多道程序设计需要的一种最简单的存储管理方法。
2.1 思想:将内存分成若干个分区(大小相等/不相等),除OS占一区外,其余的每一个分区容纳一个用户程序。
这样来实现多道并发。
2.2 分区划分方法:分区大小相等,分区大小不等。
但事先必须确定,在运行时不能改变。
即分区大小及边界在运行时不能改变。
2.3 内存分配:首先:要先建立一张分区说明表或使用表,以记录分区号、分区大小、分区的起始地址及状态(已分配或未分配)。
其次:当某个用户程序要装入内存时,由内存分配程序检索分区说明表,从表中找出一个满足要求的尚未分配的分区分配该程序,同时修改说明表中相应分区的状态;若找不到大小足够的分区,则拒绝为该程序分配内存。
第三:当程序执行完毕,释放占用的分区,管理程序将修改说明表中相应分区的状态为未分配,实现内存资源的回收。
2.4 特点主要特点:管理简单,但因作业的大小并不一定与某个分区大小相等,从而使一部分存储空间被浪费。
分级存储管理的四⼤优点
本篇⽂章将为⼤家详细介绍分级存储管理的优点,⼴⼤读者可以通过此篇⽂章了解到⾃⼰的系统适不适合进⾏分级存储。
希望能对读者有所帮助。
数据分级存储之所以重要,是因为它既能最⼤限度地满⾜⽤户需求,⼜可使存储成本最⼩化。
数据分级存储管理的优点具体表现在:
1.减少总体存储成本
不经常访问的数据驻留在较低成本的存储器中,可综合发挥磁盘驱动器的性能优势与磁带的成本优势。
2.性能优化
分级存储管理可使不同性价⽐的存储设备发挥最⼤的综合效益。
分级存储管理
3.改善数据可⽤性
分级存储管理把很少使⽤的历史数据迁移到辅助存储器中,或归档到离线存储池中,这样就⽆需反复保存,减少了存储的时间;同时提⾼了在线数据的可⽤性,使磁盘的可⽤空间维持在系统要求的⽔平上。
4.数据迁移对应⽤透明
进⾏分级存储管理后,数据移动到另外的存储器时,应⽤程序不需要改变,使数据迁移对应⽤透明。
实验7 分页存储器管理实验性质:验证+设计建议学时:2学时一、实验目的● 学习i386处理器的二级页表硬件机制,理解分页存储器管理原理。
● 查看EOS应用程序进程和系统进程的二级页表映射信息,理解页目录和页表的管理方式。
● 编程修改页目录和页表的映射关系,理解分页地址变换原理。
二、预备知识阅读本书第6章。
了解i386处理器的二级页表硬件机制,EOS操作系统的分页存储器管理方式,以及进程地址空间的内存分布。
三、实验内容3.1 准备实验按照下面的步骤准备本次实验:1. 启动OS Lab。
2. 新建一个EOS应用程序项目。
3.2 查看EOS应用程序进程的页目录和页表使用OS Lab打开本实验文件夹中的memory.c和getcr3.asm文件(将文件拖动到OS Lab窗口中释放即可打开)。
仔细阅读这两个文件中的源代码和注释,main函数的流程图可以参见图16-1。
按照下面的步骤查看EOS应用程序进程的页目录和页表:1. 使用memory.c文件中的源代码替换之前创建的EOS应用程序项目中EOSApp.c文件中的源代码。
2. 右键点击“项目管理器”窗口中的“源文件”文件夹节点,在弹出的快捷菜单中选择“添加”中的“添加新文件”。
3. 在弹出的“添加新文件”对话框中选择“asm 源文件”模板。
4. 在“名称”中输入文件名称“func”。
5. 点击“添加”按钮添加并自动打开文件func.asm。
6. 将getcr3.asm文件中的源代码复制到func.asm文件中。
7. 按F7生成修改后的EOS应用程序项目。
8. 按F5启动调试。
9. 应用程序执行的过程中,会将该进程的二级页表映射信息输出到虚拟机窗口和OS Lab“输出”窗口中,输出内容如图16-2(a)。
10. 将“输出”窗口中的内容复制到一个文本文件中。
图16-2:(a)EOS应用程序进程的二级页表映射信息(b)有应用程序进程时,系统进程的二级页表映射信息图16-2(a)中第一行是CR3寄存器的值,也就是页目录所在的页框号。
计算机与信息工程系实验报告
班级计算机
1001
姓名李双贺时间2011.11.09 地点A504
实验名称存储器管理——动态分区的分配与回收
实验目的
目的是在学习操作系统理论知识的基础上,对操作系统整体的一个模拟。
研究计算机操作系统的基本原理和算法,掌握操作系统的存储器管理的首次适应算法、循环首次适应算法、最佳适应算法的基本原理和算法。
提高运用操作系统知识和解决实际问题的能力;并且锻炼自己的编程能力、创新能力以及开发软件的能力。
使学生掌握基本的原理和方法,最后达到对完整系统的理解。
实验内容
内存调度策略可采用首次适应算法、循环首次适应算法和最佳适应法等,并对各种算法进行性能比较。
为了实现分区分配,系统中必须配置相应的数据结构,用来描述空闲区和已分配区的情况,为分配提供依据。
常用的数据结构有两种形式:空闲分区表和空闲分区链。
为把一个新作业装入内存,须按照一定的算法,从空闲分区表或空闲分区链中选出一个分区分配给该作业。
实验结果。
简述分页存储管理的基本原理分页存储管理是一种常见的虚拟存储器管理技术,它将物理内存划分为固定大小的页框,将逻辑地址空间划分为固定大小的页,实现了逻辑地址和物理地址之间的映射关系。
它的基本原理是将进程的逻辑地址分为页号和页内偏移两部分,通过页表来查找并将逻辑地址映射到物理地址上。
分页存储管理的基本原理包括页表、页表项和地址转换三个重要组成部分。
页表是一个记录逻辑页与物理页对应关系的表格。
每个进程都有自己的页表,页表中的每一项都对应着进程逻辑地址空间的一个页。
页表项记录了逻辑页号和物理页框号之间的映射关系,以及一些控制位信息,如有效位、保护位等。
地址转换是指将逻辑地址转换为物理地址的过程。
当进程访问一个逻辑地址时,操作系统会根据逻辑页号在页表中查找对应的页表项,如果页表项的有效位为1,表示该页表项有效,可以进行地址转换;如果有效位为0,表示该页表项无效,说明该逻辑页还没有被装入内存,需要进行页面置换操作。
如果页表项有效,则将页表项中的物理页框号与页内偏移拼接成物理地址,供CPU访问。
分页存储管理的好处是实现了逻辑地址和物理地址的分离,进程可以使用连续的逻辑地址空间编程,而不需要关心物理内存的实际分布情况。
同时,分页存储管理也提供了更大的地址空间,使得进程可以使用更多的逻辑地址。
然而,分页存储管理也存在一些问题。
首先,由于页的大小固定,可能会出现内部碎片的问题,即一个页中只有部分空间被利用,导致内存利用率下降。
其次,地址转换的过程需要访问页表,增加了访问内存的开销。
此外,页表的大小和页的大小也会影响地址转换的效率。
为了解决分页存储管理的问题,还有一些相关的技术和方法。
例如,可以采用多级页表来减小页表的规模,提高地址转换的效率。
还可以引入页面置换算法来解决内存不够用的问题,例如最常见的LRU (最近最久未使用)算法和FIFO(先进先出)算法。
分页存储管理是一种重要的内存管理技术,通过将物理内存划分为固定大小的页框,将进程的逻辑地址划分为固定大小的页,实现了逻辑地址和物理地址之间的映射关系。
第四章存储器管理第0节存储管理概述一、存储器的层次结构1、在现代计算机系统中,存储器是信息处理的来源与归宿,占据重要位置。
但是,在现有技术条件下,任何一种存储装置,都无法从速度、容量、是否需要电源维持等等多方面,同时满足用户的需求。
实际上它们组成了一个速度由快到慢,容量由小到大的存储装置层次。
图4-1 计算机系统存储器层次示意图2、各种存储器•寄存器、高速缓存Cache:容量很小、非常快速、昂贵、需要电源维持、CPU可直接访问;•内存RAM:容量在若干KB、MB、GB,中等速度、中等价格、需要电源维持、CPU可直接访问;•磁盘高速缓存:一般设于主存中;•多种类型的磁盘:容量在数MB或数GB,低速、价廉、不需要电源维持、CPU不可直接访问;由操作系统协调这些存储器的使用。
二、存储管理(主存管理)的目的1、尽可能地方便用户;提高主存储器的使用效率,使主存储器在速度、规模和成本之间获得较好的权衡。
(注意CPU和主存储器,这两类资源管理的区别)2、存储管理的主要功能:•地址重定位•主存空间的分配与回收•主存空间的保护和共享•主存空间的扩充三、逻辑地址与物理地址1、逻辑地址(相对地址,虚地址):用户源程序经过编译/汇编、链接后,程序内每条指令、每个数据等信息,都会生成自己的地址。
●一个用户程序的所有逻辑地址组成这个程序的逻辑地址空间(也称地址空间)。
这个空间是以0为基址、线性或多维编址的。
2、物理地址(绝对地址,实地址):是一个实际内存(字节)单元的编址。
●计算机内所有内存单元的物理地址组成系统的物理地址空间,它是从0开始的、是一维的;●将用户程序被装进内存,一个程序所占有的所有内存单元的物理地址组成该程序的物理地址空间(也称存储空间)。
四、地址映射(变换、重定位)当程序被装进内存时,通常每个信息的逻辑地址和它的物理地址是不一致的,需要把(程序中的)逻辑地址转换为对应的物理地址----地址映射;例如指令LOAD L,2500 /*将2500号单元内的数据送入寄存器L*/ ----P123图4-3 作业装进内存时的情况地址映射分静态和动态两种方式。
第十八讲存储器管理之请求分段存储管理方式1引言概述:请求分段存储管理系统也与请求分页存储管理系统一样,为用户提供了一个比内存空间大得多的虚拟存储器。
虚拟存储器的实际容量由运算机的地址结构肯定。
思想:在请求分段存储管理系统中,作业运行之前,只要求将当前需要的若干个分段装入内存,即可启动作业运行。
在作业运行进程中,若是要访问的分段不在内存中,则通过调段功能将其调入,同时还能够通过置换功能将暂时不用的分段换出到外存,以便腾出内存空间。
2请求分段中的硬件支持请求分段需要的硬件支持有:段表机制、缺页中断机构、地址变换机构。
2.1段名段长段的基址存取方式访问字段A修改位M存在位P增补位外存始址说明:存取方式:存取属性(执行、只读、允许读/写)访问字段A:记录该段被访问的频繁程度修改位M:表示该段在进入内存后,是不是被修悔改。
存在位P:表示该段是不是在内存中。
增补位:表示在运行进程中,该段是不是做过动态增加。
外存地址:表示该段在外存中的起始地址。
2.2缺段中断机构当被访问的段不在内存中时,将产生一缺段中断信号。
其缺段中断的处置进程如图:2.3地址变换机构3 分段的共享和保护为了实现分段共享,设置一个数据结构——共享段表,和对共享段进行操作的进程。
3.1 共享段表说明:所有的共享段都在共享段表中对应一个表项。
其中:共享进程计数器count :记录有多少个进程需要共享该分段,设置一个整型变量count 。
存取控制字段:设定存取权限。
段号:对于一个共享段,不同的进程能够各用不同的段号去共享该段。
3.2 共享段的分派和回收 3.2.1 共享段的分派大体进程:在为共享段分派内存时,对第一个请求利用该共享段的进程,由系统为该共享段分派一物理区,再把共享段调入该区,同时将该区的始址填入请求进程的段表的相应项中,还须在共享段表中增加一表项,填写有关数据,把count 置为1;以后,当又有其它进程需段名段长内存始址状态外存始址共享进程计数count 状态进程名进程号段号存取控制………………要挪用该共享段时,由于该共享段已被调入内存,故现在不必再为该段分派内存,而只需在挪用进程的段表中,增加一表项,填写该共享段的物理地址;在共享段的段表中,填上挪用进程的进程名、存取控制等,再执行count∶=count+1操作,以表明有两个进程共享该段。
分页存储管理和分段存储管理1.采⽤相联存储器后地址转换过程,⽤图表⽰出来2.详述分段管理和分页管理的区别。
分页管理: 分页存储管理是将⼀个进程的逻辑地址空间分成若⼲个⼤⼩相等的⽚,称为页⾯或页,并为各页加以编号,从0开始,如第0页、第1页等。
相应地,也把内存空间分成与页⾯相同⼤⼩的若⼲个存储块,称为(物理)块或页框(frame),也同样为它们加以编号,如0#块、1#块等等。
在为进程分配内存时,以块为单位将进程中的若⼲个页分别装⼊到多个可以不相邻接的物理块中。
由于进程的最后⼀页经常装不满⼀块⽽形成了不可利⽤的碎⽚,称之为“页内碎⽚”分段管理: 在分段存储管理⽅式中,作业的地址空间被划分为若⼲个段,每个段定义了⼀组逻辑信息。
例如,有主程序段MAIN、⼦程序段X、数据段D及栈段S等。
每个段都有⾃⼰的名字。
为了实现简单起见,通常可⽤⼀个段号来代替段名,每个段都从0开始编址,并采⽤⼀段连续的地址空间。
段的长度由相应的逻辑信息组的长度决定,因⽽各段长度不等。
整个作业的地址空间由于是分成多个段,因⽽是⼆维的,亦即,其逻辑地址由段号(段名)和段内地址所组成。
区别:(1)页是信息的物理(存储)单位,分页是为实现离散分配⽅式,以消减内存的零头,提⾼内存的利⽤率。
或者说,分页仅仅是由于系统管理的需要⽽不是⽤户的需要。
段则是信息的逻辑单位,它含有⼀组其意义相对完整的信息。
分段的⽬的是为了能更好地满⾜⽤户的需要。
(2)页的⼤⼩固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因⽽在系统中只能有⼀种⼤⼩的页⾯;⽽段的长度却不固定,决定于⽤户所编写的程序的逻辑,通常由编译程序在对源程序进⾏编译时,根据信息的性质来划分。
3.P249 习题11。
答:(1)649 (2)1727 (3)2301 (4)140 (5)1956。
实验7分页存储器管理实验性质:验证+设计建议学时:2学时一、实验目的✍✍学习i386处理器的二级页表硬件机制,理解分页存储器管理原理。
✍✍查看EOS应用程序进程和系统进程的二级页表映射信息,理解页目录和页表的管理方式。
✍✍编程修改页目录和页表的映射关系,理解分页地址变换原理。
二、预备知识阅读本书第6章。
了解i386处理器的二级页表硬件机制,EOS操作系统的分页存储器管理方式,以及进程地址空间的内存分布。
三、实验内容3.1 准备实验按照下面的步骤准备本次实验:1. 启动OS Lab。
2. 新建一个EOS应用程序项目。
3.2 查看EOS应用程序进程的页目录和页表使用OS Lab打开本实验文件夹中的memory.c和getcr3.asm文件(将文件拖动到OS Lab窗口中释放即可打开)。
仔细阅读这两个文件中的源代码和注释,main函数的流程图可以参见图16-1。
按照下面的步骤查看EOS应用程序进程的页目录和页表:1. 使用memory.c文件中的源代码替换之前创建的EOS应用程序项目中EOSApp.c文件中的源代码。
2. 右键点击“项目管理器”窗口中的“源文件”文件夹节点,在弹出的快捷菜单中选择“添加”中的“添加新文件”。
3. 在弹出的“添加新文件”对话框中选择“asm 源文件”模板。
4. 在“名称”中输入文件名称“func”。
5. 点击“添加”按钮添加并自动打开文件func.asm。
6. 将getcr3.asm文件中的源代码复制到func.asm文件中。
7. 按F7生成修改后的EOS应用程序项目。
8. 按F5启动调试。
9. 应用程序执行的过程中,会将该进程的二级页表映射信息输出到虚拟机窗口和OS Lab“输出”窗口中,输出内容如图16-2(a)。
10. 将“输出”窗口中的内容复制到一个文本文件中。
图16-2:(a)EOS应用程序进程的二级页表映射信息(b)有应用程序进程时,系统进程的二级页表映射信息图16-2(a)中第一行是CR3寄存器的值,也就是页目录所在的页框号。
第一列是页目录中有效的PDE,第二列是PDE映射的页表中有效的PTE(详细的格式可以参考源代码中的注释)。
注意,在标号为0x200的PDE对应的页表中,所有的1024个PTE都是有效的,所以在图中省略了一部分。
根据图16-2(a)回答下面的问题:✍✍应用程序进程的页目录和页表一共占用了几个物理页?页框号分别是多少?✍✍映射用户地址空间(低2G)的页表的页框号是多少?该页表有几个有效的PTE,或者说有几个物理页用来装载应用程序的代码、数据和堆栈?页框号分别是多少?3.3 查看应用程序进程和系统进程并发时的页目录和页表需要对EOS应用程序进行一些修改:1. 结束之前的调试。
2. 取消EOSApp.c第121行语句的注释(该行语句会等待10秒)。
3. 按F7生成修改后的EOS应用程序项目。
4. 按F5启动调试。
5. 在“Console-1”中会自动执行EOSApp.exe,创建该应用程序进程。
利用其等待10秒的时间,按Ctrl+F2切换到“Console-2”。
6. 在“Console-2”中输入命令“mm”后按回车,会将系统进程的二级页表映射信息输出到虚拟机窗口和OS Lab的“输出”窗口,输出内容如图16-2(b)。
注意,在图16-2(b)中添加了一些空行,方便与图16-2(a)比较。
“Console-1”中的应用程序在等待10秒后,又会输出和图16-2(a)一致的内容。
7. 将“输出”窗口中的内容复制到一个文本文件中。
控制台命令“mm”对应的源代码在EOS内核项目ke/sysproc.c文件的ConsoleCmdMemoryMap函数中(第382行)。
阅读这部分源代码后会发现,其与EOSApp.c文件中的源代码基本类似。
结合图16-2(a)和(b)回答下面的问题:✍✍EOS启动后系统进程是一直运行的,所以当创建应用程序进程后,系统中就同时存在了两个进程,这两个进程是否有各自的页目录?在页目录映射的页表中,哪些是独占的,哪些是共享的?分析其中的原因。
✍✍统计当应用程序进程和系统进程并发时,总共有多少物理页被占用?应用程序结束后,在“Console-1”中再次输入命令“mm”,查看在没有应用程序进程时,系统进程的页目录和页表。
将“输出”窗口中的内容复制到一个文本文件中。
将输出的内容与图16-2(b)比较,思考为什么系统进程(即内核地址空间)占用的物理页会减少?(提示:创建应用程序进程时,EOS内核要为其创建PCB,应用程序结束时,内核要释放PCB占用的内存。
)3.4 查看应用程序进程并发时的页目录和页表需要对EOS应用程序进行一些修改:1. 结束之前的调试。
2. 取消EOSApp.c第201行语句的注释(该行语句会等待10秒)。
3. 按F7生成修改后的EOS应用程序项目。
4. 按F5启动调试。
5. 在“Console-1”中会自动执行EOSApp.exe,创建该应用程序进程。
利用其等待10秒的时间,按Ctrl+F2切换到“Console-2”。
6. 在“Console-2”中输入“eosapp”后按回车,再执行一个EOSApp.exe。
7. 由EOSApp.exe创建的两个并发进程会先后在各自的控制台和OS Lab“输出”窗口中,输出各自的二级页表映射信息。
输出的内容如图16-3。
8. 将“输出”窗口中的内容复制到一个文本文件中。
图16-3:(a)应用程序进程1的二级页表映射信息(b)应用程序进程2的二级页表映射信息结合图16-3(a)和(b)回答下面的问题:✍✍观察这两个进程的用户地址空间,可以得出结论:同一个应用程序创建的两个并发的进程,它们的用户虚拟地址空间完全相同,而映射的物理页完全不同,从而保证相同的行为(执行过程)可以在独立的空间内完成。
假设进程1的0x41E和0x41F物理页保存了应用程序的可执行代码,由于可执行代码是不变的、只读的,现在假设优化过的EOS允许进程2共享进程1的保存了可执行代码的物理页,尝试结合图16-3写出此时进程2用户地址空间的映射信息。
并说明共享可执行代码的物理页能带来哪些好处。
✍✍统计当两个应用程序进程并发时,总共有多少物理页被占用?有更多的进程同时运行呢?根据之前的操作方式,尝试在更多的控制台中启动应用程序来验证自己的想法。
如果进程的数量足够多,物理内存是否会用尽,如何解决该问题?3.5 在二级页表中映射新申请的物理页下面通过编程的方式,从EOS操作系统内核中申请两个未用的物理页,将第一个物理页当作页表,映射基址为0xE0000000的4M虚拟地址空间,然后将第二个物理页分别映射到基址为0xE0000000和0xE0001000的4K虚拟地址空间。
从而验证下面的结论:✍✍虽然进程可以访问4G虚拟地址空间,但是只有当一个虚拟地址通过二级页表映射关系能够映射到实际的物理地址时,该虚拟地址才能够被访问,否则会触发异常。
✍✍所有未用的物理页都是由EOS操作系统内核统一管理的,使用时必须向内核申请。
✍✍为虚拟地址映射物理页时,必须首先为页目录安装页表,然后再为页表安装物理页。
并且只有在刷新快表后,对页目录和页表的更改才能生效。
✍✍不同的虚拟地址可以映射相同的物理页,从而实现共享。
首先验证第一个结论:1. 新建一个 EOS Kernel项目。
2. 从“项目管理器”打开ke/sysproc.c文件。
3. 打开本实验文件夹中的MapNewPage.c文件(将文件拖动到OS Lab窗口中释放即可)。
4. 在sysproc.c文件的ConsoleCmdMemoryMap函数中找到“关中断”的代码行(第413行),将MapNewPage.c文件中的代码插入到“关中断”代码行的后面。
5. 按F7生成该内核项目。
6. 按F5启动调试。
7. 在EOS控制台中输入命令“mm”后按回车。
8. OS Lab会弹出一个调试异常对话框,选择“是”调试异常。
9. 黄色箭头指向访问虚拟地址0xE0000000的代码行。
由于该虚拟地址没有映射物理内存(图16-2和图16-3中都未映射该虚拟地址),所以对该虚拟地址的访问会触发异常。
10. 结束此次调试,然后删除或者注释会触发异常的该行代码。
按照下面的步骤验证其它结论:1. 按F7生成该内核项目。
2. 按F5启动调试。
3. 在EOS控制台中输入命令“mm”后按回车。
4. 在OS Lab的“输出”窗口中查看执行的结果,并将“输出”窗口中的内容复制到一个文本文件中。
结合插入的源代码和执行的结果理解上面的结论。
注意,在代码中修改了虚拟地址0xE0000000处的内存的值,然后从虚拟地址0xE0001000处读取到了相同的值,原因是这两处虚拟地址映射到了相同的物理页。
四、思考与练习1. 观察之前输出的页目录和页表的映射关系,可以看到页目录的第0x300个PDE映射的页框号就是页目录本身,说明页目录被复用为了页表。
而恰恰就是这种映射关系决定了4K的页目录映射在虚拟地址空间的0xC0300000-0xC0300FFF,4M的页表映射在0xC0000000-0xC03FFFFF。
现在,假设修改了页目录,使其第0x100个PDE映射的页框号是页目录本身,此时页目录和页表会映射在4G虚拟地址空间的什么位置呢?说明计算方法。
2. 修改EOSApp.c中的源代码,通过编程的方式统计并输出用户地址空间占用的内存数目。
3. 修改EOSApp.c中的源代码,通过编程的方式统计并输出页目录和页表的数目。
注意页目录被复用为页表。
4. 在EOS启动时,软盘引导扇区被加载到从0x7C00开始的512个字节的物理内存中,计算一下其所在的物理页框号,然后根据物理内存与虚拟内存的映射关系得到其所在的虚拟地址。
修改EOSApp.c中的源代码,尝试将软盘引导扇区所在虚拟地址的512个字节值打印出来,与boot.lst 文件中的指令字节码进行比较,验证计算的虚拟地址是否正确。
5. 既然所有1024个页表(共4M)映射在虚拟地址空间的0xC0000000-0xC03FFFFF,为什么不能从页表基址0xC0000000开始遍历,来查找有效的页表呢?而必须先在页目录中查找有效的页表呢?编写代码尝试一下,看看会有什么结果。
6. 学习EOS操作系统内核统一管理未用物理页的方法(可以参考本书第6章的第6.5节)。
尝试在本实验第3.5节中ConsoleCmdMemoryMap函数源代码的基础上进行修改,将申请到的物理页从二级页表映射中移除,并让内核回收这些物理页。
7. 思考页式存储管理机制的优缺点。