核心的載入
由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...