鄭重聲明:轉載自http://blog.csdn.net/zhongjin616/article/details/18765301 1> 首先討論各種單片機與操作系統的關係 說到單片機,大家第一時間想到的應該是51單片機,對吧。不錯,更高級一點的AVR,把他稱為單片機,我們也還覺得可以接受。那麼再高 ...
鄭重聲明:轉載自http://blog.csdn.net/zhongjin616/article/details/18765301
1> 首先討論各種單片機與操作系統的關係
說到單片機,大家第一時間想到的應該是51單片機,對吧。不錯,更高級一點的AVR,把他稱為單片機,我們也還覺得可以接受。那麼再高級一點的ARM7,8086,80386,Core i3,Athlon 等等我們更習慣稱他們為CPU,因為學習電腦原理的時候都是這麼叫的,但按照單片機的定義,他們也是歸屬於單片機。這也不怪大家,中國的教育都是這樣,只註重告訴你是什麼,而不告訴你他們之間的聯繫。上述幾種單片機或者晶元(如果你還是覺得把core i3叫做單片機你不習慣的話)在原理上都是一樣,即都是有運算器 控制器 寄存器構成的,不同之處在於它們的硬體電路實現不同,個數不同,功耗不同,計算能力不同,但都提供相同的基本功。OK,終於讓cpu找到了組織,那麼就介紹為什麼有的單片機要操作系統,有的在我們學習的過程中壓根就跟操作系統不挨邊。
51/AVR單片機 在學習他們的時候,都是先介紹它們有哪些資源——有幾個寄存器,有幾個時鐘等,然後就是怎麼用彙編,用C或者是C與彙編混合編程。這裡我們用的語言都是可以直接操作硬體資源的,因此我們可以自己決定什麼時候使用哪個寄存器,什麼時候將寄存器內容寫到輔存儲器中。
ARM單片機 在學習它的時候,我們可以給他搭載操作系統,如MicroC/OS,iOS X, Android或者其他定製的linux操作系統,但有時我們也經常不讓它搭載操作系統,而是直接像使用51單片機那樣來操作它。
Core i3 / Athlon單片機(或者CPU,如果你還是不喜歡用單片機來形容這麼牛逼的硬體) 你幾乎沒有聽說過身邊誰會在這種單片機上開發應用(如果有,一定要引薦我認識一下哦)。因為在這種單片機上開發的應用有一個很牛逼的名字——操作系統! 由於這種單片機提供的資源太多,能幹的活太多,我們需要有一個專門的程式來負責管理它,從而避免對相同的功能重覆開發。這樣我們就可以從對硬體編程中解放出來,更專註於應用層面的開發。從某種意義上來說,操作系統也就是一個應用程式而已,只不過他有點特別。
一般這種情況下,打個比方會比較好——單車和汽車。單車很簡單,我們對它的構成及零部件也很熟悉,鏈條掉了,我們也完全能夠應付。這就好比51單片機,資源不多,我們完全能夠hold住。相較而言,汽車則複雜很多,有減速系統,剎車系統,電子系統,空調系統等等,但是我們並不需要清楚他們的硬體工作原理,我們之需要知道按那個開關,踩那個踏板就好了。這就好比單片機上的操作系統,它不需要我們清楚硬體的構造,想要實現功能,直接調用系統提供的API就可以了。 在我們雙腳不停的蹬著踏板,自行車就前進這個動作中,我們是清楚的知道這其中各個部件的運行原理過程的;但如果你是踏著油門,汽車就跑起來,我覺得大部分人都不瞭解其中涉及到了哪些部件,以及各個部件的原理的。但這不妨礙我們使用,不是嗎。
2> cpu與指令集的關係
cpu依靠指令來計算和控制系統,每款CPU在設計時就規定了一些列與其硬體電路相配合的指令系統,或者說某款cpu的硬體設計其實就是針對某個指令集的一種硬體實現。指令集也就是所謂的目標代碼(或稱為機器代碼,是可以直接在CPU上運行的代碼)可以看作是要求cpu對外提供的功能,某款CPU的設計肯定是朝著某個指令集來的。所以,不同的cpu架構,也表示這他的指令集要麼較之前的指令集有所拓展或者就是實現了一種全新的指令集。指令集中的一條指令,就是讓cpu完成一系列的動作,而該動作的完成則表明瞭某種運算的完成。一個功能可能需要一條或幾條指令來實現。比如彙編的MOV或者LD語句就可能對應著幾條cpu指令。
下麵介紹幾種常見的CPU架構與指令集的對應關係(所謂架構是指硬體電路的實現):
intel X86架構CPU可能實現了多個指令集x86,x86-64,MMX,SSE,SSE2,SSE3,SSSE3 ,而這些指令集中的指令讓cpu完成的動作都比較複雜,所以也稱為CISC
AMD amd64架構的cpu 相容了x86指令集還拓增了3D-Now!指令集,用於加強對3D顯示的支持。
ARM ARMv1~ARMv7架構的cpu實現了Thumb指令集和ARM指令集。這些指令集中的一條指令讓cpu完成的動作都比較簡單,所以也稱為RISC指令集
3> 指令集與操作系統的關係
這裡要重新提及一下之前講到的兩個概念:指令集——就是機器代碼;操作系統——就是應用程式
首先我們要知道電腦之父馮-諾伊曼說電腦只能運行在二進位上。所以不論是操作系統還是普通的應用程式最終都得轉化到二進位代碼才能夠被cpu所處理。而用高級語言編寫的普通應用程式都必須經過編譯器編譯後成為二進位代碼(指令)才能運行。而不同的cpu所實現的指令集不同,所以不同的指令集對應的編譯器也不盡相同,編譯器不同,相同的高級語言程式經過編譯後所得到的二進位代碼也不同。這就引出了“移植”和“跨平臺”兩個概念。OK,重新捋一下:cpu架構-指令集-編譯器-程式 環環相扣,緊密聯繫。所以你就會聽到說Windows操作系統只能夠運行在X86架構的CPU上,不能運行在Power 或 ARM 上,因為指令集不同,又所以就有了“Wintel”聯盟。所以你也可以看到有的編譯器是有硬體廠家提供的,比如Intel就提供C和C++的編譯器,這樣編譯出來的程式就能更好的利用硬體的性能。那為什麼又會聽到linux可以運行在不同架構的CPU上呢?那是因為linux是開源的,因此就可以將它移植到不同的CPU平臺上,然後在用相應的編譯器編譯,就得到了可以在該CPU上運行的二進位代碼了。而Windows是封閉的,得不到源代碼,而MS自己又沒有移植到別的CPU平臺上的打算,所以當然就只能在X86上運行了。(BTW,X86也是性能最好的CPU之一,而Windows對性能要求較高,所以MS當然也就不願意移植了)
4>CPU的指令分兩類
CISC是英文“Complex Instruction Set Computer”的縮寫,中文意思是“複雜指令集”,它是指英特爾生產的x86(intel CPU的一種命名規範)系列CPU及其相容CPU(其他廠商如AMD,VIA等生產的CPU),它基於PC機(個人電腦)體繫結構。這種CPU一般都是32位的結構,所以我們也把它成為IA-32 CPU。(IA: Intel Architecture,Intel架構)。CISC型CPU目前主要有intel的伺服器CPU和AMD的伺服器CPU兩類。
RISC是英文“Reduced Instruction Set Computing ” 的縮寫,中文意思是“精簡指令集”。它是在CISC(Complex Instruction Set Computer)指令系統基礎上發展起來的,有人對CISC機進行測試表明,各種指令的使用頻度相當懸殊,最常使用的是一些比較簡單的指令,它們僅占指令總數的20%,但在程式中出現的頻度卻占80%。複雜的指令系統必然增加微處理器的複雜性,使處理器的研製時間長,成本高。並且複雜指令需要複雜的操作,必然會降低電腦的速度。基於上述原因,20世紀80年代RISC型CPU誕生了,相對於CISC型CPU ,RISC型CPU不僅精簡了指令系統,還採用了一種叫做“超標量和超流水線結構”,大大增加了並行處理能力(並行處理並行處理是指一臺伺服器有多個CPU同時處理。並行處理能夠大大提升伺服器的數據處理能力。部門級、企業級的伺服器應支持CPU並行處理技術)。也就是說,架構在同等頻率下,採用RISC架構的CPU比CISC架構的CPU性能高很多,這是由CPU的技術特征決定的。目前在中高檔伺服器中普遍採用這一指令系統的CPU,特別是高檔伺服器全都採用RISC指令系統的CPU。RISC指令系統更加適合高檔伺服器的操作系統UNIX,現在Linux也屬於類似UNIX的操作系統。RISC型CPU與Intel和AMD的CPU在軟體和硬體上都不相容。