欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

連Linux的開機(jī)流程都不了解,怎么好意思說自己是程序員? - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!

您當(dāng)前位置>首頁 » 新聞資訊 » 技術(shù)分享 >

連Linux的開機(jī)流程都不了解,怎么好意思說自己是程序員?

發(fā)表時間:2020-10-19

發(fā)布人:葵宇科技

瀏覽次數(shù):40

想要讓一臺計算機(jī)工作,我們要做的第一件事就是讓這臺計算機(jī)開機(jī)??赡芤话阌脩艨吹降闹皇且粋€簡單的啟動界面,進(jìn)入用戶界面后就可以進(jìn)行相關(guān)的操作了,但是實際上在開機(jī)的時候計算機(jī)運行了很多程序,而運行的第一個程序就是Boot Loader這個開機(jī)管理程序。開機(jī)管理程序可以指定使用哪個核心文件來開機(jī),并實際加載核心到內(nèi)存當(dāng)中解壓縮與執(zhí)行,此時核心就能夠開始在內(nèi)存內(nèi)活動,并偵測所有硬件信息與加載適當(dāng)?shù)尿?qū)動程序來使整部主機(jī)開始運作,等到核心偵測硬件與加載驅(qū)動程序完畢后,一個最陽春的操作系統(tǒng)就開始在你的PC上面跑了。
往期推薦:
史上最全的Linux常用命令匯總(超全面!超詳細(xì)!)收藏這一篇就夠了!
史上最全的Linux常用命令匯總(超全面!超詳細(xì)!)收藏這一篇就夠了!
在這里插入圖片描述

文章目錄

    • 加載BIOS與自我測評
    • 讀取并執(zhí)行boot loader
    • 依據(jù)bootleader加載Kernel
    • Kernel主動呼叫systemd程序

加載BIOS與自我測評

BIOS最早可追溯到1970年代的CP/M操作系統(tǒng)。BIOS是CP/M操作系統(tǒng)中只能在特定機(jī)器上運行(machine-specific)的部分,它在系統(tǒng)引導(dǎo)時直接與硬件交互?,F(xiàn)在,BIOS的作用初始化和測試硬件組件,以及從大容量存儲設(shè)備(如硬盤)加載引導(dǎo)程序,并由引導(dǎo)程序加載操作系統(tǒng);當(dāng)加載操作系統(tǒng)后,BIOS通過系統(tǒng)管理模式為操作系統(tǒng)提供硬件抽象。
在取得CPU接口設(shè)備的溝通頻率后、搜尋順序、硬盤的大小與類型、系統(tǒng)時間、接口設(shè)備IO地址等信息后,BIOS還會進(jìn)行開機(jī)自我測試(Power-on Self Test,POST)。然后開始執(zhí)行硬件偵測初始化,并設(shè)定PnP裝置,之后定義出可開機(jī)的裝置順序,那么接下來就可以進(jìn)行開機(jī)裝置的數(shù)據(jù)讀取了。
系統(tǒng)軟件大多數(shù)存放在硬盤中,所以BIOS會指定開機(jī)的裝置讓我們讀取磁盤中的操作系統(tǒng)核心文件。由于文件格式的不相同,因此我們必須要以一個開機(jī)管理程序來處理核心文件加載(load)的問題,而這個開機(jī)程序就被稱為Bootloader,這個開機(jī)管理程序安裝在第一個扇區(qū)(sector)內(nèi),也就是我們一直談到的MBR(Master Boot Record,主要啟動記錄區(qū))

注意:
BIOS是透過硬件的INT13中斷功能來讀取MBR的,也就是BIOS只要能偵測到硬盤。那么他就有辦法透過INT13這條信道來讀取該磁盤的第一個扇區(qū)內(nèi)的MBR軟件。盡管系統(tǒng)的每顆硬盤的最前面區(qū)塊都有MBR和GPT兩個分區(qū)表提供loader的區(qū)塊,具體讀取那個硬盤的loader的程序得看BIOS的設(shè)定?;旧舷到y(tǒng)的MBR都是第一個開機(jī)裝置的MBR。

讀取并執(zhí)行boot loader

Loader的最主要功能是要認(rèn)識操作系統(tǒng)的文件格式并據(jù)以加載核心到主存儲器中去執(zhí)行。由于不同操作系統(tǒng)的文件格式不一致,因此每種操作系統(tǒng)都有自己的boot loader。當(dāng)一臺電腦上安裝有多重操作系統(tǒng)時,必須使用特定的loader才能夠加載出屬于自己的操作系統(tǒng)的核心。解決系統(tǒng)的MBR只有一個,而要在一部主機(jī)上同時安裝多個操作系統(tǒng),其實每個文件系統(tǒng)都會保留一塊啟動扇區(qū)(boot sector)提供操作系統(tǒng)安裝bootloader。而當(dāng)主機(jī)安裝有多個操作系統(tǒng)時boot sector,boot loader與MBR的相關(guān)性有點像下圖:
在這里插入圖片描述
如上圖所示,每個操作系統(tǒng)默認(rèn)是會安裝一套boot loader到他的文件系統(tǒng)中(就是每個filesystem左下角的方框),而在Linux系統(tǒng)安裝時,可以選擇他安裝到自己的文件系統(tǒng)中,也可以選擇不安裝。如果選擇安裝到MBR的話,那理論上你在MBR與boot sector都會保有一份boot loader程序的。至于Windows安裝時,他預(yù)設(shè)會主動將MBR與Boot sector都裝一份boot loader!所以安裝多重操作系統(tǒng)時,MBR常常會被不同的操作系統(tǒng)的boot loader所覆蓋!但是MBR也只有一個,要怎么執(zhí)行boot sector里面的loader我們就得詳細(xì)了解bootloader的功能了。它的主要功能如下:

  • 提供選單:用戶可以選擇不同的開機(jī)項目,這也是多重引導(dǎo)的重要功能!
  • 載入核心文件:直接指向開機(jī)的程序區(qū)段來開始操作系統(tǒng);
  • 轉(zhuǎn)交其他loader:將開機(jī)管理功能交給其他loader負(fù)責(zé)。
    由于具有選單功能,因此我們可以選擇不同的核心來開機(jī)。還具有控制權(quán)轉(zhuǎn)讓功能,那么我們就可以加載其他boot sector內(nèi)的loader了。
    在這里插入圖片描述

如上圖所示,MBR使用Linux 的grub2 這個開機(jī)管理程序,并且里面假設(shè)已經(jīng)有了三個選單,第一個選單可以直接指向Linux 的核心文件并且直接加載核心來開機(jī);第二個選單可以將開機(jī)管理程控權(quán)交給Windows來管理,此時Windows的loader 會接管開機(jī)流程,這個時候他就能夠啟動windows了。第三個選單則是使用Linux 在boot sector內(nèi)的開機(jī)管理程序,此時就會跳出另一個grub的菜單。

  • 選單一:MBR(grub2)–>kernel file–>booting
  • 選單二:MBR(grub2)–>boot sector(Windows loader)–>windows kernel–>booting
  • 選單三:MBR(grub2)–>boot sector(grub2)–>kernel file–>booting

最終bootloader的功能就是加載kernel文件

依據(jù)bootleader加載Kernel

通過boot loader的管理而開始讀取核心文件后,接下來,Linux 就會將核心解壓縮到主存儲器當(dāng)中,并且利用核心的功能,開始測試與驅(qū)動各個周邊裝置,包括儲存裝置、CPU、網(wǎng)絡(luò)卡、聲卡等等。此時Linux核心會以自己的功能重新偵測一次硬件, 而不一定會使用BIOS偵測到的硬件信息!也就是說,核心此時才開始接管BIOS 后的工作了。一般來說,核心會被放置到/boot 里面,并且取名為/boot/vmlinuz!
為了硬件開發(fā)商與其他核心功能開發(fā)者的便利,Linux的核心是可以透過動態(tài)加載核心模塊(想象成驅(qū)動程序就可以),這些核心模塊放置在/lib/modules/目錄中。由于模塊放置到磁盤根目錄內(nèi),因此在開機(jī)過程中核心必須要掛載根目錄,這樣才能夠讀取核心模塊提供加載驅(qū)動程序的功能。為了擔(dān)心影響磁盤內(nèi)的文件系統(tǒng),因此開機(jī)過程中根目錄是以只讀的方式進(jìn)行掛載。
一般來說,非必要的功能且可以編譯成為模塊的核心功能,目前的linux都會將他編譯成為模塊。因此USB,SATA,SCSI等磁盤裝置的驅(qū)動程序通常都是以模塊的方式來存在的。Linux核心不認(rèn)識SATA磁盤,所以需要加載SATA磁盤的驅(qū)動程序,否則根本無法掛載根目錄。SATA的驅(qū)動程序在/lib/moudles內(nèi),沒有根目錄當(dāng)然讀取不到存放在文件內(nèi)的驅(qū)動程序,當(dāng)然可以透過虛擬文件系統(tǒng)來處理這個問題。虛擬內(nèi)存的特點就是他可以通過boot loader來加載到內(nèi)存中,然后這個文件會被解壓縮并且在內(nèi)存中仿真成一個根目錄,且此仿真在不內(nèi)存當(dāng)中的文件系統(tǒng)能夠提供一支可執(zhí)行的程序,透過程序來加載開機(jī)過程中所需要的的核心模塊,通常這些模塊就是USB、RAID、LVM等文件系統(tǒng)與磁盤接口驅(qū)動程序。等載入完成后,會幫助核心重新呼叫systemd來開始后續(xù)的正常開機(jī)流程。
在這里插入圖片描述

如上圖所示,boot loader可以加載kernel 與initramfs ,然后在內(nèi)存中讓initramfs 解壓縮成為根目錄,kernel 就能夠藉此加載適當(dāng)?shù)尿?qū)動程序, 最終釋放虛擬文件系統(tǒng),并掛載實際的根目錄文件系統(tǒng),就能夠開始后續(xù)的正常開機(jī)流程。

Kernel主動呼叫systemd程序

當(dāng)核心加載完畢、進(jìn)行硬件偵測與驅(qū)動程序加載后,此時主機(jī)硬件已經(jīng)準(zhǔn)備就緒了,這時核心會主動呼叫第一支程序,而這個程序就是systemd。systemd最主要的功能就是準(zhǔn)備軟件執(zhí)行的環(huán)境,包括系統(tǒng)的主機(jī)名、網(wǎng)絡(luò)設(shè)置、語系處理、文件系統(tǒng)格式及其他服務(wù)的啟動等。而所的動作都會透過systemd的默認(rèn)啟動服務(wù)集合,亦即是/etc/system/default.target來規(guī)劃。
當(dāng)我們?nèi)〉昧?code>/etc/system/default.target這一個預(yù)設(shè)操作界面的設(shè)定之后,接下來系統(tǒng)會鏈接到/usr/systemd/system/這個目錄下去取得multi-user.target或graphical.target這兩個其中的一個。這個target為多用戶支持設(shè)定系統(tǒng)環(huán)境。非root用戶會在這個階段的引導(dǎo)過程中啟用。防火墻相關(guān)的服務(wù)也會在這個階段啟動。接下來multi-user.target會把控制權(quán)交給sysinit.target。
sysinit.target會啟動重要的系統(tǒng)服務(wù)例如:系統(tǒng)掛載、內(nèi)存交換空間和設(shè)備、內(nèi)核補充等選項。sysinit.target在啟動過程中會傳遞給local-fs.target。這個target單元不會啟動用戶相關(guān)的服務(wù),它只處理底層核心服務(wù)。這個target會根據(jù)/etc/fstab和/etc/inittab來執(zhí)行相關(guān)操作。Systemd毫無疑問為改進(jìn)Linux引導(dǎo)過程前進(jìn)了一大步;它包含了一套漂亮的庫和守護(hù)進(jìn)程配合工作來優(yōu)化系統(tǒng)引導(dǎo)和關(guān)閉過程。許多Linux發(fā)行版正準(zhǔn)備將它作為自己的正式引導(dǎo)程序。

不積小流無以成江河,不積跬步無以至千里。而我想要成為萬里羊,就必須堅持學(xué)習(xí)來獲取更多知識,用知識來改變命運,用博客見證成長,用行動證明我在努力。
如果我的博客對你有幫助、如果你喜歡我的博客內(nèi)容,記得“點贊” “評論” “收藏”一鍵三連哦!聽說點贊的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我博客看看。
在這里插入圖片描述

相關(guān)案例查看更多