ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:1.20MB ,
资源ID:27505972      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27505972.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统lab2实验报告解析.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统lab2实验报告解析.docx

1、操作系统lab2实验报告解析HUNAN UNIVERSITY操作系统实验报告目录一、内容 2二、目的 2三、实验设计思想和练习题 2练习0:填写已有实验 2练习1:实现 first-fit 连续物理内存分配算法(需要编程) 2练习2:实现寻找虚拟地址对应的页表项(需要编程) 7练习3:释放某虚地址所在的页并取消对应二级页表项的映射(需要编程) 10运行结果 12四、实验体会 12一、内容本次实验包含三个部分。首先了解如何发现系统中的物理内存;然后了解如何建立对物理内存的初步管理,即了解连续物理内存管理;最后了解页表相关的操作,即如何建立页表来实现虚拟内存到物理内存之间的映射,对段页式内存管理机

2、制有一个比较全面的了解。二、目的1.理解基于段页式内存地址的转换机制;2.理解页表的建立和使用方法;3.理解物理内存的管理方法。三、实验设计思想和练习题练习0:填写已有实验使用eclipse中的diff/merge工具将实验1的代码填入本实验中代码中有“LAB1”的注释相应部分。练习1:实现 first-fit 连续物理内存分配算法(需要编程)在实现first fit 内存分配算法的回收函数时,要考虑地址连续的空闲块之间的合并操作。提示:在建立空闲页块链表时,需要按照空闲页块起始地址来排序,形成一个有序的链表。可能会修改default_pmm.c中的default_init,default_i

3、nit_memmap,default_alloc_pages, default_free_pages等相关函数。请仔细查看和理解default_pmm.c中的注释。请在实验报告中简要说明你的设计实现过程。请回答如下问题:你的first fit算法是否有进一步的改进空间。解答:分析思路:(1)数据结构:A每个物理页利用一个Page结构体表示,查看kern/mm/memlayout.h包括:ref:引用计数,即映射此物理页的虚拟页个数;flags:描述物理页属性,bit 0设置为1,即为“被保留”项,bit 1设置为1,即为空闲项;property:记录某连续内存块的大小,即地址连续的空闲页的个数

4、;page_link:将多个连续内存链接在一起的双向链表指针,即构建双向链接各个Page结构的双向链表。B所有的连续内存空闲块可用一个双向链表管理,利用一个free_area_t结构体表示,查看kern/mm/memlayout.h包括:list_entry:双向链表指针,指向空闲的物理页;nr_free:记录当前空闲页的个数的无符号整形变量。(2)连续物理内存分配思路:物理内存页管理器顺着双向链表进行搜索空闲内存区域,直到找到一个足够大的空闲区域,这是一种速度很快的算法,因为它尽可能少地搜索链表。如果空闲区域的大小和申请分配的大小正好一样,则把这个空闲区域分配出去,成功返回;否则将该空闲区分

5、为两部分,一部分区域与申请分配的大小相等,把它分配出去,剩下的一部分区域形成新的空闲区。其释放内存的设计思路是把这块区域重新放回双向链表中。(3)具体设计: bootloader进行探测物理格局后,利用kern_entry()函数设置堆栈,并临时建立一个段映射关系,调用kern_init()函数输出检查后,pmm_init()函数完成物理内存的管理,假定page_init()函数是按照地址从小到大的顺序传递连续内存空闲块,根据page_init()函数中传递的参数(某个连续的空闲块的起始页,页个数),default_init_memmap()来建立一个连续内存空闲块的双向链表,链表头设free

6、_area.free_list,链表项设Page的base-page_link。代码分析:(1)default_init_memmap :用于构建空闲页链表;A步骤: (1)初始化每一个空闲页,注意使用头插法是因为地址是从低到高地址增长; (2)计算空闲页的总数。B具体实现:(2)default_alloc_pages :用于为进程分配空闲页;A步骤: (1)从空闲链表表头开始查找最小的地址,寻找足够大的空闲块; (2)如果找到,获得指向分配的页,重新设置标志位,从空闲链表中删除此页; (3)判断空闲块大小是否合适; (4)如果合适,不操作;如果不合适,分割页块; (5)计算剩余空闲页个数,返

7、回分配的页块地址。B具体实现:注:算法改进空间:第一页重置标志位操作被注释后,依然可以编译运行。(3)default_free_pages :用于释放已经使用完的页,使其合并到free_list中;A步骤: (1)在free_list中查找合适位置,用以插入; (2)改变被释放页的标志位flags及计数器ref; (3)在free_list中向高地址或第地址合并。B具体实现:练习2:实现寻找虚拟地址对应的页表项(需要编程)通过设置页表和对应的页表项,可建立虚拟内存地址和物理内存地址的对应关系。其中的get_pte函数是设置页表项环节中的一个重要步骤。此函数找到一个虚地址对应的二级页表项的内核虚

8、地址,如果此二级页表项不存在,则分配一个包含此项的二级页表。本练习需要补全get_pte函数 in kern/mm/pmm.c,实现其功能。请回答如下问题:请描述页目录项(Pag Director Entry)和页表(Page Table Entry)中每个组成部分的含义和以及对ucore而言的潜在用处。如果ucore执行过程中访问内存,出现了页访问异常,请问硬件要做哪些事情?解答:分析思路:pde_t为page directory entry,也就是一级页表的表项。 pte_t为page table entry,表示二级页表的表项。uintptr_t表示为线性地址,由于段式管理只做直接映射,

9、所以它也是逻辑地址。pgdir(一级页表)给出页表起始地址。通过查找这个页表,我们需要给出二级页表中对应项的地址。虽然目前我们只有boot_pgdir一个页表,但是引入进程的概念之后每个进程都会有自己的页表。有可能根本就没有对应的二级页表的情况,所以二级页表不必要一开始就分配,而是等到需要的时候再添加对应的二级页表。如果在查找二级页表项时,发现对应的二级页表不存在,则需要根据create参数的值来处理是否创建新的二级页表。如果create参数为0,则get_pte返回NULL;如果create参数不为0,则get_pte需要申请一个新的物理页(通过alloc_page来实现,可在mm/pmm.

10、h中找到它的定义),再在一级页表中添加页目录项指向表示二级页表的新物理页。注,新申请的页必须全部设定为零,因为这个页所代表的虚拟地址都没有被映射。当建立从一级页表到二级页表的映射时,需要注意设置控制位。这里应该设置同时设置上PTE_U、PTE_W和PTE_P(定义在mm/mmu.h):PTE_U:表示用户态的软件可以读取对应地址的物理内存页内容;PTE_W:表示物理内存页内容可写;PTE_P:表示物理内存页存在如果原来就有二级页表,或者新建立了页表,则只需返回对应项的地址即可。代码分析:A 步骤:(1)尝试获取页表起始地址; (2)若不成功则直接返回NULL,若成功则申请一个物理页;(3)获得

11、物理页的线性地址,在一级页表中添加页目录项指向表示二级页表的新物理页;(4)返回页表地址。B具体实现:问题解答:(1)请描述页目录项(Pag Director Entry)和页表(Page Table Entry)中每个组成部分的含义和以及对ucore而言的潜在用处。答:高20位表示下一级页表(或物理页表)的基址(4K对齐),后12位为标志位,分别为从低位起第06位为ucore内核占用,表示指向的下一级页面的某些特性(是否存在、是否可写);对于PDE,第7位表示如果pde的PTE_PS位为1,那么pde中所存的就不是下一级页表,而是一张4M页的起始地址;对于PTE,第7、8位强制位0;第911

12、位供内核以外的软件使用。(2)如果ucore执行过程中访问内存,出现了页访问异常,请问硬件要做哪些事情?答:出现页访问异常会触发缺页中断,缺页中断发生时的事件顺序如下:1) 硬件陷入内核,在内核堆栈中保存程序计数器。大多数机器将当前指令的各种状态信息保存在特殊的CPU寄存器中。 2) 启动一个汇编代码例程保存通用寄存器和其他易失的信息,以免被操作系统破坏。3) 当操作系统发现一个缺页中断时,尝试发现需要哪个虚拟页面。通常一个硬件寄存器包含了这一信息,如果没有的话,操作系统必须检索程序计数器,取出这条指令,用软件分析这条指令,看看它在缺页中断时正在做什么。4) 一旦知道了发生缺页中断的虚拟地址,

13、操作系统检查这个地址是否有效,并检查存取与保护是否一致。如果不一致,向进程发出一个信号或杀掉该进程。如果地址有效且没有保护错误发生,系统则检查是否有空闲页框。如果没有空闲页框,执行页面置换算法寻找一个页面来淘汰。5) 如果选择的页框“脏”了,安排该页写回磁盘,并发生一次上下文切换,挂起产生缺页中断的进程,让其他进程运行直至磁盘传输结束。无论如何,该页框被标记为忙,以免因为其他原因而被其他进程占用。6) 一旦页框“干净”后(无论是立刻还是在写回磁盘后),操作系统查找所需页面在磁盘上的地址,通过磁盘操作将其装入。该页面被装入后,产生缺页中断的进程仍然被挂起,并且如果有其他可运行的用户进程,则选择另

14、一个用户进程运行。7) 当磁盘中断发生时,表明该页已经被装入,页表已经更新可以反映它的位置,页框也被标记为正常状态。8) 恢复发生缺页中断指令以前的状态,程序计数器重新指向这条指令。9) 调度引发缺页中断的进程,操作系统返回调用它的汇编语言。10) 该例程恢复寄存器和其他状态信息。练习3:释放某虚地址所在的页并取消对应二级页表项的映射(需要编程)当释放一个包含某虚地址的物理内存页时,需要让对应此物理内存页的管理数据结构Page做相关的清除处理,使得此物理内存页成为空闲;另外还需把表示虚地址与物理地址对应关系的二级页表项清除。请仔细查看和理解page_remove_pte函数中的注释。为此,需要

15、补全在 kern/mm/pmm.c中的page_remove_pte函数。请回答如下问题:数据结构Page的全局变量(其实是一个数组)的每一项与页表中的页目录项和页表项有无对应关系?如果有,其对应关系是啥?如果希望虚拟地址与物理地址相等,则需要如何修改lab2,完成此事? 解答:分析思路:使用pte2page宏即可得到从页表项得到对应的物理页面所对应的Page结构体。得到结构体后,判断此页被引用的次数,如果仅仅被引用一次,对页面引用进行更改,降为零则这个页可以被释放。否则,只能释放页表入口。代码分析:A 步骤:(1)在页表存在情况下,利用pte2page得到从页表项得到对应的物理页面所对应的P

16、age结构体; (2)判断此页被引用的次数;(3)如果仅仅被引用一次,对页面引用进行更改,降为零则这个页可以被释放;(4)否则,释放页表入口,清除二级页表项。B具体实现:问题解答:(1)数据结构Page的全局变量(其实是一个数组)的每一项与页表中的页目录项和页表项有无对应关系?如果有,其对应关系是啥?答:Page结构体与物理页一一对应,pte2page函数从页表项找到对应物理页的Page结构体:即Page结构体和对应物理页的起始地址一一对应。(2)如果希望虚拟地址与物理地址相等,则需要如何修改lab2,完成此事? 答:通过ld工具形成的ucore的起始虚拟地址从0xC0100000开始,而bo

17、otloader把ucore放在了起始物理地址为0x100000的物理内存空间。要使得虚拟地址与物理地址相等:首先更改KERNBASE,从0xC000000到0x00000000,原因在于在没有开启页式地址转换前,内核逻辑地址经过一次段地址转换即直接得到物理地址:PA(物理地址)=LA(线性地址)=VA(逻辑地址)-KERNBASE;其次,虚拟地址由0xC0100000改成0x00100000。运行结果四、实验体会本实验是关于物理内存管理,主要从物理内存和建立页表两个方面设计实验,首先了解如何发现系统中的物理内存,然后了解如何建立对物理内存的初步管理,最后了解页表相关的操作总体来说还是有难度,尤其后面需要编程的内容需要很好理解各个文件的代码,参考答案进行分析,才能更好的理解实验内涵,通过实验也能深入理解段页式内存管理机制,对上课的内容有了更深理解体会。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1