簡介
最近做linux課程設計(核心裁剪和檔案系統定製),選擇了ubuntu10.10作為實驗的平台。不同的linux發行版,使用者態的初始化機制有所差別,ubuntu自從6.10版本之後就使用了較新的upstart機制來進行系統的初始化。
upstart是一種基於事件驅動的服務啟動機制,可以使多個系統任務在保持依賴關係的前提下併發啟動(據說這樣這樣啟動會比較快,理論上應當如此)。使用upstart機制時,我們通過/etc/init下的一系列 *.conf 配置檔案來指定各種系統服務的依賴關係(啟動時機)。系統啟動時,upstart主程序/sbin/init會解析這些配置檔案,按照指定的依賴關係併發啟動各種服務與應用。
主要程式
upstart有三個主要的程序:
init
: upstart主程序,是linux系統中的「應用程式管理器」,是其他所有程序的源頭(pid為1),它會讀取配置檔案,處理各種服務和應用程式的依賴關係,根據事件(訊號)來啟動這些功能與服務,並動態地進行管理。
initctl
:upstart事件管理器,可以被應用程式程序用來通知init哪些事件(訊號)發生。
telinit
:管理執行級別(執行級別,為了相容其他舊的發行版而保留,在upstart裡面,執行級別的改變被當成某種事件來處理)。
配置檔案
每個服務的conf配置檔案通常指明了執行依賴的事件(訊號)、執行的環境、執行的任務屬性、執行的任務內容等。
如下面這一典型的指令碼,指明了執行的任務是啟動名為tty2的終端,依賴於startup事件,console owner表示執行時輸出定向到控制台,respawn屬性指定了如果程序終結將重新啟動。
1
2
3
4
5
6
7
start on startup
respawn
console owner
exec
/sbin/getty
-8 38400 tty2
啟動流程
對於ubuntu發行版,啟動/sbin/init之後upstart會經過以下啟動流程:
1. upstart內部初始化之後,啟動startup事件,ubuntu系統開始初始化;
2. 依賴於startup事件的任務啟動,其中最重要的是mountall,它進行了硬碟和檔案系統的掛載,並依次觸發了一系列事件,包括:local-filesystems, vitual-filesystems, all-swaps等;
3. vitual-filesystems事件觸發了udev相關的系列任務,用於裝置事件管理。其中。upstart-udev-bridge把裝置事件轉化為upstart事件,而udevtrigger對於已經掛載的裝置重新觸發裝置事件(因為udevd啟動的時候很多裝置事件已經錯過了)。
4. udevtrigger會觸發本地回環的網路介面啟動(net-device-up)事件,經過這一階段本地回環(127.0.0.1)可用;
5. 等到檔案系統掛載完成,本地回環的網路介面啟動,依賴於這兩個事件的的rc-sysinit在萬眾矚目中正式啟動,呼叫telinit設定了系統的執行級別,系統進入runlevel管理的新時代!!!
從startup到runlevel的過程見下圖:
upstart啟動流程圖
rc-sysinit中,使用telinit為系統設定了執行級別,觸發runlevel事件,依賴於runlevel事件的服務啟動,其中有非常重要的tty,而一些服務的關閉,系統的關機、重啟等動作也依賴於runlevel的變化。
tty1.conf中,任務內容為exec /sbin/getty -8 38400 tty1,即使用getty程式開啟名為tty1的終端,getty會呼叫login啟動登陸認證,login從/etc/passwd獲取賬戶資訊,從/etc/shadow進行密碼驗證,如果登陸成功則啟動乙個shell給登入的使用者,這時候你就可以開始工作啦!
如果你更喜歡使用putty登入,那麼系統需要安裝sshd,安裝之後/etc/init下會多出乙個ssh.conf,它定義了守護程序sshd的啟動時機,sshd的啟動依賴於filesystem事件,如下圖所示。
upstart啟動runlevel處理
在upstart機制下,如果你希望系統開機啟動一項新的服務,只需往/etc/init裡面增加自己定義的.conf配置檔案即可。
(全文完)
介紹的比較詳細。
ubuntu upstart啟動流程分析
ubuntu自從6.10版本之後就使用了較新的upstart機制來進行系統的初始化。upstart是一種基於事件驅動的服務啟動機制,可以使多個系統任務在保持依賴關係的前提下併發啟動 據說這樣這樣啟動會比較快,理論上應當如此 使用upstart機制時,我們通過 etc init下的一系列 conf 配...
ubuntu upstart 的基本概念
相信不少ubuntu的新手玩家都嘗試過設定runlever進入字元模式但沒有成功。當初年少無知,找不到解決問題的頭緒,也沒有解決問題的動力 今天重新審視這個問題,有了新知 首先,runlevel之類的東西是提供給init程序使用,包括init.d以及類似的有著一堆詭異名字的指令碼,用於linux載入...
冷啟動 熱啟動
冷啟動 1 接通電源啟動計算機的方式,稱為冷啟動。2 介紹 自檢 3 具體操作步驟如下 加電 自檢 引導作業系統。熱啟動 1 熱啟動是指在計算機已經開啟的狀態下,通過鍵盤重新引導作業系統。一般在宕機時才使用。2 方法 左手按住 ctrl 和 alt 不放開,右手按下 del 然後同時放開。3 熱啟動...