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、系统调用
(1)fork —— 用户进程使用的进程创建函数
(2)exec —— 用户进程使用的加载函数
(3)yield —— 告诉内核可以让一下CPU
(4)exit —— 请求终止自己。
idle和init进程不能终止。
(5)wait —— 由父进程调用,回收已经终止的子进程
(6)kill —— 用于杀死指定进程