1. 程式人生 > >微控制器、CPU、指令集和作業系統的關係

微控制器、CPU、指令集和作業系統的關係

鄭重宣告:轉載自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當然也就不願意移植了)

相關推薦

微控制器CPU指令作業系統關係

鄭重宣告:轉載自http://blog.csdn.net/zhongjin616/article/details/18765301 1> 首先討論各種微控制器與作業系統的關係 說到微控制器,大家第一時間想到的應該是51微控制器,對吧。不錯,更高階一點的AVR,把他稱為微控制器,我們也還覺得可以接受。那

C/C++獲取作業系統CPU記憶體資訊硬碟IPMAC(windowslinux)

有時候需要在工程裡面獲取一些系統或者硬體的資訊,比如系統版本,cpu,記憶體,顯示卡,硬碟,網路等,作為後續軟體功能判斷的依據,甚至參與效能演算法自適應建模 Windows 作業系統和記憶體資訊在windows下通過系統的API來獲取,CPU資訊則需要需要通過底層CPUI

ARM指令Thumb指令Thumb-2指令

32bit image 存儲 wid mage 頻率 arm 16bit 承載 MCU使用什麽指令集主要由內核決定的,比如Cortex-M3使用的是Thumb-2指令集 ARM指令集: 編代碼全部是 32bits 的,每條指令能承載更多的信息,因此使用最少的指令完

批量ssh登入,獲取作業系統CPU記憶體硬碟資訊<shell>

說明:該指令碼讀取machine.txt檔案中的機器名,然後批量ssh登入,獲取每臺機器的作業系統,CPU,記憶體,硬碟等資訊。 使用方法:將檔案儲存為sh,chmod +x filename 為該sh檔案賦予執行許可權。 for line in `cat machine.txt` do

計算機視覺(影象分類檢測分割)資料比賽

1 ImageNet資料集和ILSVRC Imagenet資料集是目前深度學習影象領域應用得非常多的一個數據集,關於影象分類、定位、檢測等研究工作大多基於此資料集展開。Imagenet資料集有1400多萬幅圖片,涵蓋2萬多個類別;其中有超過百萬的圖片有明確的類

關於指令cpu

轉載自:http://blog.csdn.net/yu132563/article/details/55251534 無論處於上層的軟體多麼的高階, 想要在CPU執行, 就必須被翻譯成"機器碼", 翻譯這個工作由編譯器來執行. 編譯器在這個過程中, 要經過"編譯", "彙編

linux服務器性能(網卡流量CPU內存磁盤使用率)監控

平均值 行數據 blog sar 處理 行為 amp 利用 %d   廣義的網站的監控涵蓋所有的非業務行為的數據采集與管理,包括數據分析師和產品設計師使用的網站用戶行為日誌、業務運行數據,以及供運維工程師和開發工程師使用的性能統計數據等。 本文主要是通過shell

Linux系統內查看內核CPU內存等的命令總結

系統情況查詢 命令總結 以查看CentOS系統信息為例  一:查看CPUless /proc/cpuinfo | grep "model name"(less可以回翻,space翻頁,enter下一行;more不可以回翻,space翻頁,enter下一行)   grep "model name" /p

工作筆記 ---- Android客戶端獲取PSSCPU啟動時間流量電量的Python代碼

int ESS 電量 nbsp tro activit gin 計算 IT p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px "Helvetica Neue" } 把工

linux查看進程cpu內存

任務計劃 一次 AD sed ini lin 就是 分享 計劃 一、實時查看 電腦耗的一般是內存 用top命令查看,CPU、內存、使用率,實時數據;用 q 健退出或者 Ctrl +C退出 top 結果 解讀 top - 01:47:27 up 6:00, 2 users,

Linux伺服器記憶體CPU檔案系統磁碟IO效能以及網路連通性shell巡檢

shell自動巡檢伺服器基礎配置          每個專案都要部署在伺服器上,那麼伺服器的安全效能和一些基本情況是我們需要了解的,比如伺服器CPU、記憶體、檔案系統、磁碟IO、還有一些網路連通性

python通過內建模組監控磁碟記憶體CPU負載

01. 概述 閒來無事幹,說幹就幹。主要是通過python函式以及python內建模組來實現對磁碟、記憶體、CPU、負載的資料採集,然後傳送到企業號,併到達微信端,方便檢視資訊。 指令碼存放於gitlab上:python監控原文地址:https://www.mairoot.com/?p=1708 02.

python通過內置模塊監控磁盤內存CPU負載

lock odi 事件 right none ems 獲取磁盤信息 outside use 01. 概述 閑來無事幹,說幹就幹。主要是通過python函數以及python內置模塊來實現對磁盤、內存、CPU、負載的數據采集,然後發送到企業號,並到達微信端,方便查看信息。 腳本

Oracle 補丁那些事兒(PSPSUCPUSPUBPDBBP…)

play 找問題 bugs 11.2.0.3 inux 授權 uri memory jdb 當前ORACLE數據庫提供兩種方式的補丁一種是主動的Proactive Patches和另一種被動的Reactive Patches,其中Reactive Patches是指過去的O

ida Pro ARM指令Thumb指令的切換

在動態除錯android的ndk程式的時候,發現很多程式都會反彙編錯誤,原來是ARM反彙編的模式沒搞對。因為在動態除錯的時候,ida Pro並沒有去解析elf模組中的一些資訊,造成了模組資訊丟失,有時候反彙編就會錯誤。   類似下面這樣: B6FC7DD0明顯反彙編錯了,

檢視Linux伺服器記憶體CPU顯示卡使用情況

檢視記憶體使用情況 使用命令:free -m 大致結果類似下圖: 記憶體佔用情況 引數解釋: Mem行(單位均為M): * total:記憶體總數 * used:已使用記憶體數 * free:空閒記憶體數 * shared:當前廢棄不用 * buffers:快取記憶體

計算機概論:02---電腦主機板架構CPU記憶體顯示卡硬碟與儲存裝置擴充套件卡與介面主機板主機電源簡介

一、電腦主機板架構 1.概念:主機板是連線各元件的重要部分。主機板上連線各部分元件的晶片組,其設計優劣,會影響電腦的效能 2.晶片組 ①早期晶片組:早期的晶片組通常分為兩個網橋來控制各元件的通訊 北橋:負責連線速度較快的CPU、記憶體與顯示卡等元件 南橋:負責連線速度

命令檢視Linux伺服器記憶體CPU顯示卡使用情況

檢視記憶體使用情況 使用命令:free -m 大致結果類似下圖: 引數解釋: Mem行(單位均為M): * total:記憶體總數 * used:已使用記憶體數 * free:空閒記憶體數 * shared:當前廢棄不用 * buf

精簡指令複雜指令的區別

RISC(精簡指令集計算機)和CISC(複雜指令集計算機)是當前CPU的兩種架構。它們的區別在於不同的CPU設計理念和方法。 CPU架構是廠商給屬於同一系列的CPU產品定的一個規範,主要目的是為了區分不同型別CPU的重要標示 早期的CPU全部是CISC架構,它的設計目的是

Linux入門:常用命令:檢視硬碟分割槽CPU記憶體資訊

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   學習是一