日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机基础--认识CPU

發(fā)布時間:2024/4/11 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机基础--认识CPU 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

計算機基礎(chǔ)- -認識CPU

文章目錄

  • 計算機基礎(chǔ)- -認識CPU
    • 一、CPU是什么
    • 二、CPU實際做什么
    • 三、CPU的內(nèi)部結(jié)構(gòu)
      • 1.程序編譯執(zhí)行的過程
      • 2.CPU是寄存器的集合體
        • 計算機語言
        • 匯編語言
      • 3.程序計數(shù)器
      • 4.條件分支和循環(huán)機制
      • 5.標志寄存器
      • 5.函數(shù)調(diào)用機制
      • 6.通過地址和索引實現(xiàn)數(shù)組
    • 四、CPU指令執(zhí)行過程

大家都是程序員,大家都是和計算機打交道的程序員,大家都是和計算機中軟件硬件打交道的程序員,大家都是和CPU打交道的程序員, 所以, 不管你是玩兒硬件的還是做軟件的, 你的世界都少不了 計算機最核心的-CPU

一、CPU是什么

CPU的全稱是Central Processing Unit, 它是你的電腦中最硬核的組件, 這種說法一點不為過,一點不夸張。

CPU是能夠讓你的計算機叫計算機的核心組件, 但是它卻不能代表你的電腦。

CPU與計算機的關(guān)系就相當于大腦和人的關(guān)系。它是一種小型的計算機芯片,它嵌入在臺式機、筆記本電腦或者平板電腦的主板上。

通過在單個計算機芯片上放置數(shù)十億個微型晶體管來構(gòu)建CPU。這些晶體管使它能夠執(zhí)行、運行存儲在系統(tǒng)內(nèi)存中的程序所需的計算, 也就是說CPU決定了你電腦的計算能力

二、CPU實際做什么

  • CPU的核心是從程序或應(yīng)用程序獲取指令并執(zhí)行計算。此過程可以分為三個關(guān)鍵階段:提取、解碼和執(zhí)行。
  • CPU從系統(tǒng)的RAM中提取指令, 然后解碼該指令的實際內(nèi)容,然后再由CPU的相關(guān)部分執(zhí)行該指令。

RAM:隨機存取存儲器(英語:Random Access Memory, 縮寫:RAM) , 也叫主存, 是與CPU直接交換數(shù)據(jù)的內(nèi)部存儲器。它可以隨時讀寫(刷新時除外) , 而且速度很快,通常作為操作系統(tǒng)或其他正在運行中的程序的臨時數(shù)據(jù)存儲介質(zhì)

三、CPU的內(nèi)部結(jié)構(gòu)

說了這么多CPU的重要性, 那么CPU的內(nèi)部結(jié)構(gòu)是什么呢?又是由什么組成的呢?

下圖展示了一般程序的運行流程(以C語言為例),可以說 了解程序的運行流程是掌握程序運行機制的基礎(chǔ)和前提。

1.程序編譯執(zhí)行的過程

  • 在這個流程中, CPU負責的就是解釋和運行最終轉(zhuǎn)換成機器語言的內(nèi)容。

  • CPU主要由兩部分構(gòu)成:

  • 控制單元和算術(shù)邏輯單元(ALU)

  • 控制單元:從內(nèi)存中提取指令并解碼執(zhí)行

  • 算數(shù)邏輯單元(ALU) :處理算數(shù)和邏輯運算

  • CPU是計算機的心臟和大腦, 它和內(nèi)存都是由許多晶體管組成的電子部件

  • 它接收數(shù)據(jù)輸入, 執(zhí)行指令并處理信息。它與輸入/輸出(I/O) 設(shè)備進行通信, 這些設(shè)備向CPU發(fā)送數(shù)據(jù)和從CPU接收數(shù) 據(jù)。

  • 從功能來看, CPU的內(nèi)部由寄存器、控制器、運算器和時鐘四部分組成, 各部分之間通過電信號連通。

  • CPU內(nèi)部結(jié)構(gòu)圖

  • 寄存器是中央處理器內(nèi)的組成部分。它們可以用來暫存指令、數(shù)據(jù)和地址。可以將其看作是內(nèi)存的一種。根據(jù)種類的不同, 一個CPU內(nèi)部會有20-100個寄存器。

  • 控制器負責把內(nèi)存上的指令、數(shù)據(jù)讀入寄存器,并根據(jù)指令的結(jié)果控制計算機

  • 運算器負責運算從內(nèi)存中讀入寄存器的數(shù)據(jù)

  • 時鐘負責發(fā)出CPU開始計時的時鐘信號

  • 接下來簡單解釋一下內(nèi)存, 為什么說CPU需要講一下內(nèi)存呢, 因為內(nèi)存是與CPU進行溝通的橋梁。

  • 👏計算機所有程序的運行都是在內(nèi)存中運行的, 內(nèi)存又被稱為主存, 其作用是存放CPU中的運算數(shù)據(jù),以及與硬盤等外部存儲設(shè)備交換的數(shù)據(jù)。

  • 👏只要計算機在運行中, CPU就會把需要運算的數(shù)據(jù)調(diào)到主存中進行運算, 當運算完成后CPU再將結(jié)果傳送出來, 主存的運行也決定了計算機的穩(wěn)定運行。

  • 👏主存通過控制芯片與CPU進行相連, 由可讀寫的元素構(gòu)成, 每個字節(jié)(1byte=8bits) 都帶有一個地址編號, 注意是一個字節(jié), 而不是一個位。

  • 👏CPU通過地址從主存中讀取數(shù)據(jù)和指令, 也可以根據(jù)地址寫入數(shù)據(jù)。注意一點:當計算機關(guān)機時,內(nèi)存中的指令和數(shù)據(jù)也會被清除

2.CPU是寄存器的集合體

在CPU的四個結(jié)構(gòu)中, 我們程序員只需要了解寄存器就可以了, 其余三個不用過多關(guān)注, 為什么這么說?因為程序是把寄存器作為對象來描述的。

計算機語言

我們生而為人最明顯的一個特征是我們能通過講話來實現(xiàn)彼此的交流,但是計算機聽不懂你說的話,你要想和他交流必須按照計算機指令來交換,這就涉及到語言的問題

計算機是由二進制構(gòu)成的,它只能聽的懂二進制也就是機器語言,但是普通人是無法看懂機器語言的,這個時候就 需要一種電腦既能識別,人又能理解的語言

最先出現(xiàn)的就是匯編語言。但是匯編語言晦澀難懂,所以又出現(xiàn)了像是C,C++, Java的這種高級語言。

  • 所以計算機語言一般分為兩種:低級語言(機器語言,匯編語言)和高級語言。使用高級語言編寫的程序,經(jīng)過編譯轉(zhuǎn)換成機器語言后才能運行,而匯編語言經(jīng)過匯編器才能轉(zhuǎn)換為機器語言。

匯編語言

首先來看一段用匯編語言表示的代碼清單

這是采用匯編語言(assembly) 編寫程序的一部分。匯編語言采用助記符(me monic)
每一個原本是電信號的機器語言指令會有一個與其對應(yīng)的助記符, 例如mov, add
來編寫程序,分別是數(shù)據(jù)的存儲(move) 和相加(addition) 的簡寫。

匯編語言和機器語言是一一對應(yīng)的,這一點和高級語言有很大的不同。

  • 通常我們將匯編語言編寫的程序轉(zhuǎn)換為機器語言的過程稱為語言的過程稱為反匯編,將機器語言轉(zhuǎn)化為匯編語言稱為匯編

匯編語言能夠幫助你理解計算機做了什么工作,機器語言級別的程序是通過寄存器來處理的,上面代碼中的eax,ebp都是表示的寄存器, 是CPU內(nèi)部寄存器的名稱, 所以可以說CPU是一系列寄存器的集合體。

  • 在內(nèi)存中的存儲通過地址編號來表示,而寄存器的種類則通過名字來區(qū)分。
  • 不同類型的CPU, 其內(nèi)部寄存器的種類, 數(shù)量以及寄存器存儲的數(shù)值范圍都是不同的。

不過, 根據(jù)功能的不同,可以將寄存器劃分為下面這幾類

  • 其中程序計數(shù)器、累加寄存器、標志寄存器、指令寄存器和棧寄存器都只有一個,其他寄存器一般有多個。

3.程序計數(shù)器

  • 程序計數(shù)器(Program Counter) 是用來存儲下一條指令所在單元的地址。
  • 程序執(zhí)行時,PC的初值為程序第一條指令的地址,在順序執(zhí)行程序時,控制器首先按程序計數(shù)器所指出的指令地址從內(nèi)存中取出一條指令,然后分析和執(zhí)行該指令,同時將PC的值加1指向下一條要執(zhí)行的指令。
  • 我們還是以一個事例為準來詳細的看一下程序計數(shù)器的執(zhí)行過程程序計數(shù)器數(shù)值的變化
  • 這是一段進行相加的操作,程序啟動,在經(jīng)過編譯解析后會由操作系統(tǒng)把硬盤中的程序復(fù)制到內(nèi)存中
  • 示例中的程序是將123和456執(zhí)行相加操作,并將結(jié)果輸出到顯示器上。
  • 由于使用機器語言難以描述,所以這是經(jīng)過翻譯后的結(jié)果,實際上每個指令和數(shù)據(jù)都可能分布在不同的地址上,但為了方便說明,把組成一條指令的內(nèi)存和數(shù)據(jù)放在了一個內(nèi)存地址上。
  • 地址 0100是程序運行的起始位置。Windows等 操作系統(tǒng)把程序從硬盤復(fù)制到內(nèi)存后, 會將程序計數(shù)器作為設(shè)定為起始位置0100,然后執(zhí)行程序,每執(zhí)行一條指令后,程序計數(shù)器的數(shù)值會增加1(或者直接指向下一條指令的地址) 👏
  • 然后, CPU就會根據(jù)程序計數(shù)器的數(shù)值, 從內(nèi)存中讀取命令并執(zhí)行, 也就是說,程序計數(shù)器控制著程序的流程

4.條件分支和循環(huán)機制

  • 我們都學過高級語言,高級語言中的條件控制流程主要分為三種:順序執(zhí)行、條件分支、循環(huán)判斷三種

  • 順序執(zhí)行是按照地址的內(nèi)容順序的執(zhí)行指令。條件分支是根據(jù)條件執(zhí)行任意地址的指令。循環(huán)是重復(fù)執(zhí)行同一地址的指令。

  • 順序執(zhí)行的情況比較簡單,每執(zhí)行一條指令程序計數(shù)器的值就是+1。

  • 條件和循環(huán)分支會使程序計數(shù)器的值指向任意的地址,這樣一來,程序便可以返回到上一個地址來重復(fù)執(zhí)行同一個指令,或者跳轉(zhuǎn)到任意指令。

下面以條件分支為例來說明程序的執(zhí)行過程(循環(huán)也很相似)

  • 程序的開始過程和順序流程是一樣的, CPU從0100處開始執(zhí)行命令, 在0100和0101都是順序執(zhí)行,PC的值順序+1
  • 執(zhí)行到0102地址的指令時, 判斷0106寄存器的數(shù)值大于0, 跳轉(zhuǎn)(jump) 到0104地址的指令,將數(shù)值輸出到顯示器中,然后結(jié)束程序
  • 0103的指令被跳過了,這就和我們程序中的判斷是一樣的,在不滿足條件的情況下,指令會直接跳過。所以PC的執(zhí)行過程也就沒有直接+1,而是下一條指令的地址。

5.標志寄存器

  • 條件和循環(huán)分支會使用到j(luò)ump(跳轉(zhuǎn)指令) , 會根據(jù)當前的指令來判斷是否跳轉(zhuǎn)
  • 上面我們提到了標志寄存器,無論當前累加寄存器的運算結(jié)果是正數(shù)、負數(shù)還是零,標志寄存器都會將其保存(也負責溢出和奇偶校驗)

溢出(overflow) :是指運算的結(jié)果超過了寄存器的長度范圍
奇偶校驗(parity check) :是指檢查運算結(jié)果的值是偶數(shù)還是奇數(shù)

  • CPU在進行運算時, 標志寄存器的數(shù)值會根據(jù)當前運算的結(jié)果自動設(shè)定, 運算結(jié)果的正、負和零三種狀態(tài)由標志寄存器的三個位表示。

  • 標志寄存器的第一個字節(jié)位、第二個字節(jié)位、第三個字節(jié)位各自的結(jié)果都為1時,分別代表著正數(shù)、零和負數(shù)。

  • CPU的執(zhí)行機制比較有意思, 假設(shè)累加寄存器中存儲的XXX和通用寄存器中存儲的YYY做比較

  • 執(zhí)行比較的背后, CPU的運算機制就會做減法運算。而無論減法運算的結(jié)果是正數(shù)、零還是負數(shù), 都會保存到標志寄存器中。

  • 結(jié)果為正表示XXX比YYY大,結(jié)果為零表示XXX和YYY相等,結(jié)果為負表示
    XXX比YYY小。程序比較的指令, 實際上是在CPU內(nèi)部做減法運算。

5.函數(shù)調(diào)用機制

接下來,我們繼續(xù)介紹函數(shù)調(diào)用機制,哪怕是高級語言編寫的程序,函數(shù)調(diào)用處理也是通過把程序計數(shù)器的值設(shè)定成函數(shù)的存儲地址來實現(xiàn)的。

  • 函數(shù)執(zhí)行跳轉(zhuǎn)指令后,必須進行返回處理,單純的指令跳轉(zhuǎn)沒有意義

下面是一個實現(xiàn)函數(shù)跳轉(zhuǎn)的例子

  • 圖中將變量a和b分別賦值為123和456, 調(diào)用My Fun(a, b) 方法, 進行指令跳轉(zhuǎn)。
  • 圖中的地址是將C語言編譯成機器語言后運行時的地址,由于1行C程序在編譯后通常會變?yōu)槎嘈袡C器語言,所以圖中的地址是分散的。
  • 在執(zhí)行完My Fun(a ,b) 指令后, 程序會返回到My Fun(a, b) 的下一條指令, CPU繼續(xù)執(zhí)行下面的指令。
  • 函數(shù)的調(diào)用和返回很重要的兩個指令是call和return指令
  • 在將函數(shù)的入口地址設(shè)定到程序計數(shù)器之前, call指令會把調(diào)用函數(shù)后要執(zhí)行的指令地址存儲在名為棧的主存內(nèi)。
  • 函數(shù)處理完畢后, 再通過函數(shù)的出口來執(zhí)行return指令。return指令的功能是把保存在棧中的地址設(shè)定到程序計數(shù)器。
  • My Fun函數(shù)在被調(diào)用之前, 0154地址保存在棧中, My Fun函數(shù)處理完成后, 會把0154的地址保存在程序計數(shù)器中。

這個調(diào)用過程如下

  • 在一些高級語言的條件或者循環(huán)語句中, 函數(shù)調(diào)用的處理會轉(zhuǎn)換成call指令, 函數(shù)結(jié)束后的處理則會轉(zhuǎn)換成return指令。

6.通過地址和索引實現(xiàn)數(shù)組

  • 接下來我們看一下基址寄存器和變址寄存器,通過這兩個寄存器,我們可以對主存上的特定區(qū)域進行劃分,來實現(xiàn)類似數(shù)組的操作
  • 首先,我們用十六進制數(shù)將計算機內(nèi)存上的00000000-FFFFFFFF的地址劃分出來。
  • 那么,凡是該范圍的內(nèi)存地址,只要有一個32位的寄存器,便可查看全部地址
  • 但如果想要想數(shù)組那樣分割特定的內(nèi)存區(qū)域以達到連續(xù)查看的目的的話,使用兩個寄存器會更加方便。
  • 例如,我們用兩個寄存器(基址寄存器和變址寄存器)來表示內(nèi)存的值

  • 這種表示方式很類似數(shù)組的構(gòu)造,數(shù)組是指同樣長度的數(shù)據(jù)在內(nèi)存中進行連續(xù)排列的數(shù)據(jù)構(gòu)造。
  • 用數(shù)組名表示數(shù)組全部的值,通過索引來區(qū)分數(shù)組的各個數(shù)據(jù)元素,例如:a[0]-a[4],[]內(nèi)的0-4就是數(shù)組的下標。

四、CPU指令執(zhí)行過程

那么CPU是如何執(zhí)行一條條的指令的呢?

  • 幾乎所有的馮·諾伊曼型計算機的CPU, 其工作都可以分為5個階段:取指令、指令譯碼、執(zhí)行指令、訪存取數(shù)、結(jié)果寫回。
  • 👏取指令階段是將內(nèi)存中的指令讀取到CPU中寄存器的過程, 程序寄存器用于存儲下一條指令所 在的地址
  • 指令譯碼階段,在取指令完成后,立馬進入指令譯碼階段,在指令譯碼階段,指令譯碼器按照預(yù)定的指令格式,對取回的指令進行拆分和解釋,識別區(qū)分出不同的指令類別以及各種獲取操作數(shù)的方法。
  • 執(zhí)行指令階段,譯碼完成后,就需要執(zhí)行這一條指令了,此階段的任務(wù)是完成指令所規(guī)定的各種操作,具體實現(xiàn)指令的功能。
  • 訪問取數(shù)階段,根據(jù)指令的需要,有可能需要從內(nèi)存中提取數(shù)據(jù),此階段的任務(wù)是:根據(jù)指令地址碼,得到操作數(shù)在主存中的地址,并從主存中讀取該操作數(shù)用于運算。
  • 結(jié)果寫回階段, 作為最后一個階段, 結(jié)果寫回(WriteBack, WB) 階段把執(zhí)行指令階段的運行結(jié)果數(shù)據(jù)“寫回”到某種存儲形式:結(jié)果數(shù)據(jù)經(jīng)常被寫到CPU的內(nèi)部寄存器中, 以便被后續(xù)的指令快速地存取;

總結(jié)

以上是生活随笔為你收集整理的计算机基础--认识CPU的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。