文章预览
本文目录: 1. 切换到用户态模式 2. 进程创建 fork _find_empty_process _copy_process 3. 小结 & 堆栈变化 1. 切换到用户态模式 在上一篇文章中,我们对进程调度进行了初始化 sched_init 。今天,再来讲一讲Linux内核如何创建进程? 但要想创建进程,我们还需要一些准备工作: // init/main.c void main ( void ) { //内核初始化主程序 ... sched_init(); //任务调度初始化!!! buffer_init(buffer_memory_end); // 缓冲管理初始化,建内存链表等 hd_init(); // 硬盘初始化 floppy_init(); //软驱初始化 sti(); //开启中断 move_to_user_mode(); //移到用户模式下执行。 if (!fork()) { //永远不会退出,如果退出就死机了。 init(); //在新建子进程(进程 1)中执行,init() 会启动一个shell } for (;;) //死循环
………………………………