(1)ucore的进程控制块数据结构是如何组织的?主要字段分别表示什么?有哪些函数对它进行了修改?有哪些函数用到它?
arch_proc_struct
mm_struct
need_resched
wait_state
run_link、list_link、hash_link
(1)fork()的返回值是唯一的吗?父进程和子进程的返回值是不同的。请找到相应的赋值代码。
(2)新进程创建时的进程标识是如何设置的?请指明相关代码。
(3)fork()的例子中进程标识的赋值顺序说明进程的执行顺序。
(4)请在ucore启动时显示空闲进程(idleproc)和初始进程(initproc)的进程标识。
(1)加载进程后,新进程进入就绪状态,它开始执行时的第一条指令的位置,在elf中保存在什么地方?在加载后,保存在什么地方?
进程等待与退出
(2)试分析wait()和exit()的结果放在什么地方?exit()是在什么时候放进去的?wait()在什么地方取到出的?
(3)试分析sleep()系统调用的实现。在什么地方设置的定时器?它对应的等待队列是哪个?它的唤醒操作在什么地方?
(1) (spoc)设计一个简化的进程管理子系统,可以管理并调度如下简化进程.给出了参考代码,请理解代码,并完成"YOUR CODE"部分的内容. 可2个人一组
- RUNNING - 进程正在使用CPU
- READY - 进程可使用CPU
- WAIT - 进程等待I/O完成
- DONE - 进程结束
- 使用CPU,
- 发出YIELD请求,放弃使用CPU
- 发出I/O操作请求,放弃使用CPU
PROC_CODE = 'code_'
PROC_PC = 'pc_'
PROC_ID = 'pid_'
PROC_STATE = 'proc_state_'
-l PROCESS_LIST, --processlist= X1:Y1,X2:Y2,...
X 是进程的执行指令数;
Y是执行yield指令(进程放弃CPU,进入READY状态)的比例(0..100)
Z是执行I/O请求指令(进程放弃CPU,进入WAIT状态)的比例(0..100)
instruction_to_execute = self.proc_info[self.curr_proc][PROC_CODE].pop(0)
$./process-simulation.py -l 5:30:30,5:40:30 -c
Produce a trace of what would happen when you run these processes:
Process 0
io
io
yld
cpu
yld
Process 1
yld
io
yld
yld
yld
Important behaviors:
System will switch when the current process is FINISHED or ISSUES AN YIELD or IO
Time PID: 0 PID: 1 CPU IOs
1 RUN:io READY 1
2 WAITING RUN:yld 1 1
3 WAITING RUN:io 1 1
4 WAITING WAITING 2
5 WAITING WAITING 2
6* RUN:io WAITING 1 1
7 WAITING WAITING 2
8* WAITING RUN:yld 1 1
9 WAITING RUN:yld 1 1
10 WAITING RUN:yld 1 1
11* RUN:yld DONE 1
12 RUN:cpu DONE 1
13 RUN:yld DONE 1