• I/O Device Queue 是OS管理的

  • Timer 不在PCB裡 , 他是用來產生Interrupt的,不是CPU使用時間資訊

  • Which Schedulers can be used to control the degree of multiprogramming?

    • 問誰可以增/減Memory的Process
    • Job Scheduler(Long Term) : 看誰要進Memory、Medium-Term Scheduler : Swapper to Disk
  • Job Scheduler = Long-Term Scheduler

  • CPU Scheduler = Short-term Scheduler

  • Disk scheduler => Disk I/O request 哪一個先處理

  • Printing 表 I/O 完成了

  • (A)Synchronous I/O

類型 發出 I/O 後
Synchronous I/O 等 I/O 完成再繼續
Asynchronous I/O 不用等完成,可以先做其他工作
  • Context Switch 除了要儲存與載入Process Context 還可能破壞 Cache Locality 造成 Cache Miss

  • Thread 沒有共用 PC -> 可能自己做到自己的位置

  • Exec()被呼叫-> Process ID 不換 : 因為只是把執行的程式換掉

  • fork() = 從「目前這個位置」複製一個 process,接著從下一步程式碼開始

  • wait() : 只負責等待子結束,不能收集孩子的資訊,只能知道他是不是正常結束

  • 每個 Thread 不共用 PC

  • SJF 不適合 Short-Term Scheduler : 因為執行時間太頻繁了,來不及預測

  • RR 是設計給 Time-Sharing

  • RR 是使用 FIFO Queue

  • $A \subset B$ 是代表 A包含於B 但不等於

  • CPU Efficiency = 真正做工作的時間 / (真正工作時間 + overhead)

    • T : Process 平均跑T會被Block;S:Switch 時間;Q : RR Quantum
    • S < Q < T : $*Q / (Q + S)$
    • Q => 無限 : $ T / (T + S) $
  • Interactive processes usually produce short CPU Burst

  • CPU-Bound 要給他 低priority

  • SJF是一種策略改善Waiting Time

  • Process 的 Thread 共享 Heap 、 Global variable、Static Local Variable、Code Text、Open File

    Threads share Code、Data、Heap、Files;各自有 Stack、PC、Registers。

  • 描述 Thread / Process Switch

    • Thread Switch : 只需儲存舊Thread Data,PC、Stack、Registers等私有Data,但同一Process的共享資訊不需要切換
    • Process Switch : 需要儲存舊Process 的狀態,並且恢復下一個Process的資訊,除了CPU Register以外,還有記憶體配置Data,還可能需要刷新Data Cache、Instruction Cache
  • LWP 只連接一個Kernel Thread

  • User Thread 之間的排程與Context Switch,由Thread Library負責,不需要Kernel

  • Kernel 只負責 Kernel Thread

  • LWP 會儲存目前正在它上面執行的User Thread的Register Set

  • Linux / Windows / macOS => one-to-one Model

  • Many-to-one => 舊Java、Green

  • Many-to-Many => 舊Solaris、Implicit Thread

現在都是 One-to-One

  • Process / Thread 分別需要甚麼執行
Resource Thread Process
Memory X O
PC O O
Stack O O
Register O O
I/O Resource X O
  • Context Switch : CPU 從這個Process 換 跑另一個Process
  • Linux 有 Hard/Soft Addinity
  • process 結束要求OS用**Exit()**刪除他
  • Android裡,Empty process=> 主要留下來當Cache,方便之後快速啟動
  • 正在跟使用者互動的 => Foreground Process
  • Visible Process 使用者看的到,但不一定在操作
  • 影響context Switch Time
    • Register 數量
    • Special Instruction : 可以一次存很多,與一次存一個
    • Memory Speed
    • Disk Size 沒有
  • 有 idle Process
  • MLFQ 通常是高層先跑完,全部跑完一輪空了 => 下一層繼續 => 直到最後一層
  • C library 需要OS System call才能Access檔案
  • SJN / SJF : 主要是最小化Average Waiting Time
  • 區域變數可以有效利用記憶體,因為它使用的空間會在需要的時候才配置,用完之後再釋放
  • 同一Process 不能共享區域變數
  • User Thread 比 Kernel Thread的優點在 : 切換快、建立快
  • Thread v.s. Process
    • Process : 是在執行的Program , 通常包含 Code/Data Section、Heap、Stack,另外會用PCB來保存Data : 有PC、CPU Register
    • Thread : 是 CPU Utilicaiton unit,一個Process可以有很多Thread,共享Code 、 Data、Heap、OS Resource,但每個Thrad自己有TID、PC、Stack
  • Thread v.s Process優點與限制
比較項目 Process Thread
Alias Heavyweight process Lightweight process
Model Single-threaded model Multithreading model
Responsiveness 一旦 process 做 blocking system call,整個 process 都會 blocked 某個 thread blocked 時,若還有其他可執行 thread,process 仍可繼續執行
Economy Process creation、context switch 慢、成本高 Thread creation、context switch 快、成本低
Scalability Single-threaded process 通常只能使用 一個 CPU/core 同一 process 的 threads 可在不同 CPU/cores 平行執行
Resource Sharing 不同 processes 原則上不共享 memory / OS resources 同一 process 的 threads 可共享 code、data、OS resources
Synchronization 一般不需同步;若使用 shared memory 則需要 需要 synchronization,避免 race condition