操作系統筆記——進程、線程、進程調度

進程和線程

進程

進程是資源分配的基本單位。

進程控制塊(PCB)描述進程基本信息和運行狀態,創建進程和撤銷進程。

線程

線程是CPU調度的基本單位。

一個進程可以有多個線程。他們共享進程資源。

QQ 和瀏覽器是兩個進程,瀏覽器進程裏面有很多線程,例如 HTTP 請求線程、事件響應線程、渲染線程等等,線程的併發執行使得在瀏覽器中點擊一個新鏈接從而發起 HTTP 請求時,瀏覽器還可以響應用戶的其它事件。

進程和線程的區別

資源方面
進程是資源分配的基本單位,但是線程不擁有資源,線程可以訪問進程的資源。
調度方面
線程時獨立調度的基本單位,在同一進程中,線程的切換不會引起進程切換。從一個進程中的線程切換到另一個進程的線程時,會引起進程的切換。
系統開銷方面
創建和撤銷進程時,系統都要爲之分配或回收資源,如內存空間、I/O設備等,所帶來的的開銷遠大於創建和撤銷線程的開銷。
另外,在進程切換時,涉及當前執行進程CPU環境的保存及新調度進程CPU環境的設置,但線程切換時,只需保存和設置少量子村器內容,開銷很少。
通信方面
線程間可以通過直接讀寫同一進程中的數據進行通信,但是進程通信需要IPC

進程狀態

在這裏插入圖片描述

  • 就緒狀態——等待被調度
  • 運行狀態——進程運行
  • 阻塞狀態——等待資源

  • 只有就緒態和運行態可以相互轉換,其他都是單向轉換
  • 就緒態的進程通過調度算法獲得CPU的運行時間,轉爲運行態
  • 運行態的進程,在分配給它的CPU時間片用完後會轉爲就緒狀態
  • 阻塞狀態時缺少需要的資源從而有運行態轉換而來,該資源不包括CPU時間,缺少CPU時間會從運行態轉爲就緒態

七態模型

七態模型在五態模型的基礎上增加了掛起就緒態和掛起等待態。

  • 掛起就緒態:進程具備運行條件,但目前在外存中,只有它被對換到內存才能被調度執行。
  • 掛起等待態:表明進程正在等待某一個事件發生且在外存中。

進程進入掛起狀態是由於操作系統、父進程或進程本身阻止它的運行。

在這裏插入圖片描述

線程狀態

下圖是Java線程的狀態
在這裏插入圖片描述

  • 初始狀態:new一個實例,線程就進入了初始狀態。
  • 就緒狀態:有運行的資格,調度程序還沒挑選到該線程
  • 運行狀態:線程的run方法執行時
  • 阻塞狀態:線程阻塞進入synchronized關鍵字修飾方法或代碼塊時的狀態。
  • 等待狀態:處於這種狀態的線程不會被分配CPU執行時間,它們要等待被顯式地喚醒。否則會處於無限期等待的狀態。
  • 超時狀態:處於這種狀態的線程不讓出系統資源,無須無限期等待被其他線程顯示地喚醒,在達到一定時間後它們會自動喚醒。
  • 終止狀態:run()方法完成時,就認爲它終止了。

進程調度算法

不同環境調度方法不同。

批處理系統

批處理系統沒有太多的用戶操作,在該系統中,調度算法目標是保證吞吐量和週轉時間。

先來先服務

非搶佔式調度算法,按照請求的順序進行調度。

有利於長作業,不利於短作業,因爲短作業必須等待前面的長作業執行完畢才能執行。

短作業優先

非搶佔式調度算法,按估計運行時間最短的順序進行調度。

長作業可能餓死,處於一直等待短作業完畢的狀態。

最短剩餘時間優先

最短作業時間優先的搶佔式版本,按照剩餘運行時間的順序進行調度。

當一個新作業到達時,其整個運行時間與當前進程的剩餘時間作比較。如果新的進程需要的時間更少,則掛起當前進程,否則新的進程等待。

交互式系統

交互式系統有大量的用戶交互操作,在該系統中調度算法的目標是快速地進行響應。

時間片輪轉

所有就緒進程按到來的先後順序排成一個隊列。

每次調度時,把CPU時間分配給隊首進程,該進程可以執行一個時間片。但時間片用完時,由計時器發出時鐘中斷,調度程序停止該進程的執行,並把它送至隊列的末尾,同時繼續把CPU時間分配給隊首進程。

優先級調度

給每個進程分配一個優先級,按優先級進行調度。

爲了防止低優先級繼承永遠得不到調度,可以隨時間的推移增加等待進程的優先級。

多級反饋隊列

一個進程需要執行100個時間片時,若採用時間片輪轉算法,那麼需要交換100次。

多級隊列是爲這種需要執行多個時間片的進程考慮,他設置了多個隊列,每個隊列時間片都不同。例如1 2 4 8…。進程在第一個隊列沒執行完會被移到下一個隊列。

每個隊列優先權不同,最上面的優先權最高。只有上一個隊列沒有進程在排隊時,才能調度當前隊列上的進程。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章