




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年甘肃张掖肃南县县直事业单位引进高层次人才急需紧缺专业目录考前自测高频考点模拟试题及答案详解(新)
- 2025广西壮族自治区南宁生态环境监测中心招聘1人考前自测高频考点模拟试题及完整答案详解一套
- 2025湖南长沙海关招聘12360服务热线话务员模拟试卷(含答案详解)
- 2025安徽淮南市招聘村级后备干部81人模拟试卷及1套完整答案详解
- 2025广西百色市平果市投资促进局城镇公益性岗位人员招聘1人考前自测高频考点模拟试题及答案详解(典优)
- 2025年安徽师范大学校医院专业技术人员招聘2人考前自测高频考点模拟试题附答案详解(典型题)
- 2025年陕西师范大学化学化工学院招聘模拟试卷有答案详解
- 2025年城市社区卫生服务中心合同工招聘合同模板
- 2025内蒙古职业技术学院招聘引进专任教师13人模拟试卷含答案详解
- 2025内蒙古某国企招聘考前自测高频考点模拟试题及答案详解(夺冠系列)
- GB/T 20863.2-2025起重机分级第2部分:流动式起重机
- 仓库安全培训课件
- 国开2025年《人文英语4》综合测试答案
- 算力:新质生产力的核心引擎
- 学生历史思维品质提升策略浅识
- DB32∕T 3812-2020 建筑同层排水工程技术规程
- 《创伤失血性休克中国急诊专家共识(2023)》解读 2
- 项目部领导带班记录
- 2025年中国心力衰竭诊断和治疗指南
- 2025年新修订《治安管理处罚法》
- 生产企业退货管理办法
评论
0/150
提交评论