退休的贵族进程,即编号为0的进程,其角色像是统治者王朝的象征,从BIOS,到bootloader,再至idle,完成子系统初始化后,它就退居二线。这个进程始终处于内核态,未曾踏入用户态,犹如贵族的一生。其代码流程主要为:start_kernel -->rest_init --> cpu_idle_loop。idle loop的核心代码,尽管包含一些术语和翻译,但其主要逻辑是控制进程在空闲状态的循环运行。
编号为0的进程负责整个系统的初始化,随后将控制权交接给init进程,即编号为1的进程。init进程是所有用户进程的始祖,由0号进程在start_kernel调用rest_init后创建。init进程作为Unix系统内核初始化与用户态初始化的连接点,它是所有用户进程的祖先。在运行init进程之前,系统已完成内核态初始化,最后一个动作是运行/sbin/init可执行文件。init进程由fork调用产生,它是第一个从0号进程fork出来的进程。在实验中,我们所指的/sbin/init是指由menuos编译出来的init进程。
了解init进程的产生,我们来看看start_kernel函数的代码。init进程在rest_init后启动,进入kernel_init函数。在这个函数段中,init进程从内核态转变为用户态,具体表现为将cs寄存器从核心段转换为用户段,cs值从96(0x60)变为115(0x73)。这个过程涉及到用户态与核心态之间的切换,也是init进程从核心态转变为用户态的关键步骤。
总的来说,编号为0的进程负责系统初始化,随后将控制权转移给init进程,后者作为所有用户进程的祖先,完成了从核心态到用户态的转变。这个过程是Linux系统运行的基础,控制权的顺利转移确保了用户交互的开始。使命与角色决定了进程的一生,同样也影响着我们的人生。思考一下,我们的使命和角色又是什么呢?
温馨提示:答案为网友推荐,仅供参考