// kern/process/proc.c// proc_init - set up the first kernel thread idleproc "idle" by itself and // - create the second kernel thread init_mainvoidproc_init(void){int i;list_init(&proc_list);//进程链表for(i =0; i < HASH_LIST_SIZE; i ++){list_init(hash_list + i);}if((idleproc =alloc_proc())==NULL){//分配"第0个"进程 idlepanic("cannot alloc idleproc.\n");}idleproc->pid=0;idleproc->state= PROC_RUNNABLE;idleproc->kstack=(uintptr_t)bootstack;idleproc->need_resched=1;set_proc_name(idleproc,"idle"); nr_process ++; //全局变量current保存当前正在执行的进程 current = idleproc;int pid =kernel_thread(init_main,"Hello world!!",0);if(pid <=0){panic("create init_main failed.\n");} initproc =find_proc(pid);set_proc_name(initproc,"init");assert(idleproc !=NULL&&idleproc->pid==0);assert(initproc !=NULL&&initproc->pid==1);}