亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

當按下電源之后發生了什么?(詳解)----上

發布時間:2020-07-11 07:05:11 來源:網絡 閱讀:414 作者:li690347460 欄目:移動開發

前言

       先大概概括一下當按下電源的一瞬間之后發生的事把,先是啟動電源,然后是初始化北橋,以及核心的硬件設備,然后將程序(BIOS)載入內存中,讀取南橋CMOS中的數據, 建立SMBIOS,接著就是我們所熟悉的開機自檢,所有硬件設備,寄存器都沒問題的后,就通過bootloader加載我們的內核,在initrd的協助下,加載我們所系統所需要的所有文件系統,模塊或者說是驅動。所有的東東加載完畢后linux就會 啟動我們系統的第一個進程-------init。它是所有進程的祖宗。

      上面只是一個大概的流程,接下啦,我們就詳細講講完整的開機流程。在講流程之中,會穿插講一些比較重要并且基礎的概念。比如BIOS.CMOS,SMBIOS等等。好了,話不多說,開始。

BIOS和CMOS
       當用戶一按下電源鍵,CPU就會先被激活,畢竟這玩意是計算機的大腦,沒這玩意兒,電腦就是一堆會電人的廢鐵。然后CPU回去尋找BIOS,接著BIOS會先在Flash Memory中執行,加載CMOS中用戶所喜好的設置值,然后BIOS才會將自己家壓縮到計算機的主存儲器中。此時,若用戶按下[DEL]或F1 F2之類的一般PC的BIOS設置鍵,就可以進入BIOS所提供的設置選項,從而看到所有的設置值,或是當用戶進去操作系統后,操作 系統就可以參考內存中的BIOS資料,訪問每一個硬件的地址。

       BIOS全名為基本輸入輸出系統,是系統哦,操作系統本質上來說還是一個運行在硬件之上的軟件,所以加載它之前首先要做的就是確保每個硬件都沒問題,并且得到初始化,BIOS就是干這些活的。BIOS本質來說只是一個燒錄在主板上的程序,程序本身的職責是干活,但是它干活 的時候的一些數據呀,配置呀怎么辦?你不能一股腦的存在程序里,畢竟你還得和通過與用戶交互,然后保存用戶所定義的配置。而CMOS這玩意兒就是用來讓BIOS存儲用戶設置的地方,它在南橋的一個特殊的區塊里面,在BIOS選項中可以設置的值都是存儲在這一區域中的。主板上的紐扣電池就是為了CMOS保存資料提供電源的。當BIOS激活時回去先確認CMOS中的資料是否正確,如果正確,便會將之前用戶存儲在CMOS的資料,加上已存在或找到的硬件信息,整合成為一個表格,寫到內存中,這也就是最開始提到的SMBIOS。如果發生錯誤,則會自動以默認值取代CMOS提供的資料。(利用這個原理,可以修改CMOS數據,使其發生錯誤,用默認數據替代CMOS中的資料,可以達到清除開機密碼的目的~)SMBIOS是個不大的空間,主要的角色是扮演如何讓主板或系統廠商將x86架構的系統通過BIOS呈現在 用戶面前,并且提供給BIOS的開發人員足夠的信息,讓BIOS和一些自定義的硬件去溝通.

Power On
         從 用戶按下電源開關的那一瞬間 到 BIOS POST階段,稱為Power On階段 ,也就是所謂的激活電源階段。
在Ppwer On階段,BIOS的主要工作是檢查主機上某些硬件的狀態及存儲在CMOS中的設置,看可能有哪些例行工作是要進行或無法執行的,因此,用戶無法在屏幕上看到BIOS所顯示的信息(要 等硬件確認后才會激活VGA)。所以當由于某些情況而造成無法開機時,在屏幕上是看不到任何信息的,唯一可以抽絲剝繭排除問題的方式只有兩種:看PORT 80信息,以及聽嗶嗶的報警聲。
power on雖然是一瞬間就完成的事,不過在這個過程中發生了不少事情,比如初始話BIOS,各種數據區,檢查CMOS,各種硬件設備的控制器,輸入輸出設備,顯示信息,比如cpu信息等,是否進入設置 模式信息(就是按什么鍵進入BIOS設置),初始化實時時鐘的時間日期。巴拉巴拉,為后面的POST做準備。上面提到的BIOS加載SMOS相關的東東也是在這階段啦~


bootloader
        前期主板上的,最基本上的事情已經結束,當設置完成,硬件驅動成功及硬件 檢測都沒問題之后,BIOS就將加載操作系統的主控制權交給硬盤內的主引導扇區(MBR),讓藏攝與MBR中的開機管理程序可以將指針帶到系統信心的地方。將bootloader這玩意兒之前,我們還是得簡單說明一下MBR這玩意兒。MBR就是我們硬盤最前面 的第一個扇區,一個扇區是512字節,MBR被分為三個部分前446字節,保存著bootloader核心程序,446字節呀,多么小的空間,在這么小的地方放一個加載整個操作系統的核心程序,想想都覺得厲害。接下來的64字節使我們的分區表,每16放一個分區的信息,比如從那個位置分區開始,那個地方結束 ,分區 的文件系統類型巴拉巴拉的~當然我所說的這種比較老的東東~新的東東暫且不提,畢竟對于說明開機流程沒啥用~第三部分是固定的兩個 字節,內容是55aa,類似標記結束的東東。bootloader負責加載我們linux的內核,但是內核保存在文件系統中,而且加載內核的時候我們還希望能給內核傳遞一些參數,如果我們有好幾個系統,我們也希望bootloader提供給我們一個選單,以便打開的我們所選擇的系統,想想都好復雜。。。。。。所以再牛逼的程序員都不可能把這么多功能的提示信息放在小的可憐的446字節中,446字節多小?446個字母所站的空間,223個漢子所占的空間。好吧,既然bootloader要完成的工作這么多,而mbr也就那么小,怎么辦?或許我們可以搞一個更大的空間來保存所有程序,但是程序相關的配置文件呢?程序可以死亡,復制。但是配置文件我們卻希望一直存在。說了這么多,最后的結果是bootloader被分為兩個階段,我們稱為stage1和stage2,stage1里放最核心的程序,最后再跳轉到stage2,stage2放在一個固定的文件系統內,stage1可以固定的跳轉到某個固定的位置,加載stage2,stage2這個程序沒有大小限制,就可以有很多功能了,我們上面所提到的功能都是stage2提供的,當然,還有另一個問題,bootloader的配置文件必須得以文件的形式保存在文件系統的目錄下,但是,系統加載目錄里面的文件時,必須得有文件系統的驅動才可以呀~如果文件系統都是ext系列,我們就不用管那么多,一個驅動就可以搞定,然后就可以輕松加愉快的加載我們的配置文件。但是,事實上的情況是,文件系統總類繁多,我們不能總是把bootloader存儲的文件系統一直只是一種文件系統,為了提供更多文件系統類型的支持,我們就在stage1和stage2中間加了一個被稱為stage1.5的階段,當安裝bootloader的時候,就會根據我們boot文件所處的文件系統類型,把相關的驅動寫在一個固定的存儲空間內。好,bootloader所有的階段都出現了,我們在總結并發展一下~bios加電自檢結束后會根據用戶選得第一啟動設備,假如是硬盤,就把硬盤前32KB加載到內存,前512字節是MBR,其中前446字節是bootloader的第一階段,主要的任務就是跳轉到第二扇區的程序,第二扇區到后面一拖的某個地方(小于32KB)就是stage1.5安裝的位置,因為stage1.5里有啟動文件所在文件系統的驅動,所以會在某個目錄下找到stage2的階段,并加載stage2與配置文件。那個我們經常看到的選擇系統的界面就是stage2提供的~還記得嗎?bootloader的主要作用是什么呢?對!雖然這么繞,其實它的作用依然沒變,為加載內核服務!


加載內核
       當GRUB加載kernel時,kernel會先在內存中制造一個rootfs當作臨時的空間供系統使用,接下來kernel便會將initrd當作一個系統將其掛載到rootfs上并激活,initrd主要在開機時為加載內核提供一些核心的模塊。這個initrd是個什么東東呢?這玩意兒是在我們安裝系統時,根據操作系統以及內核所生成的一個壓縮文件。里面包括加載內核和操作系統所必須的核心驅動,以及加載操作性的所有過程都是由initrd里面 的一個叫做init的腳本文件提供,initrd被掛載在rootfs上后,會根據init腳本一步一步的加載操作系統,如果我們把initrd打開會發現里面有一個核心的目錄樹,比如/dev中存在 的 是一些設備文件,當initrd加載時,這些設備文件便可以開始運行。/lib目錄里面存放許多的模塊,也就是驅動程序,都是開機所必須加載的模塊。在 kernel加載initrd之后,initrd將會加載這些必要的開機模塊,以順利進入硬盤中的操作系統。以及保存開機后所有進程,硬件相關信息的目錄等等。總結一下就是,要加載內核和整個操作系統之前,你得有整個文件系統的驅動把?你得啟動所有的硬盤設備把?所有硬件設備的信息得有保存的地方把?而所有的操作都是由運行的程序執行了,所以程序的信息也得有地方保存把?所以initrd就是為了加載內核,加載整個操作系統提供必要的環境的~

切入實體操作系統
    當所有 系統環境該有的文件系統基礎建設及設備等相關文件都建立完成后,initrd最后的工作就是要通過iinit腳本文件做轉換操作,將所有的一切交給存在硬盤中的實體操作系統。切換文件系統 的過程很簡單,其實也復雜 ,大概過程是這樣,linux是目錄樹結構,根是起點,所有在某個目錄下建一個目錄/sysroot然后把完整的文件系統文件全一股腦的放進去,當然是有規矩的放。所有東西放完之后,會把/sysroot切換為實體操作系統的主目錄也就是根。完成后再把之前initrd存在內存中的資料清空。然后一個完整的操作系統就誕生啦~操作系統是誕生了,但是誕生之后可是空無一物的。我們需要一個類似女媧的東東--------所有進程的祖宗init進程,來生成所有 需要 用的進程~下次我么再分享,整個操作系統加載完之后是如何初始話整個環境以及生成各種進程的~

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正阳县| 洪湖市| 福清市| 大埔县| 永川市| 大渡口区| 山阳县| 鄂托克前旗| 滁州市| 轮台县| 南召县| 岳普湖县| 邵东县| 黔南| 响水县| 武安市| 建始县| 宜川县| 疏勒县| 新田县| 保定市| 武夷山市| 临湘市| 遂溪县| 东港市| 乌鲁木齐市| 杭州市| 大名县| 呼图壁县| 蓝田县| 连州市| 额济纳旗| 乌鲁木齐县| 马龙县| 河源市| 旅游| 梓潼县| 大田县| 新源县| 遵化市| 南京市|