实验7 冯文博201308130012.doc_第1页
实验7 冯文博201308130012.doc_第2页
实验7 冯文博201308130012.doc_第3页
实验7 冯文博201308130012.doc_第4页
实验7 冯文博201308130012.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验七Extension of AddrSpace1、 实验目的 扩展现有的class AddrSpace的实现,使得Nachos可以实现多用户程序,完成系统调用 Exe,使Nachos按页分配内存空间2、 实验环境主机Win7搭载虚拟机VMwave下的Ubuntu 14.04三、实验步骤及调试结果1. 进入test文件夹,编写一个exec.c的源码,然后编译生成一个可执行文件exec.c#include syscall.hintmain()SpaceId pid;pid = Exec(./test/halt.noff);Halt();打开Makefile文件,修改./test/Makefile文件,将exec加入到targets定义中:targets= halt shell matmult sort exec。在./test中重新make生成exec.noff可执行文件执行make命令,生成用户执行文件exec.noff2. 复制usergrog其余文件到lab7-8中3. Nachos原来实现AddressSpace分配的时候没有使用bitmap来寻找空闲页,而是直接的从0号内存空间开始分配,因而需要修改成使用bitmap的find函数分配内存空间在进入addrspace.cc中在头文件中加入#include bitmap.h在构造函数开头加入static BitMap* mbitmap=new BitMap(NumPhysPages);修改/ how big is address space? size = noffH.code.size + noffH.initData.size + noffH.uninitData.size + UserStackSize;为size=divRoundUp(noffH.code.size,PageSize)*PageSize+divRoundUp(noffH.initData.size,PageSize)*PageSize + noffH.uninitData.size + UserStackSize;然后/ first, set up the translation pageTable = new TranslationEntrynumPages; for (i = 0; i Find();pageTablei.valid = TRUE;pageTablei.use = FALSE;pageTablei.dirty = FALSE;pageTablei.readOnly = FALSE; / if the code segment was entirely on / a separate page, we could set its / pages to be read-only 修改if (noffH.code.size 0) DEBUG(a, Initializing code segment, at 0x%x, size %dn, noffH.code.virtualAddr, noffH.code.size); executable-ReadAt(&(machine-mainMemorynoffH.code.virtualAddr),noffH.code.size, noffH.code.inFileAddr);为 if (noffH.code.size 0) DEBUG(a, Initializing code segment, at 0x%x, size %dn, noffH.code.virtualAddr, noffH.code.size);int numberofPages;numberofPages=divRoundUp(noffH.code.size,PageSize);for(i=0;iReadAt(&(machine-mainMemorypageTablei.physicalPage * PageSize),PageSize,noffH.code.inFileAddr+i*PageSize); 修改 if (noffH.initData.size 0) DEBUG(a, Initializing data segment, at 0x%x, size %dn, noffH.initData.virtualAddr, noffH.initData.size); executable-ReadAt(&(machine-mainMemorynoffH.initData.virtualAddr),noffH.initData.size, noffH.initData.inFileAddr); 为 if (noffH.initData.size 0) DEBUG(a, Initializing data segment, at 0x%x, size %dn, noffH.initData.virtualAddr, noffH.initData.size); executable-ReadAt(&(machine-mainMemorynoffH.initData.virtualAddr),noffH.initData.size, noffH.initData.inFileAddr);int numberofP,firstP;numberofP=divRoundUp(noffH.initData.size,PageSize);firstP=divRoundUp(noffH.initData.virtualAddr,PageSize);for(i=firstP;iReadAt(&(machine-mainMemorypageTablei.physicalPage * PageSize),PageSize,noffH.initData.inFileAddr+i*PageSize);4. 打开exception.cc在此时,Nachos仅能处理带有SC_HALT代码的系统调用。寄存器$2包含系统调用代码(如果异常是一个系统调用异常)且寄存器$4-$7包含着当系统调用开始处理时的前4个参数。系统调用的返回值,如果有,都将返回$2。对于系统调用Halt的异常处理只是简单的模拟了Interrupt类指向的中断函数Halt()我们需要实现Nachos的系统调用,采用的是触发异常中断的,在userprog/exception.cc,添加SC_Exec和SC_Exit异常添加头文件#include progtest.hvoidExceptionHandler(ExceptionType which) int type = machine-ReadRegister(2); if (which = SyscallException) & (type = SC_Halt) DEBUG(a, Shutdown, initiated by user program.n); interrupt-Halt(); else if(which = SyscallException) & (type = SC_Exec) /系统调用为exec时 int paraddr=machine-ReadRegister(4); /读取参数 char fn40; for(int i=0;iReadMem(paraddr+4*i,4,(int *)(fn+4*i); /进行内存读取,获得名称 StartProcess(fn);/ru开始进程 else if(which=SyscallException) & (type=SC_Exit)interrupt-Halt(); 5. 编写头文件protest.h使他包含prote.cc中的函数#include copyright.h#include system.h#include console.h#include addrspace.h#include synch.h/-/ StartProcess/ Run a user program. Open the executable, load it into/memory, and jump to it./-voidStartProcess(char *filename);static void ReadAvail(_int arg);static void WriteDone(_int arg) ;void ConsoleTest (char *in, char *out);6. 进入lab7-8文件夹,执行make命令7. 执行./nachos x ./test/exec.noff命令加载进来的程序的地址空间没有覆盖原来那个程序的地址空间,使用新的地址空间去执行关机操作Machine halting!实现了一个程序加载另一个程序运行。四、结论分析与体会Nachos之前没有实现按页分配地址空间,物理页和逻辑页地址一致,而且数据段代码段连续分配每当一个新的用户程序建立的时候,虚拟地址和物理地址

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论