色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

你知道操作系統是如何啟動起來的嗎

jf_78858299 ? 來源:碼農的荒島求生 ? 作者:碼農的荒島求生 ? 2023-03-31 15:45 ? 次閱讀

操作系統被稱為“第一個程序”,the first programme,原因很簡單,只有當操作系統啟動起來后才能運行我們編寫的程序,那么你有沒有想過這個問題:操作系統是怎樣啟動起來的呢? 實際上這個過程就像發射火箭一樣有趣 ,看完這篇你就明白啦。

操作系統也是普通程序

哦對了,順便說下,小風哥建了一個微信技術群,感興趣的同學可以加一下,拉到最后掃描二維碼備注“加群”即可。

首先我們必須意識到這樣兩點:

  1. CPU執行的是機器指令,編譯器將程序翻譯后成了機器指令
  2. 操作系統本身也是一個程序,這個程序被編譯后也會生成一大堆機器指令

現在我們知道了,操作系統本身其實也是一大堆機器指令,既然是機器指令那么它必須得存放在什么地方。

存放在哪里呢?

想想我們編寫的程序,編譯后生成的是可執行文件,也就是說是以“文件”的形式存放的,并且存放在硬盤上,而操作系統也沒什么不同,編譯后生成的機器指令同樣是以文件的形式存放的,存放在哪里呢?可以存放在任何能存儲數據的介質,像CD、磁盤之類都可以。

我們編寫的程序在啟動時被加載器——也就是loader,加載到內存,加載器也是一個程序,這是一個加載其它程序的程序;這么說可能有點拗口,但計算機系統中有大量類似的程序,編譯器是一個翻譯程序的程序、操作系統是一個運行其它程序的程序、鏈接器是一個鏈接程序的程序、解釋器是一個執行腳本程序的程序等等。

雞生蛋蛋生雞的問題

回到我們的主題,我們寫的代碼是loader加載到內存后運行的,那么操作系統這個程序是也同樣的道理,必須得有個什么東西也要把操作系統加載到內存中運行才可以,這個東西不叫loader,而是叫boot loader,其本身也是一個程序, 它的任務就是加載一個更大的程序 ,就像這里的操作系統。

此時這里會出現一個雞生蛋蛋生雞的,既然我們的程序是被加載器loader(操作系統的一部分)加載到內存中,而操作系統又是被boot loader這個加載程序加載到內存中的,那么又是什么加載器把boot loader這個加載程序加載到內存中呢?而又又是什么加載器把上一句中的什么加載器加載內存中呢?而又又又是什么。。?

圖片

你會發現這個一個沒有出口的無窮遞歸啊有沒有,總得有個什么把前一個程序加載到內存, 就好比今天的前一天是昨天、昨天的前一天是前天、前天的前一天是大前天,如果一直這樣思考下去那么時間到底在哪里開始的呢 ?時間到底有沒有開始(參考時間簡史或相對論)?

時間有沒有開始這個問題我不清楚,但操作系統啟動的這個問題我知道。

上述關于加載器以及加載加載器等問題全部指向了內存,讓我們好好想一想內存有什么特殊性?

內存斷電后是無法保存數據

程序員都知道內存只有在加電的情況下才可以保存數據,那么很顯然, 當斷電后內存中的內容就丟失了 ,那么又很顯然的,當你在按下計算機開關通電時,內存中的內容是未被初始化的,也就是說內存中的內容是無效的, 此時的內存里還是一片荒蕪 ,這里沒有任何東西可供CPU來執行,這就好比大爆炸之前的宇宙。

圖片

但我們的計算機總是能啟動起來,CPU必須得執行“一段什么程序”把第一個boot loader加載到內存中, 由于此時內存中還什么都沒有,那么這段程序一定被保存在了其它地方

保存在了哪里呢?

沒錯,這段程序就被保存在了BIOS的非易失性存儲ROM或者flash存儲中了,這里的代碼在即使斷電后也會保存下來,加電后CPU開始執行這里代碼,把boot loader加載到內存中,現在你應該明白第一個boot loader是怎樣被加載到內存的了吧。

圖片

在早期的計算機上甚至專門有一個按鈕,讓用戶自己選擇該從哪里,比如打孔紙帶、打孔卡片或者硬盤,加載一個更復雜的程序來運行,操作面板上的旋鈕可以控制把這些程序加載到內存的什么位置上去:

火箭與操作系統啟動

然而現實情況比較復雜,我們剛才提到的boot loader這段小程序功能實在是太弱了,此時其能訪問的磁盤地址空間有限,不能把完整的內核全部加載到操作系統中,該怎么辦呢?

既然boot loader比較弱那么就換一個比較牛的loader程序來,就這樣出現了二階boot loader,second stage loader:

圖片

二階boot loader功能更為豐富,比如對硬件進行檢查、給用戶提供選項加載哪個操作系統等等,安裝多系統的同學應該知道,啟動時會給你一個選項到底是啟動windows還是linux,這就是二階boot loader的作用。

圖片

最終,操作系統被二階boot loader加載到內存中開始運行。

你會發現這個過程就和發射三級火箭一樣,最初一級火箭啟動,燃料用盡后二級火箭啟動,二級火箭完成使命后三級火箭啟動,最終把衛星送到太空,而計算機的啟動過程也類似。

最初是CPU運行BIOS中的一段代碼把一級boot loader加載到內存中運行,該程序又會把二級boot loader加載到內存運行,而二級boot loader又會把操作系統加載到內存中,此后控制權被轉移到操作系統,(所謂控制權是指CPU跳轉到操作系統的代碼),操作系統開始運行,經過一系列的初始化,比如硬件檢測、開啟必要的后臺進程等等,最終圖形界面或者命令行界面呈現出來。

圖片

接下來我們把這個過程細化一下。

更詳細的啟動過程

你在按下電源的瞬間相當于火箭點火,此時一級發動機開始工作。

加電CPU重置后開始在地址0xffff0處開始執行指令,這個地址其實是BIOS ROM的末尾處,該位置其實是一個跳轉指令,跳轉到ROM的一段啟動代碼上,該代碼會進行必要的自檢,Power-on self-test (POST),展示BIOS啟動界面等等,最重要的一步是找到啟動設備,所謂啟動設備就是指從哪里加載操作系統,比如CD-ROM、或者磁盤、甚至U盤等都可以作為啟動設備,早些年流行用U盤重新安裝系統,其實就是告訴BIOS的這段代碼從U盤中加載操作系統。

通常BIOS會把磁盤當做啟動設備(大部分情況下),此時BIOS中的這段代碼開始將磁盤的第0號塊加載到內存中,那么這第0號塊中有什么呢?沒錯,就是第一階段boot loader程序,這第0號塊也被稱之為Master Boot Record,MBR,肯定有不少同學聽說過。

圖片

到這里,火箭的一級發動機燃料用盡,二級發動機開始點火,BIOS中的這段代碼把控制權交給加載到內存boot loader,所謂控制權就是跳轉到boot loader程序,這樣CPU終于開始直接與內存交互了,CPU開始從內存中取出指令然后執行。

MBR中除了包含一段可執行代碼之外還有一個分區表,partition table,這個表的中的每一個條目本質上在說:“操作系統是否在我這個分區,我這個分區有多大”,CPU在執行MBR中的代碼時會去檢查操作系統存在哪個分區中,定位后開始從相應分區的起始位置讀取磁盤數據到內存中,這時的磁盤數據中保存的就是二階boot loader,second-stage boot loader,此時一階boot loader把控制權轉交給二階boot loader,火箭三級發動機開始工作。

2_boot loader的主要工作將操作系統加載到內存中,此后控制權轉交給操作系統,火箭的三級發動機完成使命, 到這一時刻,操作系統開始接管計算機 ,操作系統經過一系列自身的初始化后創建出若干必要進程,至此計算機啟動完畢,衛星被成功送到了外太空中。

圖片

然而限于篇幅這里依然沒有過多涉及細節,操作系統本身的初始化也是一個比較復雜的過程,感興趣的同學可以去翻閱相關操作系統的資料

總結與腦洞

計算機的啟動是一個多階段的過程,當然在一些嵌入式設備等這個過程會簡化,但總體上也需要經過類似過程,只不過階段數會少一些。

回到最開始的那個問題,也就是時間有沒有開始,其實這個問題一些物理大牛已經回答過了, 但我很想在這里開一個腦洞 ,當上帝在為自己創建的宇宙(計算機)加電的那一刻——也就是宇宙大爆炸時,時間開始了,時間這個概念是和宇宙(計算機)相伴相生的,如果沒有宇宙(計算機),時間這個概念其實是沒有意義的,就好比如果沒有計算機,加載這個概念其實是沒有意義的, 你思考時間到底有沒有起點這個問題就好比計算機中的程序在思考到底是誰把自己加載到內存的、又是誰把操作系統加載到內存中的等等 。。好啦,腦洞就開到這里。

現在你應該明白計算機啟動這個問題了吧

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 操作系統
    +關注

    關注

    37

    文章

    6834

    瀏覽量

    123345
收藏 人收藏

    評論

    相關推薦

    如何用STM32F051把開關磁阻電機驅動起來啊?

    什么樣的PWM波形呢?有沒有大神指導一下啊~只要動起來就行,不需要閉環什么的呢,求程序啊啊啊
    發表于 05-07 06:32

    請問怎么使無刷電機動起來,就單單動起來

    本人是51單片機學習者,剛剛接觸無刷電機,但是連怎么讓它動起來都搞不明白,各位可以分享一下嗎?不勝感激啊,我現在就想讓它動起來先而已
    發表于 04-24 00:55

    關于用labview 的x_y圖里面的圖形動起來

    剛學會用laview的x_Y圖繪制一條直。怎么讓這條y=f(t)直線動起來?向下面李薩如圖形一樣。有人知道李薩如圖形是怎么用程序框圖實現的嗎?
    發表于 04-01 10:39

    【Landzo C1試用體驗】+第二篇 :動起來,生活才更精彩!

    經過不懈努力,終于完善了組裝,現在可以上機器人小車動起來了,動起來,才有美感家成就感。下面上圖,本來要上傳視頻的,但是不怎么到怎么弄,要先傳到優酷,在鏈接網址好像。下次有空再搞視頻上傳。在這里說兩個
    發表于 06-02 18:55

    怎么把自定義時間像時鐘一樣動起來

    自定義之后的時間就停在定的時間那 不會像時鐘一樣動起來 怎么加循環讓它動起來
    發表于 09-06 16:48

    如何從零開始制作51單片機控制的智能小車讓它動起來

    如何從零開始制作51單片機控制的智能小車讓它動起來
    發表于 10-21 07:43

    OK5718 qt程序上電顯示成功可界面卻沒啟動起來怎么回事

    上電啟動顯示[OK[ Started helloworld但是我的界面沒有啟動起來
    發表于 01-06 06:54

    如何把輸入模塊和輸出模塊聯動起來

    IMX6ULL單獨驅動按鍵或LED都實現了,那如果我想要把輸入模塊(比如按鍵)和輸出模塊(比如LED指示燈)聯動起來,在Linux里面應該是做哪方面的操作呢?
    發表于 01-07 08:40

    Debian69系統啟動起來有點卡怎么解決?

    Debian 69系統啟動起來有點卡
    發表于 09-12 07:50

    蘋果新機拉貨PCB軟板雙雄動起來

    蘋果新機預計9月上市,相關供應鏈已經開始動起來,PCB軟板雙雄臻鼎-KY、臺郡一致表示,隨著大客戶新機拉貨,營運自7月起增溫,并可望一路旺到11月左右,但仍需關注美中貿易戰對客戶拉貨與終端市場買氣的影響。
    的頭像 發表于 07-11 17:17 ?3137次閱讀

    操作系統是如何啟動起來的?

    想想我們編寫的程序,編譯后生成的是可執行文件,也就是說是以“文件”的形式存放的,并且存放在硬盤上,而操作系統也沒什么不同,編譯后生成的機器指令同樣是以文件的形式存放的,存放在哪里呢?
    的頭像 發表于 04-18 14:55 ?1094次閱讀

    讓汽車儀表組上的指針動起來

    讓汽車儀表組上的指針動起來
    發表于 10-31 08:23 ?0次下載
    讓汽車儀表組上的指針<b class='flag-5'>動起來</b>

    BeagleBone AI-64、Servo Cape和讓電機動起來

    電子發燒友網站提供《BeagleBone AI-64、Servo Cape和讓電機動起來.zip》資料免費下載
    發表于 07-12 10:51 ?0次下載
    BeagleBone AI-64、Servo Cape和讓電機<b class='flag-5'>動起來</b>

    步進電機如何讓動起來?步進電機轉動原理

    42步進電機的步距角為1.8°,是由定子和轉子的齒數共同決定的,定子有48齒,轉子有50齒,具體是怎么算的,感興趣的同學可以自行學習,今天的重點是讓步進電機如何讓動起來
    發表于 04-01 10:40 ?2463次閱讀
    步進電機如何讓<b class='flag-5'>動起來</b>?步進電機轉動原理

    e絡盟互動社區發起“動起來”設計大賽

    安富利旗下全球電子元器件產品與解決方案分銷商e絡盟發起了“Start a Movement動起來”設計挑戰賽,將選出 20 名工程師構建包含運動組件的自選項目。20名挑戰者將獲得由Analog
    的頭像 發表于 09-23 10:30 ?331次閱讀
    e絡盟互動社區發起“<b class='flag-5'>動起來</b>”設計大賽
    主站蜘蛛池模板: 国产成人无码区免费内射一片色欲| 国产成人综合视频| 狠狠色狠狠色综合日日小说| 亚洲精品天堂自在久久77| 精品国产午夜肉伦伦影院| 在线观看视频一区| 欧美精品3atv一区二区三区| 国产成人mv 在线播放| 野花韩国免费高清电影| 欧美 亚洲 日韩 中文2019| 国产精品系列在线一区| 中文字幕人成乱码熟女APP| 日韩精品熟女一区二区三区中文| 国自产拍 高清精品| beeg日本老师| 亚洲精品久久一区二区三区四区 | 亚洲免费在线视频| 男女牲交全过程免费播放| 国产精品女主播主要上线| 中文字幕一区二区三区在线不卡| 日本人69xxx| 久久青草费线频观看国产| 国产99视频精品免费播放| 伊人青青草原| 天堂岛www| 免费看男人J放进女人J无遮掩| 国产成人精品精品欧美| 中国少妇内射XXXX狠干| 色妺妺免费影院| 蜜桃人妻无码AV天堂三区| 国产午夜亚洲精品区| 啊灬啊灬啊灬快灬深高潮啦| 亚洲一区二区三区91| 色内射无码AV| 欧美黑大炮18p| 久久学生精品国产自在拍| 国产欧美日韩国产高清| 波多野结衣二区| 99久久就热视频精品草| 亚洲视频中文字幕| 无限资源网免费看|