自己動手寫處理器之第一階段(1)——電腦的簡單模型、架構、指令集

來源:互聯網
上載者:User

標籤:處理器   自己動手寫處理器   開源   or1200 軟核處理器   軟核   

將陸續上傳本人寫的新書《自己動手寫處理器》(尚未出版),今天是第二篇,我盡量每周四篇

 

第1章 處理器與MIPS

                                          時間開始了!

                                                          ——胡風 · 1949

      讓我們以一句詩意的話,開始本書的閱讀。

      時間從1971年11月15日開始,那一天,Intel發布了世界上第一款單晶片微處理器4004。

1.1 電腦的簡單模型

      電腦很複雜,可以聽歌、看電影、上網、玩遊戲,內部是怎麼工作的,這個問題太可怕了,太複雜了。

      電腦很簡單,只有加、減、乘、除、邏輯、移位、轉移、儲存、載入等幾類可以做的操作,太簡單了。

      複雜?簡單?其實取決於個人對事物的認識程度,認識的越多,瞭解的越深刻,那麼就越接近本質,而本質往往都是簡單的,比如大名鼎鼎的質能方程,一個簡單的式子就解釋了品質與能量的關係。

      電腦就是一台計算的裝置,而且是一台很基礎的計算裝置,只能計算小學數學課堂上講授的四則運算,再加上一些並不複雜的與、或、非等邏輯運算,其餘諸如平方、開方、微分、積分等等都是做不了的。有讀者會有疑惑,你說的太簡單的了吧,別急,且聽我慢慢道來。

1.1.1 電腦的簡單組成模型

      電腦的組成有三大部分:處理器(CPU:Central Processing Unit)、輸入輸出(I/O:Input/Output)、儲存空間(Memory)。處理器從儲存空間中擷取指令,然後按照指令執行一定的操作,輸入輸出用來提供運算資料、顯示運算結果。1-1所示。

      儲存空間中儲存的是指令,指令就是一條運算命令,比如:將a與b相加,結果儲存到c中,處理器按照命令執行即可。目前的電腦是一個二進位的世界,所有的資訊都是用0、1組合來表示的,所以一條指令就是一串0、1編碼,正1-1中所示。處理器內部具有解碼功能,用來解釋接收到的0、1編碼錶示的運算類型,據此進行運算。

1.1.2 電腦的簡單使用模型

      我們使用電腦上網、辦公,都是通過一定的應用程式實現的,而這些應用程式實際就是一批指令的集合,當然,這裡的“一批”指的是指令的數目龐大,實際上種類是非常少的,只有幾百條,常用的也就幾十條。通過這些指令的組織、配合,就實現了目前豐富多彩的應用。

     理論上,可以直接使用0、1編碼進行程式設計,但是那樣顯然太不方便、容易出錯,於是人們使用一些助記符來表示各種指令,這就是彙編指令,使用組譯工具將彙編指令翻譯為電腦可以識別的0、1編碼,後來,又發明了進階語言,其文法、使用方式比彙編更加方便、更加易於理解。一般使用編譯器將進階語言編寫的程式翻譯為彙編指令,然後再使用組譯工具將其翻譯為0、1編碼。本質上是一樣的。1-2所示。

      這就是電腦的簡單使用模型,無論是視頻軟體、瀏覽器,還是其他任何軟體;無論是使用C#開發、Java開發,還是使用任何其他語言開發;無論是在Windows環境下運行、Android環境下運行,還是在其它任何平台下運行;無論是在ARM處理上運行、Intel處理器上運行,還是在其它任何處理器上運行;無論是在銀河二號這樣的大型主機運行、個人使用的PC機上運行,還是在其它任何機器上運行,都遵循這樣的一套使用模型。

      總結一下,電腦只識別0、1編碼串,任何程式最終都要轉變為0、1編碼串,而且0、1編碼的種類是有限的,電腦按照0、1編碼的命令進行工作。這樣一說,讀者應該覺得電腦很簡單了吧。

      在電腦中處於核心地位的是處理器,也稱為CPU,作用是識別0、1編碼,據此進行各種運算和資料處理。本書的目標就是實現一個CPU。

1.2 架構與指令集

      類似於不同國家的人使用不同的文字,不同的處理器也使用不同的指令,這樣,為處理器A編寫的程式不能直接在處理器B上使用,需要重新編寫,然後再次編譯、彙編後才可使用,減低了軟體的移植性。顯然,極為不便。

      IBM為了讓自己的一系列電腦能使用相同的軟體,免去重複編寫軟體的痛苦,在它的System/360電腦中引入了指令集架構(ISA:Instruction Set Architecture)的概念,將編程所需要瞭解的硬體資訊從硬體系統中抽象出來,這樣軟體人員就可以面向ISA進行編程,開發出來的軟體不經過修改就可以應用在符合該ISA的所有電腦上。ISA用來描述編程時用到的抽象機器,而非這種機器的具體實現,從軟體人員的角度來看,ISA包括一套指令集和一些寄存器,知道它們就可以編寫程式了。

      與ISA對應的一個概念是微架構(Microarchitecture),後者是前者的一個實現,比如Intel的許多處理器都是遵循x86的ISA,但是每一款處理器都有自己的微架構。ISA好比是設計規範,微架構則是具體實現,同樣的ISA,不同的微架構,會帶來不同的效能。

1.2.1 CISC與RISC

      從大的方面,根據ISA的不同可以將電腦分為兩類:複雜指令集運算機(CISC:Complex Instruction Set Computer)、精簡指令集電腦(RISC:Reduced Instruction Set Computer)。主要區別是,CISC的每條指令對應的0、1編碼串長度不一,而RISC的每條指令對應的0、1編碼串長度是固定的。

      在電腦發展的早期,人們使用組合語言編程,偏好強大好用的指令集,處理器的設計人員於是將指令集設計得更強大、更靈活,並且那個時期的儲存空間既昂貴且速度慢,因此指令使用了變長編碼,以節約儲存空間,由於一條指令就能完成很多功能,從而減少了對記憶體的訪問次數,這樣也減少了緩慢的儲存空間訪問對程式效能的影響。典型的CISC指令集架構就是Intel的x86 ISA。上世紀70年代中期,人們發現CISC 指令集中的各種指令,其使用頻率相差懸殊,大約有20%的指令會被反覆使用,占整個程式碼的80%。而餘下80%的指令卻不經常使用,只佔整個程式碼的20%,顯然,這種結構是不太合理的。於是人們提出將指令集和處理器進行重新設計,減少那些使用不多的指令,只保留常用的簡單指令,這樣處理器就不需要浪費太多的晶體管去做那些很複雜又很少使用的功能,於是產生了RISC。1979 年美國加州大學伯克利分校的David Pattern首先提出了RISC的概念,RISC 並不只是簡單地減少指令,更主要的目的是研究如何使電腦的結構更加簡單合理以提高運算速度。其特點是指令長度固定、指令格式種類少、定址方式種類少、大量使用寄存器等。由於在RISC中使用的指令大多數是簡單指令且都能在一個刻度內完成,因而處理器的頻率得以大幅提升,同時易於設計流水線。RISC是電腦曆史上的一個裡程碑,以致有人開玩笑的把RISC定義為:1985年之後發布的所有處理器。

      Intel也嘗試做RISC處理器,但是因為相容性問題,沒有成功,後來在1995年,Intel的David B.Papworth和他的同事一起設計了Pentium Pro處理器,在這個處理器中,x86指令先被解碼為類似於RISC指令的微操作(microoperation,簡稱為uops),之後的執行過程採用RISC核心,這種方式一直延續至今。

1.2.2 主要的幾種ISA

      目前並沒有一種統一的ISA為各個處理器廠商所接受,而是存在多種ISA,就像這個世界存在多種語言一樣,但是主要的語言只有幾種:漢語、英語、法語、俄語等。主要的ISA也只有幾種:x86、ARM、SPARC、POWER、MIPS,除了x86是CISC ISA外,其餘都是RISC ISA。

      1、x86

      x86架構於1978年推出的Intel 8086處理器中首度出現,三年後,Intel 8086為IBM PC所選用,之後x86便成為了個人電腦的標準平台,成為了曆史上最成功的指令集架構。目前絕大多數個人電腦使用的都是相容x86指令集架構的處理器。

      2、ARM

      1985年,英國的Acorn公司設計了自己的第一代32位、6MHz處理器,命名為Acorn RISC Machine,簡稱為ARM1。1990年,由蘋果公司、VLSI公司共同出資,改組Acorn為ARM電腦公司,同時不再涉足具體晶片生產,只出售IP核。ARM公司設計低功耗、高效能的CPU核心,然後授權給其他公司,後者設計生產具體的處理器晶片。ARM側重於低功耗、低成本,主要面向的是嵌入式應用,隨著智能手機、平板等行動裝置的普及,ARM發展的非常迅速。

      ARM架構從v4、v4T、v5、v5E、v6,發展到v7,其中v7又分為v7-A、v7-R、v7-M等多種,蘋果公司的A9處理器採用的就是ARM v7-A架構。

      3、SPARC

      SPARC(Scalable Processor ARChitecture,可擴充處理器架構)源自伯克利分校上世紀80年代的研究,由Sun公司在1985年首先提出。1989年成為商用架構,生產出SPARC系列的處理器,Sun將其用在高效能工作站和伺服器上。SPARC架構目前的版本有v8、v9。

      SPARC架構對外完全開放,在此基礎上出現了一些開放原始碼的處理器,比如:Sun公司的UltraSPARC T1、LEON等。其中,LEON是一種SPARC v8架構的處理器,至今發行到了LEON4。最初的LEON1與LEON2由歐洲航天局發布,LEON3由Gaisler Research公司設計發布,2008年Aeroflex收購了Gaisler Research公司,並於2010年1月發布了LEON4,不過LEON4至今還沒有公布原始碼。LEON系列使用VHDL編寫代碼,原計劃是使用在航天器上。

      4、POWER

      POWER(Performance Optimization With Enhanced RISC)是由IBM公司設計開發的一種RISC結構的指令集架構。IBM生產的很多伺服器、大型主機、小型機及工作站都採用POWER架構的微處理器作為其主CPU使用。

      1991年成立了AIM聯盟(AIM為Apple、IBM、Motorola的首字母),對POWER架構進行了修改,形成了PowerPC架構。2004年IBM發起了Power.org聯盟,發布了統一的指令集架構,將POWER與PowerPC統一到新的Power架構中。

      5、MIPS

      MIPS的含義是無內鎖流水線微處理器(Microprocessor without Interlocked Piped Stages),是上世紀80年代誕生的RISC CPU的重要代表,其設計者John Hennessy時任斯坦福大學的教授。當初的設計基於以下理念:使用相對簡單的指令,結合優秀的編譯器以及採用流水線執行指令的硬體,就可以用更少的晶元面積生產更快的處理器。這一理念是如此的成功,以至於1984年就成立了MIPS電腦系統公司對MIPS架構進行商業化。在隨後的十幾年中,MIPS架構在很多方面得到發展,在工作站和伺服器系統中得到了很多應用。MIPS架構也從MIPS I、MIPS II、MIPS III、MIPS IV、MIPS V、MIPS32發展到MIPS64。John Hennessy與RISC概念的提出者David Pattern合著了電腦領域影響甚廣的教科書《電腦體繫結構——量化研究方法》,該書至今已出到第五版。

      國內的龍芯處理器採用的就是MIPS架構。本書計劃實現的處理器也採用MIPS架構,這裡涉及到兩個問題。

      (1)為什麼要採用一個現有的指令集架構?

      這是因為現有的指令集架構已經形成了一套完善的環境,其中既有成熟的編譯器,還有大量的應用程式,採用現有的指令集架構,都可以直接使用這些環境。反之,如果設計自己專屬的一套指令集架構,那麼編譯器、應用軟體都需要自己重新開發,工作量巨大。還是以語言作比喻,一個人當然可以發明、使用自己專屬的語言,但是如何與別人交流呢?無法與人交流,再優秀的語言也註定會消失。

      (2)為什麼要採用MIPS架構?

      首先MIPS的設計是RISC架構中的經典之作,很多處理器都吸收了其中的設計思想,其次,MIPS架構中指令的專利期已過,可以自由使用。

      本章接下來將重點介紹MIPS指令集架構。

 

明天繼續!

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.