POWER後的說明

来源:https://www.cnblogs.com/lbqverdent/archive/2022/06/29/16423016.html
-Advertisement-
Play Games

編寫MBR主引導記錄,開始掌權 一.一些說明 CPU的硬體電路被設計成只能運行處於記憶體中的程式,這是硬體基因的問題,其原因是首先記憶體比較快且容量大,其次由於各個硬體特性不同,若被設計成運行硬體里的程式則操作系統要分別考慮每種硬體特性才行,為了達到統一,故選擇只運行記憶體中的程式。其次記憶體不僅僅是DRA ...


編寫MBR主引導記錄,開始掌權

一.一些說明

CPU的硬體電路被設計成只能運行處於記憶體中的程式,這是硬體基因的問題,其原因是首先記憶體比較快且容量大,其次由於各個硬體特性不同,若被設計成運行硬體里的程式則操作系統要分別考慮每種硬體特性才行,為了達到統一,故選擇只運行記憶體中的程式。其次記憶體不僅僅是DRAM,即記憶體不僅僅是主板上的記憶體條(物理記憶體),包括外設的ROM等。

載入記憶體分為兩部分:第一部分是程式被載入器(軟體或硬體)載入到記憶體的某個區域,第二部分是設置CPU的CS:IP寄存器指向這個程式的起始地址。

 

上面說過,主板上的物理記憶體不是它眼裡的“全部的記憶體”。電腦中,並不是只有咱們插在主板上的記憶體條需要通過地址匯流排訪問,還有一些外設同樣是需要地址匯流排來訪問的。若把全部的地址匯流排用來指向物理記憶體那麼其他設備訪問不了。由於這個原因只好在地址匯流排上提前預留出來一些地址空間用於存放這些外設,比如把連續的地址分配給顯存,連續的地址分配給硬碟控制器等。留夠了以後,地址匯流排上其餘的可用地址再指向DRAM,也就是指插在主板上的記憶體條,我們眼中的物理記憶體。

 

 

這也即是為什麼電腦安裝了8G,卻顯示7.8G的原因。

 

總之,表示地址的那串數字是地址匯流排的輸入,相當於其參數,和記憶體條沒關係。CPU能夠訪問一個地址,這是由於地址匯流排給的映射相當於對該地址分配了一個存儲單元。而該單元要麼落在某個ROM上,要麼落在物理記憶體條上,要麼落在了某個外設的記憶體中。

 

二.關於磁碟的一些說明

“0 盤”說的是 0 磁頭,因為一張盤是有上下 兩個盤面的,一個盤面上對應一個磁頭,所以用磁頭 Header 來表示盤面。“0 道”是指 0 柱面,柱面 Cylinder 指的是所有盤面上、編號相同的磁軌的集合,形象一點描述就是把很多環疊摞在一起的樣子,組合在一起 之後是一個立體的管狀。“1 扇區”才是我們要解釋的部分,將磁軌等距劃分成一段段的小區間,由於磁 道是圓形的,確切地說是圓環,這些被劃分出來的小區間便是扇形,所以稱為扇區。

 

三.BIOS基本輸入輸出系統

從主機上按下POWER鍵後,第一個運行的軟體是BIOS(基本輸入輸出系統)。BIOS主要工作是檢測初始化硬體,怎麼初始化的?硬體自己提供了一些初始化的功能調用,BIOS直接調用即可。不僅如此,BIOS還做了一個很重要的事,填寫了中斷向量表,這樣就可以通過“int 中斷號”來實現相關的硬體調用,當然BIOS建立的這些中斷功能就是對硬體IO操作,也即輸入輸出。但是BIOS總共只有64KB,不可能把所有硬體的IO實現做的面面俱到,而且也沒必要實現那麼多因為在實模式下,對硬體支持得再豐富也是白搭,精彩的世界是進入保護模式以後才開始的,所以挑選一些重要的基本IO操作即可,這也是為什麼稱其為基本的原因

BIOS如何啟動的?因為BIOS是電腦上的第一個啟動的軟體,它不可能自己載入自己。由此可知道,它是由硬體載入的。這個硬體便是只讀存儲器ROM(硬體本身有一定的功能),此後,BIOS便被寫入到該ROM中去,ROM也是塊記憶體,於是被映射到低端的1MB處即0xf0000~0xfffff處,此後CS:IP被強制設置為0xf000:0xfff0(無論如何只要處理完後的地址是0xffff0即可為該16B為BIOS的入口地址)。只要訪問該區間內的地址(映射所對應的存儲單元,該映射是由硬體系統完成的)便是訪問BIOS系統。

另外,因為 cs 和 ip 寄存器中存儲的是下一條要執行的指令,目前還沒有執行,也就是說,當前還沒有 執行 BIOS,這是機器剛開機的那一刻。接下來BIOS就開始盡其責了,檢測記憶體,顯卡外設等,並初始化好硬體,開始在記憶體0x000~0x3ff處建立數據結構,中斷向量表IVT並填寫中斷常式。

 

BIOS 最後一項工作校驗啟動盤中位於 0 盤 0 道 1 扇區的內容。如果此扇區末尾的兩個位元組分別是魔數 0x55 和 0xaa,BIOS 便認為此扇區中確實存在可執行的程式(在此先劇透一下,此程式便是久聞大名的主引導記錄 MBR,MBR位於磁碟上最開始的那個扇區),便載入到物理地址 0x7c00,隨 後跳轉到此地址,繼續執行,如果此扇區的最後 2 個不是 0x55 和 0xaa,即使裡面有可執行代碼也無濟於事了,BIOS 不認。

那麼會有兩個疑問MBR為什麼規定在為什麼是 0 盤 0 道 1 扇區?為什麼要載入到 0x7c00,而不是個好記或好看的其他地址?

第一個問題:我自行猜測很可能是為了約定,因為如果不告訴BIOS系統MBR在哪?BIOS系統會一遍遍的遍歷所有硬碟直到碰見了0x55和0xaa兩個魔數才知道是MBR所在位置,這樣不如直接索性規定MBR在開始的扇區(可以是任意扇區,只要是固定位置即可),告訴BIOS系統 MBR在哪?這樣方便很多

第二個問題:個人電腦肯定要運行操作系統,在這台電腦上,運行的操作系統是 DOS 1.0,不清楚此系統要求 的最小記憶體是 16KB,還是 32KB,反正 PC 5150 BIOS 研發工程師就假定其是 32KB 的,所以此版本 BIOS 是按最小記憶體 32KB 研發的。很簡單,MBR首先其安裝不能覆蓋已有數據,其次也要避免自己的數據過早被覆蓋(通常,MBR 的任務是載入某個程式<這個程式一 般是內核載入器,很少有直接載入內核的>到指定位置,並將控制權交給它。所謂的交控制權就是 jmp 過去而已。之後 MBR 就沒用了,被覆蓋也沒關係。過早的覆蓋指的是不被其載入的程式如內核載入器,使得內核載入器載入內核覆蓋到自己的空間)。所以我們打個比方,比如說一個操作系統如DOS1.0要求記憶體至少要32KB,MBR希望給DOS留下更多的預留空間,這也是保全自己避免自己被過早覆蓋,MBR 本身也是程式,是程式就要用到棧,棧也是在記憶體中的,MBR 雖然本身只有 512 位元組,但還要為其 所用的棧分配點空間,所以其實際所用的記憶體空間要大於 512 位元組,估計 1KB 記憶體夠用了。結合以上三點,選擇32KB中的最後1KB最為合適,那此地址是多少呢?32KB換算為十六進位為0x8000, 減去 1KB(0x400)的話,等於 0x7c00。 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Hash 數據結構 使用 ziplist 當同時滿足下麵兩個條件時,使用 ziplist 存儲數據 元素個數少於512個 (hash-max-ziplist-entries: 512) 每個元素長度小於64位元組 (hash-max-ziplist-value: 64) 不滿足上面的條件, 使用 ha ...
  • MediaWPF 基於 .NET 6 實現視頻硬解碼渲染Demo(無空域問題) 代碼實現僅供學習參考 本項目視頻渲染通過顯卡進行視頻解碼,CPU幾乎不參與工作,並且不存在令人煩躁的空域問題。 在播放攝像頭多路視頻或高解析度、高幀率視頻時可以極大發揮顯卡性能(我認為該項目做到了這一點)。 播放4k、8 ...
  • 前言 上一篇我們講了使用HttpClient的方式調用,那麼如果我們現在需要更換為通過dapr實現服務調用,我們需要做哪些事情呢? Caller.Dapr 入門 如果我們的項目原本使用的是Caller.HttpClient,現在希望改為使用Caller.Dapr,那麼我們需要做什麼呢? 改造Call ...
  • List 數據結構 Redis 3.2 前,使用 壓縮列表zipList 或 雙向鏈表linkedList 當同時滿足下麵兩個條件時,使用zipList存儲數據 list保存的每個元素長度小於64位元組 列表中數據個數少於512個 Redis 3.2 及之後的底層實現方式: quickList qui ...
  • 中移OneOS開發板學習入門 (做為一個專業的點燈愛好者,學習任何開發板開始前都是先找好學習資料,然後在學習OneOS的內核部分,外設部分,系統組件等) OneOS OneOS是中國移動針對物聯網領域推出的輕量級操作系統,具有可裁剪、跨平臺、低功耗、高安全等特點,支持ARM Cortex-A和 Co ...
  • 備份資料庫 問題描述: ​ 我們用的是mysql,以今天遇到的情況為例,我們是在兩台伺服器上要搭相同的平臺,部署完成後頁面報錯,發現是資料庫的問題,我們打開資料庫查看,確實資料庫中少建一個wind資料庫,但是我們沒有建這個資料庫的腳本,資料庫裡面涉及到很多表,很複雜,於是採用linux備份的方法,成 ...
  • 通過 hosts文件配置本地功能變數名稱 概念 DNS: 功能變數名稱系統(Domain Name System),是互聯網的一項服務。它作為將功能變數名稱和IP地址相互映射的一個分散式資料庫,能夠使人更方便地訪問互聯網。 將功能變數名稱映射到對應的IP地址。 互聯網通過IP定位瀏覽器建立連接,但是我們不易區別IP,為了方便用戶辨 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 作為一個專業小白,咱啥都不懂。 linux不懂,docker不懂。 但是我還想要完成領導下達的任務:在linux中安裝docker後部署數據可視化工具。作為一名敬業 的打工人擺爛不可以,躺平不可以,弱小,無助,可憐中。。這能力,這要去,要不直接散 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...