linux內核bios,BIOS的啟動原理——Linux內核設計學習筆記

RAM:隨機存取存儲器,常見的內存條就是一類RAM,其特點是加電狀態下可任意讀、寫,斷電后信息消失。

在RAM中什么程序也沒有的時候,誰來完成加載軟盤中操作系統的任務呢?

答案是:BIOS。

BIOS的啟動原理

在了解BIOS是如何將操作系統程序加載到內存中之前,我們先來了解一下BIOS程序自身是如何啟動的。從我們使用計算機的經驗得知:要想執行一個程序,必須在窗口中雙擊它,或者在命令行界面中輸入相應的執行命令。從計算機底層機制上講,其實是在一個已經運行起來的操作系統的可視化界面或命令行界面中執行一個程序。但是,在開機加電的一瞬間,內存中什么程序也沒有,沒有任何程序在運行,不可能有操作系統,更不可能有操作系統的用戶界面。我們無法人為地執行BIOS程序,那么BIOS程序又是由誰來執行的呢?

秘訣是:0xFFFF0 !!!

從體系的角度看,不難得出這樣的結論:既然用軟件方法不可能執行BIOS,就只能靠硬件方法完成了。從硬件角度看,Intel 80x86系列的CPU可以分別在16位實模式和32位保護模式下運行。為了兼容,也為了解決最開始的啟動問題,Intel將所有80x86系列的CPU,包括最新型號的CPU的硬件都設計為加電即進入16位實模式狀態運行。同時,還有一點非常關鍵的是,將CPU硬件邏輯設計為加電瞬間強行將CS的值置為0xF000、IP的值置為0xFFF0,這樣CS:IP就指向0xFFFF0這個地址位置,如 1-1所示。從圖1-1中可以清楚地看到,0xFFFF0指向了BIOS的地址范圍。

d0065112db5f5f060f923effdbf61c3e.png

圖1-1 啟動時BIOS在內存的狀態及初始執行位置

小貼士

IP/EIP(Instruction Pointer):指令指針寄存器,存在于CPU中,記錄將要執行的指令在代碼段內的偏移地址,和CS組合即為將要執行的指令的內存地址。實模式為絕對地址,指令指針為16位,即IP;保護模式下為線性地址,指令指針為32位,即EIP。

CS(Code Segment Register):代碼段寄存器,存在于CPU中,指向CPU當前執行代碼在內存中的區域(定義了存放代碼的存儲器的起始地址)。

注意,這是一個純硬件完成的動作!如果此時這個位置沒有可執行代碼,那么就什么也不用說了,計算機就此死機。反之,如果這個位置有可執行代碼,計算機將從這里的代碼開始,沿著后續程序一直執行下去。

BIOS程序的入口地址恰恰就是0xFFFF0 ! 也就是說,BIOS程序的第一條指令就設計在這個位置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530257.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530257.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530257.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

zabbix監控linux網卡流量,zabbix實現linux流量變化率監控

監控軟件:zabbix需求分析:從系統層面的監控看,現在CPU持續超過80%會報警,流量曲線達到閥值才會報警,但是流量在短時間內起伏很大,肯定是有問題的,目前主要還是依靠人看,肯定有滯后性…

Linux下仿windows任務管理器,開源任務管理器 Process Hacker (Windows)

Windows表面上沒有工作在進行中,但不知為何負荷很重,究竟有什么進程在執行?會不會是系統已經被入侵?這是很多人都想知道的問題。但Windows自帶的任務管理員實在太過簡陋,解決辦法便是安裝這次介紹的Process Hacker。熟…

linux軟件工程師筆試題,C/C++軟件工程師筆試題

1,程序設計(可以用自然語言來描述,不編程):C/C源代碼中,檢查花括弧(是“(”與“)”,“{”與“}”)是否匹配,若不匹配,則輸出不匹配花括弧所在的行與列。2,巧排數字,將1,2…

嵌入式linux中的鎖機制,跟濤哥一起學嵌入式第11集:一個實現鎖機制非常有意思的宏...

QQ群(宅學部落)有位學員問了一個很奇怪的宏,覺得很有意思,特拿來分享,它的定義如下:我們知道,宏定義其實就是為了方便,給一串代碼字符串定義一個別名。有時候字符串過于復雜,我們可以分多行書寫&#xff0c…

linux 制作box文件夾,用busybox制作自己簡易的根文件系統

當使用Busybox-1.2.0制作根文件系統交叉編譯器為3.3.2make-3.8.1STEP 1:創建根文件系統目錄,主要包括以下目錄/bin,/etc,/dev,/mnt,/sbin,/usr。STEP 2:升級make到3.81版本&#xff…

linux主頻限制服務,linux抵御DDOS攻擊 通過iptables限制TCP連接和頻率

cc攻擊一到就有點兵臨城下的感覺,正確的設置防護規則可以做到臨危不亂,這里給出一個iptables對ip進行連接頻率和并發限制,限制單ip連接和頻率的設置規則的介紹#單個IP在60秒內只允許新建20個連接,這里假設web端口就是80,iptables -I INPUT -…

linux es數據庫 head,elasticsearch安裝es-sql插件

說明:本示例是在CentOs Linux7.4上運行,安裝的es版本為6.8.0,對應es-sql版本6.8.0,es-head版本5.0.0,需要安裝JDK下載es安裝包wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.0.tar.gz…

LINUX進程調度分析源碼,Linux 實時調度(源碼分析)

為了弄清楚在多cpu系統中是如何實現實時調度的,先引入以下幾個概念:cpu的狀態:我們知道,在linux系統中,任務的優先級為0~140。INVALID:(-1)該cpu不可用IDLE(0):140NORMAL(1):100~139對應于普通任務的優先級…

linux源碼文件名,Linux中文件名解析處理源碼分析

Linux中文件名解析處理源碼分析前言Linux中對一個文件進行操作的時候,一件很重要的事情是對文件名進行解析處理,并且找到對應文件的inode對象,然后創建表示文件的file對象。在此,對文件名解析過程,并且如何找到對應ino…

帝國cms linux偽靜態規則,帝國cms7.2偽靜態規則怎么寫

一、在linux主機下實現偽靜態確認虛擬主機是否支持rewrite偽靜態.htaccess文件。添加.htaccess 文件,把htaccess 文件放在網站根目錄。二、在win主機下實現偽靜態確認虛擬主機是否支持rewrite偽靜態httpd.ini文件。添加httpd.ini文件,把httpd.ini文件放入…

linux core 永久生效,【調試】Core Dump是什么?Linux下如何正確永久開啟?

內容簡介【調試】Core Dump是什么?Linux下如何正確永久開啟?Core Dump是什么?Linux下如何正確永久開啟?Core Dump是什么?Core Dump乍聽之下很抽象。當程序運行的過程中異常終止或崩潰,操作系統會將程序當時…

linux故障排查書籍,Linux系統故障排查和修復技巧.docx

fsck -y /cievZhdab(fsck為文件系統檢測修復命令,“-y”設定檢測到錯誤自動修復,Zdev/hda6 為發生錯誤的硬盤分區,請依據具體情況更改此參數) 系統修復完成后,用命令“reboot,重新啟動即可? 案例三、GRUB選項設置錯誤…

用于用戶C語言標識符,下列可用于C語言用戶標識符的一組是( )

摘要:下列不屬于骨肉瘤患者常見護理問題()于C語言用戶組Since people send nonverbal signals through multiple channels simultaneously, it is impossible to increase our nonverbal communication competence by becoming more aware of how it operates in sp…

c語言編程常見問題解答,C語言編程常見問題解答之常用函數的包含文件

函數 包含 類別 功能_atold math.h 數學子程序 把字符串轉換為浮點數_beginthread process.h 進程控制子程序 啟動執行一個新線程_bios_disk bios.h 接口子程序 輸出BIOS磁…

c語言猜四位數游戲猜10次,C語言猜數字游戲--隨機生成4個不相同的數字從小到大排序,用戶開始游戲,如果用戶猜對數字和數字對應的位置,界面回饋A,如果數字正確位置不正確,則回饋B...

1.看程序運行截圖吧!!由于博主本人較笨,就不動畫演示了,如果動畫的話可能將是一個漫長的過程!猜數字游戲.png2.游戲題目隨機生成4個不相同的數字從小到大排序,用戶開始游戲,如果用戶猜對數字和數…

雙端堆c語言,數據結構——雙端堆(C語言)

定義雙端堆:是一棵完全二叉樹,該完全二叉樹要么為空,要么同時滿足下列性質:(1) 根節點不包含元素;(2) 左子樹是一個最小堆;(3) 右子樹是一個最大堆;(4) 如果右子樹不空,令i是左子樹中…

C語言和我的世界指令哪個難,我的世界難度有什么區別 難度選擇指令介紹

我的世界中的難度(Difficulty)可以在Minecraft的選項菜單內切換。更改這個選項將直接影響到游戲本身。選項中并沒有設定影響攻擊性生物的可生成數量,包括和平模式。目前游戲共有和平、簡單、普通和困難4種難度。我的世界難度區別和平:會生成攻擊性生物&a…

w ndows10即將停止更新,微軟開始警告Windows 10 v1909用戶即將停止更新服務

如果您仍在運行Windows 10版本1909,版本1903或更早版本,則可能已經在系統任務欄中注意到一條新消息:Windows 10版本即將終止服務。根據Windows 10 May 2020 Update或2020年10月Update。為了將用戶升級到最新版本的Windows 10,“您…

篩法求素數c 語言,位篩法求素數,有段代碼看不懂,有大佬可以來說一下

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓就是BITArray[ (i -3)/ CHAR_BIT ]其中i從0開始,那下標不就為負了?而指向的又是哪個數據?下面是完整代碼。#include #include #include #include #include #include#include int main( ){unsigne…

c語言中日期間的天數怎么計算,關于計算兩個日期間天數的代碼,大家來看看...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓這是原貼:http://post.baidu.com/f?kz100411727這是原碼:#include "stdio.h"main(){long int i,a[2],b[2],c[2],x[12]{0,31,59,90,120,151,181,212,243,273,304,334},y,z[2];scanf("%ld-%ld-%ld %ld-%ld-%ld"…