0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

知道計(jì)算機(jī)是怎樣把操作系統(tǒng)跑起來的嗎

jf_78858299 ? 來源:子牙OS ? 作者:子牙 ? 2023-05-09 16:12 ? 次閱讀

之前不是給大家發(fā)了個(gè)開發(fā)操作系統(tǒng)的環(huán)境搭建教程嗎?這不,又給自己找了一堆事。大家環(huán)境搭起來了,有環(huán)境寫內(nèi)核了,問題就出來了。這篇文章就是整理的大家問的比較多的問題,還有我自己寫操作系統(tǒng)的一些問題,及研究后的一些心得體會(huì)

操作系統(tǒng)是任何一個(gè)想成為技術(shù)大牛的小伙伴必學(xué)的知識(shí)點(diǎn)。每個(gè)coder接觸的所有知識(shí)點(diǎn),都是起源于操作系統(tǒng)。你可能想象不到,學(xué)會(huì)了操作系統(tǒng),對(duì)于一個(gè)coder,是一件多么有意義的事情。我還是建議大家抽空學(xué)一學(xué)、寫一寫。當(dāng)然如果你希望有人教,歡迎加入我的手寫操作系統(tǒng)小班

一個(gè)coder不想成為大牛,結(jié)局就是被淘汰

考慮到有些小伙伴沒寫過操作系統(tǒng),我從操作系統(tǒng)是如何被運(yùn)行起來的角度來寫這篇文章吧。相信如黑洞般的操作系統(tǒng)啟動(dòng)過程,小伙伴們都存在著很多困惑及渴望解開謎團(tuán)的好奇心

01

操作系統(tǒng)運(yùn)行總覽

想探究這個(gè)過程,只有你自己寫操作系統(tǒng)才有這樣的機(jī)會(huì)。因?yàn)檎鎸?shí)機(jī)器,你沒法調(diào)試,看不到這個(gè)過程

當(dāng)你寫好了一個(gè)OS內(nèi)核,用bochs運(yùn)行起來,你會(huì)發(fā)現(xiàn)bochs停留在一個(gè)斷點(diǎn)處。這個(gè)斷點(diǎn)所在的內(nèi)存地址是0xfffffff0,如圖。

圖片

注意:這時(shí)候還沒有運(yùn)行你寫的OS內(nèi)核,更進(jìn)一步說,你寫的OS內(nèi)核都還沒有裝入內(nèi)存

這里引出來第一個(gè)問題:當(dāng)我們運(yùn)行我們自己寫的OS內(nèi)核的時(shí)候,bochs為什么會(huì)在0xfffffff0處停下來

接下來第二個(gè)問題:0xfffffff0處的匯編指令是jmpf 0xf000:e05b,跳過去要執(zhí)行的代碼是做什么的?

當(dāng)把0xfe05b處的代碼執(zhí)行完,會(huì)跳轉(zhuǎn)到地址0x7c00,這里是我們寫的OS內(nèi)核開始的地方

圖片

第三個(gè)問題就是:為什么我們自己寫的OS內(nèi)核要載入到0x7c00,為什么不是其他的內(nèi)存地址

這里為什么顯示的是0x7c02呢?因?yàn)槲覀兿碌臄帱c(diǎn)占兩個(gè)字節(jié),bochs從斷點(diǎn)的下一行開始顯示,所以如此

接下來咱們一個(gè)問題一個(gè)問題的分析

02

第一個(gè)問題

問題是,我們用bochs運(yùn)行我們寫的OS內(nèi)核,為什么會(huì)停留在0xffffff0處?

我們反著來推,如果我們寫的OS內(nèi)核需要運(yùn)行起來,之前需要完成內(nèi)核的加載,在加載內(nèi)核之前需要知道我們寫的OS內(nèi)核是存儲(chǔ)在硬盤中還是軟盤中,根據(jù)不同的存儲(chǔ)介質(zhì),使用不同的方式進(jìn)行讀取。還有,運(yùn)行OS內(nèi)核需要內(nèi)存,在運(yùn)行之前是不是要檢查下有沒有插內(nèi)存條……

綜上,在運(yùn)行OS內(nèi)核之前,其實(shí)要做很多事情,這些事情由誰來做呢?BIOS例程。BIOS例程是寫死在主板ROM中的一段程序。如果你經(jīng)歷過電腦開機(jī)啟動(dòng)不了,你可能就聽過維修人員說這樣一句話:刷主板ROM試試

為什么要提到BIOS例程呢?因?yàn)?xffff0就是BIOS例程的入口地址。停留在這里,就是讓你有機(jī)會(huì)去調(diào)試BIOS例程,看它是如何檢測(cè)硬件、設(shè)置中斷、載入內(nèi)核、交出執(zhí)行權(quán)

03

第二個(gè)問題

問題是,0xfffffff0處的匯編指令是jmpf 0xf000:e05b,跳過去要執(zhí)行的代碼是做什么的?

其實(shí)前面也提到了,做硬件檢測(cè),比如檢測(cè)有沒有插內(nèi)存條,內(nèi)存條容量;有沒有接入存儲(chǔ)介質(zhì),接入了幾塊…檢測(cè)完硬件就需要填充中斷向量表,然后將我們寫的內(nèi)核代碼讀入內(nèi)存……最后把執(zhí)行權(quán)限交給OS內(nèi)核。怎么交呢?代碼類似于jmpf 0x7c00

為什么內(nèi)存條松了開不了機(jī),知道原因了吧

當(dāng)時(shí)研究這個(gè)問題的時(shí)候,我在想,為什么要跳轉(zhuǎn)呢?講0xfe05b作為BIOS例程的入口不就可以了嗎?我也嘗試找了各種資料:Inter手冊(cè)、BIOS規(guī)范,沒找著答案,所以這個(gè)問題木有答案,大家就當(dāng)純粹一聽。

當(dāng)你走到一定高度,你會(huì)非??鄲?,因?yàn)橛?jì)算機(jī)不是發(fā)源于我們國(guó)家,而且我們不是生活在那個(gè)年代,導(dǎo)致資料特別少,而且有些設(shè)計(jì)由于歷史原因流傳下來,又沒有資料說明,找不到答案

04

第三個(gè)問題

問題是,為什么我們自己寫的OS內(nèi)核要載入到0x7c00,為什么不是其他的內(nèi)存地址?

這個(gè)也是由于歷史原因。

0x7C00第一次出現(xiàn)在IBM PC 5150的BIOS處理int 19(19號(hào)中斷)的時(shí)候,IBM PC 5150是x86(32位)IBM PC/AT系列的祖先,這款PC于1981年發(fā)布,使用了intel8088(16位)的處理器和16KB的RAM內(nèi)存,BIOS和微軟的基本指令均放在該內(nèi)存中。當(dāng)打開電源,BIOS開始自檢,然后出發(fā) 19號(hào)中斷,在處理19號(hào)中斷時(shí),BIOS檢測(cè)電腦是否具有軟盤、硬盤或是固定磁盤,如果有任何可以使用的磁盤,BIOS就把磁盤的第一個(gè)扇區(qū)(512B)加載到內(nèi)存的0x7C00地址處。

那0x7C00是怎么算出來的呢?那時(shí)候計(jì)算機(jī)的最小內(nèi)存是32K,為了把盡量多的連續(xù)內(nèi)存留給操作系統(tǒng),主引導(dǎo)記錄就被放到了內(nèi)存地址的尾部。由于一個(gè)扇區(qū)是512字節(jié),主引導(dǎo)記錄本身也會(huì)產(chǎn)生數(shù)據(jù),需要另外留出512字節(jié)保存。所以,它的預(yù)留位置就變成了:

0x7FFF - 512 - 512 + 1 = 0x7C00

0x7C00就是這么算出來的

OK,到這來就把操作系統(tǒng)是如何被電腦運(yùn)行起來的細(xì)節(jié)講明白了。你學(xué)廢了嗎?

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7289

    瀏覽量

    87519
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6604

    瀏覽量

    123021
  • coder
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    7841
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    計(jì)算機(jī)操作系統(tǒng)PPT

    計(jì)算機(jī)操作系統(tǒng)PPT操作系統(tǒng)引論(1章)進(jìn)程管理(2-3章)存儲(chǔ)管理(4章)設(shè)備管理(5章)文件管理(6章)操作系統(tǒng)接口(7章)系統(tǒng)安全性(
    發(fā)表于 11-07 11:19

    計(jì)算機(jī)軟件與操作系統(tǒng)

    計(jì)算機(jī)軟件與操作系統(tǒng)  功能強(qiáng)大的計(jì)算機(jī)自從走進(jìn)了人類的生活就發(fā)揮著越來越重要的作用,隨著時(shí)代的發(fā)展,計(jì)算機(jī)已與人們的日常生活息息相關(guān)。不能不說計(jì)算
    發(fā)表于 09-13 10:09

    計(jì)算機(jī)操作系統(tǒng)

    計(jì)算機(jī)操作系統(tǒng)-進(jìn)程(2)進(jìn)程的狀態(tài)與轉(zhuǎn)換
    發(fā)表于 05-25 16:45

    什么是計(jì)算機(jī)操作系統(tǒng)?

    什么是計(jì)算機(jī)操作系統(tǒng)?操作系統(tǒng)是一種為應(yīng)用程序提供服務(wù)的系統(tǒng)軟件,是一個(gè)完整的計(jì)算機(jī)系統(tǒng)的有機(jī)組成部分。從層次上來看,
    發(fā)表于 12-14 06:50

    嵌入式系統(tǒng)與通用計(jì)算機(jī)操作系統(tǒng)的區(qū)別是什么

    嵌入式系統(tǒng)與通用計(jì)算機(jī)操作系統(tǒng)的區(qū)別以前僅學(xué)習(xí)并接觸過嵌入式系統(tǒng),通過對(duì)比,可以以前學(xué)過的知識(shí)對(duì)應(yīng)到計(jì)
    發(fā)表于 12-22 06:35

    計(jì)算機(jī)操作系統(tǒng)課件

    計(jì)算機(jī)操作系統(tǒng)課件內(nèi)容如下第1章  計(jì)算機(jī)操作系統(tǒng)概述.ppt1.1  存儲(chǔ)程序式計(jì)算機(jī)模型1.2 
    發(fā)表于 11-07 09:43 ?0次下載
    <b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>操作系統(tǒng)</b>課件

    2004年計(jì)算機(jī)操作系統(tǒng)試題

    計(jì)算機(jī)專業(yè)計(jì)算機(jī)操作系統(tǒng)試題 2004年1月一、選擇題(選擇一個(gè)正確答案的代號(hào)填入括號(hào)中,共40分)1.操作系統(tǒng)是為了提高計(jì)算機(jī)的C1](
    發(fā)表于 01-07 19:24 ?2次下載

    計(jì)算機(jī)操作系統(tǒng)》課程教學(xué)探討

    計(jì)算機(jī)操作系統(tǒng)課是一門涉及知識(shí)面廣的專業(yè)基礎(chǔ)課程,該課程的教學(xué)一直在計(jì)算機(jī)專業(yè)教學(xué)計(jì)劃中居重要位置.本文在分析了目前國(guó)內(nèi)計(jì)算機(jī)操作系統(tǒng)教學(xué)現(xiàn)
    發(fā)表于 04-18 21:12 ?48次下載

    計(jì)算機(jī)操作系統(tǒng)試題及答案

    計(jì)算機(jī)操作系統(tǒng)試題及答案。
    發(fā)表于 11-12 16:41 ?0次下載

    計(jì)算機(jī)操作系統(tǒng)原理與設(shè)計(jì)

    計(jì)算機(jī)操作系統(tǒng)原理與設(shè)計(jì)算機(jī)操作系統(tǒng)原理與設(shè)計(jì) 計(jì)算機(jī)操作系統(tǒng)原理與設(shè)計(jì)
    發(fā)表于 06-03 14:30 ?42次下載

    FreeRTOS_003 _讓系統(tǒng)在板子上跑起來

    FreeRTOS_003_讓系統(tǒng)在板子上跑起來
    的頭像 發(fā)表于 03-14 11:25 ?2725次閱讀
    FreeRTOS_003 _讓<b class='flag-5'>系統(tǒng)</b>在板子上<b class='flag-5'>跑起來</b>

    操作系統(tǒng)是什么?計(jì)算機(jī)操作系統(tǒng)的詳細(xì)資料介紹

    操作系統(tǒng)計(jì)算機(jī)學(xué)科的基礎(chǔ)課程,是理解計(jì)算機(jī)運(yùn)行原理的重要基石,學(xué)習(xí)操作系統(tǒng)不僅能夠讓編程人員了解計(jì)算機(jī)運(yùn)行邏輯而且還有助于培養(yǎng)編程“軟實(shí)力
    的頭像 發(fā)表于 02-04 12:24 ?1.7w次閱讀
    <b class='flag-5'>操作系統(tǒng)</b>是什么?<b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>操作系統(tǒng)</b>的詳細(xì)資料介紹

    計(jì)算機(jī)操作系統(tǒng)的幾種分類方式

    操作系統(tǒng)是管理計(jì)算機(jī)硬件與軟件的計(jì)算機(jī)程序,是計(jì)算機(jī)系統(tǒng)的核心,是計(jì)算機(jī)系統(tǒng)中最基礎(chǔ)和最重要的系統(tǒng)
    的頭像 發(fā)表于 03-21 14:58 ?2w次閱讀

    計(jì)算機(jī)操作系統(tǒng)的最基本特征是什么_計(jì)算機(jī)操作系統(tǒng)是什么的接口

    計(jì)算機(jī)操作系統(tǒng)是用戶與計(jì)算機(jī)的接口,在計(jì)算機(jī)中,操作系統(tǒng)是其最基本也是最重要的基礎(chǔ)性系統(tǒng)軟件;
    發(fā)表于 09-03 15:36 ?1.5w次閱讀

    為什么計(jì)算機(jī)需要操作系統(tǒng)?

    今天,我們從三個(gè)方面來簡(jiǎn)單聊聊為什么計(jì)算機(jī)系統(tǒng)需要操作系統(tǒng)這個(gè)話題。
    的頭像 發(fā)表于 02-03 11:00 ?2137次閱讀