【我的笔记】进程管理(二)Ucore实现

1、0号进程

Ucore的初始进程:idleproc,PID=0,所有进程或内核线程都是idle的后代,是idle的clone,idle是静态创建启动的。

state状态始终为PROC_RUNNABLE运行态;系统堆栈为bootstack;need_resched始终为1(需要调度),一直循环检查是否有就绪的,随时准备将CPU让出;context和trapframe为空(做完1好进城,需要调度后,0号进程失去CPU,保存现场,使context有内容);idle不在proc_list和hash_list中。


2、1号进程

initproc是一号进程,idle进程动态创建,是一个内核线程。

内核线程 --> kernel_thread  只能在内核中使用 ;用户进程 --> fork  常在用户空间使用。

均由do_fork实现,具体ucore过程见ppt。


3、用户进程

init创建的第一个用户进程。

到用户堆栈后特权级变为3,内核态为0。

(详见ppt)


4、系统调用

【我的笔记】进程管理(二)Ucore实现_第1张图片

(1)fork —— 用户进程使用的进程创建函数

(2)exec —— 用户进程使用的加载函数

(3)yield —— 告诉内核可以让一下CPU

(4)exit —— 请求终止自己。

idle和init进程不能终止。

【我的笔记】进程管理(二)Ucore实现_第2张图片

(5)wait —— 由父进程调用,回收已经终止的子进程

【我的笔记】进程管理(二)Ucore实现_第3张图片

(6)kill —— 用于杀死指定进程

你可能感兴趣的:(【我的笔记】进程管理(二)Ucore实现)