分页存储器管理

合集下载

分页存储管理

分页存储管理

非连续分配方式

1.基本内容:页式存储管理基本思想、数据结构、地址转换过程。段式存储管理以及段页式存储管理。

2.学习要求:;掌握页式存储管理、段式存储管理以及段页式存储管理的实现原理、数据结构、地址转换机构等内容。

3.教学要求:本单元共安排4学时。采用教员课堂讲授方法实施教学。该部分内容抽象,是本章学习重点与难点。课后可通过课程设计使学员加深对于抽象理论的理解和掌握。

4.重点:各种管理实现原理、数据结构、地址转换机构。

5.难点:段式存储管理。

分页存储管理

可重定位分区分配虽然可以解决碎片和共享问题,但由于信息的大量移动而损失了许多宝贵的CPU时间,且存储用户的作业受到实际存储容量的限制。多重分区分配虽在一定程度上解决了这些问题,但由于要求各分区设置分段的重定位寄存器,存储分配策略较复杂,且需较多的硬件支持。

分页式管理技术通过地址转换机制,能明显消除内、外存之间的差别,将外存看作内存的扩充和延伸。并能很好解决“外零头”的问题。

一、分页在储管理实现的基本思想:

在分页存储管理中,将每个作业的逻辑地址空间分为大小相同的块,称为虚页面或页(page),通常页面大小为2的整数次幂(512K~4K)。同样地,将物理空间也划分为与页面大小相等的块,称之为存储块或页框(page frame),为作业分配存储空间时,总是以页框为单位。例如:一个作业的地址空间有M页,那么只要分配给它M个页框,每一页分别装入一个页框即可。

纯分页系统的定义:指在调度一个作业时,必须把它的所有页一次装入到主存的矾框。若当时页框数不足,则该作业必须等待,系统再调度其他作业。

操作系统原理存储管理请求分页系统课件

操作系统原理存储管理请求分页系统课件

04
请求分页系统的实现
硬件支持
1 2 3
内存管理单元(MMU) 负责地址转换,将虚拟地址转换为物理地址。
页表 存储虚拟地址和物理地址之间的映射关系。
缺页中断 当访问的页面不在内存中时,产生缺页中断,请 求加载该页面。
页面置换算法的实现
先进先出(FIFO)
选择最早加载的页面进行置换。
最近最少Hale Waihona Puke Baidu用(LRU)
操作系统的分类
根据使用环境
桌面操作系统、服务器操作系统、移动操作系统等。
根据授权方式
开源操作系统、闭源操作系统等。
根据架构
单用户操作系统、多用户操作系统等。
操作系统的基本概念
线程
进程中的一个执行单元,可以 独立于其他线程执行。
文件系统
操作系统中用于存储和管理数 据和程序文件的机制。
进程
操作系统中一个重要的概念, 表示一个程序的执行实例。
内存管理
操作系统对计算机内存进行管 理的机制,包括内存分配、回 收和保护等。
设备驱动程序
操作系统中用于控制和管理外 部设备的软件。
02
存储管理
存储管理的概念和功能
概念
存储管理是操作系统中负责管理计算机系统中存储器资源的 功能模块。
功能
提供对物理内存和虚拟内存的管理,包括内存分配、回收、 保护、扩充等功能。

分页存储管理的实现

分页存储管理的实现

分页存储管理的实现

1.分页存储管理的数据结构

①页表:如图所示,为了便于找到进程的每个页号对应的内存帧号,系统为每个进程建立一张页面映象表,简称页表。页表用于完成进程地址空间的逻辑页号到存储空间物理帧号的映射。系统为每一个进程建立一个页表,一个页号对应一个帧号。页表的表项也称为页描述子,一般包括:页号、帧号、权限等。

②物理页帧表:整个系统有一个物理页帧表,描述物理内存空间的分配使用状况,其数据结构可采用位示图和空闲页帧链表。

2.分页存储管理的实现

分页存储管理可谓“见缝插针”,解决了外碎片问题,具体实现技术如下:

①逻辑地址空间分页,将用户进程的逻辑地址空间分成若干大小相等的页。

②内存存储空间分帧,将内存的用户区划分成与页大小相同的页帧。

③内存分配原则,以页帧为单位来分配内存,将进程若干个逻辑上连续的页面装入若干个离散的页帧中,由页表提供进程的页号到存储空间帧号的映射。

④在分页存储管理中,调度进程运行时,必须将进程的所有页面一次调入内存,若内存中没有足够的物理帧,则进程等待。

3.分页存储管理的地址结构

如果逻辑地址空间为2m,页大小为2n,那么逻辑地址的高m-n位表示页号p,而低n位表示偏移量d(offset)。如图4-17所示,逻辑地址结构为页号p|偏移量d,物理地址结构为帧号f|偏移量d。

若给定一个逻辑地址空间中的地址为A,页的大小为L,则页号p和偏移量d可按下式求得:

p=A/L

d=A%L

例如,其系统的页面大小为1KB,设A=2180,则由上式可以求得p =2,d=132。

分页存储管理

分页存储管理

计算物理地址并访问内存
利用公式: E=bxL+W,得到物理地址E
判断越界的方法:
若P>M(页表长度),则产生越界中断
用得到的物理地址E去访问内存。
第 1 部分-分页存储管理方式
效率问题
原因:由于页表是存放在内存中的,这使得CPU在每存取一个数据时,
都要两次访问内存。
占用内存过多
解决办法: 页表离散分配 部分装入
谢谢
地址变换任
务是借助于 页表完成的
第 1 部分-分页存储管理方式
获取块号
求P在页表中对应的项的地址: =页表起始地址F+Px页表项大小 取出该表项中物理块号b的内容
地址变换
step1
step2
step3
求页号和页内地址,判断是否越界
※注意 块内地址=页内地址 块的大小=页面大小
利用公式: P=(int)(A/L);W=A%L
解决办法: 引入快表提高 地址变换速度。 #快表存在命中 率的问题#
引入两级和
多级页表减
少内存的占用 率。
分页存储管理的地址变换,利用快表查找内存所需时间
例题回顾
第 2 部分 例题回顾
1.假定主存为64KB,分成16块.某进程有4页:0.1.2.3 分别被分配到2,4,1,6块
(1)该进程总长度为多少? (2)该进程每一页在内存中的起始地址? (3)给出逻辑地址:[0,100],[1,50],[2,0],[3,10] (页号,页内地址)给出其对应的内存地址.

分页存储管理

分页存储管理

4.3.2地址变换(映射)机构
1 .基本的地址变换机构 地址变换机构的基本任务是利用页表把用户程序中的逻辑地 址变换成内存中的物理地址,实际上就要将用户程序中的页 号变换成内存中的物理块号。为了实现地址变换功能,在系 统中设置页表寄存器,用来存放页表的始址和页表的长度。 在进程未执行时,每个进程对应的页表的始址和长度存放在 进程的PCB中,当该进程被调度时,就将它们装入页表寄存 器。在进行地址变换时,系统将页号与页表长度进行比较, 如果页号大于页表寄存器中的页表长度,则访问越界,产生 越界中断。如未出现越界,则根据页表寄存器中的页表始址 和页号计算出该页在页表项中的位置,得到该页的物理块号, 将此物理块号装入物理地址寄存器中。与此同时,将有效地 址(逻辑地址)寄存器中页内地址直接装入物理地址寄存器 的块内地址字段中,这样便完成了从逻辑地址到物理地址的 变换。
物理地址(绝对地址) 页面号 页内地址
相对地址(有效逻辑地址) 页号 页内地址
控制寄存器 页表长度 页表始址
页表长度 页表始址
3来自百度文库
1k
页号 页面号
02 13 28
相对地址
2 452
物理地址
OS
8 452
8644 1024*8+452=8644

0k
第0页
1k
第1页
2k
第2页

第16讲 存储器管理之请求分页存储管理方式

第16讲 存储器管理之请求分页存储管理方式

第十六讲存储器管理之请求分页存储管理方式

1 基本概述

请求分页管理是建立在基本分页基础上的,为了能支持虚拟存储器而增加了请求调页功能和页面置换功能。

基本原理:地址空间的划分同页式;装入页时,可装入作业的一部分(运行所需)页即可运行。

2 请求分页的硬件支持

为实现请求分页,需要一定的硬件支持,包括:页表机制、缺页中断机构、地址变换机构。

2.1 页表机制

作用:将用户地址空间的逻辑地址转换为内存空间的物理地址。

因为请求分页的特殊性,即程序的一部分调入内存,一部分仍在外存,因此页表结构有所不同。如图:

说明:

(1)状态位P:指示该页是否已调入内存。

(2)访问字段A:记录本页在一段时间内被访问的次数或最近未被访问的时间。

(3)修改位M:表示该页在调入内存后是否被修改过。若修改过,则换出时需重写至外存。(4)外存地址:指出该页在外存上的地址。

2.2 缺页中断机构

在请求分页系统中,每当所要访问的页面不在内存时,便产生缺页中断,请求OS将所缺的页调入内存。

缺页中断与一般中断的区别:

(1)在指令执行期间产生和处理中断信号

(2)一条指令在执行期间,可能产生多次缺页中断

2.3 地址变换机构

请求分页系统的地址变换机构。是在分页系统地址变换机构的基础上,又增加了一些功能。

例:某虚拟存储器的用户空间共有32个页面,每页1KB,主存16KB。假定某时刻系统为用户的第0、1、2、3页分别分配的物理块号为5、10、4、7,试将虚拟地址0A5C和093C 变换为物理地址。

解:虚拟地址为:页号(2^5=32)5位页内位移(1K =2^10=1024)10位物理地址为物理块号(2^4=16)4位因为页内是10 位,块内位移(1K =2^10=1024)10位

分页式存储管理

分页式存储管理
• 以page作索引,找到小页表的页表项,而该表 项中包含了页面对应的页框号,
• 页框号和位移offset便可生成物理地址。
dir
page
offset
逻辑地址

页目录表
F
控制寄存器
进程一级页表
B
B offset
物理地址
进程二级页表
• 上面的方法解决了可分散存放小页表的问题,但并 未解决占用内存空间的问题。
• 使用上下文号作上下文表的索引,以找到进程 的顶级页目录,然后,使用逻辑地址中的索引 值找下一级表项,直至找到访问页面,形成物理地 址。
4.3.5反置页表
• 反置页表IPT(Inverted Page Table)
逻辑地址
pid
page
offset
物理地址
B
offset
进程标识 特征位 页面号
B
反置页表
• IPT是为内存中的每一个物理块建 立一个页表并按照块号排序,该表 的每个表项包含正在访问该页框的 进程标识、页号及特征位,用来完 成主存页框到访问进程的页号、即 物理地址到逻辑地址的转换。
地址转换过程如下:
• 逻辑地址给出进程标识和页号,用 它们去比较IPT,若整个反置页表中 未能找到匹配的页表项,说明该页 不在主存,产生请页中断,请求操作 系统调入;否则,该表项的序号便 是页框号,块号加上位移,便形成物 理地址。

第4章4-5节基本分页、分段存储管理方式

第4章4-5节基本分页、分段存储管理方式
页表
页号
计算公式:物理地址 块号 页面大小+块内地址 块号*页面大小 计算公式:物理地址=块号 页面大小 块内地址
0 1
块 号 2 4 6 7
逻辑地址3500:
页号:3500/1024=3 对应物理块号:7 页内地址:428
2 3
故物理地址为: 7*1024+428=7596
逻辑地址4500:
页号:4500/1024=4
第四章 存 储 器 管 理
4.5.3 信息共享

进程1 ed 1 ed 2 ed 40 data 1 data 10 … … 页表 21 22 … … 60 61 … 70 页表 21 22 … 60 71 … 80 ed 1 ed 2 ed 40 data 1 data 10 data 1 data 10 … … … … 60 61 70 71 80 主存 0 21 22
editor data 1 … … data 2
80 240 280 380 420
图 4-9 分段系统中共享editor的示意图
第四章 存 储 器 管 理
4.5.4 段页式存储管理方式
1. 基本原理
0 4K 8K 12K 15K 16K
主子子子
0 4K 8K
子子子子
0 4K 8K 10K 12K
解:(1)需两次访问内存,故有效 访问时间为: 2*0.2µs =0.4µs (2)若能从快表中直接找到相应的 页表项,则可立即形成物理地址去 内存访问相应的数据;否则,仍需 两次访问内存。有效访问时间为: 0.9*0.2+(1-0.9)*0.2*2=0.22µs

分页存储管理的概念和原理

分页存储管理的概念和原理

分页存储管理的概念和原理

分页存储管理是一种内存管理技术,用于将主存(RAM)划分成等大小的固定块,每个块称为页,然后将进程的虚拟地址空间划分成相同大小的页框,每个页框称为帧。通过这种方式,将进程的虚拟地址空间划分成许多固定大小的逻辑块,实现了对内存的分页管理。

分页存储管理的原理如下:

1. 将进程的虚拟地址空间划分成大小相等的页。

2. 主存也被划分成与页大小相等的物理块(页框)。

3. 当进程请求访问一个虚拟地址时,操作系统将虚拟地址划分成页号和页内偏移量。

4. 通过查找进程的页表,得到虚拟页号对应的物理页框号。

5. 最后,通过将页框号与页内偏移量相加,得到物理地址,进而访问主存中的数据。

分页存储管理的优点包括:

1. 提高了主存的利用率:通过将进程的虚拟地址空间划分成固定大小的页,可以更好地利用主存空间。

2. 简化了内存分配管理:页的大小固定,可以更方便地分配和回收内存。

3. 实现了虚拟内存:利用页面置换算法,可以将不常用的页置换到辅存(例如硬盘)中,从而实现了虚拟内存。

然而,分页存储管理也存在一些缺点:

1. 内部碎片:当进程的实际内存需求小于一个页面大小时,会导致内存浪费。

2. 外部碎片:随着进程的加载和卸载,分配给进程的虚拟地址空间可能会出现不连续的内存块,导致外部碎片的产生。

总的来说,分页存储管理通过将进程的虚拟地址空间和主存划分成等大小的页和页框,提高了主存的利用率,并实现了虚拟内存的概念,但也会带来一定的内部碎片和外部碎片问题。

《操作系统》课件(五)页式存储管理

《操作系统》课件(五)页式存储管理
空间局部性:某个页面被访问,很可能它相临的 页也要被访问。例如:数组遍历;代码程序的执 行;等等。
工作集:进程活跃地访问的页面的集合。
工作集模型(续)
工作集存储管理策略力求把活跃程序的工 作集保存在内存中。
W(h)
h0
h
从上图可以看出:仅当一个进程的全部工作 集都在内存时才能运行该作业。
页式存储管理的缺陷
段的概念:一个逻辑意义完整的信息单位。 一个程序由若干个段组成。各段长度不同。
段式存储管理的原理:作业的地址空间由若 干个逻辑分段组成,每个分段有自己的名字, 在内存中占据一个连续的区域。但是段和段 之间可以是不连续的。
思考:采用什么策略为段分配内存?
地址变换
逻辑地址:段号+段内地址 注意:该逻辑地址是二维地址。 因为段在内存中占据一个连续的区域,如果
缺页中断
页面替换
15
4 23 1
5 43
答案:缺页中断的次数为12次,页面替换的次序是:1 5 4 2 3 1 5 4 3。
(2)LRU算法:
访问队列:1 5 4 1 2 3 2 1 5 4 2 4 3 5 1
1 5442 3 3 354 2 2 35 1 内 存 1551 2 2 215 4 4 23 5
块号
5 12
保护位
R WR
5
5
5

实验六-分页存储器管理

实验六-分页存储器管理

上海应用技术学院

程序设计语言实验报告

实验名称分页存储器管理实验序号实验六实验日期

姓名学号指导教师

专业计算机科学与技术班级成绩

一、实验目的及要求

学习i386处理器的二级页表硬件机制,理解分页存储器管理原理。

查看EOS应用程序进程和系统进程的二级页表映射信息,理解页目录和页表的管理方式。编程修改页目录和页表的映射关系,理解分页地址变换原理。

二、实验环境

Windows XP;Tevation OS Lab。

三、实验内容

1 准备实验

按照下面的步骤准备本次实验:

1.启动OS Lab。

2.新建一个EOS应用程序项目,如图1。

图1

2 查看EOS应用程序进程的页目录和页表

使用OS Lab打开本实验文件夹中的memory.c和getcr3.asm文件如图2(将文件拖动到

OS Lab窗口中释放即可打开)。按照下面的步骤查看EOS应用程序进程的页目录和页表:

图2

1.使用memory.c文件中的源代码替换之前创建的EOS应用程序项目中EOSApp.c文件中

的源代码,如图3。

图3

2.右键点击“项目管理器”窗口中的“源文件”文件夹节点,在弹出的快捷菜单中选择

“添加”中的“添加新文件”。

3.在弹出的“添加新文件”对话框中选择“asm 源文件”模板。

4.在“名称”中输入文件名称“func”。

5.点击“添加”按钮添加并自动打开文件func.asm,如图4。

图4

6.将getcr3.asm文件中的源代码复制到func.asm文件中,如图5。

图5

7.按F7生成修改后的EOS应用程序项目,如图6。

图6

8.按F5启动调试,如图7。

分页存储器管理

分页存储器管理

实验7 分页存储器管理

实验性质:验证+设计

建议学时:2学时

一、实验目的

学习i386处理器的二级页表硬件机制,理解分页存储器管理原理。

查看E0舷用程序进程和系统进程的二级页表映射信息,理解页目录和页表的管理方式。

编程修改页目录和页表的映射关系,理解分页地址变换原理。

二、预备知识

阅读本书第6章。了解i386处理器的二级页表硬件机制,EOS操作系统的分页存储器管理方式,以及进程地址空间的内存分布。

三、实验内容

3.1 准备实验

按照下面的步骤准备本次实验:

1. 启动OS Lab。

2. 新建一个E0应用程序项目。

3.2查看EOSS用程序进程的页目录和页表

使用OS Lab打开本实验文件夹中的memory.c和getcr3.asm 文件(将文件拖动到OS Lab窗口中释放即可打开)。仔细阅读这两个文件中的源代码和注释,main函数的流程图可以参见图16-1。

按照下面的步骤查看EOSS用程序进程的页目录和页表:

1. 使用memory.c文件中的源代码替换之前创建的EOS应用程序项目中EOSApp.(文件中的源代码。

2. 右键点击“项目管理器” 窗口中的“源文件” 文件夹节点,在弹出的快捷菜单中选择“添加” 中的“添

加新文件”。

3. 在弹出的“添加新文件”对话框中选择“ asm 源文件”模板。

4. 在“名称”中输入文件名称“ func”。

5. 点击“添加”按钮添加并自动打开文件func.asm 。

6. 将getcr3.asm文件中的源代码复制到func.asm文件中。

7. 按F7生成修改后的EO磁用程序项目。

分页与分段存储管理

分页与分段存储管理


内存空间
分页与分段存储管理
2. 多级页表
对于32位的机器,采用两级页表结构是合适的;但对于 64位的机器,如果页面大小仍采用4 KB即212 B,那么还剩 下52位,假定仍按物理块的大小(212位)来划分页表,则将余 下的 40位用于外层页号。此时在外层页表中可能有 1T 个页 表项,可能要占用 8TB的连续内存空间。 必须采用多级页 表,将外层页表再进行分页,也是将各分页离散地装入到 不相邻接的物理块中,再利用第2级的外层页表来映射它们
页表
图 4-13 具有快表的地址变换机构
物理地址
分页与分段存储管理
2.
分页与分段存储管理
2.
分页与分段存储管理
4.3.3 两级和多级页表
现代的大多数计算机系统,都支持非常大的逻辑地址空 间(232~264)。在这样的环境下,页表就变得非常大,要占用相
当大的内存空间。例如32位地址空间,页面大小为 4KB的分
分页与分段存储管理
0 4K 8K 1 2K 1 5K 1 6K
主程 序段
0 4K 8K
子程 序段
0 4K 8K 1 0K 1 2K
数据 段
(a ) 段 号 (S) 段 内 页 号 (P) (b ) 段 内 地 址 (W)
图 4-20 作业地址空间和地址结构
分页与分段存储管理
段表寄存器 段表大小 段表始址

14存储管理3分段段页式管理

14存储管理3分段段页式管理

3. 地址结构
分页地址中的地址结构如下: 31
页号P
12
11
位移量W
0
对某特定机器,其地址结构是一定的。若给定一个逻 辑地址空间中的地址为A,页面的大小为L,则页号P和页
内地址d可按下式求得:
A P INT L d [ A]MODL
4.3.3 地址变换机构
1. 基本的地址变换机构
段地址 3200 1500 6000 5000
K
0 P 0 L 0 N 0
. . . . 8000 .
操作系统
1000
P
3200
K
5000
段表
S
6000
L
8000
4
S
N
主存
作业i的地址空间
3. 硬件支持

系统设置一对寄存器 1.段表始址寄存器: 用于保存正在运行进程的段表的始址

2.段表长度寄存器:
0 0
. . . CALL [X] [E] . . . . . . CALL [A] 116 . . .
主程序段[M]
CALL [Y] [F]
E P
. . . . . .
. . . . . .
0 116 N
. . .
12345 数组[A]
子程序段[X]
0 F L 0

第四章 存储器管理(1-2)

第四章 存储器管理(1-2)

(1) 空闲分区表。 (2) 空闲分区链。
前 向 指 针 N + 2 0 后 向 指 针 N + 2 0
N个字节可用
图 4-5 空闲链结构
第四章 存 储 器 管 理
未分配区表用空闲区链表表示: 100k 270k
head
100k
0
10k 270k
0 730k ∧
0 ∧
10k ∧
0
730k 100k
第四章 存 储 器 管 理 2. 内存分配 :为了便于内存分配,将分区按照大小排队,并建立一 个分区表。如图所示。当为作业分配空间时,分配程序按照此表检 索以合适分区分配;否则,拒绝分配。缺点:空间浪费。
20K
图 4-4 固定分区使用表
第四章 存 储 器 管 理
4.2.3
动态分区分配
分配思想:根据进程的实际需要,动态的为进程分配(切分)内 存空间,及需要多大,分配多大。提高内存的利用率。 1. 分区分配中的数据结构
L-1 L
M-1 0 N-1
L+M-1 L+M
(a) 目标模块 图 4-3 程序链接示意图 (b) 装入模块
第四章 存 储 器 管 理
2. 装入时动态链接(Loadtime Dynamic Linking)
基本思想:源程序被编译生成的目标模块,是在装入内 存时,边装入边连接。装入程序根据外部模块调用而 逐个装入和连接。装入时动态链接方式有以下优点 ① 便于修改和更新:各个模块的修改极易编译和连接;

段式存储管理

段式存储管理

绝对 地址

访问内存中的段表(从段表控制寄存器读取段表起始地址) 根据段表查找该段对应的页表(页表起始地址),访问内存中的页表 根据页表中的页号找到块号,结合页内位移w,求出对应的物理地址
虚拟存储管理

阅读课本P71-72 问题:

什么是虚拟存储器? 虚拟存储管理中,大作业能否在小内存中运行?
. . .
12345 数组[A]
子程序段[X]
0 F L 0
K
. . . CALL [A] 116 . . .
主程序段[M]
CALL [Y] [F]
. . .
S
子程序段[Y]
工作区段[B]
分段式存储管理的基本思想概念

分段存储管理中的逻辑地址空间


用户程序的划分:按程序自身的逻辑关系划分为若 干个程序段,例如主程序段(MAIN)、子程序段、 数据段、堆栈段等,每个程序段都有一个段名,且 有一个段号。段号从0开始,每一段也从0开始编址, 段内地址是连续的 逻辑地址
段号 段内位移量

用户通过数对:[段名,段内位移量]指定某段指令 的地址。于是,用户的逻辑地址空间是二维的。
分段式存储管理中的内存分配


在段式存储管理方式中,以段为单位分配内存,每一 个段在内存中占据连续空间(内存随机分割,需要多 少分配多少),但各段之间可以不连续存放 系统中为每个作业建立一个段映射表,称为“段表”。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验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. 将“输出”窗口中的内容复制到一个文本文件中。

相关文档
最新文档