天天看點

CPU

CPU

切換

  • 使用者棧
  • 核心棧

TCB

中斷

排程政策

  • 吞吐量與響應時間的沖突
  • 前台任務關注前者 背景任務關注後者
  • IO密集型 CPU密集型
  • 沖突的原因——切換需要消耗資源

怎樣是滿意的?需要折中

First come,First served (太簡單了)

Short Job First

Round Robin 時間片輪調

優先級排程 提高前台的優先級 會導緻背景的饑餓 是以提出動态優先級排程

是不是問題都解決了

但等等

  • 我們怎麼知道哪些是前台任務,哪些是背景任務?
  • 如何判斷作業的長度?

一個實際的schedule函數 Linux0.11

conuter

程序同步與信号量

信号量——不止睡眠與喚醒

生産者消費者問題

信号量臨界區

  1. 輪換法
  2. 标記法
  3. 非對稱标記法 Peterson算法 結合了标記和輪轉兩種思想
  • 硬體級的指令CAS

死鎖

  • 死鎖預防——破壞死鎖的條件
    • 一次性申請所有需要的資源,程式設計困難,浪費資源
  • 死鎖避免——檢測每個資源請求,如果造成死鎖就拒絕
    • 每次申請都要執行 銀行家算法 代價很大
  • 死鎖檢測+恢複——檢測到死鎖出現時,讓一些程序復原,讓出資源
    • N皇後問題 恢複很不容易,線程造成的改變很難恢複
  • 死鎖忽略——在太陽上面對火災全然不顧
    • 效率高