操作系统lab5实验报告

这篇实验报告详细探讨了ucore操作系统中用户进程的管理,包括如何创建、加载应用程序并执行,以及进程的复制、调度和退出。通过练习,阐述了从创建用户态进程到执行第一条指令的完整过程,涉及系统调用如sys_fork, sys_exec, sys_exit, sys_wait的实现和内存管理,特别是Copy on Write机制。实验展示了从内核态到用户态的转换,并分析了进程状态变化的影响。" 99674474,8659780,Vue实现多个倒计时计时器,"['Vue', '前端开发', 'JavaScript']
摘要由CSDN通过智能技术生成

实验五:用户进程管理


实验目的

  • 了解第一个用户进程创建过程
  • 了解系统调用框架的实现机制
  • 了解ucore如何实现系统调用sys_fork/sys_exec/sys_exit/sys_wait来进行进程管理

实验内容

实验4完成了内核线程,但到目前为止,所有的运行都在内核态执行。实验5将创建用户进程,让用户进程在用户态执行,且在需要ucore支持时,可通过系统调用来让ucore提供服务。为此需要构造出第一个用户进程,并通过系统调用sys_fork/sys_exec/sys_exit/sys_wait来支持运行不同的应用程序,完成对用户进程的执行过程的基本管理。

练习0:填写已有实验

首先利用meld软件进行对比,把lab1~4的内容复制过来,这里不再多余赘述。
但是为了能够正确执行lab5的测试应用程序,可能需对已完成的实验1/2/3/4的代码进行进一步改进。
下面是对部分代码的改进。

改进alloc_proc函数:
在这里插入图片描述在原来的基础上,新增了2行代码。
这两行代码主要是初始化进程等待状态、和进程的相关指针,例如父进程、子进程、同胞等等。其中的wait_state是进程控制块中新增的条目。
因为这里涉及到了用户进程,自然需要涉及到调度的问题,所以进程等待状态和各种指针需要被初始化。

改进do_fork函数:
在这里插入图片描述
插入assert是为了确保进程在等待,set_links是设置进程链接。
assert需要确保当前进程正在等待,我们在alloc_proc中初始化wait_state为0。
set_links函数的作用就是设置当前进程的process relations。

改进 idt_init 函数:

在这里插入图片描述新增这一行代码,设置相应的中断门。

改进trap_dispatch函数:

在这里插入图片描述
这里主要是将时间片设置为需要调度,说明当前进程的时间片已

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值