【OS学习笔记】十二 现代处理器的结构和特点
本文是一個銜接點,上一篇文章以前都是學習8086實模式的知識。本文開始學習80386這種現代處理器的編程架構。由此進入保護模式的學習。點擊鏈接查看上一篇文章:上一篇文章
1、現代處理器的結構和特點
1 流水線技術
處理器可以做很多事情,能夠執行各種不同的指令,完成不同的功能,但這些事情大多不會再一個時鐘周期內完成。執行一條指令,需要從內存中取指令,譯碼,訪問操作數和結果,并進行移位、加法、減法、乘法以及其他任何操作。
為了提高處理器的執行效率和速度,可以把一條指令的執行過程分解成若干個細小的步驟,并分配給相應的單元來完成。各個單元的執行都是獨立的、并行的。如此一來,各個步驟在時間上就會重疊起來,這種執行指令的方法,就是流水線(Pipe-Line)技術。
比如,一條指令的執行過程分為取指令、譯碼和執行三個步驟的話。假設每個步驟都要花一個時鐘周期,那么如下圖所示,如果采用順序執行,則執行三條指令就要花9個時鐘周期,沒3個時鐘周期才能得到一條指令的執行結果;如果采用3級流水線技術的話,則執行這三條指令只需要5個時鐘周期,每隔一個時鐘周期就能夠得到一條指令的執行結果。
2、高速緩存技術
高速緩存,在以前的文章中有講的很詳細,這里不再贅述,直接查看以前的文章即可。
點解下面鏈接查看:
高速緩存
其實簡單來說高速緩存就是為了彌補外存(內存條)的讀寫速度過于緩慢的缺陷。將內存中的一些指令和數據,緩存到高速緩存中,那么CPU可以不用訪問內存而直接訪問高速緩存,這樣會快的多!!!
3、亂序執行技術
為了實現流水線技術,需要將指令拆分成更小的可獨立執行部分,即拆分成微操作。
一旦將指令拆分成微操作,處理器就可以在必要的時候亂序執行。考慮以下程序:
mov eax , [mem1] shl eax , 5 add eax , [mem2] mov [mem3] , eax這里add eax , [mem2]可以拆分成兩個微操作。先從mem2對應的地址取數據,然后將數據與eax寄存器中存的數據相加,得到的結果存入eax寄存器。如此一來,在執行邏輯左移指令的同時,處理器可以提前從內存中讀取mem2的內容。典型的,如果數據不在高速緩存中,那么處理器在獲取mem1的內容后,會立即開始獲取mem2的內容,與次同時,shl指令的執行早就開始了。
類似的這種亂序執行很多很多,總給不在贅述。
4、寄存器重命名技術
考慮以例子:
mov eax , [mem1] shl eax , 3 mov [mem2] , eax mov eax , [mem3] add eax , 2 mov [mem4] , eax以上代碼做了兩件事情,但是互不相干。
- 將mem1的內容左移3次后,傳給mem2
- 將mem3的內容加2后,傳給mem4
如果我們為最后三條指令使用不同的寄存器,就更能清楚的看明白,這兩件事的互不相干性。事實上,處理器也是這么做的。處理器為最后三條指令使用了另一個不用的臨時寄存器,因此,左移和加法指令可以并行的處理。
IA-32架構的處理器只有8個32位的通用寄存器,但通常都會被我們全部派上用場(甚至還覺得不夠)。因此我們不能奢望在每個計算機中都使用新的寄存器。不過在處理器內部,卻有大量的臨時寄存器可用,處理器可以重命名這些寄存器,但是以代表一個邏輯寄存器,比如上述的EAX寄存器。
寄存器重命名以一種完全自動和非常簡單的方式工作。每當指令寫一個邏輯寄存器時,處理器就為那個邏輯寄存器分配一個新的臨時寄存器。
在所有操作都完成之后,那個代表EAX的臨時寄存器里面存的內容就會被寫入真實的EAX寄存器,該處理過程稱為引退。
所有通用寄存器,棧指針寄存器,標志寄存器,浮點寄存器,甚至段寄存器都有可能被重命名。
5、 分支目標預測技術
流水線并不是百分之百完美的解決方案。實際上,有很多潛在的因素會使得流水線不能達到最佳的效率。一個典型的情況是,如果遇到一條轉移指令,則后面那些已經進入流水線的指令就都無效了。換句話說,我們必須清空流水線,從要轉移到的目標位置處重新取指令放入到流水線。
隨著復雜架構下的流水線變得越來越長,程序分支帶來的問題變得很大。為了解決這個問題,引入了分支預測技術。
從統計學的角度來看,有些事情一旦發生,下一次發生的概率很大。比如下面的程序片段:
xor si , silops:......cmp si , 20jnz lops當jnz指令第一次執行時,轉移一定會發生。那么處理器就可以預測,下一次它還會轉移到標號lops處,而不是順序往下執行。事實上,這個預測通常是很準的。
在處理器內部,有一個小容量的高速緩存器,叫做 分支目標緩存器(BTB)。當處理器執行了一條分支語句后,它會在BTB中記錄當前指令的地址、分支目標的地址。以及本次分支預測的結果。下一次,在那條轉移指令實際執行之前,處理器會查找BTB中,看有沒有最近的轉移記錄。如果能找到最近的條目,則推測執行和上次相同的分支,把該分支的指令送入流水線。
當該指令執行時,如果預測是失敗的,那么清空流水線,同時刷新BTB中的記錄。這個代價很大。
細心的人早已發現,這其實就是一個緩存的思想!!!這個思想很牛逼!!!
2、總結
理解現代處理器的結構特點:
- 流水線技術
- 高速緩存思想
- 亂序執行思想
- 寄存器重命名
- 分支目標預測技術
其實這些思想,在以后的上層軟件開發中,也是經常遇到。
筆記記得不是很全,如果有不懂的可以加我聯系方式一起交流。
學習探討加個人:
qq:1126137994
微信:liu1126137994
總結
以上是生活随笔為你收集整理的【OS学习笔记】十二 现代处理器的结构和特点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【软件开发底层知识修炼】十一 链接器-链
- 下一篇: 国密 GmSSL 版本及安装