【學習筆記】《計算機組成原理與設計》學習筆記


這學期學了計組。期末的時候照着之前的筆記和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。
    • 代表指令:
      1. add rd, rs, rt 和 addu rd, rs, rt 和 sub 等
      2. and rd, rs, rt 和 or
      3. mult rs, rt 和 multu 和 div 和 divu(rd 和 shanmt 是 0,結果低位/商存入 lo,高位/余數存入 hi)
      4. sll rd, rt, shamt 和 srl 等
      5. 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 符號擴展單元。
    • 涉及到內存的讀寫,我們需要 MemReadMemWrite 信號。
  • 對於 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 也合了進去罷了。

三、流水線處理器設計

  • 五級流水線:
    1. IF: Instruction fetch from memory
    2. ID: Instruction decode & register read
    3. EX: Execute operation or calculate address
    4. MEM: Access memory operand
    5. WB: Write result back to register
  • 流水線處理器的周期大小是流水線中耗時最久的一級的大小。
  • 三種冒險:
    • 結構冒險:例如,IF 和 數據操作 的冒險。解決方法是增加額外的內存讀寫器。
    • 數據冒險:解決方法如下:
      • 阻塞:塞兩個氣泡就夠。因為都是前半周期寫入,后半周期讀取。
      • 旁路
      • 對代碼重新排序
    • 控制冒險:
      • 阻塞
      • 分支預測(只有預測錯誤時才阻塞)
  • 由於每個周期,各個段執行的是不同的指令,如果像之前那樣直接連接,會導致數據丟失(因為是組合邏輯)。所以,我們需要四個流水線寄存器,分別為:IF/ID,ID/EX,EX/MEM,MEM/WB。
  • 除了存數據外,流水線寄存器還會存控制信號。
    • 譯碼時,會將操作碼傳入控制單元,一次性產生所有的控制信號。包括 EX,MEM,WB。
    • 但是下一級是 EX,只會用到 EX 的,所以 MEM 和 WB 的控制信號還要傳給下一級的流水線寄存器。
  • 數據冒險的旁路設計
    • 冒險的判斷由三個部分組成:(以 EX 冒險為例)
      1. EX/MEM.RegWrite = 1
      2. EX/MEM.RegisterRd 不為 0(也就是 $zero,或是無 Rd)
      3. 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))
      • 滿足條件時,阻塞,塞入氣泡。
      • 阻塞,就是:
        1. 將 ID/EX 寄存器的控制信號清 0(這意味着后面三個階段會做 nop)
        2. 阻止更新 PC 和 IF/ID 寄存器(意味着當前這個指令會被不斷地解碼,下個指令會不斷取址)
      • 以上過程由一個獨立的單元:冒險檢測單元完成。
  • 控制冒險的處理
    • 分支決定的位置。可在 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,所以現在基本只在大城市有


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM