清华OS程序员

清华大学操作系统课程 ucore Lab5 用户进程管理 实验报

2019-03-21  本文已影响0人  AmadeusChan

操作系统 Lab5 用户进程管理 实验报告

课程信息所在网址:https://github.com/chyyuu/os_course_info

实验目的

实验内容

基本练习

练习0:填写已有实验

在本练习中将LAB1/2/3/4的实验内容移植到了LAB5的实验框架内,由于手动进行内容移植比较烦杂,因此考虑使用diff和patch工具进行自动化的移植,具体使用的命令如下所示:(对于patch工具进行合并的时候产生冲突的少部分内容,则使用*.rej, *.orig文件来手动解决冲突问题)

diff -r -u -P lab4_origin lab4 > lab4.patch
cd lab5
patch -p1 -u < ../lab4.patch

练习1:加载应用程序并执行(需要编码)

do_execv函数调用load_icode(位于kern/process/proc.c中)来加载并解析一个处于内存中的ELF执行文件格式的应用程序,建立相应的用户内存空间来放置应用程序的代码段、数据段 等,且要设置好proc_struct结构中的成员变量trapframe中的内容,确保在执行此进程后,能 够从应用程序设定的起始执行地址开始执行。需设置正确的trapframe内容。

设计实现

完成本练习的具体设计实现如下:

问题回答

请在实验报告中描述当创建一个用户态进程并加载了应用程序后,CPU是如何让这个应用程 序最终在用户态执行起来的。即这个用户态进程被ucore选择占用CPU执行(RUNNING态) 到具体执行应用程序第一条指令的整个经过。

练习2:父进程复制自己的内存空间给子进程(需要编码)

创建子进程的函数do_fork在执行中将拷贝当前进程(即父进程)的用户内存地址空间中的合 法内容到新进程中(子进程),完成内存资源的复制。具体是通过copy_range函数(位于 kern/mm/pmm.c中)实现的,请补充copy_range的实现,确保能够正确执行。

设计实现

问题回答

练习3:阅读分析源代码,理解进程执行 fork/exec/wait/exit 的实现,以及系统调用的实现(不需要编码)

分析

问题回答

实验结果

最终的实验结果符合预期,并且能够通过make grade脚本的检查,如下图所示:

result1.png result2.png

参考答案分析

接下来将对提供的参考答案进行分析比较:

实验中涉及的知识点列举

本次实验中主要涉及到的知识点有:

对应的操作系统中的知识点有:

他们之间的关系为:

实验中未涉及的知识点列举

本次实验中为涉及到的知识点有:

实验代码

https://github.com/AmadeusChan/ucore_os_lab/tree/master/lab5

参考文献

如果我的文章给您带来了帮助,并且您愿意给我一些小小的支持的话,以下这个是我的比特币地址~
My bitcoin address: 3KsqM8tef5XJ9jPvWGEVXyJNpvyLLsrPZj

上一篇 下一篇

猜你喜欢

热点阅读