好文档 - 专业文书写作范文服务资料分享网站

nachosLab实习报告

天下 分享 时间: 加入收藏 我要投稿 点赞

系统调用Open基本流程

(1)通过寄存器r4获得文件名指针

(2)使用文件名指针通过已经实现ReadMem函数获得文件名 (3)通过已经实现得Open函数打开文件 (4)返回值(打开文件数据结构)写入寄存器r2 (5)通过函数PC_advance更新PC

系统调用Close定义

void Close(OpenFileId id); 系统调用Close基本流程

(1)通过寄存器r4获得打开文件数据结构 (2)通过打开文件数据结构析构函数关闭文件 (3)通过函数PC_advance更新PC

系统调用Read定义

int Read(char *buffer, int size, OpenFileId id); 系统调用Read基本流程

(1)通过寄存器r4获得缓冲区指针,通过寄存器r5获得数据长度,通过寄存器r6获得打开文件数据结构

(2)通过已经实现得Read函数读取文件相关内容,记录实际读出字节数 (3)通过已经实现得WriteMem函数将文件内容写入缓冲区

(4)返回值(实际读出字节数)写入寄存器r2 (5)通过函数PC_advance更新PC

系统调用Write定义

void Write(char *buffer, int size, OpenFileId id); 系统调用Write基本流程

(1)通过寄存器r4获得缓冲区指针,通过寄存器r5获得数据长度,通过寄存器r6获得打开文件数据结构

(2)通过已经实现得ReadMem函数获得缓冲区数据 (3)通过已经实现得Write函数将缓冲区内容写入文件 (4)通过函数PC_advance更新PC

Exercise 3 编写用户程序

编写并运行用户程序,调用练习2中所写系统调用,测试其正确性。 用户程序基本思路

创建文件write、txt(系统调用Create)

打开文件read、txt(已经存在,内容hello_world)(系统调用Open) 打开文件write、txt(系统调用Open)

读入文件read、txt内容,记录读入字节数(系统调用Read) 内容写入文件write、txt(系统调用Write) 关闭文件read、txt(系统调用Close) 关闭文件write、txt(系统调用Close)

用户程序得添加 修改test/MakeFile

all: halt shell matmult sort test1 test1、o: test1、c

$(CC) $(CFLAGS) -c test1、c

test1: test1、o start、o

$(LD) $(LDFLAGS) start、o test1、o -o test1、coff 、、/bin/coff2noff test1、coff test1

用户程序得执行

检查userprog文件夹,出现文件write、txt

可以发现,相关内容顺利写入,符合实际 三、执行用户程序相关得系统调用 Exercise 4 系统调用实现

实现如下系统调用:Exec,Fork,Yield,Join,Exit。Syscall、h文件中有这些系统调用基本说明。 系统调用Exec定义

SpaceId Exec(char *name); 系统调用Exec基本流程

(1)通过寄存器r4获得文件名指针

(2)建立线程,通过函数exec_func执行用户程序 (3)返回值(线程ID)写入寄存器r2 (4)通过函数PC_advance更新PC 函数exec_func基本流程

(1)使用文件名指针通过已经实现ReadMem函数获得文件名 (2)通过已经实现得Open函数打开文件

(3)通过已经实现得AddrSpace得构造函数初始化地址空间 (4)通过已经实现得InitRegisters函数初始化寄存器 (5)通过已经实现得RestoreState函数装载页表 (6)通过已经实现得Run函数运行用户程序 重要部分可以仿照StartProcess函数实现

系统调用Fork定义

void Fork(void (*func)()); 系统调用Fork基本流程

(1)通过寄存器r4获得函数位置 (2)复制当前进程地址空间

注意到AddrSpace得构造函数需要打开文件作为输入,所以增加线程属性,记录当前线程对应打开文件得名称,实现Fork函数时,需要逐页复制页表内容 (3)建立线程,执行函数fork_func (4)通过函数PC_advance更新PC

函数Fork_func基本流程 (1)设置当前线程地址空间

(2)通过已经实现得InitRegisters函数初始化寄存器 (3)通过已经实现得RestoreState函数装载页表 (4)设置当前线程PC

nachosLab实习报告

系统调用Open基本流程(1)通过寄存器r4获得文件名指针(2)使用文件名指针通过已经实现ReadMem函数获得文件名(3)通过已经实现得Open函数打开文件(4)返回值(打开文件数据结构)写入寄存器r2(5)通过函数PC_advance更新PC系统调用Close定义voidClose(OpenFileI
推荐度:
点击下载文档文档为doc格式
6d4ro4zqck7zlrl1bkfq6d7jn4l8uv0138w
领取福利

微信扫码领取福利

微信扫码分享