国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

Linux 系統(tǒng)開機(jī)加電后發(fā)生了什么?

2024-08-27 23:54:53
字體:
供稿:網(wǎng)友
   linux系統(tǒng)的啟動流程
  關(guān)于linux系統(tǒng)的啟動流程我們可以按步進(jìn)行劃分為如下:
 
  BIOS
 
   POST自檢
   BIOS(Boot Sequence)
  引導(dǎo)操作系統(tǒng)
 
   加載對應(yīng)引導(dǎo)上的MBR(bootloader)
   主引導(dǎo)設(shè)置加載其BootLoader
  加載操作系統(tǒng)
 
  啟動BIOS,準(zhǔn)備實模式下的中斷向量表和中斷服務(wù)程序
  電腦啟動后,CPU邏輯電路被設(shè)計為只能運行內(nèi)存中的程序,沒有能力直接運行存在于軟盤或硬盤中的操作系統(tǒng),如果想要運行,必須要加載到內(nèi)存(RAM)中。
 
  BIOS是如何啟動的,CPU硬件邏輯設(shè)計為在加電瞬間強(qiáng)行將CS值置為0XF000,IP為0XFFF0,這樣CS:IP就指向0XFFFF0這個位置,這個位置正是BIOS程序的入口地址。
 
  BIOS程序被固化在計算機(jī)主機(jī)板上的一塊很小的ROM芯片里。現(xiàn)在CS:IP已經(jīng)指向了0XFFFF0這個位置,意味著BIOS開始啟動。
 
  POST自檢
  BIOS的第一步動作就是進(jìn)行 上電自檢(POST)
 
  POST的工作是檢查硬件設(shè)備。隨著BIOS程序的執(zhí)行,屏幕上會顯示顯卡的信息,內(nèi)存的信息等,
  
  BIOS-runtime服務(wù)按照boot啟動順序搜索設(shè)備,尋找BBR
  由于BIOS功能使用上的不同,它由兩個部分組成:POST和runtime服務(wù)。POST完成后,它將從存儲器中被清除,但是BIOS runtime服務(wù)會被保留,用于目標(biāo)操作系統(tǒng)。
 
  為了啟動操作系統(tǒng),BIOS的runtime服務(wù)將搜索那些激活狀態(tài)的或是可引導(dǎo)啟動的設(shè)備,搜索的順序則由CMOS設(shè)置決定(也就是我們平時所謂的在BIOS中設(shè)置的啟動順序)。一個軟驅(qū),一臺光驅(qū),一個硬盤上的分區(qū),網(wǎng)絡(luò)上的設(shè)備甚至一個usb 閃存盤都可以作為一個啟動設(shè)備。
 
  當(dāng)然,linux通常是從硬盤啟動的。硬盤上的MBR(主啟動記錄)包含有基本的boot loader,它是一個512字節(jié)大小的扇區(qū),位于磁盤的第一個扇區(qū)(0磁頭0磁道1扇區(qū))。當(dāng)MBR被裝載到RAM中后,BIOS就會將控制權(quán)轉(zhuǎn)交給MBR。
 
  引導(dǎo)操作系統(tǒng)內(nèi)核并為保護(hù)模式做準(zhǔn)備
  位于MBR中的主 boot loader 是一個512字節(jié)的鏡像,其中不僅包含了 bootload 程序代碼,還包含了一個小的分區(qū)表。
 
  最初的446字節(jié)是主 boot loader,它里面就包含有可執(zhí)行代碼以及錯誤消息文本。接下來的64字節(jié)是分區(qū)表,其中包含有四個分區(qū)的各自的記錄(一個分區(qū)占16字節(jié))。MBR 通過特殊數(shù)字 0xAA55(譯者注:在電子界中 AA55 確實是具有傳奇色彩的數(shù)字,想知道為什么么?將它展開成二進(jìn)制形式,看看有什么規(guī)律)作為兩個字節(jié)的結(jié)束標(biāo)志。0x55AA 同時也是 MBR 有效的校驗確認(rèn)。
 
  首先對CPU發(fā)送 int 0x19 中斷,使CPU運行 int 0x19 中斷對應(yīng)的中斷服務(wù)程序,這個中斷服務(wù)程序的作用就是把軟盤第一個扇區(qū)的程序加載到內(nèi)存的指定位置。
 
  主 boot loader 的工作是尋找并加載次 boot loader(內(nèi)核加載程序)
 
  它通過分析分區(qū)表,找出激活分區(qū)來完成這個任務(wù),當(dāng)它找到一個激活分區(qū)時,它將繼續(xù)掃描剩下的分區(qū)表中的分區(qū),以便確認(rèn)他們都是未激活的。
 
  確認(rèn)完畢后,激活分區(qū)的啟動記錄(次 boot loader)從設(shè)備中被讀到 RAM,并被執(zhí)行。
 
  其中加載過程需要借助 BIOS 提供的int 0x13中斷向量指向的中斷服務(wù)程序來完成。該程序?qū)④洷P第二個扇區(qū)開始的4個扇區(qū),即 setup.s 對應(yīng)的程序加載至內(nèi)存的 SETUPSEG(0x90200)處。
 
  把第一階段和第二階段的 boot loaders 聯(lián)合起來,就是在x86個人電腦中,我們所說的 linux loader(LILO)或者 GRand Unified Bootloader(GRUB)。由于 GRUB 修正了一些 LILO 中存在的缺陷,因此下面就讓我們來看看 GRUB(如果你希望得到更多的關(guān)于 GRUB,LILO 和與之相關(guān)話題的討論資源,請見文后的參考資料)
 
   對于 GRUB 來說,一個比較好的方面就是它包含了 linux 文件系統(tǒng)的知識。與LILO使用裸扇區(qū)不同的是,GRUB 能夠從 ext2 或者 ext3 文件系統(tǒng)中加載 linux 內(nèi)核。它是通過將本來兩階段的 boot loader 轉(zhuǎn)換成三個階段的 boot loader。在第一階段(MBR)中會啟動 stage1.5 的 boot loader 來理解 linux 內(nèi)核鏡像中的特殊的文件系統(tǒng)格式,例如,reiserfs_stage1-5(用于從reiserf日志文件系統(tǒng)中進(jìn)行加載)或 e2fs + stage1_5 (用于從wxt2或ext3文件系統(tǒng)進(jìn)行加載)。當(dāng) stage1.5 的 boot loader 被加載并運行時,stage2 的 boot loader 才能被加載。當(dāng) stage2 被加載時,GRUB能根據(jù)請求的情況顯示一個可選內(nèi)核的清單(在 /etc/grub.conf 中進(jìn)行定義,同時還有幾個軟符號鏈接 /etc/grub/menu.lst 和 /etc/grub.conf)。你可以選擇一個內(nèi)核,修改其附加的內(nèi)核參數(shù)。同時,你可以選擇使用命令行的shell來對啟動過程進(jìn)行更深層次的手工控制。
 
  在次 boot loader 存在與內(nèi)存中后,就可以對文件系統(tǒng)進(jìn)行查詢了,同時將默認(rèn)的內(nèi)核鏡像以及初始化內(nèi)存盤鏡像也被加載到內(nèi)存中。
 
  一切準(zhǔn)備完畢之后,次 boot loader 就會調(diào)用內(nèi)核鏡像,完成操作系統(tǒng)的加載。
 
  加載內(nèi)核并從實模式轉(zhuǎn)換為保護(hù)模式
  當(dāng)內(nèi)核映像被加載到內(nèi)存中(加載過程仍然用int 0x13中斷向量),并且次引導(dǎo)加載程序釋放控制權(quán)之后,內(nèi)核階段就開始了。
 
  加載內(nèi)核鏡像
  內(nèi)核映像并不是一個可執(zhí)行的內(nèi)核,而是一個壓縮過的內(nèi)核映像。通常它是一個 zImage(壓縮映像,小于 512KB)或一個 bzImage(較大的壓縮映像,大于 512KB),它是提前使用 zlib 進(jìn)行壓縮過的。在這個內(nèi)核映像前面是一個例程,它實現(xiàn)少量硬件設(shè)置,并對內(nèi)核映像中包含的內(nèi)核進(jìn)行解壓,然后將其放入高端內(nèi)存中,如果有初始 RAM 磁盤映像,就會將它移動到內(nèi)存中,并標(biāo)明以后使用。然后該例程會調(diào)用內(nèi)核,并開始啟動內(nèi)核引導(dǎo)的過程。
 
  當(dāng) bzImage(用于 i386 映像)被調(diào)用時,我們從 ./arch/i386/boot/head.S 的 start 匯編例程開始執(zhí)行。
 
  這個例程會執(zhí)行一些基本的硬件設(shè)置,并調(diào)用 ./arch/i386/boot/compressed/head.S 中的 startup_32,設(shè)置一個基本的環(huán)境(堆棧等),并清除 Block Started by Symbol(BSS)。然后調(diào)用一個叫做 decompress_kernel 的 C 函數(shù)(在 ./arch/i386/boot/compressed/misc.c 中)來解壓內(nèi)核。當(dāng)內(nèi)核被解壓到內(nèi)存中之后,就可以調(diào)用它了。這是另外一個 startup_32 函數(shù),但是這個函數(shù)在 ./arch/i386/kernel/head.S 中。
 
  進(jìn)入保護(hù)模式并初始化
   進(jìn)入保護(hù)模式
   設(shè)置中斷描述附表和全局描述符表
   創(chuàng)建了內(nèi)存分頁機(jī)制
  啟動內(nèi)核
   start_kernel啟動內(nèi)核
   創(chuàng)建init進(jìn)程
  BIOS階段–準(zhǔn)備實模式下的中斷向量表和中斷服務(wù)程序
  BIOS是什么
  上個世紀(jì)70年代初,”只讀內(nèi)存”(read-only memory,縮寫為ROM)發(fā)明,開機(jī)程序被刷入ROM芯片,計算機(jī)通電后,第一件事就是讀取它。計算機(jī),啟動這塊芯片里的程序叫做”基本 主站蜘蛛池模板: 区。| 日喀则市| 平度市| 辉南县| 衢州市| 吉水县| 木里| 东港市| 兰西县| 海安县| 北海市| 扶绥县| 莆田市| 肇源县| 离岛区| 尼勒克县| 桐梓县| 定兴县| 华蓥市| 宜城市| 新竹县| 孟村| 普陀区| 江门市| 监利县| 东源县| 共和县| 壶关县| 尚志市| 辉南县| 金昌市| 赤壁市| 阜城县| 体育| 肃宁县| 云南省| 于田县| 湟源县| 内丘县| 贵德县| 文登市|