《2023年山东大学操作系统实验七实验报告.docx》由会员分享,可在线阅读,更多相关《2023年山东大学操作系统实验七实验报告.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、计算机科学与技术学院实验报告实验题目:Extens i on o f AddrSp a ce学号:日期:20237 1 -25 班级:2023-3姓名:陶旭涛Ema i I:实验目的:在了解了 Nac h o s装入并执行单个用户进程的情况后,我们就需要进一步完 毕用户内存空间的扩充以便多用户程序同时驻留内存,进而使多用户进程并发执行。硬件环境:Mem: 3.9GCPU: I n tel Co r e tm 2 Quad CPU Q95 0 0 2.83G Hz x 4Di s k: 15. 5 GB软件环境:System: ubu n tu12. O4LST i 3 8 6g c c: (U
2、buntu 4.6.3 1 ubuntu5) 4. 6. 3n a chos sy s t e m实验环节:要在Nachos中实现多用户程序同时驻留内存并发执行,一方面涉及到Nac h o s 的两个系统调用:Exec ()和Ex it ()o这两个系统调用也是构造父子进程并发执行的 基础。假设我们有以卜两个用户程序:./ test/exec. c和./ t est/ha 11. c./test/ha1t.c第65页用户进程管理设计1 #i nc I ude s y s c a I I. h2 i nt3 ma i n ()4 (5 HaltO6 ./test/ex e c. c1 # i n
3、 c I u d e sy s ca I I. h2 i n t3 mai n 04 (5 S p acid pid;6 pid = Exec(. . / test/h a I t.nof f );7 Ha I t 08 )在文献. . / t e st / exec, c第5行上的语句Exec是一条N a c h os的系统功 能调用,它的功能为装入并执行以其参数为名的可执行文献,即创建一个新的 用户进程。假设我们先执行. /t e st/ex ec. n off程序,则./test/ e xec. no f f会在它还没有执行结束时又装入并执行此外一个程序halt, n。开,并与 它同时驻
4、留内存.DEBUG( ,ddn ,numPages, size);trst, set up the translation pageTable = new TranslationEntrynumPages;for (t = ; t Find();pageTablet.valid = TRUE;pageTablet.use = FALSE;pageTablei.dirty = FALSE;pageTablet.readonly = FALSE;/ a separate page, we could set its / pages to be read-onlyp a geTab lei. p h
5、ys i c a I Pa g e = us erm ap F i n d ();避免从头开始物 理存储覆盖了前一个用户程序的内存内容运用 N a c h os 在./ u ser pro g /b i tmap. h 中文献定义的 Bi t map 类。 运用bitma p记录和申请内存物理帧,使不同的程序装入到不同的物理空间中 去,下面是对新的内存分派存储算法,改善了对多个用户程序的同时进驻内存 的支持if (noffH.code.size ) DEBUG( ,. Wn ,noffH.code.vtrtualAddr, noffH.code.size);int nunberofPages;
6、nunberofPdgesMltvRoundUp(noffH.code.size,Pagesize);for(i= ;tReadAt(Mchtne-natnMe)rypdgeTablet.phy$kalPage * PageStze),PdgeSUe,noffH.code.tnFt.leAd ) DEBUG( , noffH.tnttData.vtrtualAddr,noffH.tnttData.size);executable-fleadAt(4(Mchtne-nainHe)ryfKffH.tnttData.vtrtuaUddr),noffH.initData.size,rxffH.tntt
7、Oata.tnFUeAddr);int nunberofP.firstP;nunberofP=dtvRoundup(noffH.tnttData.size,PageSlze);(Wr,PageStze);for(tfirstP;tReadAt(t(Aachtne-NtnNeRorypageTable(t.phystcdlPage * PageStze),PageStze,noffH.tnttData.tnFUeAddr+t*PageStze);)Print();)这是对B i (Map的代码修改,每次分派的时候要找到bitmap中的空闲页进行分派,而不能 从0页开始分派在AddressS p
8、ace类中声明b i (m a p对象static Bi t Ma p *mbi tma p=new Bi t Map(N u m P hysPa g e s );voidBitMap:Prtnt() (printf(n );for (int i = ; i ReadAt(char *)map, numWords * sizeof(unsigned),); )/ BitMap:WrtteBack/ Store the contents of a bitmap to a Nachos file./ file is the place to write the bitmap to/voidBttM
9、ap:WriteBack(OpenFtle *file)Ifile-WrtteAt(char *)map, numWords * sizeof(unsigned),);运营./nachos - x . . / t est /ex e c. nof fkingkingvm:/nachos-3.4/code/lab7-8$ ./nachos -x ./test/exec.noff thread0looped0times*thread1looped0times thread0looped1times thread1looped1times thread0looped2times thread1loo
10、ped2times*thread0looped3times thread1looped3times thread1looped4times thread0looped4timesthe allocated physical Address: the address in the executable file:40 copy size 128the allocated physical Address:128the address tn the executable file:168copy size 128the allocated physical Address:256 the addr
11、ess in the executable file:296 copy size 128page table dump:12 pages tn totalVtrPage,PhysPagee,01,12,23,34,45,56,67,78,89,910,1011,11Exec 调用the allocated physical Address:1536the address in the executable file:40copy size 128the allocated physical Address:1664the address in the executable file:168co
12、py size 128page table dump:10 pages in totalVirPage,PhysPage0,121,132,143,154,165,176,187,198,209,21Machine halting!Ticks: total 165, idle 0, system 140, user 25Disk I/O: reads 0, writes 0Console I/O: reads 0, writes 0Paging: faults 0Network I/O: packets received 0, sent 0Cleaning up.ktngktngvm:/nachos- 3.4/code/lab7-8$ |结论分析与体会: nach o s无法运营多个用户程序的因素在于物理页的分派,那么改变物理页的分 派,使多个程序的物理页不会互相覆盖,每个程序都能分派到相应的独立的物理 页,那么不就可以同时执行多个用户程序了吗。物理页的分派算法在BitMap类 中有实现,使用一个数组作为物理页的数据结构。在给用户程序分派物理页时, 不再使用与逻辑页相同的数值,而是使用Find。方法查找下一个可用的物理 页