色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

cpu的程序是如何運行起來的

工程師 ? 來源:羽林君 ? 作者:羽林君 ? 2020-09-11 09:26 ? 次閱讀

作者:良知猶存

轉自:羽林君

1

CPU的硬件最小原子

計算機從上世紀四十年代發展到現在有八十多年了,我們現在開發應用以及很少會涉及到底層的部分,硬件設計的電子專業在學校里面會學習模電數電這兩門課,今天的第一部分就從這里說起。

一般我們不考慮物理的硬件底層的實現邏輯,但是為了后續的機器碼的介紹,這里開始介紹CPU的基本組成部分。

我們都知道現在的CPU是無數的晶體管組成,一塊很小的CPU用顯微鏡觀察可以看到上百萬個元器件,那么最早電腦是啥樣的呢?感謝Crash Course Computer Science的視頻,下面有很好照片都是從她的視頻中截取。以及感謝《CODE》,好多資料也是從此書得來。

最早的計算機,它有76萬5千個組件,300多萬個連接點和大約804公里長的用線,這個是真的大,而且它的核心控制還是用繼電器實現控制邏輯的。

此外,它的性能相較于于現在的電腦來說簡直微不足道。

好了言歸正傳,我們直接介紹現在計算機中的CPU組成,之前用繼電器、電子管進行控制計算,這些基本的元器件使得計算機體型龐大,后來半導體的出現,使得計算機的體積大大減小。沒有使用半導體的時候,科學家使用繼電器等進行控制電路的開關,控制電路電流的高和低,通過布爾代數組合形成我們現在經常說的邏輯門,繼而實現數據的控制。

如上圖所以它會出現如下情況

這其實就是一個簡單開關的與門(AND)電路,所有的變量輸入是1的時候,輸出才為1。相應的還有非門、或門、異或門等。

那么半導體是如何做到的呢?下面所示是三極管變化而成的與門(AND)電路,通過兩個三極管連接(三極管的工作原理可以百度一哈),實現邏輯。

這是非門(NOT),輸入1輸出位0,輸入位、為0輸出為1.

這是或門(OR),只有A、B兩個同時輸入0的時候,輸出才為0,其余都為1.

這是常用的邏輯門的圖形表示以及真值表顯示,最后一欄為真值表顯示,其中A、B為輸入,F為輸出。

基于這些邏輯的組合我們可以變成最小的11位二進制邏輯的加法器,1bit的數據鎖存器,再擴展為8位加法器,256M存儲器。

2

CPU的模塊組成過程

講完了CPU組成的最小原子結構,接下來我們抽象出來了邏輯門進行

首先我們先介紹一下CPU的基本架構

一塊完整可以執行程序CPU功能部件,里面有基本的ALU算數邏輯單元、控制單元、外部儲存器(儲存數據和程序)。

1970年發布的時候,它是第一個封裝在單個芯片內完整的ALU。

ALU(算數邏輯單元)有兩個單元:一個算數單元(加法器),負責計算機里的所有數字操作,例如加減法、增量運算等;一個邏輯單元,負責一些簡單的數值測試,例如檢測ALU輸出是否為零的的電路

加法器:

用單個晶體管一個個去拼,把這個電路做出來,到那時會很復雜很難理解。所以我們更高層面的抽象-邏輯門去實現(AND、OR、NOT、XOR)。

下面這是一個1位的加法器:

二進制數的“和”可以由異或門得到,而“進位”可以由與門得到,所以可以把異或門和與門結合起來來完成兩個二進制數 A和B的加法

AB只能輸入0或者1,也就是這個加法器能算0+0,1+0或者1+1。

脫離具體的形狀,我們可以把以上的一個加法器,抽象為一個符號用來顯示:

然后我們在進行擴展,把八個全加器連接,這樣就變成了一個8bit的加法器。每個全加器的進位輸出都是下一個全加器的進位輸入:

用一個抽象的框圖進行表示,其中輸入是A和B標識為從A0~A7及B0~B7。輸出為和輸出,標識為從 S0~S7:

這樣我們就構造了一個簡單8位的加法器。

邏輯單元:同樣AND、OR、NOT、XOR的執行,如下圖一個簡單的判斷輸出是否為0的電路

它用一堆OR門檢查其中一位是否為1,哪怕只有一個輸入的bit(位)為1,但都會被被或門到最后一個NOT(非)門進行取反,所以只有輸入的數字是0,輸出才能是為1。

告訴ALU執行加減法,下面圖片里面的的V代表ALU部分。

通過ALU的FLAGS進行判斷,下面有三個標志一個是OVERFLOW(操作超出了總線寬度,設置為true(1))、ZERO(運算結果是否為零)、NEGATIVE(運算結果第一位為1,則設置為true(1),表示為負數)

這就是ALU中的一些單元,其實也是一大堆邏輯門巧妙連到一起。

此外我們還需要存儲器(memory),如果ALU計算出來數據丟掉那么數據也沒什么用了,所以需要內存把數據保存起來,與ALU一起組成CPU

之前的介紹都是單向順序執行的電路,那有什么可以返回的電路呢,通過輸出來控制影響輸入。

進行AND 、NOT、OR組合,變成一個1位鎖存器

輸入STE為1,輸出為1

輸入RESTE為1,輸出為0

如果設置和置位都為0,電路會輸出最后放置的狀態,所以它就保存住1bit位的數據

其中這樣一個1位的鎖存器,放入的動作叫做寫,拿出數據的動作叫做讀

為了好顯示,我們使用再高一級別的抽象層,用下面的框圖表示:

隨著芯片鎖存器大小的擴展,正常連接需要的線是非常之多,所以引入了矩陣方式:

為了將地址轉化成為行和列 還要用多路復用器,這就是一個基本的SDRAM的組成結構。

SRAM DRAM FLASH NVRAM,大家功能上相似,但是用不同的電路儲存單個bit的數據,比如使用不同的邏輯門、電容器、、電荷捕獲或者憶阻器。但是根本上,這些技術都是矩陣層層嵌套,來儲存大量的信息。

3

CPU的代碼語言執行以及編程語言的變化過程

通過不同的邏輯門,我們逐漸搭建起了CPU的硬件部分,同時也抽象到了高層次的“微體系架構”,我們開始告訴CPU的模塊進行操作,CPU里面都是101二進制數據,那怎么和CPU執行指令掛上鉤呢?

最早執行機器使用就是穿孔卡片,通過穿孔卡片的特殊位置有沒有穿孔,決定機器執行的不同步驟。

在計算機早期,程序員編程必須用機器碼寫程序,一般會在會在紙上寫一個“高層次”的描述——偽代碼,例如:從內存中獲取當月銷售額,再計算出稅費。

這里展示一個簡單范例代碼,一段機器碼 00101110。

首先這個機器碼分為前四位和后四位,前四位代表操作碼,后四位代表地址。

首先在指令表可以查到 0010 對應著執行指令是LOAD_A 意思為從內存地址取出數據,放到寄存器A中。

CPU看到00101110是怎么執行的呢?

首先CPU有兩個執行時候的寄存器:

指令地址寄存器,一個追蹤器,負責追蹤程序運行到哪里了;

指令寄存器,負責儲存當前指令

其次,CPU執行指令有三個階段: 取指令-》解碼-》執行

取指令:負責把指令從RAM中復制到指令寄存器中

如下所示:CPU把0010 1110放到指令寄存器中

解碼階段:負責解析復制過來的指令對應到操作碼是哪個執行,先解析0010

LOAD_A指令的工作:把RAM里面的值放入寄存器A中

再解析后四位1110,為地址14

接下來通過控制單元進行選擇確認是否執行load指令

當然控制單元也是由邏輯門連接起來的,這個時候需要一個電路,檢查操作碼是不是LOAD_A對應的0010

執行階段:當確認了執行的操作碼,我們就開始執行

從地址1110(10進制14)讀取出0000 0011的數據,因為是LOAD_A指令,我們把該數據放進寄存器A,不操作其他寄存器

本次執行完成,然后我們就把“指令地址寄存器”+1,執行下一條命令,一直重復到代碼結束。

如果我們遇到了例如加減運算時候,就可以用到ALU了,數據寄存器把需要進行add的兩個數據輸入,然后在發送操作碼給ALU,ALU開始執行最后輸出到暫存的寄存器,關閉ALU,最后再把數據放入正確的寄存器

除了執行動作,現代CPU還有時鐘控制。很早的計算機都是用人工插拔來進行每一條指令的計算,但是對于現在的CPU執行頻率來說,人工是做不到這樣的速度,所以現在CPU里面有專門的時鐘進行管理CPU的節奏,來告訴CPU要取指令-解碼-執行。類似于練習樂器時候使用的節拍器一樣。

前面介紹程序運行時候我們是假設程序已經在內存里面了,但實際上程序儲存的位置不在內存,并且需要在執行時候加載到內存里面。只要內存足夠,不僅可以儲存要運行的程序,還可以存程序需要的數據,以及運行程序時候產生的新數據。

不過早期編程都是專家活,不管是全職還是技術控,都需要非常了解底層硬件,要懂操作碼、寄存器等才能寫程序,所以編程很麻煩,哪怕是工程師和科學家都無法完全發揮計算機的能力

所以程序員開發出了一種新語言,更高層次,更可讀性,每個操作碼分配一個簡單的名字——助記符。助記符后面緊跟數據,形成完整的指令。這樣程序員就不用0和1去寫代碼,可以用load jump等助記符開始編程,這就是匯編。前面我們講過這些助記符,應該還是比較容易理解的。但是CPU是只能識別二進制的,所以程序員又寫了二進制程序來幫忙,它可以讀懂文字指令,自動轉化成二進制指令,這個程序就叫做——匯編器。

匯編器讀取用匯編語言寫的程序,然后轉成機器碼。LOAD_A 14 是一個典型的匯編代碼。

發展到現在,就英特爾的CPU 酷睿i7有上千種指令和指令變種,長度從一個字節到15個字節。

FORTRAN,是IBM1957年發布的語言,而主持FORTRAN的項目的總監John Backus說,他只是因為懶,所以就開發了新的語言,是的大部分新程序的開發是因為更高效率的開發,把一個月的開發時間編程一周,在變成一天。

就FORTRAN使用效果來說,確實也達到了,平均FORTRAN寫的程序要比同等的匯編寫的代碼少二十倍。然后FORTRAN編譯器會把FORTRAN代碼轉為機器碼。

然后陸續新的語言不斷產生,60年代有ALGOL、LISP和BASIC等語言;70年代有Pascal、C和Smalltalk;80年代有C++、Objectivs-C和Perl;90年代有Python、Ruby和Java;2000開始出現Swift、C#、Go。未來語言還會越來越多,新的語言用新的平臺和新的技術,讓我們可以快速的開發使用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 電路
    +關注

    關注

    173

    文章

    6019

    瀏覽量

    174306
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11026

    瀏覽量

    215693
  • 程序
    +關注

    關注

    117

    文章

    3819

    瀏覽量

    82312
收藏 4人收藏

    評論

    相關推薦
    熱點推薦

    同樣的代碼在官方開發板上運行正常,在自己板子上就跑不起來,怎么辦?

    同樣的代碼在Nordic官方開發板上可以運行正常,但在自己板子上就跑不起來,如果你碰到了上述情況,建議按照如下步驟進行自檢: 首先確認用戶板元器件焊接良好,功能正常。如果你的板子有LED的話,你可以
    的頭像 發表于 05-12 15:26 ?93次閱讀
    同樣的代碼在官方開發板上<b class='flag-5'>運行</b>正常,在自己板子上就跑不<b class='flag-5'>起來</b>,怎么辦?

    零基礎入門:如何在樹莓派上編寫和運行Python程序

    在這篇文章中,我將為你簡要介紹Python程序是什么、Python程序可以用來做什么,以及如何在RaspberryPi上編寫和運行一個簡單的Python程序。什么是Python
    的頭像 發表于 03-25 09:27 ?409次閱讀
    零基礎入門:如何在樹莓派上編寫和<b class='flag-5'>運行</b>Python<b class='flag-5'>程序</b>?

    FLASHXIP程序跑不起來是怎么回事?

    1、環境是: Nuclei Studio IDE for C/C++ Developers Version: 2023-10 2、開發板是正點原子達芬奇 這是跑不起來程序,不知道是什么原因還望高手指導一下
    發表于 03-07 14:20

    用DLPA3000+DLPC3478+MSP430+SII1161(HDMI Reciever)設計了產品,如何將板子運行起來呢?

    SII1161上有個EEPROM, 里面的文件我們可以自己搞定; 2. MSP430 上帶了個SPI FLASH,這里面的程序從那里獲取呢?不燒錄是不是板子就運行起來呢? 3. 還有沒有其他地方需要設置的呢?
    發表于 02-28 06:39

    不停的malloc程序會異常嗎

    用完,程序應該會異常退出。 于是我找了個環境,把程序運行起來試下。 先用虛擬機,跑的一個 32 位的紅帽系統,程序
    的頭像 發表于 01-14 09:17 ?355次閱讀

    TMS320C55x DSP CPU程序員參考補充

    電子發燒友網站提供《TMS320C55x DSP CPU程序員參考補充.pdf》資料免費下載
    發表于 12-21 11:36 ?0次下載
    TMS320C55x DSP <b class='flag-5'>CPU</b><b class='flag-5'>程序</b>員參考補充

    Linux之CPU調度策略和CPU親和性

    決定在某一時間點上哪個進程在運行。調度器必須平衡幾個選項: 快速決定下一個該運行的進程 進程可以公平的活動 CPU 時間,但高優先級的進程會活動更多的運行時間并且可以搶占低優先級的進程
    的頭像 發表于 12-05 16:38 ?964次閱讀
    Linux之<b class='flag-5'>CPU</b>調度策略和<b class='flag-5'>CPU</b>親和性

    程序和進程的區別

    比如: 開發寫的代碼我們稱為程序,那么將開發的代碼運行起來。我們稱為進程。
    的頭像 發表于 11-25 16:03 ?952次閱讀
    <b class='flag-5'>程序</b>和進程的區別

    服務器cpu占用率高怎么解決

    長時間運行的計算任務 應用程序存在內存泄漏,導致CPU占用率上升 系統問題 操作系統配置不當,導致CPU占用率高 系統存在病毒或者惡意軟件,占用大量
    的頭像 發表于 10-10 15:14 ?1560次閱讀

    CPU時鐘周期的組成和作用

    CPU時鐘周期是計算機體系結構中一個至關重要的概念,它直接關聯到CPU運行速度和性能。以下是對CPU時鐘周期的定義、組成和作用的詳細解析。
    的頭像 發表于 09-26 15:32 ?1504次閱讀

    雙核cpu和單核cpu的區別

    雙核CPU與單核CPU在多個方面存在顯著差異,這些差異主要體現在處理能力、性能、運行效率、功耗以及適用場景等方面。 一、概念與結構 雙核CPU :指在一個處理器上集成兩個運算核心,通過
    的頭像 發表于 09-24 16:17 ?6310次閱讀

    CPU線程和程序線程的區別

    CPU的線程與程序的線程在概念、作用、實現方式以及性能影響等方面存在顯著差異。以下是對兩者區別的詳細闡述,旨在深入探討這一技術話題。
    的頭像 發表于 09-02 11:18 ?1845次閱讀

    keil軟件怎么運行寫好的程序

    Keil軟件是一款功能強大的嵌入式開發工具,廣泛應用于單片機、ARM、DSP等嵌入式系統的開發。本文將介紹如何使用Keil軟件運行寫好的程序。 安裝Keil軟件 首先,需要從Keil官網下載Keil
    的頭像 發表于 09-02 10:29 ?3980次閱讀

    linux驅動程序運行在什么空間

    Linux 驅動程序是操作系統的一部分,負責管理硬件設備與操作系統之間的交互。驅動程序運行在內核空間(Kernel Space),這是操作系統的核心部分,與用戶空間(User Space)相對。內核
    的頭像 發表于 08-30 14:37 ?749次閱讀

    esp32-woorm運行起來有電流聲是什么原因導致的?

    為什么我們esp32在下載完我的程序運行起來會有嗡嗡的電流聲呢,是我哪里配置不對還是程序的問題呢
    發表于 06-06 06:18
    主站蜘蛛池模板: ai换脸女明星被躁在线观看免费 | 91国在线啪精品一区 | 秘密影院久久综合亚洲综合 | 一本道高清到手机在线 | 芒果影院网站在线观看 | yellow高清免费观看日本 | 亚洲激情一区 | 久久久精品成人免费看 | 毛片大片免费看 | 亚洲VA欧美VA天堂V国产综合 | 亚洲欧美综合乱码精品成人网 | 精品国产成人系列 | 国产成人精品一区二区三区视频 | 国产成人片视频一区二区青青 | 蜜臀AV中文字幕熟女人妻 | 玖玖爱在线播放 | 好男人在线观看免费视频WWW | 国产精品俺来也在线观看 | 娇妻玩4P被三个男人伺候电影 | 亚州日韩精品AV片无码中文 | vr亚洲成年网址在线观看 | 三级黄在线 | 成人性生交大片 | 国产精品99AV在线观看 | 两个奶被男人揉了一个晚上 | 欧美性xxx18一20 | 打卡中国各地奋斗第一线 | 无码任你躁久久久久久久 | 蜜臀AV中文字幕熟女人妻 | 国产欧美精品一区二区色综合 | 美女被撕开胸罩狂揉大乳 | XXX欧美性兽交 | 久久免费大片 | 长泽梓黑人初解禁bdd07 | 一区二区三区福利视频 | 超级碰碰青草久热国产 | 国产www视频 | 欧美无码专区 | 亚洲视频欧美在线专区 | 久久日本精品在线热 | 伊人亚洲综合网色 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品