這學期學了計組。期末的時候照着之前的筆記和PPT稍微整理了一下考點里的內容。僅供參考。
第一章
一、基礎知識
-
馮諾伊曼機五大部件:
- 存儲器、控制器、運算器、輸入設備、輸出設備
-
計算機的分類:
- 個人計算機、服務器計算機、高性能(超級)計算機、嵌入式計算機、智能終端、雲計算
-
計算機設計八大定律(思想):
- 摩爾定律
- 用抽象簡化設計
- 加速常用時間
- 並行
- 流水線
- 預測
- 多層次存儲系統
- 冗余提高可靠性
-
計算機結構層次:
- 硬件
- 指令架構、硬件軟件接口
- 系統軟件(編譯、操作系統、數據庫)
- 應用軟件
-
指令系統架構(軟硬件接口),簡稱ISA
-
四種架構:
- MIPS, x86, RISC-V, arm
二、性能衡量與計算
-
性能衡量標准
-
響應時間
完成一個任務的時間,完整的需要包括輸入輸出時間、調用操作系統、空閑等待。
其中只有處理器執行時間和操作系統執行時間用在CPU,被稱為CPU時間。
-
吞吐量(單位時間完成的任務個數)
-
-
CPU性能參數:
- 主頻:1GHz = 1,000 MHz = 1,000,000,000 Hz
- 時鍾周期:1 s = 1,000 ms = 1,000,000 ns = 1,000,000,000 ps
- CPU time = 執行周期數 / 主頻
- ISA 決定了每條指令需要多少個周期是固定的,計算時一般用每條指令的平均周期數(CPI)
-
功耗:\(P = CV^2F\)
三、注意事項
- CPI 的“指令”指的是匯編指令,不是高級語言指令。
第二章
一、基礎知識
-
一些名詞及其縮寫
- CISC 復雜指令系統計算機
- RISC 精簡指令系統計算機
-
字節:1 byte = 8 bits,字:1 word = 4 bytes
-
Misp 是大端存儲(區別於 x86),高位放在低地址
-
對齊:
Misp 規定一個 32 位的數的最低位地址必須被 4 整除
-
寄存器編號於機器碼編號的對應
- $t0 - $t7 are reg's 8 - 15
- $t8 - $t9 are reg's 24 - 25
- $s0 - $s7 are reg's 16 - 23
-
寄存器的功能與名稱的對應:
- a0 - a3 存放參數
- v0 - v1 存結果(返回值)
- t0 - t9,s0 - s7,t 是臨時的。s 在過程調用后要復原。
- gp(global static data),sp(棧)
- fp(frame,幀指針,指向這個過程用到的堆棧的第一個地址)
- ra (return address,調用過程后會把 PC 存進 ra)
-
進程的組成:
- 棧與動態數據空間、靜態數據、代碼
二、misp 指令的大致分類與結構
-
三類指令
- 運算指令
- 傳送指令(訪存指令)
- 分支指令(條件分支、無條件分支)
-
指令的構成
- 32位:6位操作碼 + 26位操作數
-
R 型指令
- op(6) + rs(5) + rt(5) + rd(5) + shanmt(5) + funct(6)
- op 和 funct 決定了指令的功能,shanmt 是位移量,在 sll 和 srl 指令中會用上,其它時候置 0。
- 代表指令:
- add rd, rs, rt 和 addu rd, rs, rt 和 sub 等
- and rd, rs, rt 和 or
- mult rs, rt 和 multu 和 div 和 divu(rd 和 shanmt 是 0,結果低位/商存入 lo,高位/余數存入 hi)
- sll rd, rt, shamt 和 srl 等
- nor rd, rs, rt (not or)和
-
I 型指令
- op(6) + rs(5) + rt(5) + 立即數或地址(16,有符號)
- 代表指令:addi, addui, bne, beq, lw, sw 等
-
J 型指令
- op(6) + addr(26)
三、尋址
- 五種尋址模式
- 立即數尋址(直接通過立即數給出數據)
- 寄存器尋址(數據存在寄存器中,通過寄存器來訪問)
- 基址尋址(寄存器的值 + 形式地址,只是相加,沒有左移,是字節地址)
- PC 相對尋址(16 位形式地址左移兩位與 PC 相加)
- 偽直接尋址(26 位地址左移兩位與 PC 計數器的高 4 位相連)
四、特殊指令及其使用
-
算術位移與邏輯位移
- 算術右移(sra),前面補的是符號位;邏輯右移,前面補的是 0。
-
如何取非:nor $t0, $t1, $zero
-
如何置 0:add $s0, $zero, $zero
-
比較指令:
-
小於置1指令:
slt rd, rs, rt 和 sltu rd, rs, rt(rs 比 rt 小就 rd 置 1)
slti rt, rs, imm
-
在早期的 misp,只有這兩條指令和 bne,beq配合
-
-
過程調用與棧:
-
jal procedureLabel
把 PC 存到 ra,順便把 procedureLabel 賦給 PC
-
jr $ra
-
-
過程的嵌套調用:
-
舉例:(n in $a0,返回值 in $v0)
int fact(int n) { if(n < 1) return 1; return n * fact(n - 1); }
其匯編代碼對應為:
fact: addi $sp, $sp, -8 sw $ra, 4($sp) sw $a0, 0($sp) slti $to, $a0, 1 #判斷a0是否小於1 beq $t0, $zero, L1 addi $v0, $zero, 1 addi $sp, $sp, jr $ra #小於1於是返回了 L1: addi $a0, $a0, -1 jal fact lw $a0, 0($sp) lw $ra, 4($sp) addi $sp, $sp, 8 mul $v0, $a0, $v0 jr $ra
-
-
字節、半 word 操作指令
- lb/lh rt, offset(rs):讀入這個地址開始的八位/十六位作為低位,然后根據符號位補全,放入寄存器中
- lbu, lhu:類似,但補 0
- sb sh:類似,將寄存器的低字節寫進去
- 注意,上面的“低位”,實際上是最靠右的位(因為大端存儲)
-
如何給寄存器賦 32 位的整數
-
lui rt, constant 把常數賦到寄存器高 16 位里,同時低 16 位清 0
-
而低 16 位的數值可以用或運算弄上去
-
舉例:
lui $s0, 61 ori $s0, $s0, 2304
-
-
同步指令:
-
常出現在多處理器或多線程中。內存與寄存器的交換過程是原子操作,不可分割。
-
ll 與 sc,需要成對使用。前者指定一個鎖內存單元。若中途有人修改了這段內存,那么 sc 會在 rt 里返回 0,表示失敗;否則會把 rt 寫入內存,並把它的值(返回值)設為 1
-
例子:
try: add $t0, $zero, $s4 ll $t1, 0($s1) .... 這中間的指令要一次性執行完 sc $t0, 0($s1) beq $t0, $zero, try add $s4, $zero, $t1
-
五、注意事項
-
0 不能用在立即數,得用 $zero。
-
匯編里,源寄存器在目的寄存器之后;但在機器語言里,目的寄存器在后面。
第三章
一、規格化浮點數表示
-
標准形式:
-
IEEE Std 754 - 1985
-
\(x = (-1)^S \times (1 + Fraction) \times 2^{Exponent - Bias}\)
-
分為單精度和雙精度(32 和 64)兩種
-
S(1) + Exponent(8/11) + Fraction(23/52)
-
-
指數的取值與含義:
- 為了比較的方便,我們將階碼加上 127/1023(bios) 轉化為整數,稱為移碼
- 注意,浮點數的指數不能為全0也不能為全1。因為這兩種情形有另外的含義
- 指數全為1 小數全為0 表示正負無窮
- 指數全為1 但小鼠不全為0 表示NaN(即 Not a number,不合法的數字)
- 指數全為 0,表示 \(x = (-1)^S \times (0 + Fraction) \times 2^{1 - Bias}\)
-
注意,0.0 有正負 0 兩種表示方法。
二、浮點運算
- 由協處理器完成
- 步驟:
- 對階(移位器):把較小的階調整到較大的階
- 小數部分相加(加法器)
- 規格化相加和(移位器)
- 判斷指數溢出(若溢出,拋出異常;否則下一步)
- 舍入(若舍入后不再規格化,還要再回到第三步)
三、整數相加溢出判斷
-
有符號數
-
首先,若 A 與 B 異號,相加不可能溢出
-
若 A 與 B 同號,但 S 與 A 異號,則發生了溢出
-
通過 xor 后的值與 0 的大小關系,可以判斷出是否異號。
addu $t0, $t1, $t2 # $t0 = sum xor $t3, $t1, $t2 slt $t3, $t3, $zero # check if signs differ bne $t3, $zero, NO_overflow xor $t3, $t0, $t1 slt $t3, $t3, $zero bne $t3, $zero, Overflow
-
-
無符號數
-
要判斷的是 \(A + B > 2^{32} - 1\)
-
可轉化為 \(B > 2^{32} - 1 - A\),大於號右邊實際上為 A 的按位取反。
addu $t0, $t1, $t2 nor $t3, $t1, $zero sltu $t3, $t3, $t2 bne $t3, $zero, Overflow
-
四、注意事項與小技巧
- 如何給補碼取負:連同符號位一起取反后加一即可。
- 如何舍入:
- 偶數舍入法:為了保證舍入是均衡的(有的入有的舍對半分)
- 最后兩位 00舍 11入 101入 001舍(?不要求掌握)
- 設計規則:
- 簡單來自規則(一樣的指令長度,類似的結構)
- 折中(只有三種格式)
- 越小越快(指令集有限,尋址方式有限)
- 加速常見事件
第四章
一、單周期處理器設計
- 一個時鍾周期執行一條指令
- 單周期的時鍾周期,取得是執行時間最久的那條指令的周期。(一般為 lw)
- 指令的執行過程:
- 三個步驟:取址,譯碼,執行
- 取址:從內存中取指令,PC+4
- 譯碼:將指令給 Control 產生控制信號,讀寄存器
- 執行:各有不同
- 如果只有一個內存接口,會產生結構冒險,所以我們將讀取數據的和取址的分開
- 第一個下降沿取出數據,然后馬上經過組合邏輯過程算出結果,然后在第二個下降沿馬上寫入狀態單元。
- 取完址后,要把寄存器地址送到寄存器堆,把操作碼和功能碼送到控制單元。
- 對於R型指令的執行:先根據 op 和 funct 對 rs 和 rt 里的數據進行操作,然后寫入到 rd 里。不同的操作對 ALU 有不同的要求,於是我們有:ALU control 信號。
- 注意到並不是每一個周期都有寫回這一個操作(如 sw),我們需要一個額外的寫控制信號來控制寄存器堆的寫入。我們稱之為:RegWrite。
- 對於 Load 和 Store(I型)的執行:
- 首先,計算地址時,需要用偏移量+寄存器值,所以,需要把偏移量擴展到 32 位。為此,我們增設一個Sign Extend 符號擴展單元。
- 涉及到內存的讀寫,我們需要 MemRead 和 MemWrite 信號。
- 對於 Branch 指令的執行:
- 需要用到 ALU 比較 rs 和 rt 的值。
- 需要計算地址不僅要把偏移量擴展到 32 位,還要左移兩位。因此需要一個額外的左移兩位運算器。
- 需要用新的地址來更新PC。為此也需要額外的控制信號。
- 對於 J 指令:
- 需要左移兩位,還需要取出 PC 的高 4 位。
- 需要額外的左移兩位擴到28位的運算器和取出PC高四位的數據線。
- 需要額外的控制信號。
- 觀察到由於指令的不同,需要傳入 ALU 或 Write 接口的數據來源不同。所以,我們需要額外的多路選擇器。而有了選擇器,我們自然需要與之對應的選擇信號。
- 觀察到寫回寄存器的來源有 ALU 和 Mem,所以我們需要一個 MemtoReg 信號。
- 傳入 ALU 的數據,有的來源寄存器,有的來源符號擴展后的立即數,所以要有 ALUSrc 信號。
- 觀察到 Branch 指令跳轉與不跳轉的 PC 不同。所以需要 PCSrc 信號。
- 觀察到目標寄存器在 r 型里是 rd,i 型的是 rt,所以要有 RegDst 來決定取哪個位置的。
- op 傳入控制單元,產生上述的各種控制單元。
- funct 傳入 ALU control,和 ALUOp(根據 op 產生,兩位)一同,產生 ALU control(4位)信號。
- ALU 的 zero 輸出與 Branch 信號,相與產生 PCSrc。還有 j 指令,所以還需要 Jump 信號。
二、多周期處理器設計
- 每個周期只執行一個操作,因此存儲器和指令存儲器可以合並,加法器也不需要搞很多個。
- 需要注意的是 j 指令的 Shift left 2 與 branch 的不一樣。
- 需要添加狀態單元,存下每個周期的東西。
- IR 和 MDR。前者存指令,后者存內存中讀取的數據。我們需要 IRWrite 來區分二者。而內存讀寫器的地址來源也需要一個信號:IorD 來控制。
- ALU 由於用途增多,需要的選擇信號也更復雜了。PC,A。B,4,立即數,左移兩位的立即數。
- 至於圖上的 PCSrc 的變化,只是把 jump 也合了進去罷了。
三、流水線處理器設計
- 五級流水線:
- IF: Instruction fetch from memory
- ID: Instruction decode & register read
- EX: Execute operation or calculate address
- MEM: Access memory operand
- WB: Write result back to register
- 流水線處理器的周期大小是流水線中耗時最久的一級的大小。
- 三種冒險:
- 結構冒險:例如,IF 和 數據操作 的冒險。解決方法是增加額外的內存讀寫器。
- 數據冒險:解決方法如下:
- 阻塞:塞兩個氣泡就夠。因為都是前半周期寫入,后半周期讀取。
- 旁路
- 對代碼重新排序
- 控制冒險:
- 阻塞
- 分支預測(只有預測錯誤時才阻塞)
- 由於每個周期,各個段執行的是不同的指令,如果像之前那樣直接連接,會導致數據丟失(因為是組合邏輯)。所以,我們需要四個流水線寄存器,分別為:IF/ID,ID/EX,EX/MEM,MEM/WB。
- 除了存數據外,流水線寄存器還會存控制信號。
- 譯碼時,會將操作碼傳入控制單元,一次性產生所有的控制信號。包括 EX,MEM,WB。
- 但是下一級是 EX,只會用到 EX 的,所以 MEM 和 WB 的控制信號還要傳給下一級的流水線寄存器。
- 數據冒險的旁路設計
- 冒險的判斷由三個部分組成:(以 EX 冒險為例)
- EX/MEM.RegWrite = 1
- EX/MEM.RegisterRd 不為 0(也就是 $zero,或是無 Rd)
- EX/MEM.RegisterRd = ID/EX.RegisterRs/RT
- EX/MEM 和 MEM/WB 的 Rd 編號會傳到旁路單元里,這個單元會根據當前正在譯碼的這個 Rs 和 Rt 來判斷是否需要旁路,並輸出 forwardA 和 forwardB 信號(對應 Rs 和 Rt)
- 需要注意到,有時,一條指令會同時面臨兩種冒險,這時我們需要的是最近的數據。所以,對於 MEM 冒險,我們還需要判斷是否同時存在 EX 冒險。只有當 EX 冒險的條件不滿足時,才當成 MEM 冒險處理。
- Load 產生的冒險,是無法僅通過旁路解決的。(因為它的值到 MEM 才被取出)
- Load 是 I 型指令,它的目的寄存器是 Rt。Load 會產生 MemRead 信號。可以根據這個來判斷。
- 但要注意判斷的時機。ID 階段是已經把東西拿出來了。所以,我們要在 IF/ID 階段就判斷,然后塞入氣泡。
- 判斷條件如下:ID/EX.MemRead and ((ID/EX.RegisterRt = IF/ID.RegisterRs) or (ID/EX.RegisterRt = IF/ID.RegisterRs))
- 滿足條件時,阻塞,塞入氣泡。
- 阻塞,就是:
- 將 ID/EX 寄存器的控制信號清 0(這意味着后面三個階段會做 nop)
- 阻止更新 PC 和 IF/ID 寄存器(意味着當前這個指令會被不斷地解碼,下個指令會不斷取址)
- 以上過程由一個獨立的單元:冒險檢測單元完成。
- 冒險的判斷由三個部分組成:(以 EX 冒險為例)
- 控制冒險的處理
- 分支決定的位置。可在 EX。一般我們更早一點,在 ID 決定。為此,我們將 PC 計算的部件(符號擴展和加法器)挪到 ID,同時加上一個等於比較器。
- branch 分支的數據冒險處理方法類似
- 分支預測。但是就算你預測了,你還是需要一個周期來計算地址。
- 分支延時槽。把后面一些無影響的指令提前拉上來執行。但是,這很難做到。
- 異常的處理
- 被中斷的指令地址會被存在 EPC 里。
- System Control Coprocessor(CP0),或者叫協處理器(?)
- 故障寄存器。在 Misp 中,每一位,就是一種異常。(區別於 intel 每種值一種異常)
- 中斷是由軟件來處理。由 CPU 執行中斷處理程序。
- 中斷處理程序在 BIOS 主板上。
第五章
一、存儲器基礎知識
-
最開始,馮諾依曼機的性能瓶頸在於 CPU。后來,轉移到了存儲器上,現在以存儲器為中心了。
-
容量大、速度快,是我們對存儲器的期望。
-
多級存儲器(存儲層次)
- 離 CPU 越近,速度越快;越遠,容量越大。
- CPU -- Cache(封裝在 CPU 里) -- Mem(內存條插在主板上)-- Disk(上面這兩都是通過總線與 CPU 連接)
-
程序在內存中占用的是連續的內存空間,因此稱其具有空間局部性
-
存儲器的性能差異源於材質
-
RAM:SRAM(Cache),DRAM(Mem)
-
flash 固態硬盤,機械硬盤
-
ROM:
控制存儲器、BIOS(主板上的驅動程序)都屬於 ROM。
PROM,EPROM,E2PROM 等
-
-
存儲器的基本原理(要求):
- 要有兩種穩定狀態來表示 0 和 1(能表示)
- 可以由外部信號來轉換這兩狀態(能寫入)
- 能讀出其中的信息(能讀出)
- 無外部原因時能保存(能保持)
-
存儲器性能指標
-
存儲容量,存儲速度
-
存儲速度分兩類,第二類比較常用
存取時間 ta:讀寫一次花的時間
存取周期 tm:間隔多長時間后可以啟動第二次讀寫(算上了電路的恢復過程)
-
-
硬盤性能計算:(前兩項為主)
- 平均尋道時間(產家固定)
- 等待時間(平均旋轉延時,轉半圈的時間,注意 rpm 的單位是每分鍾多少轉)
- 傳輸時間,控制延時
二、Cache - Mem
-
三種映射方法
-
直接映射
若 Cache 有 n 個塊,這個地址的塊號是 i,那它就會被對應到 Cache 中索引為 i % n 的塊上。
-
全相聯
不規定約束。只要空出來的塊就可以塞。每個塊都有一個比較器,用於比較標簽和有效位是否對應。
-
多路組相聯
有多少路,就意味着每個索引含有多少個塊。每個索引(或者說每個組)內是全相聯的。
-
-
Miss 會發生什么?
- 首先,阻塞流水線
- 從下一級存儲器中獲取這個塊
- 重新取址 或 繼續完成數據過程
-
寫方法(命中時)
-
寫直達法:命中后,既改 Cache,又更新主存。
但這會讓寫變得很慢。
一種解決方法是:使用寫緩存區,當緩存區滿了再一起寫入主存。
-
寫回法:命中后,只寫 Cache,不寫主存。
需要臟位。當一個臟塊被替換時,把它寫回內存。
-
-
寫方法(缺失時)
- 寫直達法:兩種應對方式
- 寫分配法:把塊拿到 Cache 里
- 寫不分配法:不拿過來。這種一般可能用於操作系統或是應用程序的初始化。
- 寫回法:總是會把塊提取到 Cache 里
- 寫直達法:兩種應對方式
-
多級 Cache
- 第一級專注速度,第二季專注減少 miss
-
缺失延時與帶寬計算
-
舉例:(圖中的 bus clock 不是 CPU clock,是由總線頻率決定的)
-
-
涉及此的 CPI 計算
-
舉例:
)
-
-
影響缺失率的因素
-
塊的大小
由空間局限性,塊的增大,也許可以提高命中率。
但塊的增大,同樣意味着更少的塊、更多的競爭,這有可能反過來使得缺失率上升。
塊增大后可能會造成“污染”。也就是增加了調入大量無用數據的可能性。
同時,更大的塊也意味着更大的缺失延時。
-
相聯方式
受限於硬件成本。
-
多級 cache
-
編譯優化
-
軟件、代碼自身寫法(比如經典的二重循環分塊)
-
-
替換方式:
-
LRU,MRU 和 隨機
-
一般是 LRU(最近最少使用替換算法)
-
如何算對要替換哪個?
把組內的標簽按最近訪問的順序排,訪問到哪個就把它提到最前面,然后替換就拿走最后面的那個(MRU 是拿走最前面的)
-
-
計算注意事項
- Cache 包含數據、標簽和有效位,算的時候一般不算臟位和引用位,若算上了,需要文字說明。
- 注意題目對 Cache 大小和塊大小的定義,尤其是一道題里出現兩個不同的 Cache 時。
- 注意大小的單位是字還是字節。
- 上來第一件事是對地址進行划分。先把塊內地址,或者說塊內偏移量的那幾位划出來,然后余下的塊號再來討論。
- 求 CPI 時,記得如果給延時單位不是時鍾周期,要先根據主頻算出時鍾周期,再把延時轉化為時鍾周期數。
三、可靠性評價
- 可靠性評價:
- MTTF:mean time to failure (平均無故障時間)
- MTTR:mean time to repair (平均修理時間)
- MTBF = MTTF + MTTR:mean time between failures
- Availability = MTTF / MTBF
- 兩種提高可靠性的方式:
- 提高無故障時間:錯誤避免、容忍(備份)、預測
- 降低修復時間(提高診斷、維修的能力,設備備份、快速替換)
四、校驗碼
- 奇偶校驗:
- 一般用於計算機內部數據傳輸,距離短,外界干擾少
- 常用校驗碼:
- 漢明碼
- CRC無限冗余校驗碼
- 漢明碼:
- 給數分組,每一組加一個奇偶校驗位,這個分組是交叉分組的
- 如果位數是2的次冪,那那一位就是校驗位。假如它是 \(2^p\) 位,那么它校驗的是所有第 p 位為 1 的位。
- 一般為偶校驗
- 漢明碼舉例:原八位:0110 1101
H1 0001 | H2 0010 | H3 0011 | H4 0100 | H5 0101 | H6 0110 | H7 0111 | H8 1000 | H9 1001 | H10 1010 | H11 1011 | H12 1100 |
---|---|---|---|---|---|---|---|---|---|---|---|
P1 | P2 | 0 | P3 | 1 | 1 | 0 | P4 | 1 | 1 | 0 | 1 |
0 | 0 | 1 | 0 | 1 | 0 | ||||||
0 | 0 | 1 | 0 | 1 | 0 | ||||||
1 | 1 | 1 | 0 | 1 | |||||||
1 | 1 | 1 | 0 | 1 |
所得校驗碼為:000111011101
-
如何檢驗出錯誤的位?
-
定義:vi = pi 異或上 (pi 檢驗的所有位的異或和),如:
-
v1 = p1 ^ H3 ^ H5 ^ ...
v2 = p2 ^ H3 ^ ...
v3 = p3 ^ H5 ^ ..
v4 = p4 ^ H9 ^ ..
-
v4v3v2v1 表示的二進制數,實際上就是出錯的位數。
-
-
如何檢測出是有兩位錯誤?
- 在后面再加一個第 13 位。檢驗前面的所有 12 位。
- 若這一位與前面所有的異或和的異或和為1,表明有一個錯。
- 若異或為0,且有錯,那就是兩個錯。
-
有幾位校驗位?\(2^P \geq P + d + 1\)
五、虛擬存儲器
-
一些名詞及其縮寫
- VM,virtual machine,虛擬機
- VMM,Virtual Machine Monitor,是軟件,將虛擬的內存訪問轉化為對物理內存、輸入輸出、CPU的實際調用。
-
虛擬空間:
- 又稱程序空間,操作系統為每個運行起來的程序分配的空間。
- 虛擬地址可以對應到物理地址。
-
頁:
-
主存 與 Disk 之間,也是按塊傳輸的,這個塊比較大,被叫做“頁”。
-
虛擬存儲器和主存也按同樣大小來畫頁。類似的,有“虛擬頁號”,“頁內地址”。
-
-
頁表:
- 虛擬地址與物理地址的轉化由 CPU 完成。但其對應表,頁表由操作系統產生,並存放在主存中。
- 有一個寄存器會存頁表首地址的位置。
- 頁表的索引就是虛擬頁號。每個表項是一個虛擬頁號對應的物理頁號。
- Disk 到 Mem 是全相聯的。主存滿了就 LRU。
- 每個表項里有:物理地址或輔存地址、有效位、臟位、reference位。CPU 隔一段時間就會清空 r 位。
- 有效位 1 表示已經在內存中。
- 寫硬盤的方法是寫回法。因為寫回去要花的時間太久了。
-
頁故障:
- 有效位為 0。
- CPU 會調用操作系統的頁故障處理程序,把輔存的那一頁調到主存中(這一過程不是由 CPU 完成)。
- 這非常的慢。
-
TLB:
- 為了方便地址的轉換(不需要多次訪存)而設置的 Cache。稱為快表。
- 保存的是最近要用的虛擬頁號與主存頁號的對應關系。
- 與一般的 Cache 類似,這個也有標記位、有效位、臟位等。也有三種映射方式。
- 記住,是用虛擬頁號去索引的,不是用虛擬地址哦!
-
注意看題目給的是字地址還是字節地址。
六、小知識
-
U盤寫多了二氧化硅層會薄,然后無法阻擋電子,然后就寄了
-
輔存相關:
-
輔助存儲器,disk、硬盤,屬於外設。
-
flash 半導體存儲元是有壽命的,寫 1000 次就寫穿了,所以需要有軟件算法來保證負債均衡。
-
機械硬盤(溫切斯特盤)常封死,防塵防潮
-
-
cache 和 Mem 是一時性的,斷了電就沒了。
-
輔存的讀寫:
- 尋道:把磁頭移到磁道上
- 等待:等待扇區轉到合適的位置上(旋轉延時)
硬盤有專門的硬盤控制器
-
文件系統最重要的是建立文件索引,格式化會將索引寫進去,所以格式化完容量會減少
-
剛開機時,mem 和 cache 是空的,會先有一個裝載操作系統的過程
-
5G基站的覆蓋范圍只有 100m,所以現在基本只在大城市有