版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實(shí)用標(biāo)準(zhǔn)文案Linux操作系統(tǒng)啟動過程詳解TUNA發(fā)表于 2021-09-12分類:IT運(yùn)維376次閱讀4條評論如果你對Linux操作系統(tǒng)有一定的了解,想對其更深層次的東西做進(jìn)一步探究.這當(dāng)中就包括系統(tǒng)的啟動流程、文件系統(tǒng)的組成結(jié)構(gòu)、基于動態(tài)庫和靜態(tài)庫的程 序在執(zhí)行時的異同、協(xié)議棧的架構(gòu)和原理、驅(qū)動程序的機(jī)制等等.其中Linux操作系統(tǒng)啟動過程肯定是大家最有興趣了解的, 這里在綜合了現(xiàn)有網(wǎng) 上大家智慧的根底上,基于 2.6.32的內(nèi)核的CentOS6.0系統(tǒng),對Linux的啟動 流程做了些分析,希望對大家有所幫助.OK我們言歸正傳.對于一臺安裝了 Linux系統(tǒng)的主機(jī)來說,當(dāng)用戶按下開機(jī)按 鈕
2、時,一共要經(jīng)歷以下幾個過程,如圖:按卜電源BIOS自檢系統(tǒng)弓I導(dǎo)lilo/grub啟動內(nèi)核CentOS 1i mix reIcaec 6 tFina】 Kerne 1 2 .6.3-7116.15S& on an L&86Maple log in : _精彩文檔實(shí)用標(biāo)準(zhǔn)文案其中,每個過程都執(zhí)行了自己該做的初始化局部的事情,有些過程又可分為好幾個子過程.接下來,我們就對每個階段做一個詳細(xì)分析和講解.一、BIOS自檢稍有計算機(jī)根底的人都應(yīng)該聽過 BIOS(Basic Input / Output System) ,又稱基 本輸入輸出系統(tǒng),可以視為是一個永久地記錄在 ROW的一個軟件
3、,是操作系統(tǒng) 輸入輸出治理系統(tǒng)的一局部.早期的 BIOS芯片確實(shí)是“只讀的,里面的內(nèi)容 是用一種燒錄器寫入的,一旦寫入就不能更改,除非更換芯片.現(xiàn)在的主機(jī)板都 使用一種叫Flash EPROM的芯片來存儲系統(tǒng)BIOS,里面的內(nèi)容可通過使用主板 廠商提供的擦寫程序擦除后重新寫入,這樣就給用戶升級BIOS提供了極大的方便.BIOS的功能由兩局部組成,分別是POSTED Runtime效勞.POSTt段完成后它 將從存儲器中被去除,而Runtime效勞會被一直保存,用于目標(biāo)操作系統(tǒng)的啟動. BIOS兩個階段所做的詳細(xì)工作如下:步驟1:上電自檢POST(Power-onself test),主要負(fù)責(zé)檢
4、測系統(tǒng)外圍關(guān)鍵設(shè)備 (如:CPU內(nèi)存、顯卡、I/O、鍵盤鼠標(biāo)等)是否正常.例如,最常見的是內(nèi)存 松動的情況,BIOS自檢階段會報錯,系統(tǒng)就無法啟動起來;步驟2:步驟1成功后,便會執(zhí)行一段小程序用來枚舉本地設(shè)備并對其初始化. 這一步主要是根據(jù)我們在BIOS中設(shè)置的系統(tǒng)啟動順序來搜索用于啟動系統(tǒng)的驅(qū) 動器,如硬盤、光盤、U盤、軟盤和網(wǎng)絡(luò)等.我們以硬盤啟動為例,BIOS此時去讀取硬盤驅(qū)動器的第一個扇區(qū)(MBR 512字節(jié)),然后執(zhí)行里面的代碼.實(shí)際上 這里BIOS并不關(guān)心啟動設(shè)備第一個扇區(qū)中是什么內(nèi)容,它只是負(fù)責(zé)讀取該扇區(qū) 內(nèi)容、并執(zhí)行.至此,BIOS的任務(wù)就完成了,此后將系統(tǒng)啟動的限制權(quán)移交到MB
5、F&B分的代碼.PS:在個人電腦中,Linux的啟動是從0xFFFF0ft址開始的.-系統(tǒng)引導(dǎo)我們首先來了解一下 MBR它是Master Boot Record的縮寫.硬盤的0柱面、0磁頭、1扇區(qū)稱為主引導(dǎo)扇區(qū).它由三個局部組成,主引導(dǎo)程序 (Bootloader)、 硬盤分區(qū)表DPT(Disk Partition table )和硬盤有效標(biāo)志(55AA),其結(jié)構(gòu)圖 如下所示:精彩文檔實(shí)用標(biāo)準(zhǔn)文案MBR(Mistcr Boot Recorder)磁盤分區(qū)表包含以下三局部:1. Partition ID (5:延中 82: Swap 83: Linux 8e : LVM fd: RAID
6、)2. Partition起始磁柱3. Partition的磁柱數(shù)量通常情況下,諸如lilo、grub這些常見的引導(dǎo)程序都直接安裝在MBFfro我們以grub為例來分析這個引導(dǎo)過程.grub引導(dǎo)也分為兩個階段stagel階段和stage2階段(有些較新的grub又定義 了 stage1.5 階段).1. stagel : stagel是直接被寫入到MBFfr去的,這樣機(jī)器一啟動檢測完硬件后, 就將限制權(quán)交給了 GRUB勺代碼.也就是上圖所看到的前 446個字節(jié)空間中存放 的是stagel的代碼.BIOS將stagel載入內(nèi)存中0x7c00處并跳轉(zhuǎn)執(zhí)行.stagel (Zstagel/start
7、.S )的任務(wù)非常單純,僅僅是將硬盤0頭0道2扇區(qū)讀入內(nèi)存.而0頭0道2扇區(qū)內(nèi)容是源代碼中的Zstage2/start.S ,編譯后512字節(jié),它是 stage2或者stage1_5的入口.而此時,stage1是沒有識別文件系統(tǒng)的水平的. 如果感覺腦子有些暈了,那么下面的過程就直接跳過,去看 stage2吧!【外傳】定位硬盤的0頭0道2扇區(qū)的過程:精彩文檔實(shí)用標(biāo)準(zhǔn)文案BIOS將stagel載入內(nèi)存0x7c00處并執(zhí)行,然后調(diào)用 BIOS INIT13中斷,將硬 盤0頭0道2扇區(qū)內(nèi)容載入內(nèi)存0X7000處,然后調(diào)用copy_buffer將其轉(zhuǎn)移到 內(nèi)存0X8000處.在定位0頭0道2扇區(qū)時通常有
8、兩種尋址方式:LBA和CHS 如果你是刨根問底兒型的愛好者,那么此時去找谷哥打聽打聽這兩種方式的來龍 去脈吧.2. stage2 :嚴(yán)格來說這里還應(yīng)該再區(qū)分個 stage1.5的,就一并把stage1.5放 在這里一起介紹了,免得大家看得心里亂哄哄的.好的,我們繼續(xù)說0頭0到2扇區(qū)的/stage2/start.S 文件,當(dāng)它的內(nèi)容被讀入到內(nèi)存之后,它的主要作用就 是負(fù)責(zé)將stage2或stage1.5從硬盤讀到內(nèi)存中.如果是 stage2 ,它將被載入 至ij 0X820處;如果是stage1.5 ,它將被載入到 0X2200處.這里的stage2或 者stage1_5不是/boot分區(qū)/bo
9、ot/grub 目錄下的文件,由于這個時候grub還沒 有水平識別任何文件系統(tǒng).? 如果start.S 加載stage1.5 : stage1.5它存放在硬盤0頭0道3扇區(qū)向后的 位置,stage1_5作為stage1和stage2中間的橋梁,stage1_5有識別文件系統(tǒng) 的水平,此后grub才有水平去訪問/boot分區(qū)/boot/grub目錄下的stage2文 件,將stage2載入內(nèi)存并執(zhí)行.? 如果start.S 加載stage2 :同樣,這個stage2也不是/boot分區(qū)/boot/grub 目錄下的stage2 ,這個時候start.S 讀取的是存放在/boot分區(qū)Boot Se
10、ctor 的stage2.這種情況下就有一個限制:由于 start.S 通過BIOS中斷方式直接對 硬盤尋址(而非通過訪問具體的文件系統(tǒng)),其尋址范圍有限,限制在8GB以內(nèi). 因此這種情況需要將/boot分區(qū)分在硬盤8GBe址空間之前.假設(shè)是情形2,我們將/boot/grub目錄下的內(nèi)容清空,依然能成功啟動 grub; 假設(shè)是情形1,將/boot/grub目錄下stage2刪除后,那么系統(tǒng)啟動過程中g(shù)rub 會啟動失敗.三、啟動內(nèi)核當(dāng)stage2被載入內(nèi)存執(zhí)行時,它首先會去解析 grub的配置文件 /boot/grub/grub.conf ,然后加載內(nèi)核鏡像到內(nèi)存中,并將限制權(quán)轉(zhuǎn)交給內(nèi)核. 而
11、內(nèi)核會立即初始化系統(tǒng)中各設(shè)備并做相關(guān)的配置工作,其中包括 CPU I/O、 存儲設(shè)備等.關(guān)于Linux的設(shè)備驅(qū)動程序的加載,有一局部驅(qū)動程序直接被編譯進(jìn)內(nèi)核鏡像 中,另一局部驅(qū)動程序那么是以模塊的形式放在initrd(ramdisk) 中.精彩文檔實(shí)用標(biāo)準(zhǔn)文案Linux內(nèi)核需要適應(yīng)多種不同的硬件架構(gòu),但是將所有的硬件驅(qū)動編入內(nèi)核又是不實(shí)際的,而且內(nèi)核也不可能每新出一種硬件結(jié)構(gòu),就將該硬件的設(shè)備驅(qū)動寫入內(nèi)核.實(shí)際上Linux的內(nèi)核鏡像僅是包含了根本的硬件驅(qū)動,在系統(tǒng)安裝過程中會檢測系統(tǒng)硬件信息,根據(jù)安裝信息和系統(tǒng)硬件信息將一局部設(shè)備驅(qū)動寫入 initrd .這樣在以后啟動系統(tǒng)時,一局部設(shè)備驅(qū)動就
12、放在initrd中來加載.這里有必要給大家再多介紹一下initrd 這個東東:initrd的英文含義是 bootloader initialized RAMdisk ,就是由 boot loader初始化的內(nèi)存盤.在linu2.6內(nèi)核啟動前,boot loader會將存儲介質(zhì)中的initrd文件加載到內(nèi)存,內(nèi)核啟動時會在訪問真正的根文件系統(tǒng)前先訪問該內(nèi)存中的initrd 文件系統(tǒng).在boot loader 配置了 initrd的情況下,內(nèi)核啟動被分成了兩個階段,第一階段先執(zhí)行initrd 文件系統(tǒng)中的init ,完成加載驅(qū)動模塊等任務(wù),第二階段才會執(zhí)行真正的根文件系統(tǒng)中的/sbin/init
13、進(jìn)程.另外一個概念:initramfsinitramfs 是在kernel 2.5中引入的技術(shù),實(shí)際上它的含義就是:在內(nèi)核鏡像 中附加一個cpio包,這個cpio包中包含了一個小型的文件系統(tǒng),當(dāng)內(nèi)核啟動時, 內(nèi)核將這個cpio包解開,并且將其中包含的文件系統(tǒng)釋放到 rootfs中,內(nèi)核 中的一局部初始化代碼會放到這個文件系統(tǒng)中,作為用戶層進(jìn)程來執(zhí)行.這樣帶 來的明顯的好處是精簡了內(nèi)核的初始化代碼,而且使得內(nèi)核的初始化過程更容易定制.迷惑的是:我的內(nèi)核是2.6.32-71.el6.i686版本,但在我的/boot分區(qū)下面卻存在的是 /boot/initramfs-2.6.32-71.el6.i6
14、86.img類型的文件,沒搞明白,還望高人解惑.我只知道在2.6內(nèi)核中支持兩種格式的initrd , 一種是2.4內(nèi) 核的文件系統(tǒng)鏡像image-initrd , 一種是cpio格式.接下來我們就來探究一下 initramfs-2.6.32-71.el6.i686.img里到底放了那些東西.roottaplecp /boot/initramfs-2.6.32-7kel6A686.iiug ./root0maple "# file initramfs-2 * 6 J2-7Lel6 * 1686* imginitramfs-2,6J2-71.el6.i606.img: gzip comp
15、ressed dataf from Unis, last modified:Sat Nov 12 11:31:33 2021; max compressionrootSmaple 司# gunzip -c initraints-2*6.32-71 ,el6.1686.ling > initrdamgroottaplefile initrd.imginitrd.img: ASCII cpio archive (SVR4 with no CRC)root8maple T# mkdir tmprootBmaple cd tmp/精彩文檔實(shí)用標(biāo)準(zhǔn)文案在tmp文件夾中解壓initrd.img 里的
16、內(nèi)谷:roottaple tmplcpio -id < ./initrd.img59250 blocksrootmaple trap甘Isbinemergencyinitqueue-finishedpre-pivotsbin usrcmdlineetcinitqueue-settledpre-triggersysvardevinitlibpre-udevsysrootdracut-004-32,el6initqueuemountproctmprootmaple trap!file initinit: POSIX shellscript textexecutablerootmaple tm
17、p# 如果 initrd.img 文件的格式顯示為 “ initrd.img:ISO 9660 CD-ROMilesystem data,那么可直接輸入命令 " mount -o loop initrd.img /mnt/test 進(jìn)行掛載.通過上的分析和我們的驗(yàn)證,我們確實(shí)得到了這樣的結(jié)論:grub的stage2將initrd 加載到內(nèi)存里,讓后將其中的內(nèi)容釋放到內(nèi)容中,內(nèi) 核便去執(zhí)行initrd 中的init腳本,這時內(nèi)核將限制權(quán)交給了init文件處理.我們簡單瀏覽一下init腳本的內(nèi)容,發(fā)現(xiàn)它也主要是加載各種存儲介質(zhì)相關(guān)的 設(shè)備驅(qū)動程序.當(dāng)所需的驅(qū)動程序加載完后,會創(chuàng)立一個根設(shè)
18、備,然后將根文件 系統(tǒng)rootfs以只讀的方式掛載.這一步結(jié)束后,釋放未使用的內(nèi)存,轉(zhuǎn)換到真 正的根文件系統(tǒng)上面去,同時運(yùn)行/sbin/init 程序,執(zhí)行系統(tǒng)的1號進(jìn)程.此 后系統(tǒng)的限制權(quán)就全權(quán)交給/sbin/init進(jìn)程了.四、初始化系統(tǒng)經(jīng)過千辛萬苦的跋涉,我們終于接近黎明的曙光了.接下來就是最后一步了:初 始化系統(tǒng)./sbin/init進(jìn)程是系統(tǒng)其他所有進(jìn)程的父進(jìn)程,當(dāng)它接管了系統(tǒng)的限制權(quán)先之后,它首先會去讀取/etc/inittab文件來執(zhí)行相應(yīng)的腳本進(jìn)行系統(tǒng)初始化,如設(shè)置鍵盤、字體,裝載模塊,設(shè)置網(wǎng)絡(luò)等.主要包括以下工作:1 .執(zhí)行系統(tǒng)初始化腳本(/etc/rc.d/rc.sysin
19、it) ,對系統(tǒng)進(jìn)行根本的配置,以 讀寫方式掛載根文件系統(tǒng)及其它文件系統(tǒng),到此系統(tǒng)算是根本運(yùn)行起來了,后面 需要進(jìn)行運(yùn)行級別確實(shí)定及相應(yīng)效勞的啟動.rc.sysinit 所做的事情(不同的Linux發(fā)行版,該文件可能有些差異)如下:(1)獲取網(wǎng)絡(luò)環(huán)境與主機(jī)類型.首先會讀取網(wǎng)絡(luò)環(huán)境設(shè)置文件,獲取主機(jī)名稱與默認(rèn)網(wǎng)關(guān)等網(wǎng)絡(luò)環(huán)境.精彩文檔實(shí)用標(biāo)準(zhǔn)文案(2)測試與載入內(nèi)存設(shè)備/proc及usb設(shè)備/sys.除了/proc外,系統(tǒng)會主動檢 測是否有usb設(shè)備,并主動加載usb驅(qū)動,嘗試載入usb文件系統(tǒng).(3)決定是否啟動SELinuxo(4)接口設(shè)備的檢測與即插即用(pnp)參數(shù)的測試.(5)用戶自定義
20、模塊的加載.用戶可以再 /etc/syscon巾g/modules/*.modules 參加自定義的模塊,此時會加載到系統(tǒng)中.(6)加載核心的相關(guān)設(shè)置.按" /etc/sysctl.conf 這個文件的設(shè)置值配置功 能.(7)設(shè)置系統(tǒng)時間(clock ).(8)設(shè)置終端的限制臺的字形.(9)設(shè)置raid及LVMH?硬盤功能.(10)以方式查看檢驗(yàn)磁盤文件系統(tǒng).(11)進(jìn)行磁盤配額quota的轉(zhuǎn)換.(12)重新以讀取模式載入系統(tǒng)磁盤.(13)啟動quota功能.(14)啟動系統(tǒng)隨機(jī)數(shù)設(shè)備(產(chǎn)生隨機(jī)數(shù)功能).(15)清楚啟動過程中的臨時文件.(16)將啟動信息加載到"/var/
21、log/dmesg 文件中.當(dāng)/etc/rc.d/rc.sysinit 執(zhí)行完后,系統(tǒng)就可以順利工作了,只是還需要啟動 系統(tǒng)所需要的各種效勞,這樣主機(jī)才可以提供相關(guān)的網(wǎng)絡(luò)和主機(jī)功能,因此便會執(zhí)行下面的腳本.2 .執(zhí)行/etc/rc.d/rc 腳本.該文件定義了效勞啟動的順序是先K后S,而具體的每個運(yùn)行級別的效勞狀態(tài)是放在/etc/rc.d/rc*.d (*=06)目錄下,所有的文 件均是指向/etc/init.d下相應(yīng)文件的符號鏈接.rc.sysinit 通過分析/etc/inittab文件來確定系統(tǒng)的啟動級別,然后才去執(zhí)行/etc/rc.d/rc*.d 下的文件./etc/init.d-&g
22、t; /etc/rc.d/init.d/etc/rc ->/etc/rc.d/rc/etc/rc*.d ->/etc/rc.d/rc*.d/etc/rc.local-> /etc/rc.d/rc.local/etc/rc.sysinit-> /etc/rc.d/rc.sysinit也就是說,/etc 目錄下的 init.d 、rc、rc*.d、rc.local 和 rc.sysinit 均是指 向/etc/rc.d 目錄下相應(yīng)文件和文件夾的符號鏈接.我們以啟動級別3為例來簡 要說明一下.精彩文檔實(shí)用標(biāo)準(zhǔn)文案/etc/rc.d/rc3.d 目錄,該目錄下的內(nèi)容全部都是以S
23、或K開頭的鏈接文件,都鏈接到" /etc/rc.d/init.d 目錄下的各種shell腳本.S表示的是啟動時需 要start的效勞內(nèi)容,K表示關(guān)機(jī)時需要關(guān)閉的效勞內(nèi)容./etc/rc.d/rc*.d 中 的系統(tǒng)效勞會在系統(tǒng)后臺啟動,如果要對某個運(yùn)行級別中的效勞進(jìn)行更具體的定 制,通過chkconfig 命令來操作,或者通過 setup、ntsys、 system-config-services來進(jìn)行定制.如果我們需要自己增加啟動的內(nèi)容,可以在init.d 目錄中增加相關(guān)的shell腳本,然后在rc*.d目錄中建立鏈接文件 指向該shell腳本.這些shell腳本的啟動或結(jié)束順序是由
24、S或K字母后面的數(shù) 字決定,數(shù)字越小的腳本越先執(zhí)行.例如, /etc/rc.d/rc3.d /S01sysstat就比 /etc/rc.d/rc3.d /S99local 先執(zhí)行.3 .執(zhí)行用戶自定義引導(dǎo)程序/etc/rc.d/rc.local .其實(shí)當(dāng)執(zhí)行 /etc/rc.d/rc3.d/S99local 時,它就是在執(zhí)行 /etc/rc.d/rc.local . S99local 是指向rc.local的符號鏈接.就是一般來說,自定義的程序不需要執(zhí)行上面所 說的繁瑣的建立shell增加鏈接文件的步驟,只需要將命令放在rc.local里面就可以了,這個shell腳本就是保存給用戶自定義啟動內(nèi)
25、容的.4 .完成了系統(tǒng)所有的啟動任務(wù)后,linux會啟動終端或X-Window來等待用戶登 錄.tty1,tty2,tty3 這表示在運(yùn)行等級1, 2, 3, 4的時候,都會執(zhí)行 /sbin/mingetty ,而且執(zhí)行了 6個,所以linux 會有6個純文本終端,mingetty 就是啟動終端的命令.除了這6個之外還會執(zhí)行" /etc/X11/prefdm-nodaemon 這個主要啟動 X-Window至此,系統(tǒng)就啟動完畢了.PS:最后附上一張非常完整的系統(tǒng)啟動流程圖,適合各個水平階段的讀者.精彩文檔實(shí)用標(biāo)準(zhǔn)文案3TMHF 6 ,MMZl! |I.同申J F用存出W%/電L 今質(zhì)口“ Fiji精彩文檔Nvfir ibm4Ml Uvrt pWh>irali4<wfIWkl / ,更I
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度木方模板產(chǎn)業(yè)鏈上下游整合服務(wù)合同4篇
- 2025年度航空航天器研發(fā)與制造合同12篇
- 2025年度長途物流車輛定點(diǎn)清洗保養(yǎng)合同4篇
- 2025年度環(huán)保設(shè)備安裝與污染物減排服務(wù)協(xié)議3篇
- 2025年度木地板原材采購與倉儲管理合同4篇
- 2025年度勞動合同解除補(bǔ)償協(xié)議及離職員工子女教育資助協(xié)議
- 2025年度足療店線上線下整合營銷轉(zhuǎn)讓合同
- 2025年度影視演員經(jīng)紀(jì)服務(wù)與勞動合同
- 二零二五版木工行業(yè)綠色生產(chǎn)標(biāo)準(zhǔn)合同4篇
- 二零二五年度運(yùn)輸合同延誤糾紛處理范本
- 《大學(xué)生職業(yè)發(fā)展與就業(yè)指導(dǎo)》課程標(biāo)準(zhǔn)
- 第23課《出師表》課件(共56張)
- GB/T 3953-2024電工圓銅線
- 發(fā)電機(jī)停電故障應(yīng)急預(yù)案
- 接電的施工方案
- 常用藥物作用及副作用課件
- 幼兒阿拉伯?dāng)?shù)字描紅(0-100)打印版
- 社會組織等級評估報告模板
- GB/T 12173-2008礦用一般型電氣設(shè)備
- 新媒體研究方法教學(xué)ppt課件(完整版)
- 2020新版?zhèn)€人征信報告模板
評論
0/150
提交評論