典型的Linux内核启动的第一个进程是什么?

Har*_*dik 7 linux linux-kernel

我在互联网上搜索了第一个在系统启动时执行的进程.

我发现了两个答案,这是initsched.真的是什么?

哪个先执行?sched过程或init过程?

Sev*_*its 13

通常,它是init进程,其路径被硬编码到内核本身.init执行非常低级别的功能,例如从upstartUbuntu(15.40之前)开始,或者systemd在Ubuntu 15.04及更高版本的情况下,Arch,Fedora等,它们加载剩余的进程和设置.请注意,系统在init运行时未完成启动- 这是一种常见的误解.实际上,init设置登录屏幕和其他相关任务.这是WikiPedia页面init:https://en.wikipedia.org/wiki/Linux_startup_process#SysV_init

Init是所有进程的父亲.它的主要作用是从存储在文件/ etc/inittab中的脚本创建进程.此文件通常具有导致init在用户可以登录的每一行上生成gettys的条目.它还控制任何特定系统所需的自治进程.运行级别是系统的软件配置,其仅允许存在选定的一组进程.init为每个运行级别生成的进程在/ etc/inittab文件中定义.

但是,Linux内核确实启动了调度程序,但它不在用户空间中,这是大多数人关联的进程的主页.此外,/bin/sh如果init缺少或无法调用Bourne Shell(),则可以替换它.理论上,您还可以使用init=*some path here*Linux内核引导选项将其替换为任何可执行文件.


Sun*_*lly 6

它的sched,按3.13的Linux 启动内核()首先调用sched_init()并运行第一个用户空间进程init即rest_init()创建一个内核线程通过另一个函数kernel_init()作为入口点和内核转入怠速除非调用.

start_kernel() {
   ...
    sched_init(); 
    rest_init(); calls function kernel_init();  
}
Run Code Online (Sandbox Code Playgroud)