學習交流加
- 個人qq: 1126137994
- 個人微信: liu1126137994
- 學習交流資源分享qq群: 962535112
深入淺出處理器這幾篇文章可能你覺得對軟體開發用處不大,這個看個人理解吧,若是想貫通上下,知其然還要知其所以然的話,或許還是有點用處的。學習處理器的篇章非常少,花一點時間學一下也無所謂的!
在我之前還是做硬體的時候,我一直不理解微處理器和微控制器的區別。 之前寫過一篇文章,講X86處理器的,可以點選檢視:X86處理器
1、 處理器
處理器分為兩種:微處理器和微控制器。
微處理器與微控制器有以下區別:
-
微處理器
-- CPU
-
微控制器
--CPU + 片內記憶體 + 片內外設
注意:
- 微控制器具有成本低,功耗低等優點,常用於嵌入式系統設計
- 對於軟體工程師而言,微處理器與微控制器沒有任何區別
其中,CPU與外設(包括微控制器的片內外設與片外外設)都有暫存器,但是它們的用處卻是非常的不一樣。之前寫過的X86處理器那篇文章中,已經講了一些X86處理器的暫存器的用處,大致就是儲存資料的,但是微控制器上的外設中的暫存器,不是用來儲存資料的,而是用來控制外設的行為和工作方式的。
1.1、暫存器分類
-
CPU暫存器
-- 專用指令執行,資料運算, 變數處理,引數傳遞
-
外設暫存器
-- 用於控制外設的行為和工作方式、
--暫存器值的配置需要檢視相應的硬體手冊
1.2、處理器中的關鍵暫存器
今天我們只瞭解兩個暫存器:PC程式計數器暫存器,SP棧指標暫存器。
-
PC程式計數器(指令指標暫存器IP)
-- PC實際上就是程式碼中的每一條指令的地址,這個地址剛好就是記憶體中程式碼段中的偏移地址
--每執行一條指令,PC中的值,就會發生變化
-- PC始終儲存著一條指令,這條指令就是CPU即將要執行的那條指令(下一條要執行的指令)
-
SP棧指標(Stack Pointer)
--SP暫存器,始終儲存著棧空間的棧頂地址,實現LIFO特性
-- SP棧指標用於保護函式呼叫的現場,比如中斷斷點,通用暫存器,函式的返回值等。具體如何保護,在以後的文章中會講解
具體使用方法,會在後面的文章中講解,今天暫時知道這兩個暫存器的概念與用法。
1.3、處理器的IO操作
眾所周知,一臺電腦有很多外設,USB,音效卡,顯示卡等,這些都是外設。那麼處理器是如何與外設進行資料通訊的呢?
處理器與外設之間的通訊通過IO操作完成。
那麼既然有IO操作,肯定是要有CPU去定址的過程,在CPU所能定址的範圍內,找到外設的地址,對該地址進行讀寫就可以與外設進行通訊。那麼外設如何通過IO將自己的地址空間對映給CPU的定址空間呢?
-
通過記憶體對映IO空間
-- 外設通過精密的硬體連結對映到CPU的定址空間。
-- 然後CPU通過地址訪問與外設進行資料讀寫訪問
-
獨立的IO空間
--外設獨立於CPU的地址空間,無法通過CPU的定址來與外設進行通訊
-- 此時,需要使用專用的指令與外設進行通訊
上面是CPU與外設的基本通訊方式,我們不必糾結於具體的硬體實現,畢竟我們是做軟體開發。
那麼,CPU現在可以與外設進行通訊了,那麼CPU如何操作外設呢?
- 通過IO埠配置控制暫存器
- 通過IO埠讀取資料暫存器
從軟體工程師的角度來看,只要對不同的IO埠讀寫,就可以操作外設;讀寫IO埠時候的具體值和意義需要查詢具體的硬體手冊。
2、硬體設計的關鍵
上一節我們知道了CPU是如何與外設打交道的。那麼在硬體上,大概設怎樣的設計呢?
首先CPU與外設之間要有地址匯流排與資料匯流排,然後需要有一個片選訊號用來確保是否“啟動”該外設。
通過具體的硬體設計,可以使地址匯流排上的值在某個範圍時,片選訊號為“真”,即:使能連線的外設,從而讀取相應地址中的資料!!!
具體的硬體如何設計不去細究,這裡知道大概原理即可,
3、處理器的啟動過程
在一開始,我們的電腦是沒有作業系統的,那麼處理器是如何啟動的呢?
- 處理器啟動後,PC(IP)暫存器固話了一個預設值
- PC預設值決定了CPU上電後第一條執行指令在哪
- 第一條執行指令,是CPU的啟動程式BIOS(BIOS以後講解)
下圖為CPU簡易的啟動過程
大致瞭解一下BIOS:
固化於硬體中的一個程式,用於初始化硬體,然後將指令指標暫存器PC(IP)指向主引導扇區程式,主引導扇區程式再來引導作業系統核心的自舉程式,然後啟動作業系統。(後期會專門學習作業系統,現在暫時不用瞭解)
4、總結
本系列文章學習記錄軟體開發底層的基礎知識。