系统初始化程序init/main.c主要功能是对系统进行初始化,并切换到用户模式下执行登录程序。
主要步骤如下:
1、系统初始化部分:
2、然后是切换到用户层(即idle进程),并使用fork系统调用来生成init进程,idle则循环使用pause()进入进程调度。
3、fork出来的新进程调用init()函数执行shell以及登录程序
4、系统完成了初始化过程,进入shell程序继续执行。
注意:init进程(进程1)是从idle进程(进程0)中fork出来,init继承了idle的代码、数据空间、堆栈、文件描述符等等。但由于直接从内核切换出来的idle进程没有写时复制技术,所以这两个进程共享了上述内容。为了确保数据不发生混乱,idle进程对堆栈不进行任何操作,即没有函数调用。所以在move_to_user()宏调用之后进入idle进程开始,整个idle进程使用了宏的fork(),pause()作为替换。