Linux 及其它类 Unix 系统的系统服务管理和控制程序(初始化系统/init system)简单梳理
文章目錄
- 一、Linux 的啟動過程
 - 二、初始化程序
 - (一)System V init
 - (二)Upstart init
 - (三)systemd
 - (四)Launchd
 - (五)Epoch
 - (六)Mudar
 
一、Linux 的啟動過程
在我們打開 Linux 電腦的電源后第一個啟動的進程就是 init。分配給 init 進程的 PID 是1。它是系統其他所有進程的父守護進程。 init 進程在 Start_kernel 執行完畢之后,也就是 Kernel 初始化完畢之后啟 動,它是系統所有進程的起點,內核在完成核內引導以后,即在本進程空間內加載 init 程序。
當一臺Linux電腦啟動后,處理器會先在系統存儲中查找BIOS,之后BIOS會檢測系統資源然后找到第一個引導設備,通常為硬盤,然后會查找硬盤的主引導記錄(MBR),然后加載到內存中并把控制權交給它,以后的啟動過程就由MBR控制。
主引導記錄會初始化引導程序(Linux上有兩個著名的引導程序,GRUB和LILO,80%的Linux系統在用GRUB引導程序),這個時候GRUB或LILO會加載內核模塊。內核會馬上查找/sbin下的“init”程序并執行它。從這里開始init成為了Linux系統的父進程。init讀取的第一個文件是 /etc/inittab,通過它init會確定我們Linux操作系統的運行級別。它會從文件 /etc/fstab 里查找分區表信息然后做相應的掛載。然后init 會啟動 /etc/init.d 或者 /etc/rc.d/init.d 里指定的默認啟動級別的所有服務/腳本。所有服務在這里通過init一個一個被初始化。在這個過程里,init每次只啟動一個服務(串行啟動),所有服務/守護進程都在后臺執行并由init來管理。
關機過程差不多是相反的過程,首先init停止所有服務,最后階段會卸載文件系統。
以上提到的啟動過程有一些不足的地方。而用一種更好的方式來替代傳統init的需求已經存在很長時間了。也產生了許多替代方案。其中比較著名的有Upstart,Epoch,Muda和Systemd。而Systemd獲得最多關注并被認為是目前最佳的方案。
二、初始化程序
(一)System V init
System V init 是類 Unix 操作系統傳統的也是首款初始化系統。
SysV init 守護進程是一個基于運行級別的系統,它使用運行級別(單用戶、多用戶以及其他更多級別)和鏈接(位于 /etc /rcN.d/ 目錄中,分別鏈接到 /etc/init.d 中的 init 腳本)來啟動和關閉系統服務。SysV啟動是線性、順序的。一個S20的服務必須要等待S19啟動完成才能啟動,如果一個啟動要花很多時間,那么后面的服務就算完全無關,也必須要等。
在 SysV init 中,服務被分成兩大類,一類是可獨立運行的服務,另一類是受xinetd管理的服務,而xinetd本身是一個獨立運行的服務,用來負責管理一些不常用的服務,當這些服務需要被使用時,由xinetd來喚醒它們,當服務使用完后,這些服務會被結束以減少系統資源的占用。
(二)Upstart init
Upstart init 是由 Ubuntu 的制造商開發的基于事件的初始化系統,用于替代 SysV init 初始化系統。它用于 Ubuntu 6.10 - 14.10 版本和基于 RHEL 6 的系統中,之后的被 systemd 取代了。
UpStart(Upstart init daemon)是基于事件的啟動系統,它使用事件來啟動和關閉系統服務。Upstart是并行的,只要事件發生,服務可以并發啟動。這種方式無疑要優越得多,因為它可以充分利用現在計算機多核的特點,大大減少啟動所需的時間。
Upstart是基于事件的,當系統中的什么情況發生變化時,它會運行某個特定的程序。這里被運行的程序多半是用來啟動或終止服務的腳本。這個配置方式和System V在系統進入某個運行級別的時候運行init腳本的鏈接的概念實際上是非常類似的。只不過Upstart更加靈活一些,Upstart不僅能在運行級別改變的時候啟動或終止服務,也能在接收到系統發生其他改變的信息的時候啟動或終止服務。這些系統的改變被稱為“事件”。例如,當Upstart從udev接收到運行時文件系統加載、打印機安裝或其他類似的設備添加或刪除的信息,并采取相應的行動。Upstart也可以在系統啟動、關閉或某個任務狀態改變的時候啟動或關閉服務。
UpStart 系統初始化的過程是在工作和事件的相互協作下完成的,可以大致描述為:系統上電后運行 GRUB 載入內核。內核執行硬件初始化和內核自身初始化。在內核初始化的最后,內核將啟動 pid 為 1 的 init 進程(即 UpStart 進程),init 進程運行后,init 進程自身會產生不同的事件,這些最初的事件會觸發一些工作運行,而每個工作運行過程中又會釋放不同的事件,這些事件又將觸發新的工作運行。如此反復,直到整個系統正常運行起來。
UpStart 是一個由事件觸發工作運行(事件驅動機制)的初始化系統,每一個程序的運行都由其依賴的事件發生而觸發的。UpStart 核心模塊就是 Job 和 Event。
(三)systemd
systemd 中文名叫“系統管理守護進程”,是旨在以并行方式啟動進程的替換傳統 init 系統的初始化系統,目前已經在許多標準發行版(Fedora,OpenSuSE,Arch,RHEL,CentOS 等)中應用。借鑒 Mac OS。
開發 systemd 的主要目的就是減少系統引導時間和計算開銷。systemd 最開始以GNU GPL協議授權開發,現在已轉為使用GNU LGPL協議,它是如今討論最熱烈的引導和服務管理程序。如果你的Linux系統配置為使用Systemd引導程序,它取替傳統的SysV init,啟動過程將交給systemd處理。systemd 的一個核心功能是它同時支持 SysV init的后開機啟動腳本。
(四)Launchd
launchd 是 Mac OS 下用于初始化系統環境的 init 系統,它是內核裝載成功之后在 OS 環境下啟動的第一個進程。其實 systemd 的很多概念來源于此。
(五)Epoch
一種基于簡單性的管理服務的 init 替換守護進程,旨在啟動單線程進程。
(六)Mudar
一種用Python編寫的 init 替換守護進程,在 Pardus GNU / Linux上實現,旨在異步啟動進程
總結
以上是生活随笔為你收集整理的Linux 及其它类 Unix 系统的系统服务管理和控制程序(初始化系统/init system)简单梳理的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 问女朋友的真心话问题大全优选104个
 - 下一篇: 真心话大全经典大全106个