一瞬沦、Linux內(nèi)核的組成
相關(guān)概念:
Linux系統(tǒng)的組成部分:內(nèi)核+根文件系統(tǒng)
內(nèi)核功能包括進(jìn)程管理、內(nèi)存管理剿另、網(wǎng)絡(luò)協(xié)議棧箫锤、文件系統(tǒng)、驅(qū)動(dòng)程序雨女、安全功能
IPC:Inter Process Communication進(jìn)程間通訊
指至少兩個(gè)進(jìn)程或線程間傳送數(shù)據(jù)或信號(hào)的一些技術(shù)或方法谚攒。進(jìn)程是計(jì)算機(jī)系統(tǒng)分配資源的最小單位(嚴(yán)格說(shuō)來(lái)是線程)。每個(gè)進(jìn)程都有自己的一部分獨(dú)立的系統(tǒng)資源氛堕,彼此是隔離的馏臭。為了能使不同的進(jìn)程互相訪問(wèn)資源并進(jìn)行協(xié)調(diào)工作,才有了進(jìn)程間通信讼稚。通常括儒,使用進(jìn)程間通信的兩個(gè)應(yīng)用可以被分為客戶端和服務(wù)器(見主從式架構(gòu)),客戶端進(jìn)程請(qǐng)求數(shù)據(jù)锐想,服務(wù)端響應(yīng)客戶端的數(shù)據(jù)請(qǐng)求帮寻。有一些應(yīng)用本身既是服務(wù)器又是客戶端,這在分布式計(jì)算中赠摇,時(shí)彻潭海可以見到。這些進(jìn)程可以運(yùn)行在同一計(jì)算機(jī)上或網(wǎng)絡(luò)連接的不同計(jì)算機(jī)上藕帜。
IPC包括消息隊(duì)列抒蚜、信號(hào)燈、以及共享內(nèi)存區(qū)(Message queues, semaphores, and shared memory)(本地間通訊)
socket(跨主機(jī)通信)
運(yùn)行中的系統(tǒng)環(huán)境可分成兩層:內(nèi)核空間耘戚、用戶空間
用戶空間:應(yīng)用程序(進(jìn)程或線程)
內(nèi)核空間:內(nèi)核代碼(系統(tǒng)調(diào)用)
內(nèi)核設(shè)計(jì)流派:
單內(nèi)核設(shè)計(jì):把所有功能集成于同一個(gè)程序嗡髓;
例如:Linux
微內(nèi)核設(shè)計(jì):每種功能使用一個(gè)單獨(dú)的子系統(tǒng)實(shí)現(xiàn)
例如:Windows,Solaris
Linux內(nèi)核特點(diǎn):
雖然是單內(nèi)核設(shè)計(jì)收津,但支持模塊化并支持模塊運(yùn)行時(shí)動(dòng)態(tài)裝載或卸載
模塊文件通常為 .ko(kernel object)內(nèi)核模塊(對(duì)象)
Linux對(duì)象類文件有兩種 .so(share object)/共享對(duì)象 供各種應(yīng)用程序之間共享的應(yīng)用模塊另一種就是.ko 沒(méi)有共享概念 只是作為內(nèi)核中某一種功能實(shí)現(xiàn)
內(nèi)核組成部分:
- 核心文件:/boot/vmlinuz-VERSION-release①
1.1 ramdisk(中間臨時(shí)文件根系統(tǒng)饿这,動(dòng)態(tài)創(chuàng)建出來(lái)的浊伙,使用緩沖和緩存來(lái)加速對(duì)磁盤上的文件訪問(wèn)):
安裝操作系統(tǒng)后臨時(shí)生成的文件,能夠掃描當(dāng)前操作系統(tǒng)的硬盤驅(qū)動(dòng)长捧,裝載對(duì)應(yīng)的模塊 用于實(shí)現(xiàn)系統(tǒng)初始化的基于內(nèi)存的磁盤設(shè)備嚣鄙,把內(nèi)存中的一段空間當(dāng)內(nèi)存使用
ramdisk:②
Linux內(nèi)核的特性之一:使用緩沖和緩存來(lái)加速對(duì)磁盤上的文件訪問(wèn)
ramdisk --> ramfs
CentOS5:initrd
工具程序:mkinitrd
CentOS 6,7:initramfsA
工具程序:dracut,mkinitrd 借助ramdisk驅(qū)動(dòng)根文件系統(tǒng)
CentOS 5:/boot/initrd-VERSION-release.img
CentOS 6,7:/boot/initramfs-VERSION-release.img - 模塊文件:/lib/modules/VERSION-release
安裝多個(gè)內(nèi)核版本 那么該文件目錄下 就會(huì)有多個(gè)內(nèi)核文件目錄
二串结、CentOS系統(tǒng)啟動(dòng)流程(僅適用于PC架構(gòu)且硬盤為MBR格式主機(jī))
1哑子、POST③加電自檢
主要實(shí)現(xiàn)的功能是檢測(cè)各個(gè)外圍硬件設(shè)備是否存在而且能夠正常運(yùn)行起來(lái),實(shí)現(xiàn)這一自檢功能的是固化在主板上的ROM④(主要代表為CMOS)芯片上的BIOS(Basic Input/Output System)⑤程序肌割;透過(guò)BIOS程序加載CMOS的信息卧蜓,并藉由CMOS內(nèi)的設(shè)定值取得主機(jī)的各項(xiàng)硬件配置、例如 CPU 與接口設(shè)備的溝通頻率把敞、
開機(jī)裝置的搜尋順序弥奸、硬盤的大小與類型、 系統(tǒng)時(shí)間奋早、各周邊總線的是否啟動(dòng) Plug and Play
(PnP, 即插即用裝置) 盛霎、 各接口設(shè)備的 I/O 地址、以及與 CPU 溝通的 IRQ 岔斷等等的信息只要一通電耽装,CPU就會(huì)自動(dòng)去加載ROM芯片上的BIOS程序愤炸,是這樣來(lái)實(shí)現(xiàn)的。
在整個(gè)操作系統(tǒng)中掉奄,可被尋址的物理存儲(chǔ)空間由兩部分組成ROM摇幻,RAM
需要通過(guò)ROM加載自檢程序也就是說(shuō)CPU所訪問(wèn)的物理地址空間不光有物理內(nèi)存,還包括ROM
2挥萌、Boot Sequence
按次序查找各引導(dǎo)設(shè)備绰姻,第一個(gè)有引導(dǎo)程序的設(shè)備即為本次啟動(dòng)要用到的設(shè)備
3、bootloader
引導(dǎo)加載器是一個(gè)程序 可以安裝在硬盤 光盤 甚至是硬盤上的程序
- Windows:ntloader
- Linux:
2.1 LILO:Linux Loader 短小精悍的linux加載器引瀑,1024柱面之后無(wú)法加載狂芋,現(xiàn)在多用于安卓手機(jī)啟動(dòng)
2.2 GRUB:Grand Unified Bootloader/通用統(tǒng)一引導(dǎo)加載器
GRUB 0.X 被稱為 Grub Legacy
GRUB 1.X 與0.X相距甚遠(yuǎn) 被稱為 Grub2
功能:提供一個(gè)菜單,允許用戶選擇要啟動(dòng)的系統(tǒng)或不同的內(nèi)核版本憨栽;把用戶選定的內(nèi)核裝載到RAM中的特定空間中帜矾,解壓,展開屑柔,而后把系統(tǒng)控制權(quán)交給內(nèi)核屡萤;
MBR(Master Boot Record) MBR記錄一般是在磁盤 0 磁道 1 扇區(qū),共512個(gè)字節(jié)掸宛。前446個(gè)字節(jié)是BootLoder死陆,后 4*16 的 64 個(gè)字節(jié)是存放分區(qū)信息的,最后 2 個(gè)字節(jié)是校驗(yàn)信息,一般是 55AA措译。
grub是bootloader中的一種别凤,就grub來(lái)說(shuō),為了打破在MBR中只有446Bytes用于存放bootloader這一限制领虹,所以這一步的實(shí)現(xiàn)是這樣的:grub是通過(guò)分成三個(gè)階段來(lái)實(shí)現(xiàn)加載內(nèi)核這一功能的规哪,這三個(gè)階段分別是:stage1, stage1.5以及stage2。其中:
- stage1:存放于MBR的前446Bytes塌衰,用于加載stage1.5階段诉稍,目的是為了識(shí)別并驅(qū)動(dòng)stage2(或者/boot)所在分區(qū)的文件系統(tǒng);
- stage1.5:存放于MBR之后的扇區(qū)最疆,加載stage2所在分區(qū)的文件系統(tǒng)驅(qū)動(dòng)杯巨,讓stage1中的bootloader能識(shí)別stage2所在分區(qū)的文件系統(tǒng);
- stage2:存放于磁盤分區(qū)之上肚菠,具體存放于/boot/grub目錄之下,主要用于加載內(nèi)核文件(vmlinuz-VERSION-RELEASE)以及ramdisk這個(gè)臨時(shí)根文件系統(tǒng)(initrd-VERSION-RELEASE.img或initramfs-VERSION-RELEASE.img)罩缴。
概述:假如要啟動(dòng)的是硬盤設(shè)備蚊逢,首先我們的硬件平臺(tái)主板BIOS必須能夠識(shí)別硬盤,然后BIOS才能加載硬盤中的bootloader箫章,而bootloader自身加載后就能夠直接識(shí)別當(dāng)前主機(jī)上的硬盤設(shè)備了烙荷;不過(guò),能夠識(shí)別硬盤設(shè)備不代表能夠識(shí)別硬盤設(shè)備中的文件系統(tǒng)檬寂,因?yàn)槲募到y(tǒng)是額外附加的一層軟件組織的文件結(jié)構(gòu)终抽,所以要對(duì)接一種文件系統(tǒng),就必須要有對(duì)應(yīng)的能夠識(shí)別和理解這種文件系統(tǒng)的驅(qū)動(dòng)桶至,這種驅(qū)動(dòng)就稱為文件系統(tǒng)驅(qū)動(dòng)昼伴。而stage1.5就是向grub提供文件系統(tǒng)驅(qū)動(dòng)的,這樣stage1就能訪問(wèn)stage2及內(nèi)核所在的分區(qū)(/boot)了镣屹。
用于取代MBR的設(shè)計(jì)架構(gòu) UEFI圃郊,GPT
4、Kernel
kernel自身初始化女蜈,實(shí)現(xiàn)功能:
- 探測(cè)可識(shí)別到的所有硬件設(shè)備
bootloader將系統(tǒng)控制權(quán)移交給內(nèi)核就好比如后朝推翻前朝持舆,統(tǒng)治者(內(nèi)核)當(dāng)權(quán)之后,首先要檢查一下有哪些是前朝所留下的伪窖,例如有哪些領(lǐng)土逸寓、人力、財(cái)力覆山、兵力可用等等竹伸。
- 加載硬件驅(qū)動(dòng)程序;(有可能會(huì)借助于ramdisk加載驅(qū)動(dòng))
這就像統(tǒng)治者(內(nèi)核)在得知底下存在的人力簇宽、財(cái)力之后佩伤,開始將可以“為我所用”的人力納入麾下聊倔,聽自己使喚,而不聽使喚的殺掉生巡;
- 以只讀方式掛載根文件系統(tǒng)
如果有借助于ramdisk這個(gè)臨時(shí)文件系統(tǒng)(虛根)耙蔑,則在這一步之后會(huì)執(zhí)行根切換;否則不執(zhí)行根切換孤荣。
- 運(yùn)行用戶空間的第一個(gè)應(yīng)用程序:/sbin/init
到這里內(nèi)核空間的啟動(dòng)流程就結(jié)束了甸陌,而接下來(lái)是用戶空間完成后續(xù)的系統(tǒng)啟動(dòng)流程。
ramdisk和內(nèi)核是由bootloader一同加載到內(nèi)存當(dāng)中的盐股,ramdisk是用于實(shí)現(xiàn)系統(tǒng)初始化的钱豁、基于內(nèi)存的磁盤設(shè)備,即加載至內(nèi)存(的某一段空間)后把內(nèi)存當(dāng)
磁盤使用疯汁,并在內(nèi)存中作為臨時(shí)根文件系統(tǒng)提供給內(nèi)核使用牲尺,幫助內(nèi)核掛載真正的根文件系統(tǒng)。而之所以能夠幫助內(nèi)核掛載根文件系統(tǒng)是因?yàn)樵趓amdisk這個(gè)臨
時(shí)文件系統(tǒng)的/lib/modules目錄下有真正的根文件系統(tǒng)所在設(shè)備的驅(qū)動(dòng)程序幌蚊;除此之外谤碳,這個(gè)臨時(shí)文件系統(tǒng)也遵循FHS,例如有這些固定目錄結(jié)構(gòu):/bin,
/sbin, /lib, /lib64, /etc, /mnt, /media, ...
因?yàn)長(zhǎng)inux內(nèi)核有一個(gè)特性就是通過(guò)使用緩沖/緩存來(lái)達(dá)到加速對(duì)磁盤上文件的訪問(wèn)的目的溢豆,而ramdisk是加載到內(nèi)存并模擬成磁盤來(lái)使用的蜒简,所以Linux就會(huì)為
內(nèi)存中的“磁盤”再使用一層緩沖/緩存,但是我們的ramdisk本來(lái)就是內(nèi)存漩仙,它只不過(guò)被當(dāng)成硬盤來(lái)使用罷了搓茬,這就造成雙緩沖/緩存了,而且不會(huì)起到提速效果
甚至影響了訪問(wèn)性能队他;CentOS 5系列以及之前版本的ramdisk文件為initrd-VERSION-RELEASE.img卷仑,就會(huì)出現(xiàn)上述所說(shuō)到的問(wèn)題;而為了解決一問(wèn)題
CentOS 6/7系列版本就將其改為initramfs-VERSION-RELEASE.img麸折,使用文件系統(tǒng)的方式就可以避免雙緩沖/緩存了系枪,我們可以說(shuō)這是一種提速機(jī)制。
init程序的在不同CentOS版本上類型:
- CentOS 5及之前:SysV init
配置文件:/etc/inittab - CentOS 6:Upstart
配置文件:/etc/inittab(兼容CentOS5) /etc/init/*.conf - CentOS 7 :Systemd
配置文件:/usr/lib/systemd/system/,/etc/systemd/system
系統(tǒng)初始化流程(內(nèi)核級(jí)別):POST --> BootSequence(BIOS) -->BootLoader(MBR) --> Kernel (ramdisk) -->rootfs(readonly加載)-->/sbin/init()
/sbin/init:
CentOS 5:SysV init
運(yùn)行級(jí)別:為了系統(tǒng)的運(yùn)行或維護(hù)等目的而設(shè)定的機(jī)制
0-6:7個(gè)級(jí)別
0磕谅、關(guān)機(jī)私爷,shutdown
1、單用戶模式(single user)膊夹,root用戶衬浑,無(wú)須認(rèn)證;維護(hù)模式
2放刨、多用戶模式(multi user)工秩,會(huì)啟動(dòng)網(wǎng)絡(luò)功能,但不會(huì)啟動(dòng)NFS;維護(hù)模式
3助币、多用戶模式(mutli user)浪听,完全功能模式;文本界面
4眉菱、預(yù)留級(jí)別:目前無(wú)特別使用目的迹栓,但習(xí)慣以同3級(jí)別功能使用
5、多用戶模式(multi user)俭缓,完全功能模式克伊,圖形界面
6、重啟华坦,reboot
默認(rèn)級(jí)別:3愿吹,5
級(jí)別切換:init #
級(jí)別查看:who -r
runlevel 3 5
上一次啟動(dòng)使用3級(jí)別 本次使用5級(jí)別
配置文件:/etc/inittab
每行定義一種action(操作)以及與之對(duì)應(yīng)的process
- id:runlevels:action:process
id:一個(gè)任務(wù)的標(biāo)識(shí)符
runlevels:在哪些級(jí)別啟動(dòng)此任務(wù);#惜姐,###犁跪,也可以為空,表示所有級(jí)別
action:在什么條件下啟動(dòng)此任務(wù)歹袁;
process:任務(wù) - action:
wait:等待切換至此任務(wù)所在的級(jí)別時(shí)執(zhí)行一次坷衍;
respawn:此任務(wù)終止時(shí),就自動(dòng)重新啟動(dòng)之宇攻;
initdefault:設(shè)定默認(rèn)運(yùn)行級(jí)別惫叛;此時(shí)倡勇,process省略
sysinit:設(shè)定系統(tǒng)初始化方式逞刷,此處一般為指定的/etc/rc.d/rc.sysinit腳本(CentOS 56才有 7沒(méi)有); - 例如:vim /etc/inittab
id:3:initdefault: <--默認(rèn)的runlevel配置
si::sysinit:/etc/rc.d/rc.sysinit <--準(zhǔn)備系統(tǒng)軟件運(yùn)行的環(huán)境腳本運(yùn)行檔
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
…………
l6:6:wait:/etc/rc.d/rc 6- /etc/rc.d/目錄下有運(yùn)行級(jí)別的目錄
意味著去啟動(dòng)或關(guān)閉/etc/rc.d/rc3.d/目錄下的服務(wù)腳本所控制服務(wù)
K:要停止的服務(wù)妻熊;K##,優(yōu)先級(jí)夸浅,數(shù)字越小,越是優(yōu)先關(guān)閉扔役;依賴的服務(wù)先關(guān)閉帆喇,而后關(guān)閉被依賴的;
S:要啟動(dòng)的服務(wù)亿胸;S##,優(yōu)先級(jí)坯钦,數(shù)字越小,越是優(yōu)先啟動(dòng)侈玄;被依賴的服務(wù)先啟動(dòng)婉刀,而后依賴的服務(wù)后啟動(dòng)
- /etc/rc.d/目錄下有運(yùn)行級(jí)別的目錄
- rc腳本:接受一個(gè)運(yùn)行級(jí)別數(shù)字為參數(shù);
- 腳本框架:
for srv in /etc/rc.d/rc#.d/K*;do
$srv stop
done
for srv in /etc/rc.d/rc#.d/S*;do
$srv start
done
- /etc/init.d/(/etc/rc.d/init.d/)腳本執(zhí)行方式:
# /etc/init.d/SRV_SCRIPT {start|stop|restart|status}
為了控制服務(wù)啟動(dòng) 需要一個(gè)統(tǒng)一的管控接口(服務(wù)腳本)
# service SRV_SCRIPT {start|stop|restart|status}
- chkconfig命令:管控/etc/init.d/每個(gè)服務(wù)腳本在各級(jí)別下的啟動(dòng)或關(guān)閉狀態(tài)序仙;
查看:chkconfig --list [name]
添加:chkconfig --add name
刪除:chkconfig --del name
能被添加的服務(wù)的腳本定義格式之一:
#!/bin/bash
#
#chkconfig: LLL NN MM
LLL表示runlevel:處于該level下服務(wù)自啟動(dòng)
NN:表示啟動(dòng)優(yōu)先級(jí)
MM:表示關(guān)閉優(yōu)先級(jí)
- 修改指定的鏈接類型:
chkconfig [--level LEVELS] name <on|off|reset>
--level LEVELS:指定要控制的級(jí)別
- 若直接chkconfig name on 則默認(rèn)在2345級(jí)別啟動(dòng)
注意:正常級(jí)別下(3,5)下突颊,最后啟動(dòng)的一個(gè)服務(wù)S99local沒(méi)有鏈接至/etc/init.d下某腳本,而是鏈接至/etc/rc.d/rc.loca(/etc/rc.lcoal)l腳本,因此律秃,不便或不需寫為服務(wù)腳本的程序期望能開機(jī)自動(dòng)運(yùn)行時(shí)爬橡,直接放置于此腳本文件中即可
tty1:2345:respawn:/usr/sbin/mingetty tty1
…………
tty6:2345:respawn:/usr/sbin/mingetty tty6
- 當(dāng)處于2345等運(yùn)行級(jí)別時(shí)啟動(dòng)/usr/sbin/mingetty程序(虛擬終端) 這就是為什么可以按Ctrl+Alt+F1-6能切換并打開虛擬終端的原因
- 登陸時(shí),mingetty會(huì)調(diào)用login程序
- 打開虛擬終端的程序除了mingetty之外棒动,還有諸如getty等糙申;
- 系統(tǒng)初始化腳本:/etc/rc.d/rc.sysinit
1、 設(shè)置主機(jī)名:
2迁客、設(shè)置歡迎信息
3郭宝、激活udev和selinux
4、掛載/etc/fstab文件中定義的所有文件系統(tǒng)
5掷漱、檢測(cè)根文件系統(tǒng)粘室,并以讀寫方式重新掛載根文件系統(tǒng)
6、設(shè)置系統(tǒng)時(shí)鐘
7卜范、根據(jù)/etc/sysctl.conf文件來(lái)設(shè)置內(nèi)核參數(shù)
8衔统、激活lvm及軟raid設(shè)備
9、激活swap設(shè)備
10海雪、加載額外設(shè)備的驅(qū)動(dòng)程序
11锦爵、清理操作
注意:CentOS 7的systemd可能沒(méi)有這一步,而是通過(guò)其他機(jī)制來(lái)實(shí)現(xiàn)奥裸。
總結(jié)(用戶空間的啟動(dòng)流程):/sbin/init(/etc/inittab)
設(shè)置默認(rèn)運(yùn)行級(jí)別--> 運(yùn)行系統(tǒng)初始化腳本险掀,完成系統(tǒng)初始化-->關(guān)閉對(duì)應(yīng)級(jí)別下需要停止的服務(wù),啟動(dòng)對(duì)應(yīng)級(jí)別下需要開啟的服務(wù)-->設(shè)置登陸終端[-->啟動(dòng)圖形終端]
這一切進(jìn)程都有init或init子進(jìn)程啟動(dòng) 這就是為什么pstree都是init子進(jìn)程的原因
以上是CentOS5的啟動(dòng)流程
CentOS6啟動(dòng)流程:
- init程序:upstart湾宙,但依然為/sbin/init,其配置文件樟氢;
- /etc/init/*.conf,/etc/inittab(僅定義系統(tǒng)啟動(dòng)級(jí)別)
- /etc/init/rsS.conf即為系統(tǒng)初始化腳本
- /etc/init/start-ttys.conf即為啟動(dòng)終端腳本
- /etc/init/[rc init-system-dbus].conf 啟動(dòng)服務(wù)腳本 rc.conf為主腳本
注意:*.conf為upstart風(fēng)格的配置文件侠鳄;無(wú)需深入學(xué)習(xí) CentOS7沒(méi)有該風(fēng)格
- /etc/init/*.conf,/etc/inittab(僅定義系統(tǒng)啟動(dòng)級(jí)別)
CentOS7啟動(dòng)流程:
- init程序:systemd埠啃,配置文件:/usr/lib/systemd/system/,/etc/systemd/system/
完全兼容SysV腳本機(jī)制;因此伟恶,service命令依然可用碴开;不過(guò),建議使用systemctl命令來(lái)控制服務(wù)博秫;
# systemctl {start|stop|restart|status} name[.service]
思維導(dǎo)圖
注:
附加資源
CentOS系列啟動(dòng)流程和內(nèi)核原理(5系列潦牛,6系列,7系列)
Linux 開機(jī)引導(dǎo)和啟動(dòng)過(guò)程詳解
①vmlinuz:表示此內(nèi)核文件為壓縮文件 VERSION:內(nèi)核版本號(hào) release:local version 本地版本號(hào)
②在早期的Linux系統(tǒng)中挡育,一般就只有軟盤或者硬盤被用來(lái)作為L(zhǎng)inux的根文件系統(tǒng)巴碗,因此很容易把這些設(shè)備的驅(qū)動(dòng)程序集成到內(nèi)核中。但是現(xiàn)在根文件系統(tǒng) 可能保存在各種存儲(chǔ)設(shè)備上静盅,包括SCSI, SATA, U盤等等良价。因此把這些設(shè)備驅(qū)動(dòng)程序全部編譯到內(nèi)核中顯得不太方便寝殴。
在Linux內(nèi)核模塊自動(dòng)加載機(jī)制的介紹中,我們看到利用udevd可以實(shí)現(xiàn)實(shí)現(xiàn)內(nèi)核模塊的自動(dòng)加載明垢,因此我們希望根文件系統(tǒng)的設(shè)備驅(qū)動(dòng)程序也能夠?qū)崿F(xiàn)自動(dòng)加載蚣常。但是這里有一個(gè)矛盾,udevd是一個(gè)可執(zhí)行文件痊银,在根文件系統(tǒng)被掛載前抵蚊,是不 可能執(zhí)行udevd的,但是如果udevd沒(méi)有啟動(dòng)溯革,那就無(wú)法自動(dòng)加載根根據(jù)系統(tǒng)設(shè)備的驅(qū)動(dòng)程序贞绳,同時(shí)也無(wú)法在/dev目錄下建立相應(yīng)的設(shè)備節(jié)點(diǎn)。
為了解決這個(gè)矛盾致稀,于是出現(xiàn)了initrd(boot loader initialized RAM disk)冈闭。initrd是一個(gè)被壓縮過(guò)的小型根目錄,這個(gè)目錄中包含了啟動(dòng)階段中必須的驅(qū)動(dòng)模塊抖单,可執(zhí)行文件和啟動(dòng)腳本萎攒。包括上面提到的udevd,當(dāng) 系統(tǒng)啟動(dòng)的時(shí)候矛绘,booload會(huì)把initrd文件讀到內(nèi)存中耍休,然后把initrd的起始地址告訴內(nèi)核。內(nèi)核在運(yùn)行過(guò)程中會(huì)解壓initrd货矮,然后把 initrd掛載為根目錄羊精,然后執(zhí)行根目錄中的/initrc腳本,您可以在這個(gè)腳本中運(yùn)行initrd中的udevd囚玫,讓它來(lái)自動(dòng)加載設(shè)備驅(qū)動(dòng)程序以及 在/dev目錄下建立必要的設(shè)備節(jié)點(diǎn)喧锦。在udevd自動(dòng)加載磁盤驅(qū)動(dòng)程序之后,就可以mount真正的根目錄劫灶,并切換到這個(gè)根目錄中裸违。
③加電自檢又稱為引導(dǎo)自我檢測(cè)(英語(yǔ):Power-On Self-Test掖桦;POST)本昏,是計(jì)算機(jī)BIOS的一個(gè)功能,在引導(dǎo)后會(huì)運(yùn)行枪汪,針對(duì)計(jì)算機(jī)硬件如CPU涌穆、主板、存儲(chǔ)器等進(jìn)行檢測(cè)雀久,結(jié)果會(huì)顯示在固件可以控制的輸出接口宿稀,像顯示屏、LED赖捌、打印機(jī)等等設(shè)備上祝沸。加電自檢的檢查速度極快矮烹,甚至感受不到它的存在。
④Rom(Read Only Memory)只讀存儲(chǔ)器罩锐,這種存儲(chǔ)器(Memory)的內(nèi)容任何情況下都不會(huì)改變奉狈,計(jì)算機(jī)與用戶只能讀取保存在這里的指令,和使用存儲(chǔ)在ROM的數(shù)據(jù)涩惑,但不能變更或存入數(shù)據(jù)仁期。ROM被存儲(chǔ)在一個(gè)非易失性芯片上,也就是說(shuō)竭恬,即使在關(guān)機(jī)之后記憶的內(nèi)容仍可以被保存跛蛋,所以這種存儲(chǔ)器多用來(lái)存儲(chǔ)特定功能的程序或系統(tǒng)程序。
CMOS(互補(bǔ)式金屬氧化物半導(dǎo)體) 早期的只讀存儲(chǔ)器主要就是以這種電路制作的痊硕,由于當(dāng)時(shí)電腦系統(tǒng)的BIOS程序和參數(shù)信息都保存在ROM和SRAM中赊级,以致在很多情況下,當(dāng)人們提到“CMOS”時(shí)岔绸,實(shí)際上指的是電腦系統(tǒng)之中的BIOS單元此衅,而一般的“CMOS設(shè)置”就是意指在設(shè)定BIOS的內(nèi)容。
BIOS是計(jì)算機(jī)上另一個(gè)重要的存儲(chǔ)器亭螟。之所以提到它挡鞍,是因?yàn)榛パa(bǔ)式金屬氧化物半導(dǎo)體中保存著BIOS程序的設(shè)置結(jié)果。而且预烙,互補(bǔ)式金屬氧化物半導(dǎo)體中的用戶信息和常規(guī)設(shè)置需要在BIOS程序引導(dǎo)計(jì)算機(jī)啟動(dòng)后才能載入墨微。
⑤BIOS用于計(jì)算機(jī)引導(dǎo)時(shí)運(yùn)行系統(tǒng)各部分的自我檢測(cè)(Power On Self Test),并加載引導(dǎo)程序(IPL)或存儲(chǔ)在主存的操作系統(tǒng)扁掸。此外翘县,BIOS還向操作系統(tǒng)提供一些系統(tǒng)參數(shù)。系統(tǒng)硬件的變化是由BIOS隱藏谴分,程序使用BIOS功能而不是直接控制硬件⌒怍铮現(xiàn)代操作系統(tǒng)會(huì)忽略BIOS提供的抽象層并直接控制硬件組件。