跳轉到內容

IB/第 4 組/計算機科學/計算機組織/指令週期層

來自華夏公益教科書,開放的世界開放的書籍

什麼是 CPU?

[編輯 | 編輯原始碼]
現代英特爾 CPU 晶片

CPU 是計算機中負責處理和執行應用程式給出的操作和指令的元素。這是透過暫存器、RAM 和 ALU 完成的。CPU 的功能類似於計算機的大腦,存在於每臺計算機中。CPU 由大量放置在晶片上的電晶體組成,這些電晶體共同執行操作來處理指令。

CPU 處理資訊的速度稱為時鐘速度,以赫茲為單位。現代 CPU 的執行速度達到數十億赫茲,這意味著它們每秒可以執行數十億次操作。

CPU 也可以有多個“核心”,它是 CPU 的主要元素。CPU 的核心數量及其時鐘速度決定了其執行速度。CPU 的核心數量範圍很廣,有些 CPU 只有一個核心,有些 CPU 多達 256 個。

什麼是取指、譯碼、執行迴圈?

[編輯 | 編輯原始碼]

在瞭解計算機如何執行操作之前,讓我們先了解一下它能做什麼。計算機的定義概述了它的能力;計算機是一種能夠儲存、檢索和處理資料的電子裝置。因此,我們給計算機的所有指令都與儲存、檢索和處理資料有關。

馮·諾依曼機的基本原理是資料和指令都儲存在記憶體中並以相同的方式處理。這意味著指令和資料都是可定址的。指令儲存在連續的記憶體位置;要操作的資料一起儲存在記憶體的另一個部分。要啟動取指-執行迴圈,首先,資料由作業系統載入到主記憶體中,第一條指令的地址被放置到 程式計數器 上。



處理迴圈包括四個步驟

  1. 取下一條指令,
  2. 譯碼指令
  3. 如果需要,獲取資料,
  4. 執行指令。
  5. 儲存執行結果並檢查下一條指令。

取下一條指令

[編輯 | 編輯原始碼]

PC 逐個遞增以指向要執行的下一條指令,因此控制單元轉到記憶體地址暫存器 (MAR) 中的地址,該暫存器儲存 PC 中指定的下一條指令的地址。然後,它透過地址匯流排將其傳送到主記憶體,並透過資料匯流排將其返回到記憶體緩衝暫存器。MBR 是一個雙向暫存器,臨時儲存從記憶體(快取記憶體或 RAM)中取出的資料,複製其內容,並將副本放置在 IR 中。現在,IR 包含要執行的指令。

在進入迴圈的下一步之前,PC 必須更新以儲存要執行的下一條指令的地址,噹噹前指令完成後。此後,指令暫存器負責由 CU 解決的指令。CU 檢查指令的狀態,然後允許執行。因為指令在記憶體中連續儲存,所以將當前指令中的位元組數新增到 PC 應該將下一條指令的地址放到 PC 中。因此,控制單元遞增 PC。(PC 可能會在稍後由正在執行的指令更改)

對於必須從記憶體中獲取附加資料的指令,ALU 將地址傳送到記憶體匯流排,記憶體透過返回該位置的值進行響應。在某些計算機中,從記憶體中檢索到的資料可能會立即參與算術或邏輯運算。其他計算機只是將記憶體返回的資料儲存到一個暫存器中,以便由後續指令進行處理。在執行結束時,指令的任何結果都可以儲存在暫存器或記憶體中。

譯碼指令

[編輯 | 編輯原始碼]

要執行指令暫存器中的指令,控制單元必須確定它是哪條指令。它可能是一條訪問輸入裝置資料的指令、將資料傳送到輸出裝置的指令,或對資料值執行某些操作的指令。在此階段,指令被譯碼為控制訊號。也就是說,CPU 中電路的邏輯決定要執行的操作。此步驟說明了為什麼計算機只能執行以其自己的機器語言表達的指令。指令本身實際上是內建在電路中的。

例如,讓我們在下面的表格中以一個 8 位暫存器的虛構 RAM 為例。在 8 位中,前 4 位是我們用來確定指令的位。

對於 1 個地址:01010010

0101 是我們的操作碼。在我們的例子中,0101 對應於“載入”,這意味著我們正在將地址 00000010 中的值載入到暫存器中。

示例在“執行指令”中繼續。

指令表
指令 操作碼
載入 0101
RAM
地址 資料
00000001 01010010
00000010 00000001
00000011 00000000

如果需要,獲取資料

[編輯 | 編輯原始碼]

在大多數程式中,要執行的指令可能需要額外的記憶體訪問才能完成其任務。

例如,如果指令說要將記憶體位置的內容新增到一個暫存器中,控制單元必須獲取記憶體位置的內容。

執行指令

[編輯 | 編輯原始碼]

一旦指令被譯碼並獲取了任何運算元(資料),控制單元就可以準備執行指令。執行涉及向算術/邏輯單元傳送訊號以執行處理。在將數字新增到暫存器的情況下,運算元被髮送到 ALU 並新增到暫存器的內容中。

CPU 抽象

當執行完成後,迴圈再次開始。如果最後一條指令是將一個值新增到暫存器的內容,則下一條指令可能是將結果儲存到記憶體中的某個位置。但是,下一條指令可能是一條控制指令——也就是說,一條詢問有關最後一條指令結果的問題,並可能更改程式計數器內容的指令。

在過去的半個世紀裡,硬體發生了翻天覆地的變化,但馮·諾依曼模型仍然是當今大多數計算機的基礎。正如一位著名的計算機科學家艾倫·佩利斯曾經說過:

有時候我認為計算領域唯一的普遍性是取指-執行週期。
——艾倫·佩利斯,1981 年。


繼續我們上面的例子。我們從指令表中讀取 0101 的指令時停止了。

解碼後,我們正在執行 CPU。在我們的例子中,我們將地址 00000010(十進位制為 2)中的值儲存到暫存器中。因此,現在在我們的暫存器中,我們將擁有十進位制為 2 的值,供以後的操作使用。

暫存器
2

當此指令週期結束時,所有電路將關閉,當指令地址暫存器中的值增加 1 時,一個新的指令週期將開始。

什麼是控制單元?

[edit | edit source]
控制單元位於 CPU 內

控制單元是計算機中的組織力量,因為它負責 取指-執行週期。控制單元中有兩個特殊的暫存器。指令暫存器 (IR)包含正在執行的指令,而 程式計數器 (PC)包含要執行的下一條指令的地址。由於 算術邏輯單元 (ALU) 和控制單元協同工作,因此它們通常被認為是一個稱為 中央處理單元 (CPU) 的單元。



什麼是隨機存取儲存器 (RAM)?

[edit | edit source]
不同儲存量的不同 RAM 條

隨機存取儲存器 (RAM) 是一種儲存裝置,用作儲存器,並可以向 CPU 提供指令。RAM 用於 CPU 的臨時儲存,RAM 中儲存的資料僅在需要它的程式執行時或計算機正在執行時儲存。這意味著 RAM 是易失性的(如果斷電,資料將被擦除)。

RAM 的速度由儲存量、時鐘速度和延遲決定。時鐘速度是指它每秒能處理多少次操作(以赫茲為單位),現代計算機每秒能處理數百萬次操作。延遲是指將資料寫入 RAM 後到可用之間的時間。儲存量是指 RAM 可以容納多少資料,現代 RAM 條可以容納千兆位元組(十億位元組)的資料。

它還可以進行讀寫操作。這意味著記憶體既可以讀取,也可以訪問。

什麼是 CPU 的指令?

[edit | edit source]

所有 CPU 都帶有一組指令,將許多稱為操作碼的數字與不同的指令相關聯。指令由 CPU 從 RAM 中讀取,其中儲存著數字,這些數字為操作碼保留了一定數量的位,其餘的位用於記憶體位置資訊。

取決於 CPU 指令集的擴充套件程度,指令的範圍可以從加法和除法等操作到更復雜的邏輯任務。

例如,8 位指令 00011100,其操作碼為 0001,在以下情況下可能意味著將暫存器和記憶體位置 1100 處的數字相加。然後,數字 00110011(操作碼 0011)將結果儲存在記憶體位置 0011 中。

示例指令集
操作碼 指令
0000 結束
0001
0010
0011 儲存
0101 載入
... ...

什麼是 MDR?

[edit | edit source]

MDR 或記憶體資料暫存器在 CPU 處理資料時臨時儲存資料,作為 RAM 和 CPU 之間的中間體。它還臨時儲存將放置在記憶體中的資料。

它也可以稱為 MBR 或記憶體緩衝暫存器。

什麼是 MAR?

[edit | edit source]
一個顯示暫存器元件的 CPU,包括 MAR(記憶體地址暫存器)。

首先,MAR 代表記憶體地址暫存器。它是 CPU 元件的子元件,暫存器包含程式計數器、當前指令暫存器、累加器、記憶體資料暫存器和記憶體地址暫存器。

它本質上是一個儲存單元,儲存需要訪問的資料在 CPU 記憶體中的記憶體地址。它還儲存透過 系統匯流排(下一章)傳送到該地址的資料的記憶體地址。MAR 與 MDR(記憶體資料暫存器)協同工作,MDR 儲存從 MAR 中獲取的記憶體地址中儲存的實際資料。

什麼是資料匯流排和地址匯流排?

[edit | edit source]

在上圖中,所有部分都透過稱為匯流排的電線集合連線在一起,資料透過匯流排在計算機中傳輸。每條匯流排都承載三種資訊:地址、資料和控制

- 地址用於選擇將資料傳送到或從中獲取資料的記憶體位置或裝置。

- 然後資料透過匯流排在 CPU、記憶體和 I/O 裝置 之間流動。

- 控制資訊用於管理地址和資料的流動。例如,控制訊號通常用於確定資料的流動方向,是到 CPU 還是從 CPU 流出。

匯流排寬度是指它可以同時傳輸的位數。匯流排越寬,它可以一次移動的地址或資料位就越多。

資料匯流排的一個廣泛的例子是每天被使用數十億次的“通用序列匯流排”,也稱為 USB。這種匯流排用於傳輸資料、為您的手機充電和為您的電動削筆器供電,自 1996 年以來一直是地球上的標準。

什麼是快取記憶體?

[edit | edit source]
L3 共享快取

由於記憶體訪問相對於處理器速度而言非常耗時,因此許多架構都提供 快取記憶體。快取記憶體是一小部分快速訪問記憶體,其中儲存了經常使用的資料的副本。在進行主記憶體訪問之前,CPU 會檢查資料是否儲存在快取記憶體中。流水線是另一種用於加速 取指-執行週期 的技術。該技術將指令分成可以重疊的更小的步驟。

快取記憶體有三種類型。L1 快取是最小的,但也是最快的快取,包括資料和指令。L2 快取具有更大的記憶體,但速度較慢,並且僅儲存資料。L3 快取具有最大的記憶體,但速度最慢,並且僅儲存資料。

在個人計算機中,馮·諾依曼機中的元件物理上位於一個稱為主機板的印刷電路板上。主機板還具有連線,用於將其他裝置連線到匯流排,例如滑鼠、鍵盤或附加儲存裝置。

那麼,稱一臺機器為n位處理器意味著什麼呢?變數n通常指的是 CPU 通用暫存器中的位數:兩個n位數可以透過單個指令相加。它也可以指匯流排的寬度,即可定址記憶體的大小——但並不總是如此。此外,n 可以指資料匯流排的寬度——但並不總是如此。

CPU 執行一個將兩個數字加在一起的程式的例子是什麼?

[edit | edit source]

CPU 執行一個獲取兩個數字整數除法的餘數的程式的例子是什麼?

[edit | edit source]

馮·諾依曼體系結構是什麼?

[edit | edit source]

計算史上的一個重要里程碑是,在 1944-1945 年人們認識到,用於操作資料的指令和資料在邏輯上是相同的,可以儲存在同一個地方。基於這一原理構建的計算機設計被稱為馮·諾依曼體系結構,至今仍是現代計算機的基礎。儘管該名稱是為了紀念約翰·馮·諾依曼——一位參與了原子彈製造的傑出數學家——但這一想法可能起源於 J. 普雷斯珀·埃克特和約翰·莫克利,這兩位早期先驅者在同一時期曾在賓夕法尼亞大學的摩爾學院參與了 ENIAC 的工作。

馮·諾依曼體系結構的另一個主要特徵是,處理資訊的單元與儲存資訊的單元是分開的。這種特徵導致了馮·諾依曼體系結構的以下元件。



  • 儲存資料和指令的記憶體單元。
  • 能夠對資料執行算術和邏輯運算的算術/邏輯閘單元。
  • 將資料從外部世界移入計算機的輸入單元。
  • 將結果從計算機內部移到外部世界的輸出單元。
  • 充當舞臺單元,確保所有其他元件協同工作的控制單元。

記憶體、程序和 CPU 管理

[edit | edit source]

回想一下,執行程式駐留在主記憶體中,其指令在取指-譯碼-執行迴圈中逐個處理。多道程式設計是一種同時在主記憶體中保持多個程式的技術;這些程式競爭訪問 CPU 以完成工作。所有現代作業系統在某種程度上都採用多道程式設計。因此,作業系統必須執行記憶體管理以跟蹤哪些程式在記憶體中以及它們駐留在記憶體中的位置。

另一個重要的作業系統概念是程序的概念,它可以定義為正在執行的程式。程式是一組靜態指令。程序是一個動態實體,它在程式執行時表示該程式。透過多道程式設計,計算機系統可能同時擁有許多活動程序。作業系統必須仔細管理這些程序。在任何時刻,特定指令都可能成為下一個要執行的指令。中間值已經計算出來。程序可能在其執行過程中被中斷,因此作業系統執行程序管理以仔細跟蹤程序及其所有中間狀態的進度。

與記憶體管理和程序管理概念相關的是對CPU 排程的需求,它決定在任何給定時刻哪個記憶體中的程序由 CPU 執行。

但是,必須記住,作業系統本身只是一個必須執行的程式。作業系統程序必須與其他系統軟體和應用程式一起在主記憶體中進行管理和維護。作業系統與其他程式在同一個 CPU 上執行,它必須在它們之間輪流執行。

以下部分(單一連續記憶體管理、分割槽記憶體管理、分頁記憶體管理)僅供參考。計算機科學指南在2.1.6中明確指出,“不需要技術細節。例如,應該描述記憶體管理,但不需要描述如何在多工環境中處理它。” 因此,這些部分旨在說明記憶體管理技術,可以總結而不是在考試中使用。

單一連續記憶體管理

[edit | edit source]

一次僅將作業系統和另一個程式置於記憶體中。這是最基本的記憶體管理型別。

分割槽記憶體管理

[edit | edit source]

記憶體被分成不同的部分。透過這些不同的分割槽,作業系統和任何數量的程式可以同時執行。分割槽具有一個基地址暫存器和一個邊界暫存器。

基地址暫存器

  • 一個暫存器,它儲存當前分割槽(正在執行的分割槽)的起始地址。

邊界暫存器

  • 一個暫存器,它儲存當前分割槽的長度。

分割槽選擇 最佳適配

  • 將程式分配到第一個足夠大以容納它的分割槽。

最適配

  • 將程式分配到最小的分割槽,該分割槽足夠大以容納它。

最差適配

  • 將程式分配到最大的分割槽,該分割槽足夠大以容納它。

分頁記憶體管理

[edit | edit source]

一種將程序劃分為固定大小的頁面並將其載入到記憶體幀中的技術。

  • 主記憶體的固定大小部分,用於儲存程序頁面。

頁面

  • 程序的固定大小部分,被儲存到記憶體幀中。
華夏公益教科書