[TOC]
>計算機組成原理與系統結構》課
《微機原理及接口技術》課

# CPU
CPU由運算器、控制器和寄存器及實現它們之間聯系的數據、控制及狀態的總線構成。
它的功能主要是解釋計算機指令以及處理計算機軟件中的數據。
差不多所有的CPU的運作原理可分為四個階段:提取(Fetch)、解碼(Decode)、執行(Execute)和寫回(Writeback)。 CPU從存儲器或高速緩沖存儲器中取出指令,放入指令寄存器,并對指令譯碼,并執行指令。所謂的計算機的可編程性主要是指對CPU的編程。
中央處理器主要包括運算器(算術邏輯運算單元,ALU,Arithmetic Logic Unit)和 **高速緩沖存儲器(Cache)** 及實現它們之間聯系的數據(Data)、控制及狀態的總線(Bus)。它與 **內部存儲器(Memory)** 和輸入/輸出(I/O)設備合稱為電子計算機三大核心部件。
# 寄存器
計算機的[存儲層次](https://zh.wikipedia.org/wiki/%E8%A8%98%E6%86%B6%E9%AB%94%E9%9A%8E%E5%B1%A4)(memory hierarchy)之中,寄存器(register)最快,內存其次,最慢的是硬盤。
寄存器是中央處理器內的組成部份。它跟CPU有關。寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數據和位址。在中央處理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序計數器(PC)。在中央處理器的算術及邏輯部件中,包含的寄存器有累加器(ACC)。
## 參考
阮一峰:http://www.ruanyifeng.com/blog/2013/10/register.html
知乎:https://www.zhihu.com/question/24565362/answer/54451597
# RAM
RAM主要指計算機內存,用來存放計算機正在運行的程序的指令以及數據,包括操作系統和應用程序的指令和數據。ROM是只讀存儲器,其內容掉電不會丟失,一般來講計算機的BIOS會寫在里面,待計算機通電后,這里面的程序會自動被加載到內存中供CPU執行,去讀磁盤信息引導DOS或者其他操作系統裝入內存。
# 緩存
緩存CACHE緩存就是數據交換的緩沖區(稱作Cache),當某一硬件要讀取數據時,會首先從緩存中查找需要的數據,如果找到了則直接執行,找不到的話則從內存中找。由于緩存的運行速度比內存快得多,故緩存的作用就是幫助硬件更快地運行。因為緩存往往使用的是RAM(斷電即掉的非永久儲存),所以在用完后還是會把文件送到硬盤等存儲器里永久存儲。
電腦里最大的緩存就是內存條了,最快的是CPU上鑲的L1和L2緩存,顯卡的顯存是給顯卡運算芯片用的緩存,硬盤上也有16M或者32M的緩存。CACHE是在CPU中速度非常塊,而容量卻很小的一種存儲器,它是計算機存儲器中最強悍的存儲器。由于技術限制,容量很難提升。
緩存有兩種概念。一種是指硬件高速緩沖存儲器cache,用于協調寄存器與內存之間讀寫速度不匹配而設置的一種存儲器。另一種是指人為規定的一個區域(通常是在RAM上劃一塊區域,這是由操作系統來做的),用來暫時存放一些輸入輸出數據。
# 緩沖區
緩沖器相當于一個寄存器,暫時保存數據。緩沖區是內存中存放數據的地方。
在程序試圖將數據放到機器內存中的某一個位置的時候,因為沒有足夠的空間就會發生緩沖區溢出。而人為的溢出則是有一定企圖的,攻擊者寫一個超過緩沖區長度的字符串,然后植入到緩沖區,而再向一個有限空間的緩沖區中植入超長的字符串可能會出現兩個結果,一是過長的字符串覆蓋了相鄰的存儲單元,引起程序運行失敗,嚴重的可導致系統崩潰;另有一個結果就 是利用這種漏洞可以執行任意指令,甚至可以取得系統root特級權限。大多造成緩沖區溢出的原因是程序中沒有仔細檢查用戶輸入參數而造成的。
緩沖區指由多個以不同速度或優先級運行的硬件或程序進程共享的內存中的數據存儲區,在其中暫時保存給定類型的數據,可能會隨著動態分配變量會出現問題。
大多時為了不占用太多的內存,一個有動態分配變量的程序在程序運行時才決定給它們分配多少內存。這樣想下去的話,如果說要給程序在動態分配緩沖區放入超長的數據,它就會溢出了。
一個緩沖區溢出程序使用這個溢出的數據將匯編語言代碼放到機器的內存里,通常是產生root權限的地方,這就不是什么好現象了。僅僅就單個的緩沖區溢出惹眼,它并不是最大的問題根本所在。但如果溢出送到能夠以root權限運行命令的區域,一旦運行這些命令,那可就等于把機器拱手相讓了。
## 為什么要引入緩沖區呢?
緩沖區使進程之間的相互等待變少了。先結束的進程可以把結果放入緩沖區內,進行下面的工作,而后做完的進程可以從緩沖區內取出原來的數據繼續工作。
緩沖區的作用是:在高速和低速設備之間起一個速度平滑作用;暫時存儲數據;經常訪問的數據可以放進緩沖區,減少對慢速設備的訪問以提高系統的效率。
比如我們從磁盤里取信息,我們先把讀出的數據放在緩沖區,計算機再直接從緩沖區中取數據,等緩沖區的數據取完后再去磁盤中讀取,這樣就可以減少磁盤的讀寫次數,再加上計算機對緩沖區的操作大大快于對磁盤的操作,故應用緩沖區可大大提高計算機的運行速度。
又比如,我們使用打印機打印文檔,由于打印機的打印速度相對較慢,我們先把文檔輸出到打印機相應的緩沖區,打印機再自行逐步打印,這時我們的CPU可以處理別的事情。
現在您基本明白了吧,緩沖區就是一塊內存區,它用在輸入輸出設備和CPU之間,用來緩存數據。它使得低速的輸入輸出設備和高速的CPU能夠協調工作,避免低速的輸入輸出設備占用CPU,解放出CPU,使其能夠高效率工作。
## 區別
## 緩存是什么與內存,硬盤各有什么區別
CPU要運算的數據都是從內存取來的 但是內存速度比CPU慢很多,劃不來,先到硬盤緩存找找,很快就可以取到, 實在找不到再讓硬盤讀盤。 這樣明顯可以大幅提高系統的效率CPU的緩存是提高了CPU對內存反復的數據的處理速度,內存里面的數據大部分是從硬盤取來的,CPU總是在干等,在90%以上的情況下, 內存速度比硬盤要快幾十倍。 于是在硬盤里面設計了跟內存速度差不多的緩存 事先把內存可能用到的數據從硬盤讀到緩存,內存等硬盤讀盤也等得很煩, CPU需要的數據就在緩存里面。而硬盤的緩存是提高CPU與硬盤之間的速度.同樣。 然后內存要數據的話, 于是在CPU里設計了高速緩存(容量相對內存很小) 事先把CPU可能會用到的數據從內存取到緩存, 由于預測機制的作用
## 請問內存緩沖區和硬盤緩沖區有什么區別?一般編程時所說的寫入緩沖區是指哪一個?
通常的程序無法控制它,達到一定數量后再寫到硬盤里。而硬盤緩沖區有兩種,即先將數據下載到內存中緩存起來,因此很多程序還會從內存中再設置一塊緩存供自己使用,也是為了增加讀寫效率和保護硬盤,只是它是專門為讀取或寫入硬盤而設置的。這個的例子是很多下載軟件如迅雷中都有的磁盤緩存設置,達到保護硬盤的目的,這是程序所設置的一塊內存區域:一是上面說的內存緩沖區,并且除了驅動程序外。它的作用和前一種類似,大小通常為數MB到幾十MB,這個是固化在硬盤內部的,用來暫存從其他設備讀入的數據或即將寫入其他設備的數據,只是它是系統中所有程序所共用的,因此可以簡稱為硬盤緩沖區,從而減少了讀寫硬盤的次數。另一種是硬盤本身攜帶的一塊隨機存儲器一般編程所說的緩沖區指的是內存緩沖區
## 磁盤緩存和內存緩存的區別
CPU的工作將難以開展,軟件磁盤緩存,而若要用來處理圖形圖像,是一個硬件設備,你可以 從中明白它的工作原理,內存的大小都以MB(讀作“兆字節”,沒有內存。當運行計算機程序時,然后在特定的內存中開始執行,或者說取決于運行的軟件。在這篇“神奇的硬件”文章里面, 并且它以各種各樣的形式存在不同的硬件里面,用來預讀取信息(比如硬盤的緩存),并且知道為什么它在電腦系統中的地位是這么的重要。你可能在購買電腦的時候也聽到過要好的朋友這樣建議?這需要根據所要完成的工作來定的,“內存”好比是一個大倉庫,這個倉庫的容量不得小于所要貯藏的“貨物”量,計算機也無法啟動;緩存是一個比較大的一個概念,或者是暫時存儲一些不長久的信息。所以,小了,當內存達到某一數目后,以及要處理的數據量,內存的增加對系統運行速度的提高是有一個限度的;太大了。使用緩存的主要目的是使價位低廉的電腦也可以保持高速運行,還有頁面緩存等更多,“不要購買賽揚(Celeron)系列處理器。一個簡單的例子超高速緩存(Caching)是計算機里面基于內存子系統的技術。在計算機中。“內存”猶如人體大腦的記憶系統,程序將首先被讀入內存中!“貨物”搬運不方便,用于存放計算機的運行程序和處理的數據,特別是在多任務環境下128MB可能都還少“緩存”(cache),無論是否打開電源啟動計算機,比如用于文字處理工作。初學者可以這樣來理解這個問題,或者玩三維游戲,64MB都可能遠遠不夠,硬盤和軟盤緩存,內存的大小應該視需要而定,因為它的cache比較少”,內存中總會有各種各樣的數據信息存在,描述數據量的單位是“字節(Byte,可以說它永遠也不會空閑著內存是內部存儲器,常用B表示)”。一臺計算機要配置多大的內存才合適呢,現代的電腦同時具有L1和L2 cache ,也就是程序運行的基本需要,并且處理的結果也將保存在該內存中,簡稱“兆”)來表示;超高速緩存允許你的電腦在運行日常任務的時候能夠更加 流暢,再加大內存,白白浪費了資源,又會造成大部分倉庫空著。在電腦系統里、快速,緩存在很多方面都起著舉足輕重的作用。其中有內存緩存;虛擬內存也是另外一種不同表達形式的緩存,運行的速度就幾乎不會再提高了,也就是說內存總會和CPU之間頻繁地交換數據。當運行的軟件一定時,會影響CPU的運算速度,甚至不能讓程序運行,那16 MB就差不多了,我們將會探究緩存
## 內存緩沖區和硬盤緩沖區有什么區別嗎
就是在硬盤內部的內存芯片,一回事,英文就叫cache。硬盤的高速緩存,專門用來做緩存的內存 高速緩存,就是cache
## 內存與緩沖區有什么關系啊?請詳細解說下啊
在一般理解緩存都是指CPU的緩存,但是距離CPU還是有一定的距離。通常現在CPU在計算中會優先從CPU一級緩存中調用數據。說通俗一點,如果找不到就去二級緩存找,就是CPU即將用到和經常用到的數據都會寄存在CPU緩存區域中,三級緩存,寄存到內存中,當然傳輸速度相比CPU的緩存差距 還是很大的,需要從內存中再調用數據,找不到再去內存,二級緩存,這樣CPU的計算速度更快,因為數據從硬盤調出來。 緩存相當于CPU擁有的自己的獨立倉庫,所以通常高端處理器才有三級緩存。緩存越大,處理器查找數據所用的時間越快,一級緩存,寄存的即將和經常需要用到的數據越多,那么如果有三級緩存的處理器就去三級緩存中找,如果沒有三級緩存的CPU。應用的程序主體,內存雖然速度比硬盤快很多,那么二級緩存找不到的數據就直接去內存中查找了,是先調到內存當中,所以三級緩存的CPU運算速度通常比沒有三級緩存CPU的速度更快,并且數據傳送速度還會受到總線等其他因素的限制,這是提高CPU性能和運算速度的一種途徑。,CPU要處理這些數據,但僅僅是您所運行的程序整體的數據不是CPU即將用到的數據,可以提前將 即將需要用到的數據調入到CPU緩存中,不需外界干擾,如果還找不到。。假設即將和經常用到的數據寄存到CPU自己的數據庫中,CPU可以隨時調用。也是為什么高端處理器緩存大并且具備三級緩存的意義,CPU不可能在內存中直接進行數據運算那么CPU就需要有緩存
## 緩沖區在內存里面還是硬盤上
CPU里面也有緩存。內存本身就是CPU直接訪問的存儲空間,分別是一級,那么就是在硬盤內。實際上、二級和三級緩存,現在一般是32M或者64M,但速度依次變慢。每個硬盤里又會有一定容量的緩存。緩存是為了提高數據交換效率而產生的,容量依次變大,所以不存在緩沖區的說法如果你所謂的緩沖區是指的緩存
## 程序的RAM操作
我們都知道編譯好的程序最終運行是在RAM中運行的,可是我很長一段時間都把RAM和CPU,寄存器搞混淆了。cpu里包含有各種寄存器,ram并不是在cpu里的,可以這么理解:ram保存著代碼中的變量,常量,指令;cpu負責從ram中取出指令來運行,運行后的結果(比如加減乘除的結果)最初是保存在各種寄存器里的,然后再由寄存器通過指令把寄存器里的值保存到ram即內存中(比如arm的STR指令)。**其實程序的運行就是不斷地從ram(內存)中取出指令或者數據經過寄存器給CPU中的各種運算器運算后再通過寄存器傳出到ram中(ram中的數據就會不斷地變化,反應到程序中就是變量的變化,比如數字的自加)**,而具體是把運算后的結果放到ram的哪里(地址)則由程序員在程序中定義的變量的地址決定的。
# 硬件之間的聯系的總結
cpu主要就是處理各種指令,運算、跳轉、存取內存之內的。這些指令所需的數據以及指令本身一般都是存儲在ram中的。cpu必須將ram中的指令和數據取到cpu中的各種寄存器中,指令才能執行。指令的地址存儲在一個叫做PC的寄存器中,注意這邊的PC不是個人電腦的意思,而是pointer of code的意思,即指令指針,而數據可以放在各種通用寄存器中。cpu中還有很多其他寄存器,控制著cpu各種功能。如果你學過匯編,便會知道匯編語言即是操作這些寄存器,完成各種運算任務。 現代高性能cpu內部一般都會有緩存,一般分為指令緩存和數據緩存。緩存的訪問速度比外部ram要快很多,所以如果把一部分數據和指令存儲在緩存中,cpu再從緩存中獲取指令和數據能夠提高cpu的速度。 可以被稱作rom的東西很多,如pc主板上的rom芯片,pc關機后,rom的數據不會丟失,開機時先運行其中的bios程序,完成硬件配置和檢測,之后會將磁盤第一個扇區中操作系統的引導程序裝入內存,然后會跳到引導程序。引導程序會進一步將操作系統存儲在磁盤上的內核裝入內存,最后執行內核程序。內核加載文件系統,并執行gui程序,便可以看到pc的桌面了。我只是簡要的說明了你問題中的這些概念,省略了很多細節。如果想對計算機從硬件到操作系統再到應用層有些認識的話,強烈建議你看《深入理解計算機系統》,即入門又足夠深入。
## 參考
知乎:https://www.zhihu.com/question/24565362/answer/74078750