自己动手写第一阶段的处理器(1)——计算机的简单模型、架构、指令系统
我們會(huì)繼續(xù)上傳新書《自己動(dòng)手寫處理器》(未公布),今天是第二,我每星期試試4
?
第1章 處理器與MIPS
????????????????????????????????????????? 時(shí)間開始了。
?????????????????????????????????????????????? ???????? ??——胡風(fēng) · 1949
????? 讓我們以一句詩意的話,開始本書的閱讀。
????? 時(shí)間從1971年11月15日開始,那一天,Intel公布了世界上第一款單芯片微處理器4004。
1.1 計(jì)算機(jī)的簡單模型
????? 計(jì)算機(jī)非常復(fù)雜。能夠聽歌、看電影、上網(wǎng)、玩游戲,內(nèi)部是怎么工作的,這個(gè)問題太可怕了,太復(fù)雜了。
????? 計(jì)算機(jī)非常easy。僅僅有加、減、乘、除、邏輯、移位、轉(zhuǎn)移、存儲(chǔ)、載入等幾類能夠做的操作,太簡單了。
????? 復(fù)雜?簡單?事實(shí)上取決于個(gè)人對(duì)事物的認(rèn)識(shí)程度。認(rèn)識(shí)的越多,了解的越深刻,那么就越接近本質(zhì)。而本質(zhì)往往都是簡單的。比方大名鼎鼎的質(zhì)能方程,一個(gè)簡單的式子就解釋了質(zhì)量與能量的關(guān)系。
????? 計(jì)算機(jī)就是一臺(tái)計(jì)算的設(shè)備,并且是一臺(tái)非常基礎(chǔ)的計(jì)算設(shè)備。僅僅能計(jì)算小學(xué)數(shù)學(xué)課堂上講授的四則運(yùn)算,再加上一些并不復(fù)雜的與、或、非等邏輯運(yùn)算,其余諸如平方、開方、微分、積分等等都是做不了的。有讀者會(huì)有疑惑,你說的太簡單的了吧,別急,且聽我慢慢道來。
1.1.1 計(jì)算機(jī)的簡單組成模型
????? 計(jì)算機(jī)的組成有三大部分:處理器(CPU:Central Processing Unit)、輸入輸出(I/O:Input/Output)、存儲(chǔ)器(Memory)。處理器從存儲(chǔ)器中獲取指令,然后依照指令運(yùn)行一定的操作。輸入輸出用來提供運(yùn)算數(shù)據(jù)、顯示運(yùn)算結(jié)果。
如圖1-1所看到的。
????? 存儲(chǔ)器中存儲(chǔ)的是指令,指令就是一條運(yùn)算命令,比方:將a與b相加,結(jié)果存儲(chǔ)到c中,處理器依照命令運(yùn)行就可以。眼下的計(jì)算機(jī)是一個(gè)二進(jìn)制的世界。全部的信息都是用0、1組合來表示的,所以一條指令就是一串0、1編碼,正如圖1-1中所看到的。
處理器內(nèi)部具有譯碼功能,用來解釋接收到的0、1編碼表示的運(yùn)算類型,據(jù)此進(jìn)行運(yùn)算。
1.1.2 計(jì)算機(jī)的簡單使用模型
????? 我們使用計(jì)算機(jī)上網(wǎng)、辦公。都是通過一定的應(yīng)用程序?qū)崿F(xiàn)的。而這些應(yīng)用程序?qū)嶋H就是一批指令的集合,當(dāng)然,這里的“一批”指的是指令的數(shù)目龐大。實(shí)際上種類是很少的。僅僅有幾百條,經(jīng)常使用的也就幾十條。通過這些指令的組織、配合,就實(shí)現(xiàn)了眼下豐富多彩的應(yīng)用。
???? 理論上,能夠直接使用0、1編碼進(jìn)行程序設(shè)計(jì)。可是那樣顯然太不方便、easy出錯(cuò),于是人們使用一些助記符來表示各種指令,這就是匯編指令,使用匯編程序?qū)R編指令翻譯為計(jì)算機(jī)能夠識(shí)別的0、1編碼,后來,又發(fā)明了高級(jí)語言,其語法、使用方式比匯編更加方便、更加易于理解。一般使用編譯程序?qū)⒏呒?jí)語言編寫的程序翻譯為匯編指令。然后再使用匯編程序?qū)⑵浞g為0、1編碼。
本質(zhì)上是一樣的。如圖1-2所看到的。
????? 這就是計(jì)算機(jī)的簡單使用模型。不管是視頻軟件、瀏覽器。還是其他不論什么軟件。不管是使用C#開發(fā)、Java開發(fā),還是使用不論什么其他語言開發(fā);不管是在Windows環(huán)境下執(zhí)行、Android環(huán)境下執(zhí)行。還是在其他不論什么平臺(tái)下執(zhí)行。不管是在ARM處理上執(zhí)行、Intel處理器上執(zhí)行,還是在其他不論什么處理器上執(zhí)行;不管是在銀河二號(hào)這種大型機(jī)執(zhí)行、個(gè)人使用的PC機(jī)上執(zhí)行,還是在其他不論什么機(jī)器上執(zhí)行,都遵循這種一套使用模型。
????? 總結(jié)一下。計(jì)算機(jī)僅僅識(shí)別0、1編碼串,不論什么程序終于都要轉(zhuǎn)變?yōu)?、1編碼串。并且0、1編碼的種類是有限的。計(jì)算機(jī)依照0、1編碼的命令進(jìn)行工作。這樣一說。讀者應(yīng)該認(rèn)為計(jì)算機(jī)非常easy了吧。
????? 在計(jì)算機(jī)中處于核心地位的是處理器,也稱為CPU,作用是識(shí)別0、1編碼,據(jù)此進(jìn)行各種運(yùn)算和數(shù)據(jù)處理。
本書的目標(biāo)就是實(shí)現(xiàn)一個(gè)CPU。
1.2 架構(gòu)與指令集
????? 類似于不同國家的人使用不同的文字,不同的處理器也使用不同的指令,這樣,為處理器A編寫的程序不能直接在處理器B上使用。須要又一次編寫。然后再次編譯、匯編后才可使用。減低了軟件的移植性。顯然,極為不便。
????? IBM為了讓自己的一系列計(jì)算機(jī)能使用同樣的軟件。免去反復(fù)編寫軟件的痛苦,在它的System/360計(jì)算機(jī)中引入了指令集架構(gòu)(ISA:Instruction Set Architecture)的概念,將編程所須要了解的硬件信息從硬件系統(tǒng)中抽象出來。這樣軟件人員就能夠面向ISA進(jìn)行編程。開發(fā)出來的軟件不經(jīng)過改動(dòng)就能夠應(yīng)用在符合該ISA的全部計(jì)算機(jī)上。ISA用來描寫敘述編程時(shí)用到的抽象機(jī)器,而非這樣的機(jī)器的詳細(xì)實(shí)現(xiàn),從軟件人員的角度來看,ISA包含一套指令集和一些寄存器,知道它們就能夠編敲代碼了。
????? 與ISA相應(yīng)的一個(gè)概念是微架構(gòu)(Microarchitecture)。后者是前者的一個(gè)實(shí)現(xiàn)。比方Intel的很多處理器都是遵循x86的ISA。可是每一款處理器都有自己的微架構(gòu)。ISA好比是設(shè)計(jì)規(guī)范,微架構(gòu)則是詳細(xì)實(shí)現(xiàn),相同的ISA,不同的微架構(gòu),會(huì)帶來不同的性能。
1.2.1 CISC與RISC
????? 從大的方面。依據(jù)ISA的不同能夠?qū)⒂?jì)算機(jī)分為兩類:復(fù)雜指令集計(jì)算機(jī)(CISC:Complex Instruction Set Computer)、精簡指令集計(jì)算機(jī)(RISC:Reduced Instruction Set Computer)。主要差別是。CISC的每條指令相應(yīng)的0、1編碼串長度不一。而RISC的每條指令相應(yīng)的0、1編碼串長度是固定的。
????? 在計(jì)算機(jī)發(fā)展的早期。人們使用匯編語言編程。偏好強(qiáng)大好用的指令集,處理器的設(shè)計(jì)人員于是將指令集設(shè)計(jì)得更強(qiáng)大、更靈活,而且那個(gè)時(shí)期的存儲(chǔ)器既昂貴且速度慢。因此指令使用了變長編碼,以節(jié)約存儲(chǔ)空間。因?yàn)橐粭l指令就能完畢非常多功能,從而降低了對(duì)內(nèi)存的訪問次數(shù)。這樣也降低了緩慢的存儲(chǔ)器訪問對(duì)程序性能的影響。典型的CISC指令集架構(gòu)就是Intel的x86 ISA。上世紀(jì)70年代中期,人們發(fā)現(xiàn)CISC 指令集中的各種指令,其使用頻率相差懸殊,大約有20%的指令會(huì)被重復(fù)使用,占整個(gè)程序代碼的80%。而余下80%的指令卻不經(jīng)常使用。僅僅占整個(gè)程序代碼的20%。顯然。這樣的結(jié)構(gòu)是不太合理的。于是人們提出將指令集和處理器進(jìn)行又一次設(shè)計(jì),降低那些使用不多的指令,僅僅保留經(jīng)常使用的簡單指令,這樣處理器就不須要浪費(fèi)太多的晶體管去做那些非常復(fù)雜又非常少使用的功能。于是產(chǎn)生了RISC。1979 年美國加州大學(xué)伯克利分校的David Pattern首先提出了RISC的概念。RISC 并不僅僅是簡單地降低指令,更基本的目的是研究怎樣使計(jì)算機(jī)的結(jié)構(gòu)更加簡單合理以提高運(yùn)算速度。其特點(diǎn)是指令長度固定、指令格式種類少、尋址方式種類少、大量使用寄存器等。
因?yàn)樵赗ISC中使用的指令大多數(shù)是簡單指令且都能在一個(gè)時(shí)鐘周期內(nèi)完畢,因而處理器的頻率得以大幅提升,同一時(shí)候易于設(shè)計(jì)流水線。RISC是計(jì)算機(jī)歷史上的一個(gè)里程碑。以致有人開玩笑的把RISC定義為:1985年之后公布的全部處理器。
????? Intel也嘗試做RISC處理器。可是由于兼容性問題,沒有成功,后來在1995年。Intel的David B.Papworth和他的同事一起設(shè)計(jì)了Pentium Pro處理器,在這個(gè)處理器中,x86指令先被解碼為類似于RISC指令的微操作(microoperation,簡稱為uops),之后的運(yùn)行過程採用RISC內(nèi)核,這樣的方式一直延續(xù)至今。
1.2.2 基本的幾種ISA
????? 眼下并沒有一種統(tǒng)一的ISA為各個(gè)處理器廠商所接受,而是存在多種ISA。就像這個(gè)世界存在多種語言一樣。可是基本的語言僅僅有幾種:漢語、英語、法語、俄語等。
基本的ISA也僅僅有幾種:x86、ARM、SPARC、POWER、MIPS,除了x86是CISC ISA外,其余都是RISC ISA。
????? 1、x86
????? x86架構(gòu)于1978年推出的Intel 8086處理器中首度出現(xiàn),三年后,Intel 8086為IBM PC所選用,之后x86便成為了個(gè)人計(jì)算機(jī)的標(biāo)準(zhǔn)平臺(tái),成為了歷史上最成功的指令集架構(gòu)。
眼下絕大多數(shù)個(gè)人計(jì)算機(jī)使用的都是兼容x86指令集架構(gòu)的處理器。
????? 2、ARM
????? 1985年。英國的Acorn公司設(shè)計(jì)了自己的第一代32位、6MHz處理器,命名為Acorn RISC Machine,簡稱為ARM1。
1990年,由蘋果公司、VLSI公司共同出資,改組Acorn為ARM計(jì)算機(jī)公司。同一時(shí)候不再涉足詳細(xì)芯片生產(chǎn),僅僅出售IP核。ARM公司設(shè)計(jì)低功耗、高性能的CPU內(nèi)核,然后授權(quán)給其它公司,后者設(shè)計(jì)生產(chǎn)詳細(xì)的處理器芯片。ARM側(cè)重于低功耗、低成本,主要面向的是嵌入式應(yīng)用,隨著智能手機(jī)、平板等移動(dòng)設(shè)備的普及,ARM發(fā)展的很迅速。
????? ARM架構(gòu)從v4、v4T、v5、v5E、v6,發(fā)展到v7,當(dāng)中v7又分為v7-A、v7-R、v7-M等多種,蘋果公司的A9處理器採用的就是ARM v7-A架構(gòu)。
????? 3、SPARC
????? SPARC(Scalable Processor ARChitecture。可擴(kuò)展處理器架構(gòu))源自伯克利分校上世紀(jì)80年代的研究,由Sun公司在1985年首先提出。
1989年成為商用架構(gòu),生產(chǎn)出SPARC系列的處理器,Sun將其用在高性能工作站和server上。SPARC架構(gòu)眼下的版本號(hào)有v8、v9。
????? SPARC架構(gòu)對(duì)外全然開放。在此基礎(chǔ)上出現(xiàn)了一些開放源碼的處理器,比方:Sun公司的UltraSPARC T1、LEON等。
當(dāng)中,LEON是一種SPARC v8架構(gòu)的處理器,至今已公布到了LEON4。
最初的LEON1與LEON2由歐洲航天局公布,LEON3由Gaisler Research公司設(shè)計(jì)公布。2008年Aeroflex收購了Gaisler Research公司,并于2010年1月公布了LEON4,只是LEON4至今還沒有公布源碼。
LEON系列使用VHDL編寫代碼,原計(jì)劃是使用在航天器上。
????? 4、POWER
????? POWER(Performance Optimization With Enhanced RISC)是由IBM公司設(shè)計(jì)開發(fā)的一種RISC結(jié)構(gòu)的指令集架構(gòu)。IBM生產(chǎn)的非常多server、大型機(jī)、小型機(jī)及工作站都採用POWER架構(gòu)的微處理器作為其主CPU使用。
????? 1991年成立了AIM聯(lián)盟(AIM為Apple、IBM、Motorola的首字母),對(duì)POWER架構(gòu)進(jìn)行了改動(dòng)。形成了PowerPC架構(gòu)。
2004年IBM發(fā)起了Power.org聯(lián)盟。公布了統(tǒng)一的指令集架構(gòu),將POWER與PowerPC統(tǒng)一到新的Power架構(gòu)中。
????? 5、MIPS
????? MIPS的含義是無內(nèi)鎖流水線微處理器(Microprocessor without Interlocked Piped Stages),是上世紀(jì)80年代誕生的RISC CPU的重要代表,其設(shè)計(jì)者John Hennessy時(shí)任斯坦福大學(xué)的教授。當(dāng)初的設(shè)計(jì)基于下面理念:使用相對(duì)簡單的指令。結(jié)合優(yōu)秀的編譯器以及採用流水線運(yùn)行指令的硬件。就能夠用更少的晶元面積生產(chǎn)更快的處理器。這一理念是如此的成功,以至于1984年就成立了MIPS計(jì)算機(jī)系統(tǒng)公司對(duì)MIPS架構(gòu)進(jìn)行商業(yè)化。在隨后的十幾年中。MIPS架構(gòu)在非常多方面得到發(fā)展,在工作站和server系統(tǒng)中得到了非常多應(yīng)用。MIPS架構(gòu)也從MIPS I、MIPS II、MIPS III、MIPS IV、MIPS V、MIPS32發(fā)展到MIPS64。John Hennessy與RISC概念的提出者David Pattern合著了計(jì)算機(jī)領(lǐng)域影響甚廣的教科書《計(jì)算機(jī)體系結(jié)構(gòu)——量化研究方法》,該書至今已出到第五版。
????? 國內(nèi)的龍芯處理器採用的就是MIPS架構(gòu)。本書計(jì)劃實(shí)現(xiàn)的處理器也採用MIPS架構(gòu)。這里涉及到兩個(gè)問題。
????? (1)為什么要採用一個(gè)現(xiàn)有的指令集架構(gòu)?
????? 這是由于現(xiàn)有的指令集架構(gòu)已經(jīng)形成了一套完好的環(huán)境,當(dāng)中既有成熟的編譯器,還有大量的應(yīng)用程序,採用現(xiàn)有的指令集架構(gòu),都能夠直接使用這些環(huán)境。反之,假設(shè)設(shè)計(jì)自己獨(dú)有的一套指令集架構(gòu),那么編譯器、應(yīng)用軟件都須要自己又一次開發(fā),工作量巨大。還是以語言作比喻,一個(gè)人當(dāng)然能夠發(fā)明、使用自己獨(dú)有的語言,可是怎樣與別人交流呢?無法與人交流,再優(yōu)秀的語言也注定會(huì)消失。
????? (2)為什么要採用MIPS架構(gòu)?
????? 首先MIPS的設(shè)計(jì)是RISC架構(gòu)中的經(jīng)典之作,非常多處理器都吸收了當(dāng)中的設(shè)計(jì)思想,其次,MIPS架構(gòu)中指令的專利期已過,能夠自由使用。
????? 本章接下來將重點(diǎn)介紹MIPS指令集架構(gòu)。
?
明天繼續(xù)。
?
?
?
版權(quán)聲明:本文博客原創(chuàng)文章,博客,未經(jīng)同意,不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的自己动手写第一阶段的处理器(1)——计算机的简单模型、架构、指令系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给一个金额字符串插入逗号分隔 保留两位有
- 下一篇: 恢复SQL Server被误删除的数据(