欢迎来到天天文库
浏览记录
ID:22281112
大小:129.19 KB
页数:6页
时间:2018-10-28
《实验7冯文博201308130012》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、实验七ExtensionofAddrSpace一、实验目的扩展现有的classAddrSpace的实现,使得Nachos可以实现多用户程序,完成系统调用Exe,使Nachos按页分配内存空间二、实验环境主机Win7搭载虚拟机VMwave下的Ubuntu14.04三、实验步骤及调试结果1.进入test文件夹,编写一个exec.c的源码,然后编译生成一个可执行文件exec.c/♦include"syscall.h"intmain(){Spaceldpid;pid=Exec("../test/halt.noff");Halt();}打开
2、Makefile文件,修改../test/Makefile文件,将exec加入到targets定义中:targets=haltshellmatmultsortexec。在../test中重新make生成exec.noff可执行文件执行make命令,生成用户执行文件exec.noff2.复制usergrog其余文件到lab7-8中3.Nachos原来实现AddressSpace分配的时候没有使用bitmap来寻找空闲页,而是直接的从0号内存空间开始分配,因而需要修改成使用bitmap的find函数分配A存空间在进入addrspace
3、.cc中在头文件中加入/tinclude"bitmap.h"在构造函数开头加入staticBitMap*mbitmap=newBitMap(NumPhysPages);修改//howbigisaddressspace?size=noffH.code.size+noffH.initData.size+noffH.uninitData.size+UserStackSize;为size=divRoundUp(noffH.code.size,PageSize)*PageSize+divRoundUp(noffH.initData.size
4、,PageSize)*PageSize+noffH.uninitData.size+UserStackSize;然后//first,setupthetranslationpageTable=newTranslationEntry[numPages];for(i=0;iFind();pageTable[i].valid=
5、TRUE;pageTable[i].use=FALSE;pageTable[i].dirty=FALSE;pageTable[i].readonly=FALSE;//ifthecodesegmentwasentirelyon//aseparatepage,wecouldsetits//pagestoberead-only}修改if(noffH.code.size>0){DEBUG(’a',"Initializingcodesegment,at0x%x,size%d",noffH.code.virtualAddr,noffH.c
6、ode.size);executable->ReadAt(&(machine->mainMemory[noffH.code.virtualAddr]),noffH.code.size,noffH.code.inFileAddr);}为if(noffH.code.size>0){DEBL)G('a',"Initializingcodesegment,at0x%x,size%d",noffH.code.virtualAddr,noffH.code.size);intnumberofPages;numberofPages=divRo
7、undUp(noffH.code.size,PageSize);for(i=0;iRead
8、At(&(machine->mainMemory[pageTable[i].physicalPage*PageSize]),PageSize,noffH.code.inFileAddr+i*PageSize);}}修改if(noffH.initDa
此文档下载收益归作者所有