首先我們來看下圖:
1、加電自檢
固件:硬件和軟件結合。加電自檢是我們按下電源會檢測硬件像cpu、內存、網卡等信息。(從硬件層次檢測硬件是否可用)
2、自舉程序
檢測完之后跳轉到mbr(主引導記錄)里面讀取一個很重要的數據bootloader(后續的所有工作都是bootloader完成)和partition table、magic number
在線視頻教程推薦:linux視頻教程
3、bootloader載入內核
內核的概念: (linux是一堆源碼,在開機的時候會看到booting the kernel,從軟件層次檢測硬件是否可用)
主要作用就兩個:驅動硬件(所謂驅動就是系統識別硬件,讓操作系統認識硬件,從軟件識別硬件是否可用)、啟動完init進程其任務就完成了。
4、啟動init進程(linux啟動的第一個進程)
init進程的任務:
解釋:
init進程的pid為1,其PPID為0,PPID就是父進程ID,其父進程是內核任務調度器。
linux是一個實時系統就是將處理時間按時間分配,如果你這次時間沒有處理完下次繼續給你分配時間的時候再處理,這就需要一個CPU時間調度器,也就是PID為0的內核調度器。
linux中由一個進程派生出的進程成為子進程。如果一個進程的父進程死了,其子進程也不能存在。linux中父進程死掉子進程存活的進程成為孤兒進程,在linux中不允許孤兒進程的存在。linux掃描到存在孤兒進程的時候會自動將這個孤兒進程的父進程設置為init進程(PID為1的進程)。
子進程死亡,父進程應該切換和子進程之間的聯系,這個子進程成為僵尸進程,J進程,這種進程也不允許存在。
5、讀取/etc/inittab文件
總結:
(1)fireware(固件)開機自檢,檢驗硬件設備是否正常,如果正常則讀取硬盤上面存放數據的第一個位置MBR(Master Boot Record)里面的bootloader
(2)BootLoader里面最重要的是存放了一個自舉程序(GRUB)
(3)GRUB 載入內核(kernel)? ?驅動硬件、啟動init進程
(4)init進程讀取/etc/inittab
首先執行腳本:/etc/rc.d/rc.sysinit? ?(不管任何運行級別都會執行這個腳本),然后根據initdefault查到默認的運行級別并且去/etc/rc.d/rcN.d下執行腳本,以S開頭的腳本是啟動服務的腳本,以K開頭是關閉服務的腳本
(5)最后會建立終端,等待用戶登錄。顯示user、name。
相關文章教程推薦:linux視頻教程