操作系統精髓與設計原理讀書筆記3
來自專欄 學渣的救贖之路
進程線程模型
進程模型
多道程序設計:允許多個程序同時進入內存並運行,其目的是為了提高系統效率
進程的概念
進程式控制制塊
進程狀態及轉換、進程隊列
進程式控制制
進程創建、撤銷、阻塞、喚醒、……
線程模型
為什麼引入線程?
線程的組成
線程機制的實現
用戶級線程、核心級線程、混合方式
並發環境:
一段時間間隔內,單處理器上有兩個或兩個以上的程序同時處於開始運行但尚未結束的狀態,並且次序不是事先確定的
並發程序:在並發環境中執行的程序
Process
進程是具有獨立功能的程序關於某個數據集合上的一次運行活動,是系統進行資源分配和調度的獨立單位又稱 任務(Task or Job)
PCB:Process Control Block又稱 進程描述符、進程屬性,是操作系統用於管理控制進程的一個專門數據結構,記錄進程的各種屬性,描述進程的動態變化過程,PCB是系統感知進程存在的唯一標誌,進程與PCB是一一對應的
進程表:所有進程的PCB集合
進程描述信息
進程標識符(process ID),唯一,通常是一個整數
進程名,通常基於可執行文件名,不唯一
用戶標識符(user ID)
進程組關係
進程式控制制信息
當前狀態
優先順序(priority)
代碼執行入口地址
程序的磁碟地址
運行統計信息(執行時間、頁面調度)
進程間同步和通信
進程的隊列指針
進程的消息隊列指針
所擁有的資源和使用情況
虛擬地址空間的狀況
打開文件列表
CPU現場信息
寄存器值(通用寄存器、程序計數器PC、程序狀態字PSW、棧指針)
指向該進程頁表的指針
進程狀態模型
三狀態模型 :運行態、就緒態、等待態
運行態(Running) :佔有CPU,並在CPU上運行
就緒態(Ready):已經具備運行條件,但由於沒有空閑CPU,而暫時不能運行
等待態(Waiting/Blocked):因等待某一事件而暫時不能運行
五狀態模型
七狀態模型
進程式控制制
進程式控制制操作完成進程各狀態之間的轉換,由具有特定功能的原語完成
進程創建原語
進程撤消原語
阻塞原語
喚醒原語
掛起原語
激活原語
改變進程優先順序
進程更能準確刻畫並發,而程序不能
程序是靜態的,進程是動態的
進程有生命周期的,有誕生有消亡,是短暫的;而程序是相對長久的
一個程序可對應多個進程
進程具有創建其他進程的功能
進程映象
對進程執行活動全過程的靜態描述
由進程地址空間內容、硬體寄存器內容及與該進程相關的內核數據結構、內核棧組成
用戶相關:進程地址空間(包括代碼段、數據段、堆和棧、共享庫……)
寄存器相關:程序計數器、指令寄存器、程序狀態寄存器、棧指針、通用寄存器等的值
內核相關:
靜態部分:PCB及各種資源數據結構
動態部分:內核棧(不同進程在進入內核後使用不同的內核棧)
上下文切換
將CPU硬體狀態從一個進程換到另一個進程的過程稱為上下文切換
線程
為什麼在進程中再派生線程?
三個理由
應用的需要:Web伺服器,word
開銷的考慮:線程的開銷小
創建一個新線程花費時間少(撤銷亦如此)
兩個線程切換花費時間少
線程之間相互通信無須調用內核(同一進程內的線程共享內存和文件)
性能的考慮:多個線程,有的計算,有的I/O
線程:進程中的一個運行實體,是CPU的調度單位 有時將線程稱為輕量級進程
在同一進程增加了多個執行序列(線程)
線程:
有標示符ID
有狀態及狀態轉換 → 需要提供一些操作
不運行時需要保存的上下文
有上下文環境:程序計數器等寄存器
有自己的棧和棧指針
共享所在進程的地址空間和其他資源 可以創建、撤消另一個線程
程序開始是以一個單線程進程方式運行的
用戶級線程:
在用戶空間建立線程庫:提供一組管理線程的過程
運行時系統:完成線程的管理工作(操作、線程表)
內核管理的還是進程,不知道線程的存在
線程切換不需要內核態特權
核心級線程:
內核管理所有線程管理,並嚮應用程序提供API介面
內核維護進程和線程的上下文
線程的切換需要內核支持
以線程為基礎進行調度
混合—兩者結合方法:
線程創建在用戶空間完成
線程調度等在核心態完成
並發性 任何進程都可以與其他進程一起向前推進
動態性 進程是正在執行程序的實例
進程是動態產生,動態消亡的
進程在其生命周期內,在三種基本狀態之間轉換
獨立性 進程是資源分配的一個獨立單位 例如:各進程的地址空間相互獨立
交互性 指進程在執行過程中可能與其他進程產生直接或間接的關係
非同步性 每個進程都以其相對獨立的、不可預知的速度向前推進
進程映像 程序 + 數據 + 棧(用戶棧、內核棧) + PCB
推薦閱讀:
※操作系統精髓與設計原理讀書筆記4
※設備管理 | 設備分配
※一基於事件處理的RTOS原型內核的介紹-2_概念與約定
※設備管理 | 設備管理概述
※進程與進程管理 | 經典進程同步問題