作業系統核心的功能:
程序排程
記憶體管理
檔案系統
硬體驅動
網絡功能
安全
提供緩沖和緩存加速系統性能
核心的設計模式:
微核心:核心隻保留最核心的功能,而其它應該由核心實作的功能交由子系統來實作
單核心:把所有功能全部做進核心
linux: 單核心,把許多功能做成了核心子產品(ko: kernel object)
核心子產品可以動态裝載和解除安裝
/boot/kernel-vision --> /lib/modules/vision/kernel/*
linux系統的啟動流程:
POST(上電自檢) -->BIOS -->Boot Squence --> MBR -->Boot Loader(代碼)-->Kernel(初始化)-->initrd-->/sbin/init(/etc/inittab)-->login
1.系統會先去加載 BIOS (Basic Input Output System),并透過BIOS 程式去加載CMOS中的資訊,并且藉由 CMOS 内的配置值取得主機的各項硬體配置, 例如CPU 與周邊裝置的溝通時鐘頻率、啟動裝置的搜尋順序、硬碟的大小與類型、 系統時間、各周邊彙流排的是否啟動 Plug and Play (PnP, 随插即用裝置) 、裝置的 I/O 位址、以及與 CPU 溝通的 IRQ 中斷等等的資訊。
2.在取得這些資訊後,BIOS 會進行啟動自我測試 (Power-on Self Test, POST) 。 然後開始運作硬體偵測的初始化,并配置 PnP 裝置,之後再定義出可啟動的裝置順序, 接下來就會開始進行啟動裝置的資料讀取。
3.BIOS 是透過硬體的INT 13中斷功能來讀取 MBR 的,也就是說,隻要 BIOS 能夠偵測的到你的磁盤 (不論是 SATA 還是 IDE 的,那他就有辦法透過INT 13 這條通道來讀取該磁碟的第一個磁區内的 MBR !這樣 boot loader 也就能夠被運作!
4. Boot Loader 的最主要功能是要認識作業系統的檔案格式并加載 kernel 檔案到主記憶體中去運作
5. Linux 會将核心解壓縮到主記憶體當中, 并且利用核心的功能,開始測試與驅動各個周邊裝置,包括儲存裝置、CPU、網絡卡、聲霸卡等等。 此時 Linux 核心會 以自己的功能重新偵測一次硬體,核心此時才開始接管 BIOS 後的工作。 一般來說,核心檔案會被放置到 /boot 裡面,并且取名為 /boot/vmlinuz 才對!
6. 虛拟檔案系統 (Initial RAM Disk) 一般使用的檔案名為 /boot/initrd
# zcat /boot/initrd-kernel-versiso | cpio -id -->目前目錄
編輯init檔案 # find . | cpio -o -H newc --quiet | gzip -9 >/mnt/boot/initrd.gz
7. 啟動第一支程式 init
配置檔案: /etc/inittab 與 runlevel
init 處理系統初始化流程 (/etc/rc.d/rc.sysinit)
Kernel啟動時完成的任務:
硬體探測
硬體驅動初始化(initrd: RAMDISK)
挂載根檔案系統(根切換initrd-->rootfs)
啟動init程序
init(/etc/inittab):
設定預設運作級别
執行系統的初始化腳本(/etc/rc.d/rc.sysinit)
運作某級别相應的腳本(/etc/rc.d/rcN.d)
K
S
啟動虛拟終端
對于5級别而言,還要初始圖形界面
/etc/inittab:
這個檔案的文法是利用冒号 (:) 将配置分隔成為四個欄位,每個欄位的意義與說明如下:
[ID]:[run level]:[init 的動作行為]:[指令項目]
1. ID:最多四個位元組,代表 init 的主要工作項目,隻是辨別說明。
2. run level:該項目在哪些 run level 底下進行的意思。如果是 35 則代表 runlevel 3 與 5 都會運作。
3. init 的動作項目:主要可以進行的動作項目意義有:
1):initdefault --> 設定預設運作級别
2):sysinit --> 系統初始化的動作項目
3): ctrlaltdel --> 代表 [ctrl]+[alt]+[del] 三個按鍵是否可以重新啟動的配置
4): wait --> 等待進入其相應級别以後才執行後面的指令
5): respawn -->代表後面欄位的指令可以無限制的再生(重新啟動)。會首先執行一次PROCESS,當PROCESS終止時會自動重新啟動
4. 指令項目:可以進行的指令,通常是一些 script。
系統初始化腳本完成的任務:-->/etc/rc.d/rc/sysinit
激活udev和selinux
根據/etc/sysctl.conf配置檔案設定核心參數
設定系統時鐘
設定鍵映射
啟動交換分區
設定主機名稱
重新檢測根檔案系統,并以讀寫方式重新挂載
激活RIADT和LVM
啟用磁盤配額
檢查和挂載其它檔案系統 --> /etc/fstab
清理一些過期檔案鎖和PID檔案等
/etc/rc.d/rc.sysinit