版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计(综合实验)报告(2015 - 2016 年度第1学期)名称:操作系统综合实验题目:oslab综合实验院系:计算机系班级:学号: 学生姓名:指导教师:设计周数:分散进行成 绩:日期:2015年 10月29日实验1实验环境的使用、 综合实验的目的与要求熟悉操作系统集成实验环境 OS Lab的基本使用方法。练习编译、调试 EOS操作系统内核以及 EOS应用程序。、实验正文1. 启动 OS Lab2.1执行项目Windows 控制台窗口内容显示2.2调试项目2.2.1使用断点中断执行222 单步调试2.2.2 .3单步调试结果显示:练习使用“逐语句”功能和“跳出”功能2.2.3查看变量的值2
2、.2.4调用堆栈调用堆栈显示内容;进入Func函数双击main函数所在的行表示此函数是当前调用堆栈中的活动函数。3新建EOS内核项目4 EOS应用程序项目的生成和调试4.1新建EOS应用程序项目4.2调试项目添加断点后单步调试结果显示4.3查看软盘镜像文件中的内容4.4修改EOS应用程序项目名称5退出OS Lab6保存EOS内核项目 三、综合实验总结或结论思考与练习:1.在哪些情况下应该使用“逐过程”调试,在哪些情况下应该使用“逐语句”调试。答:逐语句为每执行一行语句,如果碰到函数调用它就会进入到函数里面。而逐过程碰到 函数时不进入函数,把函数调用当成一条语句去执行。2. 生成EOSSDK文件
3、夹的目的和作用。明白文件夹的组织结构和各个文件的来源和作用。 查看EOS应用程序包含了 SDK文件夹中的哪些头文件,是如何包含的?(1)EOS SDK为应用程序调用系统 API提供服务,可作为用户编程中使用的工具包集合。(2) 其主要包括INC头文件LIB文件夹、导入库文件和BIN文件夹、动态链接库、可执行 程序、二进制文件。(3) 包含的头文件有:eos.h负责导出API函数,eosdef.h 声明负责导出函数类型的定 义,error.h负责导出错误码。(4) EOS应用程序在项目的头文件中只是包含了eos.h文件,在eos.h文件中又包含了 eosdef.h 禾口 error.h 文件。实
4、验2操作系统的启动一、综合实验的目的与要求跟踪调试EOS在PC机上从加电复位到成功启动全过程,了解操作系统的启动过程。查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。二、实验正文1. 准备实验两个汇编文件。生成项目。找on緒mu新建一个 EOS Kernel 项目。打开 boot.asm 和 loader.asm到loader.bin文件,记录下此文件的大小1566字节。2调试EOS操作系统的启动过程2.1使用Bochs做为远程目标机找到“远程目标机”属性,将此属性值修改为“ BochsDebug 2.2调试BIOS程序后按回车,其中CS寄存器信息行中的2.2.1在Co nsole
5、 窗口中输入调试命令 sregs=0xf000 ”表示 CS寄存器的值为 OxfOOO。2.2.2输入调试命令r后按回车,显示当前CPU中各个通用寄存器的值。其中“ rip:OxOOOOOOOO:OOOOfffO ”表示 IP 寄存器的值为 OxfffO 。2.2.3输入调试命令 xp /1024b 0x0000,查看开始的1024 个字节的物理内存。在Console 中输出的这1K物理内存的值都为 0 ,说明BIOS中断向量表还没有被加载到此处。2.2.4输入调试命令xp /512b 0x7c00,查看软盘引导扇区应该被加载到的内存位置。输出的内存值都为0 ,说明软盘引导扇区还没有被加载到此
6、处。中MXm-.m4i#Br*4il MH4wMjimMp:hMKLMVOzw-MMUUP-MwM豪IMuflH十4ITwNHRIhrM可以验证BIOS第一条指令所在逻辑地址中的段地址和CS寄存器值是一致的,偏移地址和IP寄存器值是一致的。由于内存还没有被使用,所以其中的值都为0。2.3调试软盘引导扇区程序2.3.1.输入调试命令 vb 0x0000:0x7c00,添加断点2.3.2.输入调试命令c继续执行2.3.3.输入调试命令sreg 验证CS寄存器(0x0000 )的值。2.3.4. 输入调试命令r验证IP 寄存器(0x7c00 )的值。2.3.5输入调试命令 xp /1024b 0x0
7、000验证此时BIOS中断向量表已经被载入。4UAJmFTMiir個丹ibfEd1MShit 4*wWMM VwClFFHulrrLHWiy :Mlhr re-hs1914? Nr4wiiMN.nTIHellmUINriWOeTMRfWbilbi0k*IliaiHhRmMNhhi!kLHkWNkTIH&.1BidHVB-JBRd fl2.3.6.输入调试命令 xp /512b 0x7c00显示软盘引导扇区程序的所有字节码。237输入调试命令 xp /512b 0x0600 验证图3-2中第一个用户可用区域是空白的。238输入调试命令 xp /512b 0x7e00 验证图3-2中第二个用户可用
8、区域是空白的。p pr!iT|nM!i1!PriliJiJULLi x2.3.9自己设计两个查看内存的调试命令,验证这两个用户可用区域的高地址端是空白的。(1) xp /512b 0x7f00(2) xp /512b0x07002.3.10输入调试命令xp /512b 0xa0000 验证图3-2 中上位内存已经被系统占用。M41iLaIUaII :ta-iiJiLMMMl Mi Ch1UK* 辩11* Ffiffc-rr *!*kd-FkrrwTiTlad!* =WXlUKili:2.3.11自己设计一个查看内存的调试命令,验证上位内存的高地址端已经被系统占用。xp /512b OxbOOO
9、O ITur-rHrfK.TiT*13和failttalfDeHAbirAnri44t n-fiInrffl-ff154MFfcFFVkFffl-ffMud fNrdN.j*r斗?J3h=ur-rNwrcii.IaIE Killdi4M !rpavrHKTfHrrre-riMJMfB-ff5H4isfH条卜!1hIp.4ikH.LI4ifrWn-iri:注:查看loader.bin文件的大小应在属性”对话框中看。2.4调试加载程序使用查看虚拟内存的调试命令x /1wx 0x80001117查看内存中保存的 32位函数入口地址,在 Con sole 窗口中会输出:0x00000000800011
10、17 : 0x800*2.5调试内核在“监视”窗口中可以看到KiSystemStartupvoid (PVOID) 0x800* KiSystemStartup2.6 EOS启动后的状态和行为三、综合实验总结或结论1.为什么EOS操作系统从软盘启动时要使用 一个可以吗?它们各自的主要功能是什么?函数地址为vaid (PVOID) 0x80018130 OfiSyitmStwftupboot.bin 和loader.b in两个程序?使用如果将loader.bin的功能移动到 boot.bin文件中,则boot.bin文件的大小是否仍然能保持小于512字节?答:在IDE环境启动执行 EOS操作系
11、统时,会将boot.bin ,loader.bin, kernal.dll 三个二进制写入软件镜像文件中,然后让虚拟机来执行软盘中的EOS操作系统,使用其中一个是不能运行的。2. 为什么软盘引导扇区程序选择将loader.bin 加载到第一个可用区域的 0x1000处呢?这样做有什么好处?这样做会对loader.b in 文件的大小有哪些限制。答:用户只用两个可用区域,加载位置非此即彼。第一个可用用户区是低地址区,且空间 大小比较小,适合容纳小文件,所以我们选择将占用空loder.bin加载到第一用户区。优点:低地址开始,便于搜索查找小文件占用小空间,节约资源。限制:loder.bin文件必须
12、小 于 1c00k 。实验3进程的创建一、综合实验的目的与要求练习使用EOSAPI函数CreateProcess 创建一个进程,掌握创建进程的方法,理解进程和 程序的区别。调试跟踪 CreateProcess 函数的执行过程,了解进程的创建过程,理解进程 是资源分配的单位。二、实验正文1准备实验2练习使用控制台命令创建EOS应用程序的进程Hello.exe应用程序输出结果个应用程序的进程3练习通过编程的方式让应用程序创建另 可知子进程结束后,父进程继续执行The process exit ulth 0*4 调试 CreateProcess 函数在“反汇编”窗口的左侧显示的虚拟地址中看到所有指令
13、的虚拟地址都大于0x80000000 ,说明内核(kernel.dll ) 处于高2G的虚拟地址空间中。OiSOOlldSc查看ma in函数的指令所在的虚拟地址都是小于0x80000000,说明应用程序(eosapp.exe )处于低2G的虚拟地址空间中。 余工山匚氓5 调试 PsCreateProcess 函数进程执行的结果riel lOiWOtrldf 1 Hellouarldf ZHelo.uorId! 3Hel lo, war Id f 4He 1lo,uarld! S Bye -bye!The process exit uith 0L绘制一幅进程创建过程的流程图。提供的源代码基础上
14、时创建10个进程。6练习通过编程的方式创建应用程序的多个进程多个进程并发执行的结果:有结果显示可知有两个进程在执行三、综合实验总结或结论1.在源代码文件 NewTwoProc.c进行修改,要求使用 hello.exe 同修改结果如下图所示:1 laworld* 3)louarld* 3I la rwar Id* 1I la,world? 4I LauorId! 4 llauarId* 411口uarLdf AI Lo,Morld* 4I lowarIdT 4The processThe processThe processOne ex it uith 0. tuo ex It ulth 0.3
15、 exit withThe process 4 exit with 0”Thfi process 5 exit with 0,The process 6 exit with 0, The process 7 ex it ultb 0. The process H exit ulth 氛The process 9 ex it with 0.The process16 exit uith 0,部分修改代码如下图所示:(“”部分为相似的4-9进程代码)if (CreateProcess(A:Hello.exe, NULL, 0, & Startupl nfo, & Procl nfoOne)& Cr
16、eateProcess(A:Hello.exe, NULL, 0, & StartupI nfo, & ProcI nfoTwo)& CreateProcess(A:Hello.exe, NULL, 0, & Startupinfo, & Proclnfo3) & CreateProcess(A:Hello.exe, NULL, 0, & Startupinfo, & Proclnfo10) WaitForSi ngleObject(Proc InfoOne.P rocessHa ndle, INFINITE);WaitForSi ngleObject(Procl nfoTwo.Process
17、Ha ndle, INFINITE);WaitForSingleObject(ProcInfo3.ProcessHandle, INFINITE);WaitForSingleObject(ProcInfo10.ProcessHandle, INFINITE);GetExitCodeProcess(ProcInfoOne.ProcessHandle, &ulExitCode);GetExitCodeProcess(ProcInfo3.ProcessHandle, &u lExitCode);printf(nThe process 3 exit with %d.n, ulExitCode); Ge
18、tExitCodeProcess(ProcInfo10.ProcessHandle, & ulExitCode);printf(nThe process 10 exit with %d.n, ulExitCode);CloseHa ndle(Procl nfoOn e.ProcessHa ndle);CloseHa ndle(Procl nfoTwo.ThreadHa ndle);CloseHandle(ProcInfo3.ProcessHandle);CloseHandle(ProcInfo3.ThreadHandle);CloseHandle(ProcInfo10.ProcessHandl
19、e);CloseHandle(ProcInfo10.ThreadHandle);2.在 PsCreateProcess 函数中调用了 PspCreateProcessEnvironment 函数后又 先后 调用了 PspLoadProcesslmage 和PspCreateThread 函数,学习这些函数的主要功能。能够交换这些函数被调用的顺序吗?答:PspCreateProcessEnvironment创建了进程控制块,地址空间和分配了句柄表,PspLoadProcesslmage将进程的可执行映象加载的到了进程的地址空间中,PspCreateThread 创建了进程的主线程。这三个函数知道
20、自己从哪里开始执行,执行哪些 指令,因此不能交换它们的顺序。实验4线程的状态和转换一、综合实验的目的与要求调试线程在各种状态间的转换过程,熟悉线程的状态和转换。通过为线程增加挂起状态,加深对线程状态的理解。二、实验正文i准备实验2调试线程状态的转换过程2.1线程由阻塞状态进入就绪状态“ *Thread ” State 域的值为 3 ( WagingQ叶其 血玄,双向链表项 StateListEntryhWKt血牝的Next和Prev指针的值都不为0屮“颍脈战,说明这个线程还处于阻塞状态,并在StartAddr 域的值为StartAddr 0x800 lSe9a 说明这个线程就某个同步对象的等待
21、队列中;lopC on soleDispatchThread 是控制台派遣线程。按F10调试,此时的Next和Prev指在“调用堆栈”窗口中双击PspU nwaitThread函数对应的堆栈项,State 域的值为0 ( Zero )严:八巳,双向链表项 StateListEntryEtateListEntry 针的值都为0,说明这个线程已经处于游离状态。按F5继续执行,在PspReadyThread函数中的断点处中断。按F10单步调试直到此函数 a1 vva w ji一 ! an的最后。此时State 域的值为1( +Re(ady)5怙烧,双向链表项StateListEntry 的Next和
22、Prev指针的值都不为 0戶圖03 ,说明这个线程已经处于就绪状态,并已 经被放入优先级为 24的就绪队列中。2.2线程由运行状态进入就绪状态 2.3线程由就绪状态进入运行状态 2.4线程由运行状态进入阻塞状态 3为线程增加挂起状态suspend 31Suspend t hredd (31) KLii:cex 营.31Besuine threadOl) success.三、综合实验总结或结论1思考一下,在本实验中,当loop线程处于运行状态时,EOS中还有哪些线程, 它们分别处于什么状态。可以使用控制台命令pt查看线程的状态。答:有一个优先级为 0的空闲线程处于就绪状态,8个优先级为24的控制
23、台线程处于阻塞状态,1个优先级的24的控制台派遣线程处于阻塞状态。2.当loop线程在控制台1中执行,并且在控制台2中执行suspend命令时,为什么控 制台1中的loop线程处于就绪状态而不是运行状态?答:在控制台2中执行suspend命令时,优先级为 24的控制台2线程抢占处理器,即控 制台2线程处于运行状态,因此此时loop处于就绪状态。3总结一下在图5-3中显示的转换过程,哪些需要使用线程控制块中的上下文,哪些不需要使用,并说明原因。答:就绪t运行,运行t就绪,运行t阻塞需要使用TCB因为这些过程有线程调进或调出处理机的过程,新建t就绪,阻塞t就绪不需要使用TCB上下文,因为没有占用处
24、理机资源。4.请读者找出这些转换过程的原语操作(关中断和开中断)是在哪些代码中完成的。答:IntState=KeEnablelnterrupts(FALSE);/关中断KeEn ableI nterrupts( In tState);/开中断实验5进程的同步一、综合实验的目的与要求使用EOS的信号量, 编程解决生产者一消费者问题,理解进程同步的意义。调试跟踪EOS信号量的工作过程,理解进程同步的原理。修改EOS的信号量算法,使之支持等待超时唤醒功能,加深理解进程同步的原理。二、实验正文1准备实验2使用EOS的信号量解决生产者-消费者问题 3调试EOS信号量的工作过程3.1创建信号量PsI ni
25、 tializeSemaphore函数中用来初始化信号量结构体成 员的值,应该和传入 CreateSemaphore函数的参数值是一致的。Iciti日I匚ost 二 4日Maximum匚cunt 二血3 晁maphow 二 P茸EMAPHOREChtSOSfbafO单步调试PsInitializeSemaphore函数执行的过程,函数的调用层次:PsTnrti a I izeSemaphoreiPspOnCreateSerndphoreObjectC3.2等待、释放信号量 3.2.1等待信- 号量 (不阻塞)II Semaphore-Count = 0x9完成PsWaitForSemaphor
26、e 函数中所有操作。Empty的计数减少了 1 (由10变为了 9 )Serra phore-* C ount 二 Oxa3.2.2释放信- 号量(不唤醒)完成PsReleaseSemaphore函数中的所有操作。Full计数增加了 1 (由0变为了 1 )。Semaphore-* 匚 aunt = 0x0 Semaphore-Cou nt = 0x1323等待信号量(阻塞)在“调用堆栈”窗口中双击Producer函数所在的堆栈帧,绿色箭头指向等待Empty信号量的代码行,查看 Producer函数中变量i的值为14 ,表示生产者线程正在尝试生产14在“调用堆栈”窗口中双击PsWaitForS
27、emaphore 函数的堆栈帧,查看 Empty信号量计数 -(Semaphore-Count)的值为-释放信- 号量(唤醒)Consumer函数中变量i的值为4 ,说明已经消费了 4号产品。.=-I查看 PsReleaseSemaphore 函数中 Empty 信号量计数(Semaphore-Count)的值为-1,和 ,亠Semaphore- = Count 二 Oxffffffff I生产者线程被阻塞时的值是一致的。单步调试PsReleaseSemaphore函数,Empty计数的值已经由-1增加为了 05亡maphore-A 匚gunt 二 OicIfiTffff ern
28、aphoxe-Courrt = 0x04修改EOS的信号量算法(1) 修改 PsWaitForSemaphore 函数:if (Semaphore-Cou nt 0)Semaphore-Co un t-;flag=STATUS_SUCCESS; elseflag=PspWait (&Semaphore-WaitListHead,Milliseco nds);KeE nable In terrupts(I ntState);return flag;(2) 修改 PsReleaseSemaphore 函数:while(!ListlsEmpty(&Semaphore-WaitListHead)&(R
29、eleaseCou nt)PspWakeThread(&Semaphore-WaitListHead, STATUS_SUCCESS);PspThreadSchedule();ReleaseCo un t-;Semaphore-Co un t=Semaphore-Co un t+ReleaseCo unt;Status = STATUS_SUCCESS;KeEn ableI nterrupts(l ntState);return Status;测试结果:根据文档中的测试方法可看到结果中有两个消费者Consume a QConsume a 1Frnduce a ZProduce a 3Produ
30、ce a 1Prnrluce 3 5ConsuMer a ZConsune a 3Proea1GPhodlUCnea11Producea1Z匚口 TISXLiq七GC 口 T1SUPK?7尸r id nt zmfV13C; 口 hlunProduce a 7Produce a 8Produce a 3Consune a 4Consune a 5三、综合实验总结或结论1. 思考在 ps/semaphore.c文件内的 PsWaitForSemaphore 和 PsReleaseSemaphore 函数 中,为什么要使用原子操作?答:EOS内核中维护了大量内核数据,正是这些数据描述了EOS操作系统
31、的状态如果有一组相互关联的内核数据共同描述了这个操作系统的某个状态,那么在修改这样一组内核数 据时就必须保证一致性。这就要求修改这部分数据的代码在执行过程中不能被打断,这种 操作叫做“原语操作”。2. 根据本实验3.3.2 节中设置断点和调试的方法,自己设计一个类似的调试方案来验证消费者线程在消费24号产品时会被阻塞,直到生产者线程生产了24号产品后,消费者线程才被唤醒并继续执行的过程。答:Consunc:a1?ConsumtdL18ConsuneConsuncaConsunc:aConsuneaConsuncaZ3生产到23号产品后,进程阻塞。实验6时间片轮转调度一、综合实验的目的与要求调试
32、EOS的线程调度程序,熟悉基于优先级的抢先式调度。 为EOS添加时间片轮转调度,了解其它常用的调度算法。二、实验正文1准备实验2阅读控制台命令“ rr ”相关的源代码3调试线程调度程序3.1调试当前线程不被抢先的情况查看ThreadFunction函数中变量pThreadParameter-Y 的值应该为0 ,说明正在调试的是第0个新建的线程。*小心八二丄按2次F5的循环输出的内容:StartAddr = 0x8001Sbf3 ,Priority = 0x3,State w 0x2rRemainderTiAs - 0x6 VyaitStatus = QxOr以二进制格式查看就绪位图的值/t F
33、spRcadyBiUap 100000001HighestPriorityBitSca nReverse 函数会从就绪位图中扫描最高优先级,并保存在变量 中。查看变量 HighestPriority 的值为 8。.叫一 一 二_Thread 0 (B): 3043363.2调试当前线程被抢先的情况激活虚拟机窗口,可以看到第0个新建的线程正在执行。在“监视”窗口中查看就绪位图的值为1000000000000000100000001,说明此时在优先级为 24的就绪队列中存在就绪线程。在“监视”窗口中添加表达式“ ListGetCount(&PspReadyListHeads24),其值为 1,说明
34、优先级为 24 的就绪队列中只有一个就绪线程。扫描就绪位图后获得的最高优先级的值HighestPriority也就应该是 24。显示 0x18=24/l FxpRt|込吊y 二 W竟Li EtGftCourLt (AFpReadyLi stHc80x13Li stGetCcunt CftFipReadyLi stHe&ds 24)0x1、Liyuni(址即肌tdyLi0x0Li 就GttOucA (APipHtidyLi z (Mt 皿) OiH继续调试优先级 24的线程已经进入了“运行”状态。4为EOS添加时间片轮转调度修改部分代码:VOID PspRoundRobin( VOID )if(
35、NULL!=PspCurrentThread&Running=PspCurrentThread-State) PspCurrentThread-RemainderTicks-;if (0 = PspCurrentThread-RemainderTicks) PspCurrentThread-RemainderTicks = TICKS_OF_TIME_SLICE; if(BIT_TEST(PspReadyBitmap, PspCurrentThread-Priority) PspReadyThread(PspCurrentThread); 测试:能看到20个线程轮流执行的效果Thread 0
36、(9)::ZZ044Thread 1 (B):Z1929Thread 2 (6):;21993Thread 3 (8::ZE045Thread 4 (8)::220G3Thread 5 (8):;Z1604Thread b 【日):22432Thread 7 (8):21556Thread 8 (8);ZZ299Thread 勺曲”:Z173?Threadie:Z2059Thread11(0):ZZ561Thread12(6):Z16G2Thread13CHJ :22091Thread14:21767Thread15:Z1563TJiread16(8):Z257BThread17(8):ZIQ
37、ZAThread16(0):21836Thread19:213765修改线程时间片的大小执行的效果:参数=100Thread 0 8)ZZ2B0Thread 1 (8):ZZ431Thread Z (8)ZZ045Thread 3 (B)zz3oeThread 4ZZ9BBThread 5 (8):ZZ2iThread 6 :ZZS31Thread 7 (8)Z1337Thread 8 (8)ZZ6Z4Thread 孑(8)ZZS%Thread 10 (GtZ1B79Thread 11 (S)ZZ53BThread 1Z B)Z17B6Thread 13 (B)ZZ164Thread H (6
38、)2Z465Thread 15 恂,;ZZ043Thread 16 (B)ZZ55ZThread 17 (8):ZZZMThread 18 (B)ZZ733Thread 19 G):ZZ07S参数=20Thrend G(8:1第5?Thread 1(3):EQ369Thread 2佃):20535T)read 3(S):Z0Z78Thread 4(8ZOZllThread 5(8):僦56Thread 6(3):63?TJiread 7(9):Z0Z59Thread 8(8):zezyzThread 3(8):EG39QThread 108):205BThread 11 (8):2064TJt
39、read 12 (B):1931Thread 13 (B):2053Thread 14 (8):2636Thread 15 (B);Z03ZTJiread 16 (8):Z017T)rrad 1?(B):2625TJiread 1a(B):ZG15Thread 1勺(8);2G3?ThrcAd Thread Thread Thread ThreadThread ThreadThread Thread Thread Thread Thread Thread ThrAd Thread Thread Thread Thread Thread0 (8);1 (8):Z:3:4 (B):5 CB):6
40、CB):7:8:3 (8):10 (8)11 (B)12 pnPage Count: B176.Kef*ory Count: B17 * 40% = 334BHH% Byte,ISeroed Pge Count: Q.Tree Page Count: 71Z6.Used Pdge Count: 1050.可知其空闲页为7126,零页链表为0,已用表为1050.按F10单步调试 MiFreePages函数的执行过程,结果如图pnPage Cmnt : B1L肚.Heraury Count 0176 * 4&9E = 3348889& By te ZerQEd Fage Count 0.Free
41、Fage Count: 71Zb,Used Page Count 1050aw啊nnn用 AJter ftJ IDcate line Page 睜优忖忖Page Caunt: 0,Free Page Count: 7125, Used Page Count: 1051.可知其再分配1页后,空闲页为 7125,零页链表为0,已用表为1051,即用空闲页分配,没用零页链表分配。4阅读控制台命令“ vm相关的源代码,并查看其执行的结果输入命令“ A: LoopApp.exe 后按回车。此时就使用EOS应用程序文件LoopApp.exe创建了一个应用程序进程,由于此进程执行了一个死循环,所以此进程不会
42、结束执行,除非关End less loop.5在系统进程中分配虚拟页和释放虚拟页Qx白QOQ3QOO调试释放虚拟页的过程:BaseAddress由初始化的变成了 B aseAd d re, s=OxaOOOSa 20, 和 Regi on Size 由初始化的尺亡9心广5| _ 0辺 变成了RegionSiie=(h aOOOSd le, 在调用 MmAllocateVirtualMemory 函数时将 RegionSize 参数的值设置为PAGE_SIZE*2+1,观察“输出”窗口中转储的信息,输出文本略。 三、综合实验总结或结论1. 在本实验 3.3 中,如果分配了物理页后,没有回收,会对
43、EOS 操作系统造成什么样的影响?目前EOS操作系统内核函数 MiAllocateAnyPages能处理所有物理页被分配完毕的 情况吗?答:(1) 会造成自由页链表和零链表不断减少,甚至为空。所有物理页都分配完毕的现象。(2) 不能。2. 尝试从性能的角度分析内核函数MiAllocateAnyPages和MiAllocateZeroedPages。尝试从安全性的角度分析分配零页的必要性。答: MiAllocateAnyPages 分配物理页。首先从空闲页链表中分配,如果分配空闲链表不足 则再从零页链表分配。MiAllocateZeroedPages首先从零页链表中分配,如果零页不足则从 空闲链
44、表分配。3. 观察本实验3.4中使用“ vm”命令输出的系统进程的虚拟地址描述符,可以看到在2号描述符和 3 号描述符之间有两个虚拟页的空隙,尝试结合虚拟页的分配和释放说明产生 这个空隙的原因。答:产生空隙是由于虚拟页被释放而造成的。在启动时会有一个初始化线程在初始化完毕 之后就退出了,线程的堆栈所占用的虚拟页也就被释放了。4. 在本实验 3.5 中,调用 MmAllocateVirtualMemory 函数分配虚拟页时只使用了MEM_RESERVE标志,没有使用 MEM_COMMIT标志,尝试说明这两个标志的区别。答:使用MEM_RESERVE标志分配虚拟页时,没有为其映射实际的物理页。使用
45、 MEM_COMMIT 标志分配虚拟页时,会为其映射实际的物理页。实验 8 分页存储器管理一、综合实验的目的与要求学习 i386 处理器的二级页表硬件机制,理解分页存储器管理原理。查看 EOS 应用程序进程和系统进程二级页表映射信息,理解页目录和页表的管理方式。 编程修改页目录和页表的映射关系,理解分页地址变换原理。二、实验正文1 准备实验2 查看 EOS 应用程序进程的页目录和页表 验证结果与指导教程的二级页表映射信息结果相同。(输出文本略)输出文本略)3 查看应用程序进程和系统进程并发时的页目录和页表4查看应用程序进程并发时的页目录和页表(输出文本略)5在二级页表中映射新申请的物理页(输出
46、文本略)三、综合实验总结或结论1.观察之前输出的页目录和页表的映射关系,可以看到页目录的第0x300个PDE映射的页框号就是页目录本身,说明页目录被复用为了页表。而恰恰就是这种映射关系决定了4K的页目录映射在虚拟地址空间的0xC0300000-0xC0300FFF,4M的页表映射在0xC0000000-0xC03FFFFF。现在,假设修改了页目录,使其第0x100个PDE映射的页框号是页目录本身,此时页目录和页表会映射在4G虚拟地址空间的什么位置呢?答:页目录占用1个物理页,页框号是0x409.页表占用5个物理页,页框号是0x41D,0x401,0x403,0x404,0x402.2思考页式存储管理机制的优缺点。答:优点:虚存量大,适合多道程序运行,动态页式管理提供了内外存统一管理的虚存实现方式。内存利用率高,不要求作业连续存放,有效地解决了内存碎片问题。缺点:要进行页面中断缺页中断等处理,系统开销较大,有可能产生”抖动”现象。地址变换机构复杂,一般采用硬件实现,添加了机器成本。实验10磁盘调度算法一、综合实验的目的与要求通过学习E
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度废渣运输环保达标服务协议3篇
- 2025年压路机租赁及施工安全保障协议2篇
- 福建信息职业技术学院《日本作家与流派研究》2023-2024学年第一学期期末试卷
- 2025版医疗健康居间服务合同范本2篇
- 福建卫生职业技术学院《环境科学专业英语》2023-2024学年第一学期期末试卷
- 福建体育职业技术学院《面向对象C程序设计》2023-2024学年第一学期期末试卷
- 2024版农产品担保合同连带责任约定3篇
- 2024版房屋买卖合同00111110
- 2024年中国钢桶市场调查研究报告
- 二零二五年度冷链配送板车运输合同
- 保洁突发事件应急预案
- 胆囊术后并发症护理
- 医疗废物暂存间消毒制度
- 2023-2024学年人教版高中信息技术必修二第二章第二节《 信息系统的开发过程》教案
- 2024六年级英语上册 Module 9 Unit 1 Do you want to visit the UN building教案 外研版(三起)
- 2024年广东省高中学业水平合格性考试语文试卷真题(含答案解析)
- 混凝土股东合同范本
- 人教版九年级英语知识点复习课件全册
- 2024年7月国家开放大学专科《办公室管理》期末纸质考试试题及答案
- 2024年自然资源部直属企事业单位公开招聘考试笔试(高频重点提升专题训练)共500题附带答案详解
- 五金材料采购投标方案(技术方案)
评论
0/150
提交评论