自己动手写第一阶段的处理器(1)——计算机的简单模型、架构、指令系统
我們會繼續上傳新書《自己動手寫處理器》(未公布),今天是第二,我每星期試試4
?
第1章 處理器與MIPS
????????????????????????????????????????? 時間開始了。
?????????????????????????????????????????????? ???????? ??——胡風 · 1949
????? 讓我們以一句詩意的話,開始本書的閱讀。
????? 時間從1971年11月15日開始,那一天,Intel公布了世界上第一款單芯片微處理器4004。
1.1 計算機的簡單模型
????? 計算機非常復雜。能夠聽歌、看電影、上網、玩游戲,內部是怎么工作的,這個問題太可怕了,太復雜了。
????? 計算機非常easy。僅僅有加、減、乘、除、邏輯、移位、轉移、存儲、載入等幾類能夠做的操作,太簡單了。
????? 復雜?簡單?事實上取決于個人對事物的認識程度。認識的越多,了解的越深刻,那么就越接近本質。而本質往往都是簡單的。比方大名鼎鼎的質能方程,一個簡單的式子就解釋了質量與能量的關系。
????? 計算機就是一臺計算的設備,并且是一臺非常基礎的計算設備。僅僅能計算小學數學課堂上講授的四則運算,再加上一些并不復雜的與、或、非等邏輯運算,其余諸如平方、開方、微分、積分等等都是做不了的。有讀者會有疑惑,你說的太簡單的了吧,別急,且聽我慢慢道來。
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編碼進行程序設計。可是那樣顯然太不方便、easy出錯,于是人們使用一些助記符來表示各種指令,這就是匯編指令,使用匯編程序將匯編指令翻譯為計算機能夠識別的0、1編碼,后來,又發明了高級語言,其語法、使用方式比匯編更加方便、更加易于理解。一般使用編譯程序將高級語言編寫的程序翻譯為匯編指令。然后再使用匯編程序將其翻譯為0、1編碼。
本質上是一樣的。如圖1-2所看到的。
????? 這就是計算機的簡單使用模型。不管是視頻軟件、瀏覽器。還是其他不論什么軟件。不管是使用C#開發、Java開發,還是使用不論什么其他語言開發;不管是在Windows環境下執行、Android環境下執行。還是在其他不論什么平臺下執行。不管是在ARM處理上執行、Intel處理器上執行,還是在其他不論什么處理器上執行;不管是在銀河二號這種大型機執行、個人使用的PC機上執行,還是在其他不論什么機器上執行,都遵循這種一套使用模型。
????? 總結一下。計算機僅僅識別0、1編碼串,不論什么程序終于都要轉變為0、1編碼串。并且0、1編碼的種類是有限的。計算機依照0、1編碼的命令進行工作。這樣一說。讀者應該認為計算機非常easy了吧。
????? 在計算機中處于核心地位的是處理器,也稱為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將其用在高性能工作站和server上。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生產的非常多server、大型機、小型機及工作站都採用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架構在非常多方面得到發展,在工作站和server系統中得到了非常多應用。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指令集架構。
?
明天繼續。
?
?
?
版權聲明:本文博客原創文章,博客,未經同意,不得轉載。
總結
以上是生活随笔為你收集整理的自己动手写第一阶段的处理器(1)——计算机的简单模型、架构、指令系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给一个金额字符串插入逗号分隔 保留两位有
- 下一篇: 恢复SQL Server被误删除的数据(