| 導購 | 订阅 | 在线投稿
分享
 
 
 

Linux 開機程序之研討

來源:互聯網網民  2006-12-17 09:48:16  評論

Linux 開機程序之研討

Linux 開機程序之研討 Linux 開機程序之研討

位是否曾經對電腦整個開機的流程感到好奇呢 ? 這一次 , 我們所要討論的主題 , 就是 Linux 從開機的一瞬間到 login 爲止 ,

到底發生了什麽事情?

想必各位都知道 , 在剛開機時 , 由於 80x86 的特性 , CS ( Code Segment)這個暫存器中全部都放著 1 , 而

IP ( Instruction Pointer ) 這個暫存器中全部都放著 0 , 換句話說 , CS=FFFF 而 IP=0000 , 此時 , CPU 就依據CS 及 IP 的

值 , 到 FFFF0H 去執行那個地方所放的指令 . 這時候 , 由於FFFF0H 已經到了高位址的頂端 , 所以 , FFFF0H 這個地方 , 總

會放一個JMP 指令 , 跳到比較低的位址 . 接著 , ROM BIOS 就會作一些檢查的動作像記憶體 , 鍵盤 等...... 並在我們俗稱

的 UMB ( Upper Memory Block )之中掃描 , 看看是否有合法的 ROM 存在 ( 比如 SCSI 卡上的 ROM ) .

假如有 , 就到裏面去執行一些東西 , 執行完之後再繼續剛才的行程 . 到了最後 , 讀取磁碟機上的第一個 sector . 在這裏 ,

我假設各位由硬碟啓動因此 , 就硬碟的構造而言 , 它的第一個 sector 稱爲 MBR ( Master BootRecord ) . 因爲一個 sector

是 512 bytes , 而 MBR 這 512 bytes 可分爲兩個部份 , 第一個部份爲 Pre-Boot 區 , 占了 446 bytes ; 第二部份是

Partition Table , 占了 66 bytes . Pre-Boot 區的作用之一 , 就是去看看那在上次的介紹中 , 我們已經看完了 rc.S 及

rc.serial 這兩個 shell script . 現在 , 我們將把剩下的 shell script 再作一個介紹 .

首先還是看看全部的流程 :

init[1]

rc.S begin

rc.serial begin

rc.serial end

rc.S end <-- 上一次我們說明到這裏

init[1] enter runlevel 5

rc.M begin

rc.inet1 begin

rc.inet1 end

rc.inet2 begin

rc.inet2 end

rc.font begin

rc.font end

rc.local begin

rc.local end

rc.M end

login

這次主要的部份可分爲兩項 : 因爲 init 將會去讀取 inittab , 所以 inittab 將被列爲第一部份的重點 , 而第二部份就是

rc.M , rc.font , rc.local 這幾個 shell script 的說明 . ( rc.inet1 , rc.inet2 這兩個關於網路的shell script 將在以後

單獨說明 )

好了 , 我們先從 inittab 看起吧 ! 看看上面的流程 , 在第一行 : init[1]也就是 init 這個 process 被啓動之後 , 它會去

讀取 /etc/inittab 這個檔案以完成系統的啓動 . 從這裏 , 我們看到了 LINUX 的確融合了 SVR4 及 SunOS的一些特性 ,

inittab 這個檔案 , 在 SunOS 系統中是不存在的 , 但是它卻是SVR4 典型的檔案 . init 這個 process 會依據 /etc/inittab

中所記載的內容進入不同的 run-level 並啓動不同的 process . 所以 inittab 的重要性可見一斑 . 那什麽叫 run-level 呢 ?

所謂 run-level 就是系統中定義了許多不同的 level , 而系統會隨著 level 的不同而去啓動不同的資源 .

現在就讓我們來看一下 /etc/inittab 中的內容 :

在 /etc/inittab 這個檔案中 , 每一列是一個進入點 , 假如我們仔細觀察每一列的話 , 那我們就會很容易的發現 ,

/etc/inittab 的每一列可以被 " : " 這個字元分成好幾個欄位 . 這幾個欄位的格式如下 :

id:runlevels:action:process

而它們代表的意義分別如下 :

id : 由兩個獨特的字元所組成的辨示符號 , 在比較新的 UNIX 系統中 , 已不受只能有兩個字元的限制 .

runlevels : 指出下面一個欄位中的 action 以及 下下個欄位中的 process會在那些 runlevel 中被執行 . 這一欄的合法值

有 0,1,2...6 s 以及 S . 而在正常的啓動程序之後 , Superuser 可以使用telinit 這個指令來改變系統的 runlevel . 又因

在 LINUX 中, runlevel 的預設值是 5 ( 等一下就會看到 ) 所以 , 只有那些每一列中 runlevel 那欄有 5 這個值的 , 後面的

process才會被啓動 . 所以 , 我們就可以想像的到 : " 由於系統的runlevel 不同 , 所起動的 process 也不盡相同 , 所以系

統起動的資源在每個不同的 runlevel 就會有差異存在 .

action : 這個欄位有一點複雜 , 在這個欄位中記錄著 init 在啓動相對應的process 時 , 對 process 所采取的動作 , 而

合法的動作有下面幾項:

initdefault : 指出系統在啓動時 , 預設進入的 run-level 值 ,比如說 , 我? 強梢栽?/etc/inittab 中找到下面這一列

id:5:initdefault:

很明顯的 , 系統將在啓動時 , 進入 runlevel 爲 5的模式 . 當然 , 你可以把 5 改成 6 試試看 , 如果你改成了 6 , 那將

會執行 /etc/rc.d/rc.6 , 也就是 run xdm . xdm 在以後有機會的話 , 將爲各位介紹 ......

sysinit : 在系統起動時 , 這個 process 會被執行 . 而所有 process 前的 action 中有 boot 及 bootwait 的 process ,

必須等到這些 action 爲 sysinit 的 process 執行完之後它們才能夠執行 .

wait : 在起動一個 process 之後 , 若要再起動

 
特别声明:以上内容(如有图片或视频亦包括在内)为网络用户发布,本站仅提供信息存储服务。
 
Linux 開機程序之研討 Linux 開機程序之研討 Linux 開機程序之研討 位是否曾經對電腦整個開機的流程感到好奇呢 ? 這一次 , 我們所要討論的主題 , 就是 Linux 從開機的一瞬間到 login 爲止 , 到底發生了什麽事情? 想必各位都知道 , 在剛開機時 , 由於 80x86 的特性 , CS ( Code Segment)這個暫存器中全部都放著 1 , 而 IP ( Instruction Pointer ) 這個暫存器中全部都放著 0 , 換句話說 , CS=FFFF 而 IP=0000 , 此時 , CPU 就依據CS 及 IP 的 值 , 到 FFFF0H 去執行那個地方所放的指令 . 這時候 , 由於FFFF0H 已經到了高位址的頂端 , 所以 , FFFF0H 這個地方 , 總 會放一個JMP 指令 , 跳到比較低的位址 . 接著 , ROM BIOS 就會作一些檢查的動作像記憶體 , 鍵盤 等...... 並在我們俗稱 的 UMB ( Upper Memory Block )之中掃描 , 看看是否有合法的 ROM 存在 ( 比如 SCSI 卡上的 ROM ) . 假如有 , 就到裏面去執行一些東西 , 執行完之後再繼續剛才的行程 . 到了最後 , 讀取磁碟機上的第一個 sector . 在這裏 , 我假設各位由硬碟啓動因此 , 就硬碟的構造而言 , 它的第一個 sector 稱爲 MBR ( Master BootRecord ) . 因爲一個 sector 是 512 bytes , 而 MBR 這 512 bytes 可分爲兩個部份 , 第一個部份爲 Pre-Boot 區 , 占了 446 bytes ; 第二部份是 Partition Table , 占了 66 bytes . Pre-Boot 區的作用之一 , 就是去看看那在上次的介紹中 , 我們已經看完了 rc.S 及 rc.serial 這兩個 shell script . 現在 , 我們將把剩下的 shell script 再作一個介紹 . 首先還是看看全部的流程 : init[1] rc.S begin rc.serial begin rc.serial end rc.S end <-- 上一次我們說明到這裏 init[1] enter runlevel 5 rc.M begin rc.inet1 begin rc.inet1 end rc.inet2 begin rc.inet2 end rc.font begin rc.font end rc.local begin rc.local end rc.M end login 這次主要的部份可分爲兩項 : 因爲 init 將會去讀取 inittab , 所以 inittab 將被列爲第一部份的重點 , 而第二部份就是 rc.M , rc.font , rc.local 這幾個 shell script 的說明 . ( rc.inet1 , rc.inet2 這兩個關於網路的shell script 將在以後 單獨說明 ) 好了 , 我們先從 inittab 看起吧 ! 看看上面的流程 , 在第一行 : init[1]也就是 init 這個 process 被啓動之後 , 它會去 讀取 /etc/inittab 這個檔案以完成系統的啓動 . 從這裏 , 我們看到了 LINUX 的確融合了 SVR4 及 SunOS的一些特性 , inittab 這個檔案 , 在 SunOS 系統中是不存在的 , 但是它卻是SVR4 典型的檔案 . init 這個 process 會依據 /etc/inittab 中所記載的內容進入不同的 run-level 並啓動不同的 process . 所以 inittab 的重要性可見一斑 . 那什麽叫 run-level 呢 ? 所謂 run-level 就是系統中定義了許多不同的 level , 而系統會隨著 level 的不同而去啓動不同的資源 . 現在就讓我們來看一下 /etc/inittab 中的內容 : 在 /etc/inittab 這個檔案中 , 每一列是一個進入點 , 假如我們仔細觀察每一列的話 , 那我們就會很容易的發現 , /etc/inittab 的每一列可以被 " : " 這個字元分成好幾個欄位 . 這幾個欄位的格式如下 : id:runlevels:action:process 而它們代表的意義分別如下 : id : 由兩個獨特的字元所組成的辨示符號 , 在比較新的 UNIX 系統中 , 已不受只能有兩個字元的限制 . runlevels : 指出下面一個欄位中的 action 以及 下下個欄位中的 process會在那些 runlevel 中被執行 . 這一欄的合法值 有 0,1,2...6 s 以及 S . 而在正常的啓動程序之後 , Superuser 可以使用telinit 這個指令來改變系統的 runlevel . 又因 在 LINUX 中, runlevel 的預設值是 5 ( 等一下就會看到 ) 所以 , 只有那些每一列中 runlevel 那欄有 5 這個值的 , 後面的 process才會被啓動 . 所以 , 我們就可以想像的到 : " 由於系統的runlevel 不同 , 所起動的 process 也不盡相同 , 所以系 統起動的資源在每個不同的 runlevel 就會有差異存在 . action : 這個欄位有一點複雜 , 在這個欄位中記錄著 init 在啓動相對應的process 時 , 對 process 所采取的動作 , 而 合法的動作有下面幾項: initdefault : 指出系統在啓動時 , 預設進入的 run-level 值 ,比如說 , 我? 強梢栽?/etc/inittab 中找到下面這一列 id:5:initdefault: 很明顯的 , 系統將在啓動時 , 進入 runlevel 爲 5的模式 . 當然 , 你可以把 5 改成 6 試試看 , 如果你改成了 6 , 那將 會執行 /etc/rc.d/rc.6 , 也就是 run xdm . xdm 在以後有機會的話 , 將爲各位介紹 ...... sysinit : 在系統起動時 , 這個 process 會被執行 . 而所有 process 前的 action 中有 boot 及 bootwait 的 process , 必須等到這些 action 爲 sysinit 的 process 執行完之後它們才能夠執行 . wait : 在起動一個 process 之後 , 若要再起動
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有