-
init进程,也就是内核启动3个进程中的进程1;
init进程完成了从内核态向用户态的转变;
(1)init进程是比较特殊,一个进程两个状态,init刚开始运行时是内核态,他属于内核线程,然后他自己运行了一个用户态下面的程序后,他自己强行转成了用户态,因为init进程自身完成了从内核态到用户态的过渡,因此后续的其他进程都可以工作在用户态下面的。
(2)init在内核态做了什么? 重点就是做了一件事情,就是挂载跟文件系统并试图找到用户态下的那个init程序。要运行这个应用程序就必须找到这个程序,要找到他就必须得挂载根文件系统,因为所有的应用程序都在文件系统中。
(3)init用户态做了什么?init大部分有意义的工作是在用户态下进行的,init进程对我们操作系统的意义在于其他所有的用户进程都直接或者间接派生来自init进程。说白了,init进程生了后面的所有进程。
(4)init进程如何从内核态跳转到用户态?还能回来不?
init进程在内核态下面时,通过一个函数kernel_execve来执行一个用户空间编译连接的应用程序,就跳跃到用户态了。需要注意的是:这个跳跃后进程号是不改变的,一直是进程1.
这个跳跃过程是单向的,一旦执行了init程序转到用户态下就回不来了。用户态下想进入内核态只有走API这一条路了。 -
init进程构建了用户交互界面
(1) init进程是其他用户进程的老祖,linux系统中一个进程的创建是通过其父进程创建出来的,根据这个理论只要有一个父进程就能生出来一堆子孙进程了。
(2) init启动了login进程、命令行进程、shell进程。
(3)shell进程启动了其他用户进程,命令行和shell一旦工作了,用户就可以在命令行通过 ./xx 的方式来执行其他应用程序。每个应用程序的运行就是一个进程。
Linux的init进程(内核态到用户态的变化)
最新推荐文章于 2024-10-13 10:58:26 发布