Create OS from scratch

做了幾天時(shí)間的這個(gè)教程,現(xiàn)在來總結(jié)一下我的收獲

操作系統(tǒng)啟動(dòng)過程

因?yàn)檫@個(gè)系列有一個(gè)特點(diǎn)就是不使用grub這樣的存在的bootloader,那么你就需要自己去手寫引導(dǎo)

現(xiàn)在我們來梳理一下計(jì)算機(jī)啟動(dòng)的整個(gè)過程發(fā)生了什么?

  1. 點(diǎn)擊電源鍵,主板通電,CPU初始化(寄存器初始化,主要是CS,IP),這兩個(gè)寄存器關(guān)系著CPU執(zhí)行的第一個(gè)指令,

    而這個(gè)指令指向的地址就是BIOS的程序入口 (jump post)

  2. 而BIOS又會(huì)進(jìn)行開機(jī)自檢,檢查硬件是否存在,是否有問題,如果出現(xiàn)問題,會(huì)發(fā)出蜂鳴聲,沒問題則會(huì)向屏幕打印硬件信息,而在開機(jī)自檢之后,BIOS還會(huì)檢查是否存在Bootable device,如何區(qū)分他是不是Bootable呢?

    這里就涉及到了MBR和boot sector

    講道理,BIOS會(huì)去檢查每個(gè)設(shè)備的前512字節(jié),并且在512字節(jié)的末尾,會(huì)有一個(gè)magic number : 0xaaff(好像是)

    如果是,他就會(huì)認(rèn)為他是bootable device,而這512字節(jié)一般來說存放的都是MBR(main boot record),而其實(shí)就我的理解,MBR的存在呢,主要是為了解決一個(gè)問題:硬盤的每個(gè)分區(qū)都可以裝一個(gè)系統(tǒng),MBR中存放的就是分區(qū)表和代碼,代碼呢,可能就是bootloader

    而在我們的這個(gè)教程中,就沒有是使用MBR,因?yàn)樗皇且粋€(gè)在虛擬機(jī)上模擬的一個(gè)簡(jiǎn)單系統(tǒng),所以他使用了boot sector啟動(dòng)

    接著剛才說:

    而CPU會(huì)把這512字節(jié)的內(nèi)容讀到內(nèi)存中:0x7c00處,然后開始執(zhí)行MBR或者boot sector的代碼

  3. 而boot sector接著要干什么呢?

    加載內(nèi)核,但是這里我們就又要說一下實(shí)模式和保護(hù)模式了

    Intel8086的CPU是16位的,那也就代表著,我們可以使用的空間只有2的16次個(gè)bits,也就是8KB左右吧,但是8086設(shè)計(jì)時(shí)的目標(biāo)是使用1MB的內(nèi)存,于是他就是用了一種分段的尋址方式,段地址偏移4位+邏輯地址,這樣就實(shí)現(xiàn)了20位的尋址,也就勉強(qiáng)達(dá)到了1MB的內(nèi)容

    但是后面的幾代CPU為了兼容8086,他們就將8086的這種啟動(dòng)方式作為實(shí)模式:

    • 16位尋址
    • 使用分段的方法
    • 只能使用單個(gè)CPU
    • 沒有內(nèi)存保護(hù)

    但是,根據(jù)我們嘗試來說,這所謂的1MB內(nèi)存根本不足以讓我們把內(nèi)核加載進(jìn)來,而且后面的幾代CPU從32位進(jìn)步到64位,繼續(xù)使用16位的尋址未免太low,于是對(duì)應(yīng)實(shí)模式,就有了保護(hù)模式(32位)

    • 32位尋址
    • 使用GDT,而不是簡(jiǎn)單的分段
    • 有了段的權(quán)限控制
    • 有了內(nèi)存保護(hù)
    • 可以使用多個(gè)CPU
    • 有了更大的內(nèi)存空間
  4. 內(nèi)核加載完成后,會(huì)初始化寄存器,因?yàn)閺?6位進(jìn)入32位,寄存器也需要重新初始化,并且要?jiǎng)?chuàng)建一些重要的進(jìn)程

  5. 加載操作系統(tǒng)的其他部分,文件系統(tǒng),網(wǎng)絡(luò)....

其實(shí),操作系統(tǒng)不見得都是在保護(hù)模式下進(jìn)行加載的,比如linux,他使用了一種叫做unreal mode的模式,所謂的unreal其實(shí)也就是在real和protect之間反復(fù)橫跳來加載內(nèi)核

而且,linux為了減小內(nèi)核大小,還采用了一般壓縮,一半不壓縮的騷操作,沒壓縮的一半會(huì)去解壓另一半

其他

其實(shí),總的來說,這一系列下來收獲還是蠻大的

比如說:

  • GDT是怎么被加載到內(nèi)存,又是怎么被CPU找到的
  • GDT為什么結(jié)構(gòu)那么復(fù)雜
  • 如何配置交叉編譯的環(huán)境
  • 匯編的一些知識(shí)
  • 段錯(cuò)誤和GDT有什么關(guān)系
  • 實(shí)模式如何進(jìn)入保護(hù)模式
  • 以及CPU尋址
  • 堆棧是怎么分配的
  • ......
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萝勤,一起剝皮案震驚了整個(gè)濱河市源武,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖姻灶,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件红碑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡绰上,警方通過查閱死者的電腦和手機(jī)旨怠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜈块,“玉大人鉴腻,你說我怎么就攤上這事迷扇。” “怎么了爽哎?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵蜓席,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我课锌,道長(zhǎng)厨内,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任渺贤,我火速辦了婚禮雏胃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘志鞍。我一直安慰自己瞭亮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布述雾。 她就那樣靜靜地躺著街州,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玻孟。 梳的紋絲不亂的頭發(fā)上唆缴,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音黍翎,去河邊找鬼面徽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛匣掸,可吹牛的內(nèi)容都是我干的趟紊。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼碰酝,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼霎匈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起送爸,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤铛嘱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后袭厂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墨吓,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年纹磺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帖烘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡橄杨,死狀恐怖秘症,靈堂內(nèi)的尸體忽然破棺而出照卦,到底是詐尸還是另有隱情,我是刑警寧澤历极,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布窄瘟,位于F島的核電站,受9級(jí)特大地震影響趟卸,放射性物質(zhì)發(fā)生泄漏蹄葱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一锄列、第九天 我趴在偏房一處隱蔽的房頂上張望图云。 院中可真熱鬧,春花似錦邻邮、人聲如沸竣况。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丹泉。三九已至,卻和暖如春鸭蛙,著一層夾襖步出監(jiān)牢的瞬間摹恨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工娶视, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晒哄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓肪获,卻偏偏與公主長(zhǎng)得像寝凌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子孝赫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容