操作系統啟動順序

来源:http://www.cnblogs.com/wewill/archive/2016/11/15/6065317.html
-Advertisement-
Play Games

概述 在這裡以x86的處理器為例 機器在啟動的時候會執行 第一條指令 。這條指令會去執行 bios ,將控制權交給bios。 bios完成硬體的質檢,然後將bootloader從硬碟讀到記憶體中,執行 bootloader ,並將控制權交給bootloader bootloader負責使能保護模式、建 ...


概述

在這裡以x86的處理器為例
機器在啟動的時候會執行第一條指令。這條指令會去執行bios,將控制權交給bios。
bios完成硬體的質檢,然後將bootloader從硬碟讀到記憶體中,執行bootloader,並將控制權交給bootloader
bootloader負責使能保護模式、建立段機制以及載入操作系統,然後將控制權交給操作系統

啟動順序

第一條指令

執行機器的第一條指令是為了跳轉到bios執行,那麼需要知道bios在哪裡?cpu是怎麼定址的?

bios在哪裡

bios是固化在記憶體EPROM中的,斷電不會丟失(非易失性),這樣biod的地址是固定的,因為在cpu第一次加電了之後,寄存器就會有預設的初始值,所以bios地址=定址寄存器的預設值就好啦。
定址是由段寄存器以及指令指針共同完成,bios地址由CS:IP=16*CS+IP(代碼段寄存器:指令指針)來表示。
CS的預設值是FFFF0000H,IP的預設值是0000FFF0H。
CS:IP=FFFFFFF0H

定址機制

定址是由段寄存器以及指令指針共同完成。因為記憶體很大,而且在一段時間內操作的記憶體具有空間局部性,所以可以將記憶體分為一段一段由段寄存器來定位,這一段的記憶體中再由指令指針來定位到具體的代碼、數據
段寄存器:

  • CS——code segment,代碼段寄存器
  • DS——data segment,數據段寄存器
  • ES——extra segment,附加段寄存器
  • SS——stack segment,堆棧寄存器

指令寄存器IP(instruction pointer),即是我們熟悉的程式計數器PC。
一個地址由段寄存器:指令指針=16*段寄存器+指令指針來表示
由於在這一階段,機器還是處於實模式,實模式是20位定址,所以單單隻用段寄存器(16位)是不夠的。
因為實模式只有20位定址,所以最大可調用的空間只有1M

bios

bios是負責做硬體自檢並初始化以及將bootloader載入到記憶體中
要保證硬碟、記憶體...在後續工作中不會出錯。
然後將bootloader載入到記憶體中的0x7c00,然後跳轉到0x7c00執行。

bootloader

bootloader要完成使能保護模式(實模式——>保護模式)、建立段機制以及載入操作系統

bootloader結構

bootloader在硬碟中的第一個扇區也叫主引導扇區,一個扇區是512位元組,所以bootloader也是512位元組。
其中有400+個位元組是啟動代碼,負責完成bootloader需要完成的工作,剩下的位元組是記錄硬碟分區表。
bootloader結構

建立段機制

當沒有段機制,CS:IP得到的是真實的物理地址,段機制就是為了更加靈活的分段。
段機制就是中間做了一層映射,CS先定位到GDT(全局描述表)相應的段描述符,再從段描述符中找到段的起始地址,與IP組成物理地址。

使能保護模式

將CR0寄存器(control 0 register控制寄存器),的第0位設為1,這樣就開啟了保護模式

查看原文:http://blog.zswlib.com/2016/11/15/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E9%A1%BA%E5%BA%8F/


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

-Advertisement-
Play Games
更多相關文章
  • 由於工作需要,經常要使用遠程桌面連接到Windows伺服器。Windows的預設遠程桌面埠號為3389,為增加伺服器安全性,除了在硬體設備做規則外,還可以用Windows自帶的策略來增加Windows伺服器的安全下。 下麵以Windows2008R2為例,分別設置二種策略:(兩種任選一種,不能同時 ...
  • 在windows下,一個文件有:創建時間、修改時間、訪問時間。而在Linux下,一個文件也有三種時間,分別是:訪問時間、修改時間、狀態改動時間。 1、訪問時間,讀一次這個文件的內容,這個時間就會更新。比如對這個文件使用more命令。ls、stat命令都不會修改文件的訪問時間。 2、修改時間,對文件內... ...
  • 為什麼要使用 HTTPS ? 首先來說一下 HTTP 與 HTTPS 協議的區別吧,他們的根本區別就是 HTTPS 在 HTTP 協議的基礎上加入了 SSL 層,在傳輸層對網路連接進行加密。簡單點說在 HTTP 協議下你的網站是光著身子在奔跑,但到了 HTTPS 下你穿了一件衣服,別人看不到你的肌肉 ...
  • 在傳統模式中,開發團隊在開發環境中完成軟體開發,自己做了一遍單元測試, 測試通過,ᨀ交到代碼版本管理庫。運維把應用部署到測 試環境, QA 進行測試,沒問題後通知部署人員發佈到生產環境。 在上述過程中涉及到至少三個環境:開發、測試和生產。現實情況是,開發自測 沒問題,但到了測試或者生產環境程式無法運 ...
  • 常識 兩條匯流排線路:串列數據匯流排SDA,串列時鐘匯流排SCL 每個連接到匯流排的器件都有唯一的地址供其他設備定址 每個連接到匯流排的器件都可以作為發送器和接收器 是多主機匯流排,如果兩個或更多主機同時初始化,數據傳輸可以通過重提檢測和仲裁防止數據被破壞 串列的8bit雙向數據傳輸位速率在標準模式下可達100 ...
  • 一、簡述前言: 1、本案例是基於 VMware Workstation Pro(專業版)12 上創建一個MAC操作系統(版本 :OSX10_11),下麵的步驟基本上和安裝其他類型的虛擬機沒有什麼區別。 2、安裝所需: ① VMware Workstation 安裝虛擬機的軟體,儘量使用高版本的,避免 ...
  • 在mac終端運行 sudo npm install -g bower (安裝之前你要確定你已經成功安裝了node 和 git) 然後會報錯 like this: ...
  • linux三劍客awk、sed、grep 1、awk主要用來做分列、匹配、計算的工作 2、sed主要用來做替換的(流處理) 3、grep主要用來過濾出需要的文本 awk(預設的分隔符為空格)awk -F ":" '/bonzi/{if (NR==2) print $0}'(一般模式) -F 設置分隔 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...