系統初始化程序init/main.c主要功能是對系統進行初始化,並切換到用戶模式下執行登錄程序。
主要步驟如下:
1、系統初始化部分:
2、然後是切換到用戶層(即idle進程),並使用fork系統調用來生成init進程,idle則循環使用pause()進入進程調度。
3、fork出來的新進程調用init()函數執行shell以及登錄程序
4、系統完成了初始化過程,進入shell程序繼續執行。
注意:init進程(進程1)是從idle進程(進程0)中fork出來,init繼承了idle的代碼、數據空間、堆棧、文件描述符等等。但由於直接從內核切換出來的idle進程沒有寫時複製技術,所以這兩個進程共享了上述內容。爲了確保數據不發生混亂,idle進程對堆棧不進行任何操作,即沒有函數調用。所以在move_to_user()宏調用之後進入idle進程開始,整個idle進程使用了宏的fork(),pause()作爲替換。