新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 從4004到core i7:處理器的進化史 (3)-3-真正的CPU

        從4004到core i7:處理器的進化史 (3)-3-真正的CPU

        作者: 時間:2014-02-19 來源:摘自《果殼小組》網 收藏

          上一個帖子中我把4004作為所有后續的性能越來越高的的鼻祖。在這個貼之中我們來討論進化史中的第一個里程碑:80286

        本文引用地址:http://www.104case.com/article/233546.htm

          從4004到8008再到8080甚至是8086,的進化在逐漸進行著。數量翻了幾番,主頻翻了幾番,但是內部的結構的變化還不足以引起我們的興趣為之單獨寫一個帖子。

          這一切在80286都發生了徹底的改變。

          當的功能變得越來越強大,速度變得越來越快的時候,人們漸漸地不滿足于讓它只做一件事情,比如說IBM Displaywriter,而想要讓它具有完成多個任務的能力。

          多個任務意味著不同功能的多段程序,這樣多的程序不大可能由一家或者末端用戶自己全部寫出來。也就是說,我們的CPU可能出現很多不同的程序提供者。

          一個很自然的想法就是,這么多程序員中間必然有很多不靠譜的(別忘了,當時匯編都是個新鮮玩意呢),以及很多靠譜但心懷不軌的。要想讓CPU正常有序地運行多段程序,沒有某種管理機制看來是行不通的。

          于是乎思路就很明顯了,程序要按照受信任的程度分成三六九等。不靠譜的、心懷叵測的程序不受信任,雖然可以在占據CPU的這一小段時間里肆虐,卻不應該危害到其他程序,更不應該危害到監察者的安全。

          對于一段程序來說,能干的壞事無非就是更改一下其他程序的狀態,也就是內存里的數據,或者是執行一段來路不明的代碼。如果能禁止這兩者的發生那么基本上就不會鬧出什么大亂子出來。

          有了上面這個思路,再看一看下面的實現就顯得很自然了:

          在上圖中,連續的物理內存被分成了很多個段(segment),內存單元的邏輯地址采用段基址+偏移的方式描述。,每個段有自己的訪問權限,每個程序都有一個從3~0的權限界別(這4個級別一直被沿用至今天)。如果當前這段程序想要訪問某一個內存,或者想執行某一段代碼,就必須經受硬件完成的權限檢查,只有當權限高于等于想要訪問內存的權限時才允許訪問,否則就會拋出錯誤。關于硬件錯誤的拋出、處理后面還要再提,這里我就不講了。

          由于這種權限制度保護了內存免受其惡意或不靠譜程序的侵害,因此這種狀態被稱為CPU的保護模式。今天的幾乎所有桌面級別和以上的都運行在保護模式下。上面提到的3~0的權限級別的劃分也為后來的操作系統(operating system)奠定了基礎。

          80286的另一個進步(實際上是8086相對于之前的進步)可以在下面這張圖中看出來

          左上方的 unit就是上面講到的分段機制對應的硬件。它的工作就是查映射表由邏輯地址得到實際的物理地址,并且進行權限檢查。右上方的bus unit中我們感興趣的部分是最下面的8 byteprefetch queue和下方的instruction unit。

          在左下方的execution unit以及左上方的 unit在執行某一個指令的同時,右下方的instruction unit在解碼后面的若干條指令。

          對比前面的4004,我們發現286并不是等待一條指令完全執行完畢之后才開始執行下一條的。相反地,在286內部可能有若干條指令處于不同的狀態:一條正在被ALU等部件實際執行,其余的可能已經完成了取指正在等待譯碼,或者譯碼都完成了就是等著執行了。毫無疑問,比起4004的執行效率提高了不少。

          這種將整個CPU劃分為2個模塊,每個模塊在同一時間執行不同任務的思想正是流水線(pipeline)(想想汽車裝配的流水線吧)。盡管286時可能還沒有這個概念,但無疑已經實現了最初的雛形。后面我們將要看到,流水線是我們為數不多的優化處理器性能的主流方法之一。

        晶體管相關文章:晶體管工作原理


        晶體管相關文章:晶體管原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 江津市| 鄂托克旗| 丰顺县| 泊头市| 惠水县| 沁水县| 玉山县| 平远县| 昭苏县| 怀仁县| 榆社县| 鄂伦春自治旗| 蓬溪县| 山阳县| 大港区| 乌兰察布市| 南漳县| 卢湾区| 吉林省| 宣化县| 手游| 德格县| 天台县| 镇康县| 金寨县| 彭泽县| 新晃| 建德市| 施甸县| 漾濞| 辉县市| 红原县| 彰武县| 正阳县| 岫岩| 湟源县| 通渭县| 塔城市| 耿马| 新营市| 清原|