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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

理解CPU/寄存器/内存三者关系

發布時間:2024/10/14 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解CPU/寄存器/内存三者关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CPU/寄存器/內存? ? ?

? ? ? ? CPU,全名Central Processing Unit(中央處理器)。這是一塊超大規模的集成電路,包含上億的晶體管,是一臺計算機的運算核心(Core)和控制核心(ControlUnit)。它的功能主要是解釋計算機指令以及處理計算機軟件中的數據。
  它的主要構成是:運算器、控制器、寄存器
  運算器:可以執行定點或浮點算術運算操作、移位操作以及邏輯操作,也可執行地址運算和轉換。
  控制器:主要是負責對指令譯碼,并且發出為完成每條指令所要執行的各個操作的控制信號。其結構有兩種:一種是以微存儲為核心的微程序控制方式;一種是以邏輯硬布線結構為主的控制方式。
  寄存器:寄存器部件,包括寄存器、專用寄存器和控制寄存器。通用寄存器又可分定點數和浮點數兩類,它們用來保存指令執行過程中臨時存放的寄存器操作數和中間(或最終)的操作結果。 通用寄存器是中央處理器的重要部件之一。

  工作過程:
  第一階段,提取,從存儲器或高速緩沖存儲器中檢索指令(為數值或一系列數值)。由程序計數器(Program Counter)指定存儲器的位置。(程序計數器保存供識別程序位置的數值。換言之,程序計數器記錄了CPU在程序里的蹤跡。)
  第二階段:解碼(控制器)
  第三階段:執行,算術邏輯單元(ALU,Arithmetic Logic Unit)將會連接到一組輸入和一組輸出。輸入提供了要相加的數值,而輸出將含有總和的結果。ALU內含電路系統,易于輸出端完成簡單的普通運算和邏輯運算(比如加法和位元運算)。如果加法運算產生一個對該CPU處理而言過大的結果,在標志暫存器里可能會設置運算溢出(Arithmetic Overflow)標志。
  第四階段:回寫,緩沖Cache或者更大更廉價的低俗存儲器(內存、硬盤等等)

  寄存器:是集成電路中非常重要的一種存儲單元,通常由觸發器組成。在集成電路設計中,寄存器可分為電路內部使用的寄存器和充當內外部接口的寄存器這兩類。內部寄存器不能被外部電路或軟件訪問,只是為內部電路的實現存儲功能或滿足電路的時序要求。而接口寄存器可以同時被內部電路和外部電路或軟件訪問,CPU中的寄存器就是其中一種,作為軟硬件的接口,為廣泛的通用編程用戶所熟知。

  常見類型
  1)數據寄存器- 用來儲存整數數字(參考以下的浮點寄存器)。在某些簡單/舊的CPU,特別的數據寄存
  2)寄存器
  3)寄存器
  4)器是累加器,作為數學計算之用。
  5)地址寄存器- 持有存儲器地址,用來訪問存儲器。在某些簡單/舊的CPU里,特別的地址寄存器是索引寄存器(可能出現一個或多個)。
  6)通用目的寄存器(GPRs) - 可以保存數據或地址兩者,也就是說它們是結合數據/地址 寄存器的功用。
  7)浮點寄存器(FPRs) - 用來儲存浮點數字。
  8)常數寄存器- 用來持有只讀的數值(例如0、1、圓周率等等)。
  9)向量寄存器- 用來儲存由向量處理器運行SIMD(Single Instruction, Multiple Data)指令所得到的數據。
  10)特殊目的寄存器- 儲存CPU內部的數據,像是程序計數器(或稱為指令指針),堆棧寄存器,以及狀態寄存器(或稱微處理器狀態字組)。
  11)指令寄存器(instruction register)- 儲存現在正在被運行的指令。
  12)索引寄存器(index register)- 是在程序運行時用來更改運算對象地址之用。

特點
寄存器又分為內部寄存器與外部寄存器,所謂(CPU)內部寄存器,其實也是一些小的存儲單元,也能存儲數據。但同存儲器相比,寄存器又有自己獨有的特點:
①寄存器位于CPU內部,數量很少,僅十四個
②寄存器所能存儲的數據不一定是8bit,有一些寄存器可以存儲16bit數據,對于386/486處理器中一些寄存器則能存儲32bit數據
每個內部寄存器都有一個名字,而沒有像外部存儲器(外部寄存器)一樣的地址編號(即邏輯地址,因此無法通過地址進行訪問)。

  作用
  1.可將寄存器內的數據執行算術及邏輯運算
  2.存于寄存器內的地址可用來指向內存的某個位置,即尋址
  3.可以用來讀寫數據到電腦的周邊設備。

  簡單的說:指令解析 - 數據/操作(寄存器)- 回寫(cache/memory/disk)

  計算機的存儲層次(memory hierarchy)之中,寄存器最快,內存其次,最慢的是硬盤。同樣都是晶體管存儲設備,為什么寄存器比內存快呢?
  原因一:距離不同
  距離不是主要因素,但是最好懂,所以放在最前面說。內存離CPU比較遠,所以要耗費更長的時間讀取。
以3GHz的CPU為例,電流每秒鐘可以振蕩30億次,每次耗時大約為0.33納秒。光在1納秒的時間內,可以前進30厘米。也就是說,在CPU的一個時鐘周期內,光可以前進10厘米。因此,如果內存距離CPU超過5厘米,就不可能在一個時鐘周期內完成數據的讀取,這還沒有考慮硬件的限制和電流實際上達不到光速。相比之下,寄存器在CPU內部,當然讀起來會快一點。距離對于桌面電腦影響很大,對于手機影響就要小得多。手機CPU的時鐘頻率比較慢(iPhone 5s為1.3GHz),而且手機的內存緊挨著CPU。

  原因二:硬件設計不同(1 Byte表示一個字節, 1B=8bit)
  最新的iPhone 5s,CPU是A7,寄存器有6000多位(31個64位寄存器,加上32個128位寄存器)。而iPhone 6s的內存是1GB,約為80億位(bit)。這意味著,高性能、高成本、高耗電的設計可以用在寄存器上,反正只有6000多位,而不能用在內存上。因為每個位的成本和能耗只要增加一點點,就會被放大80億倍。事實上確實如此,內存的設計相對簡單,每個位就是一個電容和一個晶體管,而寄存器的設計則完全不同,多出好幾個電子元件。并且通電以后,寄存器的晶體管一直有電,而內存的晶體管只有用到的才有電,沒用到的就沒電,這樣有利于省電。這些設計上的因素,決定了寄存器比內存讀取速度更快。

  原因三:工作方式不同
  寄存器的工作方式很簡單,只有兩步:(1)找到相關的位,(2)讀取這些位。
  內存的工作方式就要復雜得多:
  (1)找到數據的指針。(指針可能存放在寄存器內,所以這一步就已經包括寄存器的全部工作了。)
  (2)將指針送往內存管理單元(MMU),由MMU將虛擬的內存地址翻譯成實際的物理地址。
  (3)將物理地址送往內存控制器(memory controller),由內存控制器找出該地址在哪一根內存插槽(bank)上。
  (4)確定數據在哪一個內存塊(chunk)上,從該塊讀取數據。
  (5)數據先送回內存控制器,再送回CPU,然后開始使用。
  內存的工作流程比寄存器多出許多步。每一步都會產生延遲,累積起來就使得內存比寄存器慢得多。為了緩解寄存器與內存之間的巨大速度差異,硬件設計師做出了許多努力,包括在CPU內部設置緩存Cache、優化CPU工作方式,盡量一次性從內存讀取指令所要用到的全部數據等等。

  上面說到”緩存“,大部分程序員都知道什么是軟件架構中緩存的概念。這里所說的緩存是指硬件“高速緩沖存儲器”,是存在于主存與CPU之間的一級存儲器(常見于計算機cpu性能指標中:一級緩存、二級緩存,高配置的服務器會有三級緩存), 由靜態存儲芯片(SRAM)組成,容量比較小但速度比主存高得多, 接近于CPU的速度。在計算機存儲系統的層次結構中,是介于中央處理器和主存儲器之間的高速小容量存儲器。它和主存儲器一起構成一級的存儲器。高速緩沖存儲器和主存儲器之間信息的調度和傳送是由硬件自動進行的。高速緩沖存儲器最重要的技術指標是它的命中率(一級緩存(a=n*80%) - 二級緩存(b=a*80%) - 三級緩存(c=b*80%))。所謂的命中就是在緩存上讀取到指定的數據。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ?既然是緩存,那么大小肯定是有局限,也就是說不是所有cpu需要的數據都能在緩存中命中,因為它有著自己的更新策略。如下
  ?1. 根據程序局部性規律可知:程序在運行中,總是頻繁地使用那些最近被使用過的指令和數據。這就提供了替換策略的理論依據。綜合命中率、實現的難易及速度的快慢各種因素,替換策略可有隨機法、先進先出法、最近最少使用法等。
  (1).隨機法(RAND法)
隨機法是隨機地確定替換的存儲塊。設置一個隨機數產生器,依據所產生的隨機數,確定替換塊。這種方法簡單、易于實現,但命中率比較低。
  (2).先進先出法(FIFO法)
先進先出法是選擇那個最先調入的那個塊進行替換。當最先調入并被多次命中的塊,很可能被優先替換,因而不符合局部性規律。這種方法的命中率比隨機法好些,但還不滿足要求。先進先出方法易于實現,
  (3).最近最少使用法(LRU法)
LRU法是依據各塊使用的情況, 總是選擇那個最近最少使用的塊被替換。這種方法比較好地反映了程序局部性規律。 實現LRU策略的方法有多種。
  2 在多體并行存儲系統中,由于 I/O 設備向主存請求的級別高于 CPU 訪存,這就出現了 CPU 等待 I/O 設備訪存的現象,致使 CPU 空等一段時間,甚至可能等待幾個主存周期,從而降低了 CPU 的工作效率。為了避免 CPU 與 I/O 設備爭搶訪存,可在 CPU 與主存之間加一級緩存,這樣,主存可將 CPU 要取的信息提前送至緩存,一旦主存在與 I/O 設備交換時, CPU 可直接從緩存中讀取所需信息,不必空等而影響效率。
  3 目前提出的算法可以分為以下三類(第一類是重點要掌握的):
  (1)傳統替換算法及其直接演化,其代表算法有 :①LRU( Least Recently Used)算法:將最近最少使用的內容替換出Cache ;②LFU( Lease Frequently Used)算法:將訪問次數最少的內容替換出Cache;③如果Cache中所有內容都是同一天被緩存的,則將最大的文檔替換出Cache,否則按LRU算法進行替換 。④FIFO( First In First Out):遵循先入先出原則,若當前Cache被填滿,則替換最早進入Cache的那個。
  (2)基于緩存內容關鍵特征的替換算法,其代表算法有:①Size替換算法:將最大的內容替換出Cache②LRU— MIN替換算法:該算法力圖使被替換的文檔個數最少。設待緩存文檔的大小為S,對Cache中緩存的大小至少是S的文檔,根據LRU算法進行替換;如果沒有大小至少為S的對象,則從大小至少為S/2的文檔中按照LRU算法進行替換;③LRU—Threshold替換算法:和LRU算法一致,只是大小超過一定閾值的文檔不能被緩存;④Lowest Lacency First替換算法:將訪問延遲最小的文檔替換出Cache。
  (3)基于代價的替換算法,該類算法使用一個代價函數對Cache中的對象進行評估,最后根據代價值的大小決定替換對象。其代表算法有:①Hybrid算法:算法對Cache中的每一個對象賦予一個效用函數,將效用最小的對象替換出Cache;②Lowest Relative Value算法:將效用值最低的對象替換出Cache;③Least Normalized Cost Replacement(LCNR)算法:該算法使用一個關于文檔訪問頻次、傳輸時間和大小的推理函數來確定替換文檔;④Bolot等人 提出了一種基于文檔傳輸時間代價、大小、和上次訪問時間的權重推理函數來確定文檔替換;⑤Size—Adjust LRU(SLRU)算法:對緩存的對象按代價與大小的比率進行排序,并選取比率最小的對象進行替換。

轉載:“https://blog.csdn.net/qq_27689785/article/details/82975575”

總結

以上是生活随笔為你收集整理的理解CPU/寄存器/内存三者关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。