單片機、CPU、指令集和操作系統的關係

来源:https://www.cnblogs.com/wy9264/archive/2019/03/11/10513525.html
-Advertisement-
Play Games

鄭重聲明:轉載自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在軟體和硬體上都不相容。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 假設Node和npm已經安裝 npm install -g @servicestack/cli 執行命令dotnet-new selfhost SSHost 這樣就創建了ServiceStack的控制台程式,用VS2017解決方案,添加如下代碼 項目SSHost里添加配置文件appsettings. ...
  • 上一篇咱們提到了在macOS下選進行開發。咱們已經把工具準備完成了。現在咱們做一個簡單的DEMO創建WEB程式之前咱們已經創建過WEB程式,並且成功的運行過數據現在咱們創建一個頁面,並顯示出來。在咱們的系統中,最常見的應該是Grid列表。下麵咱們創建一個列表界面Grid列表首先創建一個Model一... ...
  • 我基本上從0開始學習編程,運算符基本上跳過,因為知道了 “=”這個符號相當於賦值,然後“==”才是等於,其他和普通運算符號差不都,也就跳過了。 最基礎的賦值那種,我看了下代碼,似乎沒什麼難度,估計新手和我一樣,有一本書,大概看看就懂了,我從我遇到的問題開始。 我學習時候,發現C#接收用戶輸入的都是字 ...
  • 創建一個 swarm 服務: docker swarm init --listen-addr ip:port (default ) 查看加入 swarm 服務的命令: docker swarm join-token [worker|manager] 查看 swarm 節點命令:只能在manager上 ...
  • 0x00 背景最近公司的舊群暉伺服器Raid6,因為同時壞了兩塊硬碟存儲池損毀,所以領導決定買了Dell R730自己搭NAS,選來選去最後選了FreeNAS,這裡記錄一些踩過的坑。0x01 問題:“No Systemdisk”用UltraISO和FreeNas官網下的iso鏡像製作啟動盤後,出現“... ...
  • 轉載:https://www.cnblogs.com/little-white/p/3236548.html 一、大端模式和小端模式的起源 關於大端小端名詞的由來,有一個有趣的故事,來自於Jonathan Swift的《格利佛游記》:Lilliput和Blefuscu這兩個強國在過去的36個月中一直 ...
  • 1)介面區別:NOR FLASH地址線和數據線分開,來了地址和控制信號,數據就出來。NAND Flash地址線和數據線在一起,需要用程式來控制,才能出數據。通俗的說,就是光給地址不行,要先命令,再給地址,才能讀到NAND的數據。而且都是在一個匯流排完成的。結論是:ARM無法從NAND直接啟動。除非裝載 ...
  • 微處理器的兩種結構比較 馮·諾依曼結構 VS 哈佛結構 1、馮·諾依曼結構 馮·諾依曼結構又稱作普林斯頓體繫結構(Princetionarchitecture)。 1945年,馮·諾依曼首先提出了“存儲程式”的概念和二進位原理,後來,人們把利用這種概念和原理設計的電子電腦系統統稱為“馮·諾依曼型結 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...