欢迎来到天天文库
浏览记录
ID:47137595
大小:170.50 KB
页数:6页
时间:2019-08-11
《实验7 冯文博201308130012》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验七ExtensionofAddrSpace一、实验目的扩展现有的classAddrSpace的实现,使得Nachos可以实现多用户程序,完成系统调用Exe,使Nachos按页分配内存空间二、实验环境主机Win7搭载虚拟机VMwave下的Ubuntu14.04三、实验步骤及调试结果1.进入test文件夹,编写一个exec.c的源码,然后编译生成一个可执行文件exec.c#include"syscall.h"intmain(){SpaceIdpid;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函数分配内存空
3、间在进入addrspace.cc中在头文件中加入#include"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(
4、noffH.initData.size,PageSize)*PageSize+noffH.uninitData.size+UserStackSize;然后//first,setupthetranslationpageTable=newTranslationEntry[numPages];for(i=0;i
5、Find();pageTable[i].valid=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
6、n",noffH.code.virtualAddr,noffH.code.size);executable->ReadAt(&(machine->mainMemory[noffH.code.virtualAddr]),noffH.code.size,noffH.code.inFileAddr);}为if(noffH.code.size>0){DEBUG('a',"Initializingcodesegment,at0x%x,size%d",noffH.code.virtualAddr,noffH.code.siz
7、e);intnumberofPages;numberofPages=divRoundUp(noffH.code.size,PageSize);for(i=0;i8、f("copysize%d",PageSize);executable->ReadAt(&(machine->mainMemory[pageTable[i].physicalPage*PageSize]),PageSize,noffH.code.inFileAddr+i*PageSize);}}修改if(noffH.initData.s
8、f("copysize%d",PageSize);executable->ReadAt(&(machine->mainMemory[pageTable[i].physicalPage*PageSize]),PageSize,noffH.code.inFileAddr+i*PageSize);}}修改if(noffH.initData.s
此文档下载收益归作者所有