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

  • 步驟 :

    1. process 發請求,OS 可能會暫停執行此 proc 並做 syscall
    2. Kernel 的 I/O Subsystem pass 給 Device driver
    3. Driver 設定一些 I/O 參數給 Device Controller
    4. Device Controller 啟動,監督 I/O Device 正確運作
    5. 此時 OS 可能跑去做其他事,跑其他 Process 之類的。
      但是每過一陣子就要去 Polling Device Controller,問說到底完成沒。
  • 優點 : 如果每次問,剛好都說好了 (也就是做的速度比問的頻率還要高)
    那效率就會不錯

  • 缺點 : CPU 要一直放下手邊的工作去問(Polling),CPU utilization 低,thoughout 低

Interrupt I/O

  • 步驟 : 前面跟 Polling I/O 一樣。好吧我複製貼上一下。

    1. process 發請求,OS 可能會暫停執行此 proc 並做 syscall
    2. Kernel 的 I/O Subsystem pass 給 Device driver
    3. Driver 設定一些 I/O 參數給 Device Controller
    4. Device Controller 啟動,監督 I/O Device 正確運作
    5. 此時 OS 可能跑去做其他事,跑其他 Process 之類的。
      • ------------------------- 以下開始不一樣 --------------------------------
    6. 完成後 Device Controller 會發出 I/O Completed Interrupt 通知 CPU
      CPU 說好,OS 可能會暫停手邊的事 (暫停執行 proc 之類的)
    7. OS 查詢 Interrupt Vector (一張表),找到誰發的,和找到他的 ISR (一個副程式)
    8. Jump to ISR,Execute (將 buffer register 中的資料傳送到 memory 中)
    9. ISR 完成,OS 會通知 Process 的 I/O Request 完成,state 從 wait -> ready
    10. 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 一樣。好吧我複製貼上一下。

    1. process 發請求,OS 可能會暫停執行此 proc 並做 syscall
    2. Kernel 的 I/O Subsystem pass 給 Device driver
    3. Driver 設定一些 I/O 參數給 Device Controller
      • ------------------------- 以下開始不一樣 --------------------------------
    4. Device Controller 啟動 DMA 以進行資料傳輸
    5. 此時 OS 可能跑去做其他事,跑其他 Process 之類的。
    6. Device Controller 將資料傳至 DMA Controller
    7. DMA Controller 將資料傳至 Memory 目標位址
    8. 傳輸完,發出中斷通知 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 一定衝)
  • 設定 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 分類

有幾種常見的 "分類方式"。

  1. 內外分法
    • External Interrupt : CPU 以外的硬體,ex : I/O Complete, I/O error, monitor
    • Internal Interrupt : CPU 執行 process 過程,遇到重大錯誤 (除0;越權指令)
    • Software Interrupt : User Process 想要做請求索發出的中斷
  2. Interrupt 和 Trap 分法
    • Interrupt : Hardware 發出,ex : I/O Complete, I/O error, machine check, Time out
    • Trap : Software 發出,ex : 除0, 越權指令, User 發出請求
  3. 優先權分法
    • 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

圖源 : Mage筆記

Privileged instruction

可能會造成系統危害的指令。

  • 如果 User mode 想要偷偷做,會發 Trap 給 OS,然後將 User Process 終止。
  • 舉例 :
    1. Turn-off interrupt
    2. Clear Memory
    3. I/O instruction
    4. Timer Set and Change
    5. Base/Limit register 修改 (跟記憶體有關,後述)
    6. Change Mode : from user to kernel mode
    7. 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 的大小

圖源 : Mage筆記

CPU Protection

  • 防止 user process 長期占用 CPU
  • 利用 Timer 來規定 Time Quantum,有點像 RR Schedule 的感覺。
    • 所以修改 Timer 也是特權指令,不然就一直擴增自己的 Qunatum 就無敵了。

參考

Mage 大的筆記、DMA驅動ISR組語 陳士杰教授 PPT


END

-----------------------------------

2019.10.31