細說 linux 開機及服務啟動

細說 linux 開機及服務啟動

首先 電源接通,這個沒得說。

加載 BIOS,自檢,並取得啟動設備 BIOS(Basic Input/Output System的縮寫、中文:基本輸入輸出系統)

PC兼容系統上,是一種業界標準的固件接口。[1]。BIOS這個字眼是在1975年第一次由CP/M操作系統中出現。BIOS是個人電腦啟動時加載的第一個軟件。

BIOS用於電腦開機時運行系統各部分的的自我檢測(Power On Self

Test),並加載引導程序(IPL)或存儲在主存的操作系統。此外,BIOS還向操作系統提供一些系統參數。系統硬件的變化是由BIOS隱藏,程序使用BIOS功能而不是直接控制硬件。現代操作系統會忽略BIOS提供的抽象層並直接控制硬件組件。

細說 linux 開機及服務啟動

BIOS(Basic Input Output System) 是一個軟件,這個軟件已經成為業界標準。一般運行在主板中,通電後會首先啟動這個軟件,根據設置(主要保存在 COMS 中) 取得各種硬件信息,並進行自我檢測,並讀取啟動設備(即系統所在設備,一般為磁盤,U盤也可以)

讀取並執行第一個啟動設備內的裝載程序

讀取到啟動設備之後就需要啟動引導裝載程序(BootLoader,因為各個操作系統的內核文件及格式不一樣,所以需要一個裝載程序來處理各類操作系統的裝載,gurp,spfdisk等)來加載操作系統和內核文件。而所有的操作系統的 BootLoader 都放在啟動設備(磁盤)的第一個扇區內,也就是 MBR(Master Boot Record,主引導分區),BOIS 通過 INT13 中斷功能即可讀取到。

通過 BootLoader 讀取到的內核文件,加載驅動程序

細說 linux 開機及服務啟動

讀取到內核文件(一般在 /boot 下,如圖所示)之後,linux 會將內核文件加壓到內存中,利用內核功能,測試並驅動各種硬件(儲存設備,cpu,網卡,聲卡)。此時,操作系統以自己的需求重新檢測了硬件,開始接管 BIOS。

內核調用 init(/sbin/init) 進程

可以看到,此進程的 pid 為1,init 最重要的作用就是準備軟件執行環境,如:系統主機名、網絡設置、語言、文件系統格式等,以及其他服務啟動。所有的操作都會通過 init 的默認配置文件 /etc/inittab(部分操作系統不使用該文件,如 ubuntu) 來規劃。並且 /etc/inittab (部分操作系統將各項配置分開) 可以設置 run level(執行級別)。

部分操作系統(centos7/ubuntu)將 init 換為 systemd ,其功能大致一樣,但是做了許多優化和修改。

執行級別0:系統停機狀態,系統默認執行級別不能設為0,否則不能正常啟動

執行級別1:單用戶工作狀態,root權限,用於系統維護,禁止遠程登陸

執行級別2:多用戶狀態(沒有NFS服務)

執行級別3:完全的多用戶狀態(有NFS),登陸後進入控制檯命令行模式,一般 vps 及雲服務器都運行在這個級別

執行級別4:系統未使用,保留

執行級別5:X11控制檯,登陸後進入圖形GUI模式,一般桌面版系統都運行在這個級別

執行級別6:系統正常關閉並重啟,默認執行級別不能設為6,否則不能正常啟動

請記住這些 級別!!!

run level是什麼?就是通過設置 run level 來規定系統使用不同的服務啟動。比如設置 run level 為3,系統將會啟動命令行模式。runlevel命令可以查看當前的運行級別。init 命令可以切換當前系統的模式,比如 init 0就會關機,init 6會重啟。修改配置文件 /etc/inittab 可以設置默認執行級別,下次啟動後直接以某種執行級別啟動,

但是切記不能設置0和6。

init進程處理系統初始化 此時,操作系統中只有 init 進程,其 pid 為1,後續所有進程都是通過 init 啟動,所以所有進程都是init的子進程。init 會先設置系統的基礎環境,主要利用 /etc/rc.d/rc.sysinit 這個腳本來進行系統初始化的各項操作。比如設置時間,磁盤,文件系統,字體等等 啟動系統服務(/etc/rc.d/rc)

系統初始化之後,整個操作系統核心功能已經正常了,但是為了用戶正常使用,還要啟動一些服務,這時候就要根據執行級別來執行對應的腳本來開啟服務器。

一般在 /etc/rc.d 目錄下面會有各個級別的配置,而 /etc/rc*.d/ 下面就是腳本的映射

用戶自定義開機啟動程序(/etc/rc.d/rc.local)

啟動完各項服務之後,意味著整個系統的功能都可以正常使用了,用戶如果有其他操作想完成的話,就可以創建腳本,或者編寫命令,放在 /etc/rc.d/rc.local 中執行,這樣開機啟動之後就會執行這個腳本或命令。為什麼不是直接放在啟動級別中目錄下,然後修改啟動腳本呢?第一是因為服務沒啟動完之前,某些功能或命令是無法使用的。第二是麻煩。當然如果用戶自己編寫的程序想以系統服務模式啟動,也可以放到裡面。

加載終端機或桌面環境

啟動各項服務之後就會加載終端或界面等待用戶登錄,也就是出現登錄界面/登錄提示。

整個過程整理後,如下圖所示

細說 linux 開機及服務啟動


分享到:


相關文章: