第一章 概述
第二章 處理器體系結構
處理器設計,兩個主要問題:指令集和機器結構(組成原理)
• 體系結構(Architecture)到底是什么?
– 程序員眼中的計算機的組織方法
• 體系結構的要素:指令集和操作數的組織方法(寄存器、內存)
• 要了解一國人,先要懂一國語言。(計算機,指令集)
• 計算機的語言:詞匯->指令,詞典->指令集。
• 指令集(s1)的符號表示 -> 匯編語言($s1) -> 機器語言(0101)
操作數位置
ALU:ADD、SUB、AND、OR……
寄存器(register):在處理器內部,靠近ALU,速度極快,成本昂貴。
操作數的可尋址性:內存容量增加 -> 內存地址長度增加 -> 一條指令內可能無法容納多個內存地址。
計算:對 4GB 內存空間進行線性尋址,需要多少根(位)地址線?
答:
32根。10根尋址1K,20根尋址1M,30根尋址1G,32尋址4G,每個內存單元大小為1Byte。
字節序
一個字包含的4個字節如何使用?
• 大端(Big Endianness)機器
– 數字的高位(MSB)位於字地址上
• 小端(Little Endianness)機器
– 數字的低位(MSB)位於字地址上
大端模式,是指數據的低位保存在內存的高地址中,而數據的高位,保存在內存的低地址中;
小端模式,是指數據的低位保存在內存的低地址中,而數據的高位保存在內存的高地址中。
函數調用
•保存 Caller 的狀態(為什么?哪里?寄存器?誰來保存?)
• 將實參傳給 Callee
• 保存調用點的返回地址
• 將程序控制權交給 Callee
• 為 Callee 的局部變量分配內存空間,Callee運行
• 接收 Callee 的返回值並傳給 Caller
• 從調用點返回
棧指針和幀指針之間的區別
在函數的執行過程中,棧指針的位置有可能發生變化。棧幀內的所有元素的訪問都基於棧指針,如果棧指針變化,則所有元素的訪問方法都會變化……
幀指針在棧幀內的位置固定,通過偏移量訪問其他元素。
幀指針包含棧中與被執行過程相關的活動記錄的第一個地址,並且這個過程的執行過程都不會改變。當然,如果該過程又調用了別的過程,則它的幀指針也需要進行保存和恢復,這由被調用者來完成。因此被調用者所做的第一件事就是將幀指針保存到棧中,並將當前的棧指針復制給幀指針。
指令格式
習題
2-12
如何使用已有的LC-2200 ISA來模擬一條減法指令
答:利用負數二進制可表示為正數取反后加一
nand 與非
B <- B NAND B ; not B
B <- B+1 ; B+1
A <- A+B ; A+B
2-21
答:間接尋址:取內存中所存內存地址指向的內容
LW Rx, Ry, 0
LW Rx, Rx, 0
第三章 處理器的實現
只允許同時讀寫單個寄存器的寄存器堆稱為單端口寄存器堆(SPRF)。
允許同時讀寫兩個寄存器的寄存器堆,稱為雙端口寄存器堆(DPRF)
數據通路的工作原理
在LC-2200處理器中,在ALU之后沒有寄存器文件,因為ALU操作的結果被寫入IR指向的目標寄存器中,所以結果被直接從ALU驅動到總線上到正確的寄存器。
數據通路的設計
處理器(CPU)包含兩個主要部分
– 數據通路(data path):所有的邏輯資源
– 控制邏輯(control unit):為數據通路提供控制信號
控制單元實現
• 控制單元的本質?FSM。 • FSM的工作原理:輸入和當前狀態 -> 輸出和新狀態。
• 當前狀態存在哪里?狀態寄存器。
• 輸出和新狀態信息從哪來?查找表格。
• 表格內容變化嗎?設計好就不變了。
• 表格存在哪里?非易失性存儲(ROM)。
第四章 中斷、陷入及異常
同步事件
在規划好的時間點發生的事件,與系統的其他活動協調一致。
異步事件
在系統計划之外發生的事情
三種程序執行的不連續性
中斷
- 一般指外部I/O設備引起的不連續性。與系統的正常運行是異步的。
陷入
- 程序正常運行過程中發生的操作系統調用(讀寫文件、網絡發送數據)
- Linux用戶模式、程序棧 -> 內核模式特權指令、內核棧,也叫軟件中斷
異常
- 一般由於程序執行錯誤導致(除以零)
- 某些編程語言的異常機制,允許錯誤傳播
修改FSM
改進的中斷Handler
中斷處理的完整流程
• 外部設備置位INT線;
• 處理器在當前指令周期完成之后,檢查INT線;
• 如果發現有外部中斷請求,處理器進入INT宏狀態,並置位INTA線;
• 外部設備收到INTA信號之后,將自己在IVT中的中斷向量放到數據線上;
• 處理器收到中斷向量后,在IVT中進行查找,找到其對應的Handler地址,設為0x5000; • 處理器將當前PC值存入$k0,然后將0x5000寫入PC,開始中斷Handler流程。
體系結構和硬件改進總結
• 一個中斷向量表IVT,存儲各個Handler的內存地址;
• 一個異常/陷入寄存器(ETR),包含內部E、T值;
• 接收外部中斷值的硬件機制;
• 用戶/內核模式,以及相應的處理器mode位;
• 與mode位相關的用戶/內核棧;
• 一種硬件機制:在$k0中保存PC,並能從IVT中檢索Handler地址;
• 3條新指令:禁止中斷、運行中斷、中斷返回
中斷處理流程
接受中斷請求
INT宏狀態——接受向量
轉交控制權給處理程序代碼
返回原始程序
第五章 處理器性能與流水線處理器的設計
時間和空間性能指標
衡量程序性能的兩個重要的指標:
- 空間指標:程序的代碼和數據需要多少內存空間?(內存印跡,memory footprint)
- 時間指標:程序執行需要多少時間?
處理器的兩種設計思路:
- CISC:復雜指令集計算機,一條指令,多種操作,內存印跡小(時代限制:內存、緩存出現)
- RISC:精簡指令集計算機,與CISC互相影響
程序的內存印跡與執行時間沒有直接關系
程序的執行時間
設n為程序執行的總指令數,則有:
執行時間 = (∑ CPIj) * 時鍾周期時間, 1 ≤ j ≤ n 或者:執行時間 = n * CPIAvg * 時鍾周期時間
注:n是被指令數,而不是程序內靜態指令數簡單求和
CPI:關注的是單條指令需要的時間,概念Latency(延時)
概念吞吐量 Throughput,關注的是單位時間內執行的指令數目
單位:IPC,Instructions Per Clock cycle
提高處理器的性能
(1)減少時鍾周期時間(提高CPU主頻)
(2)改進數據通路組織以減小CPI
(3)減少執行的指令數
例5-1
例5-4
加速比
三種冒險
三種冒險
• 結構性冒險、數據冒險、控制冒險
• 降低流水線的效率(IPC<1) • 流水線是同步的,指令無法傳遞至下一個階段就會發送“氣泡”
• “氣泡”即NOP空指令
• 編譯器編譯后的程序,未加優化時可能出現CPI不高,但是執行時間很長的情況(三種冒險)
指令流水
例5-11
例5-12
例5-17
習題
3. What would be the execution time for a program containing 2,000,000 instructions if the processor clock was running at 8 MHz and each instruction takes 4 clock cycles?
exec. time = n*CPI ave*clock cycle time
exec. time = 2000000(4)(1/8000000)
exec. time = 1 sec
4. A smart architect re-implements a given instruction-set architecture, halving the CPI for 50% of the instructions, while increasing the clock cycle time of the processor by 10%. How much faster is the new implementation compared to the original? Assume that the usage of all instructions is equally likely in determining the execution time of any program for the purposes of this problem.
Old CPI = 1
Old Clock Cycle Time = 1
Old Total Time = 1 * 1 = 1
New CPI = 0.5
New Clock Cycle Time = 1.1
New Total Time = 0.5 * 1.1 = 0.55
Speedup = Old Total Time / New Total Time = 1 / 0.55 = 1.82
The new implementation has a speedup of 1.82, meaning that the new implementation is 82% faster than the old implementation.
6. Given the CPI of various instruction classes
Class CPI
R-type 2
I-type 10
J-type 3
S-type 4
And instruction frequency as shown:
Class Program 1 Program 2
R 3 10
I 3 1
J 5 2
S 2 3
Which code will execute faster and why?
Program 1 Total CPI = 3 * 2 + 3 * 10 + 5 * 3 + 2 * 4
= 6 + 30 + 15 + 8
= 59
Program 2 Total CPI = 10 * 2 + 1 * 10 + 2 * 3 + 3 * 4
= 20 + 10 + 6 + 12
= 48
Program 2 will execute faster since the total number of cycles it will take to execute is less than the total number of cycles of Program 1.
第六章 處理器調度
什么是操作系統?一個為執行用戶程序供資源的程序。
什么是資源?處理器、內存、IO(輸入輸出)
如何創建一個程序?從問題描述到內存印跡
調度基礎
有兩種主要的調度類型:
- 搶占式調度 Preemptive
- 非搶占式調度 Non-preemptive
基本的調度步驟
- 獲得處理器控制權
- 當前運行的進程的狀態保存
- 選擇一個新進程運行
- 把新選擇的進程分發到處理器上運行
進程控制塊(PCB)
性能指標
系統中心
- 處理器利用率:處理器繁忙的時間比例
- 吞吐量:單位時間內完成的作業個數
- 平均周轉時間: 作業進入和離開系統所花的平均時間
- 平均等待時間:作業在系統中需要等待的平均時間
用戶中心:
- 響應時間:系統需要響應用戶的時間
飢餓:一個作業一直沒有進展(響應時間無限大)
護送效應:防止長時間運行的作業完全占據CPU的使用。
討論前提
- 忽略進程切換時間(context switch)
- 一個I/O隊列
- I/O請求按被進程請求的順序處理。
非搶占式調度算法
先到先服務FCFS
最短作業優先SJF
優先級 priority
例6-1
例6-3
輪轉調度器
習題 6-11
Assuming each process requires a CPU burst followed by an I/O burst followed by a final CPU burst (as in Example 1 in Section 6.6):
FCFS
SJF
Round Robin (assumed timeslice = 2)
第七章 內存管理技術
靜態重定位
指的是一個進程的內存界限在鏈接並創建可執行程序的時候被設定。
在鏈接器生成可執行文件時,確定進程的內存上下限。
• 體系結構提供上下限寄存器,PCB負責操作(how)。
• 分發器分發進程時,設置PCB中上下限寄存器的值,不再更改。
• 進程替換(swap),進程出入內存使用同樣的內存位置。
• 缺點:原內存空間一旦被占用,被替換出去的進程就無法再被加載。
• 靜態重命名:進程加載時改變內存位置的技術,加載器將修改原程序中所有與內存地址相關的語句。(60年代IBM大型機)
動態重定位
是指能夠把可執行程序加載到內存中任意能裝得下該進程的區域。
• 體系結構提供:基址寄存器和限長寄存器。
• 只要能滿足進程的內存大小需求,就可以將可執行程序放到內存里的任何位置。
• 偏移操作在進程加載入內存時發生。
• 進程被替換出內存之后,不一定返回到之前的地址。
固定尺寸分區
內部碎片
外部碎片
變長分區
最佳適應
- 使用大小最合適的內存分區
- 內部碎片較少,但是搜索時間較長
首次適應
- 使用第一個大小合適的內存分區
- 內部碎片偏多,但是搜索速度快
分頁虛擬內存
假設頁/幀的大小是4KB 假設虛擬地址是32位(4Gb)假設物理地址是28位(256Mb)
虛擬地址和物理地址的布局各是什么樣的?頁表的項數和頁幀的個數各是多少?
分頁的硬件支持
• CPU中需要增加一個寄存器:頁表基址寄存器 PTBR(Page Table Base Register),存儲當前進程的頁表的基地址。
• PTBR的作用:將虛擬頁號(VPN)翻譯成物理頁號(PFN)
• 頁表存在於內核內存空間,每個進程都擁有自己的PTBR,指向自己的頁表數據結構。
CPU每次內存請求,實際上要訪問幾次內存?
• 第一次:訪問當前進程的頁表;第二次:訪問實際物理內存地址。
• 效率不高。可以采用緩存機制,加快訪問速度
第十章 輸入輸出與穩定存儲
內存映射I/O
目的:讓設備控制器內的寄存器對CPU可見

DMA
磁盤存儲器結構

磁盤調度算法
先到先服務 FCFS
最短尋道時間優先 SSTF
SCAN
C-SCAN
LOOK
C-LOOK
I/O總線與驅動設備演化
即插即用總線(Plug and Play)
並行總線
串行總線
PCIe
設備驅動
習題
10-2
10-4
第十一章 文件系統
文件屬性
– 文件名
– 文件別名
– 擁有者
– 創建時間
– 最后寫時間
– 訪問權限:讀、寫、執行
– 文件大小
文件別名
Linux: ln foo bar
• 即創建一個具有相同狀態的目錄項:硬鏈接(hard link)
Linux: ln –s fox box
• 即創建一個軟連接
Linux權限操作例子
Linux命令 chmod
• $ chmod u+w filename
• $ chmod o-x filename
• $ chmod 751 filename
• 更改所有者(管理員權限):chown rama xzhang 將xzhang文件的所有者修改為rama
• 更改組(所有者、管理員):chgrp cs2200 foo 將文件foo 的所有組修改為cs2200
空閑鏈表
包含可用磁盤塊的空閑鏈表
• 最先適配和最佳適配策略
• 每個文件對應單一節點,可能存在外部碎片和內部碎片問題
• 需要周期性縮並磁盤
• 改進:溢出區域,用於存放越界的大文件
文件分配表FAT
將磁盤分區,每個分區都有FAT
• 一個特殊的目錄,包含了每個文件到FAT索引的映射關系;-1代表文件的最后一個磁盤塊
• 比鏈接分配的故障幾率更小
• 邏輯分區的存在,限制了磁盤空間的使用效率。
索引分配
Unix設計方法