一步步编写操作系统 27 处理器微架构之流水线简介
了解處理器內部硬件架構,有助于理解軟件運行原理,因為這兩者本身相輔相成,相互依存。就像槍和狙擊手,槍的操作和外形設計都是要根據人體工學,讓人不僅操作容易,而且攜帶也要輕便,做到能隨時射出子彈擊中目標,槍賦予了人的使命。反過來,狙擊手要根據槍的操作和外形設計,找到發揮其最大命中率的方法,做到人槍合一,人賦予了槍的生命.
記得2002年末我在中關村攢了臺電腦,當時的最新的桌面cpu是奔4-2.4b,我一咬牙就買它了,當時可花了兄弟我1600塊呢,話說當時一個月只掙1500塊。其中2.4是指cpu的主頻是2.4G。您看,對于cpu的選擇,我當時只關注主頻,根本不關注其它參數,其實主要是不懂其它參數,哈哈。后來才懂了cpu中另一個非常重要的技術,這就是流水線。
說到流水線,也許您腦子中馬上聯想到:工廠里一個穿著藍色工作服的工人,站在像傳送帶一樣的工作臺前緊張而有節奏的工作。也許您會問,你怎么知道我是這么想的?哎……電視里都這么演的……沒錯,這就是流水線。可是這個例子畢竟太遙遠,并不是所有同學都在工廠里做過流水線工人,咱們還是拿生活中的例子說事。
大伙兒都有租房子的經歷嗎?如果沒有也沒關系,重點不是租房子,我要說的是像我等北漂一族,為了充分利用房子里狹小的空間,肯定用錘子往墻上砸過釘子,您懂的,可以掛東西嘛^_^。
從宏觀上看,砸釘子可以分兩個步驟:
假設每一步都占用1秒,釘釘子這兩個步驟下來是2秒,如果順序執行這兩個步驟,一分鐘可以砸30個釘子。過程如表
?
以上是以串行順次的方式來砸釘子,不過這種串行的效率實在有限,如果改為并行的方式砸釘子,效率必然大大提高。
生活中處處是并行的例子,最為典型的并行系統就是咱們的身體。比如心臟在為身體泵血的時候,肺同時在保持呼吸為身體供氧,小腸也同時在蠕動,為人體汲取養分。這些器官的活動都是并行的,并不是在心臟跳動完之后,小腸再蠕動,它們的工作是彼此獨立無關聯的。人體內部的器官雖然是在并行工作,但他們做為一個整體——人,卻同一時間只能做好一件事,所以一心不能二用。
如果以“并行”的方式,也就是同時砸釘子,那得多增加人手才行,一個人同時只能做一件事,并且要么拿釘子,要么砸釘子。下面給砸釘子的工作增加個人手,專門給取釘子,這樣一個人取釘子,另一個人專門來砸釘子,取釘子和砸釘子的工作重疊進行,過程如表:
?
上面的并行我加了引號,因為它并不是真正的并行,這是在重疊執行。重疊的意思是說在同一時間內同時完成兩個釘子的部分工序,拿第2秒來說,第一行的“砸釘子”是砸的第一個釘子,第二行的“取釘子”取的是第二個釘子,做的并不都是第一個釘子的工序。真正的并行是兩個人自己取自己的釘子,然后自己砸自己的釘子,各干各的。而我們的例子中,取釘子的人只會取釘子,砸釘子的人也只會砸釘子。
增加了一個人手之后,除第1秒外,每一秒都有“砸釘子”的動作,所以第一分鐘內可以砸入59根釘子,在第二分鐘以后,每分鐘能砸60個。
以上表4-13的過程便是一個流水線的執行過程,由于砸釘子分為兩個步驟,所以以上流水線稱為二級流水線。
這種情況在cpu中也是一樣的,指令執行單元EU是執行指令的唯一部件,一次只能執行一個指令,單核cpu的情況下,只有一個指令處于執行中。cpu中的各部分也是同時只能做一件事,但它們就像身體器官一樣,也是在并行工作,相當于多個“人手”。cpu的指令執行過程分為取指令、譯碼、執行三個步驟。每個步驟都是獨立執行的,cpu可以可以一邊執行指令,一邊取指令,一邊譯碼。cpu中的時序不是秒,對cpu來說,秒就是天文數字。它的時序是時鐘周期。按照這三個步驟,其三級流水線如表
?
以上在第2周期后,都有指令在執行,這是最基本的流水線啦。為了更好的理解以后的分支預測,在此提醒一下大伙兒:雖然在一個時鐘周期內cpu同時干了三件事,但一定要清楚,這三件事不屬于同一個指令,是三個指令重疊在一起了,這和砸釘子的流水線是一樣的道理。同時完成的是當前指令的第三步、下一條指令的第二步,第三條指令的第一步。cpu中每條指令必須經過取指、譯碼、執行三步才算完成。
cpu是按照程序中指令順序來填充流水線的,也就是說按照程序計數器PC(x86中是cs:ip)中的值來裝載流水線,當前指令和下一條指令在空間上是挨著的。如果當前執行的指令是jmp,下一條指令已經被送上流水線譯碼了,第三條指令已經被送上流水線取指啦。仔細想想看,其實這個流水線沒用了,因為cpu早已經跳到別處去執行了,第二、三條指令用不上了,所以cpu在遇到無條件轉移指令jmp時,會清空流水線
總結
以上是生活随笔為你收集整理的一步步编写操作系统 27 处理器微架构之流水线简介的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 信用卡冻结还完欠款后还能用吗
- 下一篇: 一步步编写操作系统 76 用汇编语言编写
