以下哪些程序或者子系统运行在内核态

以下哪些程序或者子系统运行在内核态,第1张

所有的进明扰程是共用内核空间的,一部分内核空间的映射地址是固定的,并且不可被交换出激含旦去。虚拟地址到物理地址的转换因为是由硬件完成的老老,所以内核态的虚拟地址一样会自动被转换为物理地址。

内核的初始化过程由start_kernel函数开始,至第一个用户进程init结束,调用了一系列的初始化函数对所有的内核组件进行初始化。其中,start_kernel、rest_init、kernel_init、init_post等4个函数构成了整个初始化过程的主线。

从start_kernel函数开始,内核即进入了C语言部分,它完成了内核的大部分初始化工作。实际上,可以将start_kernel函数看做内核的main函数。

在start_kernel函数的最后调用了rest_init函数进行后续的初始化。

(1)rest_init中调用kernel_thread函数启动了2个内核线程,分别是:kernel_init和kthreadd

(2)调用schedule函数开启了内核的调度系统,从此linux系统开始转起来了。

rest_init最终调用cpu_idle函数结束了整个内核的启动。

kernel_init函数将完成设备驱动程序的初始化,并调用init_post函数启动用户空间的init进程。

到init_post函数为止,内核的初始化哪码饥已经进入尾声,第一个用户空间进程init将姗姗来迟

如果内核命令行中给出了到init进程的直接路径(或者别的可替代的程序),这里就李返试图执行init。

init:开始是内模槐核态,后来转变为用户态】

init进程完成了从内核态向用户态的转变

init进程在内核态下面时,通过一个函数kernel_execve来执行一个用户空间编译连接的应用程序就跳跃到用户态了。

在init/main.c中最后会通过kernel_execve()来调用用户空间的init进程(如/sbin/init, /etc/init, /bin/init等

uboot通过传参来告诉内核这些信息。

uboot传参中的root=/dev/mmcblk0p2 rw 这一句就是告诉内核根文件系统在哪里

uboot传参中的rootfstype=ext3这一句就是告诉内核rootfs的类型。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8277651.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存