OS 筆記 - CH2 I/O運作, Interrupt, Hardware Resource Protection
CH2 I/O運作, Interrupt, Hardware Resource Protection 的整理筆記
- 2019-10-31 撰寫
- I/O 指 Mem 到 Device 間的傳輸,包含輸入輸出。
- 常見分為南北橋
北橋比較快,接一些速度快的 I/O 像是 CPU、Memory、螢幕等
南橋接 Network、USB、HDD 等普通 I/O
- 常見分為南北橋
Polling I/O
Def : 又叫 Busy-wainging I/O 或 Programming I/O
步驟 :
- process 發請求,OS 可能會暫停執行此 proc 並做 syscall
- Kernel 的 I/O Subsystem pass 給 Device driver
- Driver 設定一些 I/O 參數給 Device Controller
- Device Controller 啟動,監督 I/O Device 正確運作
- 此時 OS 可能跑去做其他事,跑其他 Process 之類的。
但是每過一陣子就要去 Polling Device Controller,問說到底完成沒。
優點 : 如果每次問,剛好都說好了 (也就是做的速度比問的頻率還要高)
那效率就會不錯缺點 : CPU 要一直放下手邊的工作去問(Polling),CPU utilization 低,thoughout 低
Interrupt I/O
步驟 : 前面跟 Polling I/O 一樣。好吧我複製貼上一下。
- process 發請求,OS 可能會暫停執行此 proc 並做 syscall
- Kernel 的 I/O Subsystem pass 給 Device driver
- Driver 設定一些 I/O 參數給 Device Controller
- Device Controller 啟動,監督 I/O Device 正確運作
- 此時 OS 可能跑去做其他事,跑其他 Process 之類的。
- ------------------------- 以下開始不一樣 --------------------------------
- 完成後 Device Controller 會發出 I/O Completed Interrupt 通知 CPU
CPU 說好,OS 可能會暫停手邊的事 (暫停執行 proc 之類的) - OS 查詢 Interrupt Vector (一張表),找到誰發的,和找到他的 ISR (一個副程式)
- Jump to ISR,Execute (將 buffer register 中的資料傳送到 memory 中)
- ISR 完成,OS 會通知 Process 的 I/O Request 完成,state 從 wait -> ready
- Resume (恢復) 之前中斷的工作,或是 CPU Schedualer 可能會改決定
在接收 interrupt 時,Hardware 給的通常叫 signal,software 給的叫 trap
優點 : CPU 不用一直 polling,等通知就好,CPU utilization 和 thoughout 相對高
缺點 : 查 Interrupt Vector 等的處理時間可能會有點久。
如果比 I/O 所需時間還短就反而不值得。
另外也要花些時間監督 Device 和 Memory 的傳輸過程ISR 補充 : 中斷服務程序,可理解為是一種服務,是通過執行事先編好的某個特定的程式來完成的,這種處理 interrupt 的程式被稱為中斷服務程式。可以想成副程式。
ISR 正在執行卻有其他 Interrupt 發生,怎辦 ?
- 方案1 : Disable 其他人ㄉ ( real time 和 time sharing 不能這樣搞)
- 方案2 : Priority
Direct Memory Access
Def : DMA Controller 負責 I/O Device 與 Memory 之間傳輸工作
步驟 : 前面跟 Polling I/O 一樣。好吧我複製貼上一下。
- process 發請求,OS 可能會暫停執行此 proc 並做 syscall
- Kernel 的 I/O Subsystem pass 給 Device driver
- Driver 設定一些 I/O 參數給 Device Controller
- ------------------------- 以下開始不一樣 --------------------------------
- Device Controller 啟動 DMA 以進行資料傳輸
- 此時 OS 可能跑去做其他事,跑其他 Process 之類的。
- Device Controller 將資料傳至 DMA Controller
- DMA Controller 將資料傳至 Memory 目標位址
- 傳輸完,發出中斷通知 Kernel 傳送完成。
優點 :
- CPU做自己的事,比起 interrupt 等,CPU utilization 和 thoughout 又更高了。
- 適合用在 Blocked transfer oriented I/O Device * Byte Transfer 不能
(中斷頻率不會過高,ex 硬碟)
缺點 :
- 硬體設計的複雜度。
舉例來說,CPU 有 cache 可用,不一定會把資料寫回儲存裝置,故並不能保證資料一致性。
對於此,就需要其他的設計來確保一致性的問題。 - DMA Controller 會與 CPU 搶 Memory 和 Bus 等資源。CPU 可能要等待。
- 硬體設計的複雜度。
這系列現象可稱為 Cycle Stealing,與 CPU 交互使用 Memory 和 Bus
- 互撞的時候通常是 DMA 會有比較高的優先權
- 在 CPU 的 Instruction Stage,IF 會用到,Fetch Operand 和 WM 可能用到
故若 DMA 剛好也要用,這三個可能會發生衝突 (IF 一定衝)
- 在 CPU 的 Instruction Stage,IF 會用到,Fetch Operand 和 WM 可能用到
- 互撞的時候通常是 DMA 會有比較高的優先權
設定 DMA Controller
- I/O Commands
- Devices data src/dst address
- Memory src/dst address
- Timer (按照長度設置,當值倒數到 0 即為完成)
Blocking and Non-blocking I/O
- Blocking I/O : process suspended until I/O (偷懶)
- Non-blocking I/O : 控制權馬上還給 user process,每當讀多少就一塊塊的 return
- Asynchronous I/O : Process 和 I/O 同時執行,當全做完,I/O 才會 signal
Interrupt 分類
有幾種常見的 "分類方式"。
- 內外分法
- External Interrupt : CPU 以外的硬體,ex : I/O Complete, I/O error, monitor
- Internal Interrupt : CPU 執行 process 過程,遇到重大錯誤 (除0;越權指令)
- Software Interrupt : User Process 想要做請求索發出的中斷
- Interrupt 和 Trap 分法
- Interrupt : Hardware 發出,ex : I/O Complete, I/O error, machine check, Time out
- Trap : Software 發出,ex : 除0, 越權指令, User 發出請求
- 優先權分法
- Maskable Interrupt : 不急的 (像是 Software Interrupt)
- Non-maskable Interrupt : 必須立刻處理 ex : Internal Interrupt, I/O error
Hardware Resource Protection
Dual Modes opertaion
雙核模式,運作 mode 分為兩種 : kernel mode 和 user mode。
需要 Hardware 支持,像是設定 mode bit
- Kernel Mode
- 又稱 privilege mode, system mode, supervisor mode
- 代表 Kernel 取得 CPU 控制權
- 在此 mode 可以執行 privilege instruction
- mode bit = 0
- User Mode
- 代表 User Process 取得 CPU 在執行的狀態
- 不能執行 privilege instruction
- mode bit = 1
Privileged instruction
可能會造成系統危害的指令。
- 如果 User mode 想要偷偷做,會發 Trap 給 OS,然後將 User Process 終止。
- 舉例 :
- Turn-off interrupt
- Clear Memory
- I/O instruction
- Timer Set and Change
- Base/Limit register 修改 (跟記憶體有關,後述)
- Change Mode : from user to kernel mode
- Halt 指令
I/O Protection
I/O 操作困難,為了避免 User Process 亂搞和複雜的設計,統一交給 Kernel 弄。
所以 I/O Instruction 全都是 特權指令。 -> 代表一定要有 Dual mode 設計。
Memory Protection
為了防止 A 程式想竊取 B 程式資料,甚至是 kernel memory data,所做的保護。
針對 process,kernel 設定他的 Base Register 和 Limit Register。
- Base 為 起始位置
- Limit 為 Process 大小
- 修改 Base, Limit, Fence Register 都是特權指令
- 補充,Monitor Area 就是放 OS 的記憶體,Fence Register 就是紀錄 OS 的大小
CPU Protection
- 防止 user process 長期占用 CPU
- 利用 Timer 來規定 Time Quantum,有點像 RR Schedule 的感覺。
- 所以修改 Timer 也是特權指令,不然就一直擴增自己的 Qunatum 就無敵了。
參考
Mage 大的筆記、DMA驅動 、ISR組語、 陳士杰教授 PPT
END
-----------------------------------