第二部分:省略了其中很多调用的函数调用关系图
第三部分:实验分析 这次直接在实验楼上面做了
首先init是个普通的用户态进程,它是Unix系统内核初始化与用户态初始化的接合点,也是所有进程的祖先, 在运行init以前,是内核态初始化,该过程的最后一个动作就是运行/sbin/init可执行文件。那么init这个 进程是怎么生成的呢? 首先要从main.c中的start_kernel()函数说起,
上图的箭头就是对0号进程的初始化, 然后进行一系列的工作之后,会跑到rest_init()这个函数中,而这个函数就是Linux内核初始化的尾声, rest_init()
而这个函数中有一个kernel_thread()函数,在这个函数里面会运行kernel_init()函数
然后在这个kernel_init()函数中的会启动init进程
然后箭头所指的函数就会通过execve()函数来运行init程序,也就是1号进程就随之运行, 而0号和idle进程的关系则是在调用cpu_idle()后,0号进程随之演变成了idle进程
第四部分:总结 这次实验追踪那些函数,代码又比较多,对gdb也不怎么熟,所以做起来有点吃力, 通过这次实验,学到了不少东西,而且对gdb也慢慢的适应了,初次接触这些东西,上面的分析如果有什么不对的, 请给本菜鸟指点指点啦。。。