載入核心並執行init程式

2021-09-20 15:00:27 字數 2232 閱讀 5810

核心的載入

由boot loader管理而開始讀取核心檔案後,linux將核心解壓到主儲存器中,並利用核心的功能,開始與驅動各個周邊裝置,包括儲存裝置、cpu、網路卡、音效卡等。

虛擬檔案系統(initial ram disk )一般使用檔名為/boot/initrd  它可以通過boot loader來載入到記憶體中,然後此檔案會被解壓縮並在記憶體中**成乙個根目錄,且此**在記憶體中的檔案系統能提供乙個可執行程式,通過此程式來載入開機過程中所最需要的核心模組,通常為usb、raid、lve、scsi等檔案系統與磁碟介面的驅動程式。載入完成後,重新呼叫/sbin/init來開始後續的正常開機流程。

根目錄在特殊的磁碟介面 (usb, sata, scsi) , 或者為 lvm, raid 等等,會需要 initrd。

如為ide介面,並使用預設的ext2/ext3檔案系統,不需要initrd也可以正常開機。

核心載入完成後,主機開始正確動作。

開始執行系統的第一支程式 /sbin/init

此程式主要功能是準備軟體執行的環境,包括系統的主機名,網路設定,語系處理,檔案系統格式及其它服務的啟動等。

所有的動作都會透過init的配置檔案/etc/inittab來規劃,inittab裡設定有圍住的runlevel.

rnulevel 介紹

0-halt

1-single user mode            單人維護模式,用在系統故障時維護。

2-multi-user,without nfs      類似runlevel3,但無nfs服務

3-full molti-user mode        完整含有網路功能的純文字模式

4-unused                      系統保留功能

5-x11                         與runlevel3類似,但載入x window

6-reboot                      重新啟動

init 的處理流程

1.先取得runlevel

2.使用/etc/rc.d/rc.sysinit進行系統初始化

3.由於runlevel 是5,因此只進行 l5:5:wait:/etc/rc.d/rc 5 

4.設定好 ctrl + alt + del組合鍵功能

5.設定不斷電系統的pf.pr兩種機制

6.啟動mingetty的六個終端機 (tty1~tty6)

7.啟**形視窗

init 處理系統初始化流程 (/etc/rc.d/rc.sysinit)

在/etc/inittab中, si::sysinit:/etc/rc.d/rc.sysinit    表示開始載入各項系統服務前需先配置好整個系統環境。這裡就是自用/etc/rc.d/rc.sysinit 這個shell script來進行設定。

rc.sysinit中的很多預設配置檔案都在 /etc/sysconfig/ 中.

rc.sysinit主要工作:

1.取得網路環境與主機型別

讀取網路配置檔案/etc/sysconfig/network ,獲得主機名,閘道器等網路設定

2.測試與掛載記憶體裝置/proc 及usb裝置/sys  

3.決定是否啟動selinux 

4.啟動系統的隨機數生成器(密碼加密演算)

5.設定console字形

6.設定顯示於開機過程中的歡迎畫畫 (test banner)

7.設定系統時間 與時區 /etc/sysconfig/clock

8.介面裝置的偵測與pnp引數測試

9.使用者自定義模組的載入   /etc/sysconfig/modules/*.modules

10.載入核心的相關設定 /etc/sysctl.conf

11.設定主機名與初始化電源管理模組acpi

12.初始化軟體磁碟陣列 /etc/mdadm.conf

13.初始化lbm檔案系統功能 

14.以fsck檢驗磁碟檔案系統,  進行filesystem check

15.進行磁碟配額quota的轉換

16.重新以可讀寫模式掛載系統磁碟

17.啟動quota功能,

18.啟動系統虛擬隨機數生成器pseudo-random

19.清除開機過程中的臨時檔案

20.將開機相關資訊載入到/var/log/dmesg

使用者自定義開機啟動程式 /etc/rc.d/rc.local

是在其它的init scripts執行完後才執行,類似windows 的啟動

java程式中動態載入jar包並執行

載入jar包的類urlclassloader中使用的方法為addurl,但是這個方法是protected型別 分別用了兩種方法 一 參考 反射到這個類 method add urlclassloader.class.getdeclaredmethod addurl new class add.set...

程式載入與執行問題

1 程式如何執行 在多道程式環境下,要是程式執行,必須纖維質建立程序。而建立程序的第一件事,便是將程式和資料裝入記憶體。如何將乙個使用者源程式變為乙個可以在記憶體中執行的程式,通常都要經過一下幾個步驟 首先是要編譯,有編譯程式將使用者源 編譯成cpu可執行的目標 產生了若干個目標模組 若干程式段 其...

linux核心載入可執行檔案

使用gdb跟蹤分析乙個execve系統呼叫核心處理函式 sys execve 驗證您對linux系統 載入可執行程式所需處理過程的理解 登陸實驗樓虛擬機器 增加 s s啟動引數開啟除錯模式 qemu kernel linux 3.18.6 arch x86 boot bzimage initrd r...