學習交流加微信
- 我的qq: 1126137994
- 我的微信: liu1126137994
- 學習交流資源分享qq羣: 962535112
深刻淺出處理器這幾篇文章可能你以爲對軟件開發用處不大,這個看我的理解吧,如果想貫通上下,知其然還要知其因此然的話,或許仍是有點用處的。學習處理器的篇章很是少,花一點時間學一下也無所謂的!函數
在我以前仍是作硬件的時候,我一直不理解微處理器和微控制器的區別。 以前寫過一篇文章,講X86處理器的,能夠點擊查看:X86處理器學習
處理器分爲兩種:微處理器和微控制器。操作系統
微處理器與微控制器有如下區別:.net
微處理器設計
-- CPU3d
微控制器指針
--CPU + 片內內存 + 片內外設cdn
注意:blog
其中,CPU與外設(包括微控制器的片內外設與片外外設)都有寄存器,可是它們的用處倒是很是的不同。以前寫過的X86處理器那篇文章中,已經講了一些X86處理器的寄存器的用處,大體就是存儲數據的,可是微控制器上的外設中的寄存器,不是用來存儲數據的,而是用來控制外設的行爲和工做方式的。
CPU寄存器
-- 專用指令執行,數據運算, 變量處理,參數傳遞
外設寄存器
-- 用於控制外設的行爲和工做方式、
--寄存器值的配置須要查看相應的硬件手冊
今天咱們只瞭解兩個寄存器:PC程序計數器寄存器,SP棧指針寄存器。
PC程序計數器(指令指針寄存器IP)
-- PC實際上就是代碼中的每一條指令的地址,這個地址恰好就是內存中代碼段中的偏移地址
--每執行一條指令,PC中的值,就會發生變化
-- PC始終保存着一條指令,這條指令就是CPU即將要執行的那條指令(下一條要執行的指令)
SP棧指針(Stack Pointer)
--SP寄存器,始終保存着棧空間的棧頂地址,實現LIFO特性
-- SP棧指針用於保護函數調用的現場,好比中斷斷點,通用寄存器,函數的返回值等。具體如何保護,在之後的文章中會講解
具體使用方法,會在後面的文章中講解,今天暫時知道這兩個寄存器的概念與用法。
衆所周知,一臺電腦有不少外設,USB,聲卡,顯卡等,這些都是外設。那麼處理器是如何與外設進行數據通訊的呢?
處理器與外設之間的通訊經過IO操做完成。
那麼既然有IO操做,確定是要有CPU去尋址的過程,在CPU所能尋址的範圍內,找到外設的地址,對該地址進行讀寫就能夠與外設進行通訊。那麼外設如何經過IO將本身的地址空間映射給CPU的尋址空間呢?
經過內存映射IO空間
-- 外設經過精密的硬件連接映射到CPU的尋址空間。
-- 而後CPU經過地址訪問與外設進行數據讀寫訪問
獨立的IO空間
--外設獨立於CPU的地址空間,沒法經過CPU的尋址來與外設進行通訊
-- 此時,須要使用專用的指令與外設進行通訊
上面是CPU與外設的基本通訊方式,咱們沒必要糾結於具體的硬件實現,畢竟咱們是作軟件開發。
那麼,CPU如今能夠與外設進行通訊了,那麼CPU如何操做外設呢?
從軟件工程師的角度來看,只要對不一樣的IO端口讀寫,就能夠操做外設;讀寫IO端口時候的具體值和意義須要查詢具體的硬件手冊。
上一節咱們知道了CPU是如何與外設打交道的。那麼在硬件上,大概設怎樣的設計呢?
首先CPU與外設之間要有地址總線與數據總線,而後須要有一個片選信號用來確保是否「啓動」該外設。
經過具體的硬件設計,可使地址總線上的值在某個範圍時,片選信號爲「真」,即:使能鏈接的外設,從而讀取相應地址中的數據!!!
具體的硬件如何設計不去細究,這裏知道大概原理便可,
在一開始,咱們的電腦是沒有操做系統的,那麼處理器是如何啓動的呢?
下圖爲CPU簡易的啓動過程
大體瞭解一下BIOS:
固化於硬件中的一個程序,用於初始化硬件,而後將指令指針寄存器PC(IP)指向主引導扇區程序,主引導扇區程序再來引導操做系統內核的自舉程序,而後啓動操做系統。(後期會專門學習操做系統,如今暫時不用瞭解)
本系列文章學習記錄軟件開發底層的基礎知識。