系統啓動流程

OS(Linux)

POST -->BIOS (Boot Sequence)-->MBR (bootloader,446)-->Kernel-->initramfs-->(ROOTFS) /sbin/init(etc/inittab)
文件系統
進程管理
內存管理
網絡管理
安全功能
驅動程序
RAM
ROM
/ 根所在分區系統 rootfs
內核設計風格: 模塊化
核心:動態加載,內核模塊
內核:/lib/modules/"內核版本號命令的目錄"/
vmlinuz-2.6.32
/lib/modules/2.6.32/
RedHat5 :ramdisk -->initrd
RedHat6 : -->initramfs
chroot : 切換根文件
chroot /PATH/TO/TEMPROOT [COMMAND...]
nash
switch_root
ldd : 顯示二進制文件所依賴的共享庫
ldd /PATH/TO/BINARY_FILE
單內核:Linux (LWP)
核心:ko (kernel object)
ARM架構 / X86
so ()
微內核:Windows,Solaris 支持線程
安全模式、VGA模式 維護模式
運行級別:0--6
0:halt
1:sigle user mode,直接以管理員身份切入
2:multi user mode,no NFS
3:multi user mode,text mode
4:reserved
5:multi user mode,graphic mode
6:reboot

詳解啓動過程
bootloader (MBR)
LILO :Linux LOader
GRUB:GRand Unified Bootloader
stage1 :MBR
stage1_5 :
stage2 :/boot/grub
default=0 #設定默認啓動的title的編號,從0開始
timeout=5 #等待用戶選擇的超時時長,單位是秒
splashimage=(hd0,0)/grub/splash.xpm.gz #grub的背景圖片
hiddenmenu #隱藏菜單
password redhat 定義密碼
password --md5 系統啓動流程
title CentOS 6 (2.6.32-696.el6.x86_64) #內核標題,或操作系統名稱,字符串,可自由修改
root (hd0,0) #內核文件所在的設備:對grub而言,所有類型硬盤一律hd; 格式爲(hd#, N);hd#, #表示第幾個磁盤;最後的N表示對應磁盤的分區;
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet #內核文件路徑,及傳遞給內核的參數
initrd /initramfs-2.6.32-696.el6.x86_64.img ramdisk文件路徑
查看運行級別:
runlevel:
who -r
查看內核release號:
uname -r
安裝grub stage1:
#grub
grub>root (hd0,0)
setup (hd0)

安裝grub第二種方式:
#grub-install --root -directory=path/to/boot's_parent_dir /PATH/TO/DEVICE

grub>find
grub>root (hd#,N)
grub>kernel /PATH/TO/KERNEL_FILE
grub>initrd /PATH/TO/INITRD_FILE
grub>boot

Kernel初始的過程:
1、設備探測
2、驅動初始化 (可能會從initrd(initramfs)文件中裝載驅動模塊)
3、以只讀掛載根文件系統;
4、裝載第一個進程init (PID :1);

/sbin/init :(/etc/inittab)
upstart :ubuntu,d-bus,event-driven
systemd :

id:runlevels:action:process
id:標識符
runlevels :在哪個級別運行此行;
action :在什麼情況下執行此行;
process :要運行程序;

ACTION:
initdefault :設定默認運行級別
sysinit :系統初始化
wait :等待級別切換至此級別時執行
respawn :一旦程序終止,會重新啓動

/etc/rc.d/rc.sysinit完成的任務;
1、激活udev和selinux;
2、根據/etc/sysctl.conf文件,不設定內核參數;
3、設定時鐘;
4、裝載鍵盤映射
5、啓用交換分區
6、設置主機名
7、根文件系統檢測,並以讀寫方式重新掛載
8、激活RAID和LVM設備
9、啓用磁盤配額
10、根據/etc/fstab,檢查並掛載其它文件系統
11、清理過期的鎖和PID文件

##:關閉或啓動的優化次序,數據越小越優先被選定
先關閉以k開頭的服務,後啓動以s開頭的服務;
si::sysinit:/etc/rc.d/rc.sysinit
OS 初始化
服務類腳本:
SysV:/etc/rc.d/init.d
start|stop|restart|status
reload|configtest
chkconfig命令
chkconfig :runlevels SS KK

   當chkconfig命令來爲此腳本在rc#.d目錄創建鏈接時,runlevels表示默認創建爲s*開頭的鏈接,-表示沒有級別默認爲s*開頭的鏈接除此以外的級別默認創建爲k*開頭的鏈接;s後面的啓動優先級爲SS所表示的數字;K後面關閉優化次序爲KK所表示的數字;

description :用於說明此腳本的簡單功能;\,續行
chkconfig --list :查看所有獨立守護服務的啓動設定; 獨立守護進程
chkconfig --list SERVICE_NAME
chkconfig --add SERVICE_NAME
chkcofnig --del SERVICE_NAME
chkconfig --level RUNLEVELS SERVCIE_NAME {on|off}
如果省略級別指定,默認爲2345級別;
/etc/rc.d/rc.local:系統最後啓動的一個服務,準確說,應該執行的一個腳本;

/etc/inittab的任務:
1、設定默認運行級別;
2、運行系統初始化腳本;
3、運行指定運行級別對應的目錄下的腳本;
4、設定Ctrl+Alt+Del組合鍵的操作;
5、定義UPS電源在電源故障/恢復時執行的操作;
6、啓動虛擬終端(2345級別);
7、啓動圖形終端(5級別);

守護進程的類型:
獨立守護進程
xinetd:超級守護進程,代理人
瞬時守護進程:不需要關聯至運行級別
核心:/boot/vmlinuz-version
內核模塊(ko):/lib/modules/version
內核設計:
單內核
模塊化設計
微內核

裝載模塊:
insmod
modprobe
內核網址: www.kernel.org
版本升級情況
系統啓動流程
用戶空間訪問、監控內核的方式:
/proc , /sys
僞文件系統
/proc/sys :此目錄中的文件很多是可讀寫的
/sys/ :某些文件可寫
設定內核參數數值的方法:
echo VALUE > /proc/sys/TO/SOMEFILE
sysctl -w kernel.hostname=
能立即生效,但無法永久有效;
永久有效:/etc/sysctl.conf
修改文件完成之後,執行如下命令可立即生效:
sysctl -p
sysctl -a:顯示所有內核參數及其值
內核模塊管理
lsmod :查看
modprobe MOD_NAME :裝載某模塊
modprobe -r MOD_NAME :卸載某模塊
modinfo MOD_NAME :查看模塊的具體信息
insmod /PATH/TO/MODULE_FILE:裝載模塊
rmmod MOD_NAME :移除某模塊
depmod /PATH/TO/MODILES_DIR:生成依賴關係

內核中的功能除了核心功能之外,在編譯時,大多功能都有三種選擇:
1、不使用此功能;
2、編譯成內核模塊;
3、編譯進內核;
如何手動編譯內核

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章