注:以下大部分内容摘自linux内核编程入门篇和linux内核完全注释
初始化init下只有一个main函数。
首先利用setup.s程序取得的程序参数设置系统的根文件设备号以及一些内存全局变量。这些内存变量指明了主内存的开始地址、系统所拥有的内存变量和作为高速缓冲区内存的末端地址。如果还定义了虚拟盘(RAMDISK), 则主内存将适当减少。
然后,内核进行所有方面的硬件初始化工作。包括陷阱门、块设备、字符设备和tty包括人工创建第一个任务(task 0)。待所有初始化工作完成就设置中断允许标志,开启中断。
在整个内核完成初始化后,内核将执行权切换到了用户模块,也即CPU从0特权级切换到了第3特权级。然后系统第一次调用创建进程函数fork(),创建出一个用于运行init()的子进程。
在该进程中系统将运行控制台程序。如果控制台环境建立成功,则再生成一个子进程,用于运行shell程序/bin/sh。若该子进程退出,父进程返回,则父进程进入一个死循环内,继续生成子进程,并在此子进程中再次执行shell程序/bin/sh,而父进程则继续等待。
对于linux来说,所有任务都是在用户模式执行的,包括很多系统应用程序,如shell程序、网络子系统程序等