清华大学《操作系统》(九):进程和线程
進程
定義:
進程是指一個具有一定獨立功能的程序在一個數據集合上的一次動態執行的過程。
組成:
- 代碼
- 數據
- 狀態寄存器(正在運行的一個程序的所有狀態信息):CPU狀態CP0、指令指針IP
- 通用寄存器:AX、BX、CX
- 進程占用系統資源:打開文件、已分配內存
特點:
- 動態性:客動態地創建、結束進程
- 并發性:進程既可以被獨立調度并占用處理機運行
- 獨立性:不同的進程的工作不相互影響
- 制約性:因訪問共享數據/資源或進程間同步而產生制約
進程與程序的聯系:
進程與程序的區別:
進程控制塊(Process Control Block, PCB):
定義:操作系統管理控制進程運行所用的信息集合。
操作系統用PCB來描述進程的基本情況以及運行變化的過程。
PCB是進程存在的唯一標志,每個進程都在操作系統中有一個對應的PCB
使用:
內容:
- 調度和狀態信息:進程和處理機使用情況調度
- 進程間通信信息:進程間通信相關的各種標識
- 存儲管理信息:指向進程映像存儲空間數據結構
- 進程所用資源:進程使用的系統資源,如打開文件等
- 有關數據結構連接信息:通過與PCB相關的進程隊列實現
組織
進程狀態
劃分在不同操作系統中可能不同,但是大致可以分為:
進程切換
三狀態進程模型:
創建與退出只是兩個短暫的狀態,除此之外簡化為三個狀態:就緒、運行、等待。裝填變遷如下圖。
- 運行狀態:進程正在處理機上運行
- 就緒狀態:進程獲取了除處理機之外的資源,得到了處理機即可運行
- 阻塞狀態:進程正在等待某一事件出現而暫停運行
- 創建狀態:進程正在被創建,還沒轉到就緒狀態之前的狀態
- 退出狀態:進程正在從系統中消失時的狀態,這是因為進程結束或由于其他原因所導致
掛起進程模型:
處在掛起狀態的進程映像在磁盤上,目的是減少進程占用內存。也就是說掛起就是把一個處于就緒或者等待狀態的進程從內存轉存到外存,通常選擇低優先級進程進行掛起。
1、進程掛起
不同于進程阻塞。掛起時沒有占用該內存空間,而是映像在磁盤上。類似虛存中,有的程序段被放到了硬盤上。?可以合理、充分地利用系統資源。Suspend:把一個進程從內存轉到外存。?
2、掛起狀態
3、狀態轉換
內存中被掛起:
①堵塞到堵塞掛起:沒有進程處于就緒狀態或就緒進程要求更多內存資源
②就緒到就緒掛起:當高優先級等待進程和低優先級就緒進程
③運行到就緒掛起:對搶占式分時系統,當有高優先級等待掛起進程因事件出現而進入就緒掛起
外存中激活:
①阻塞掛起到就緒掛起: 相關事件出現時,轉變為就緒掛起但還在硬盤上。
②解掛/激活 activate:外存到內存,需要運行該進程時
就緒掛起到就緒態: 沒有就緒進程或掛起就緒優先進程優先級高于當前就緒進程時
堵塞掛起到堵塞態:當一個進程釋放了足夠內存時,OS把高優先級阻塞掛起(認為很快出現等待的事件)轉換為阻塞進程
狀態隊列
- 由操作系統來維護一組隊列,表示系統中所有進程的當前狀態。
- 不同隊列表示不同狀態。根據進程狀態不同,進程PCB進入對應的隊列。
線程
引入原因:一個進程內部可能有多種事件可以并發地執行,比如播放音樂時,可以拆分為磁盤讀取、解碼和播放三個子流程,讀取主要是I/O操作,解碼主要是CPU工作,這兩者是可以并發執行的。因此很多時候需要在進程內部增加一類實體,滿足以下特性:實體之間可以并發執行、實體之間共享相同的地址空間。在這種需求之下,出現了線程。
定義:線程是進程的一部分,描述指令流執行狀態,它是進程的指令執行流的最小單元,是CPU調度的基本單位。
- 進程的資源分配角色:進程由一組相關資源構成,包括地址空間(代碼段、數據段)、打開的文件等各種資源。
- 線程的處理機調度角色:線程描述在進程資源環境中的指令流的執行狀態。每個線程有自己獨立的指令指針等。
線程的優點:
- 一個進程中可以同時存在多個線程
- 線程之間可以并發地進行
- 線程之間可以共享地址空間和文件等資源
線程的缺點:
-
在進程空間內有多個控制流且執行流程不一樣,有各自獨立的寄存器和堆棧,但共享代碼段,數據段,資源。?如果一個線程寫錯了,崩潰,如破壞了數據,會導致這個進程的所有線程都崩潰。
線程與進程的比較
線程的創建時間比進程短
線程的終止時間比進程短
同一進程內的線程切換時間比進程短
由于統一進程的各線程間共享內存和文件資源,可不通過內核進行直接通信。線程的終止時間比進程短
線程三種實現方式:
用戶線程:
由一組用戶級的線程庫函數來完成線程的管理。如POSIX Pthreads等。
優點:
- 不依賴于操作系統內核,可以用于不支持線程的多進程操作系統
- 在用戶空間實現的線程機制
- 同一進程內的用戶線程切換速度快,無需在用戶態與核心態之間切換
- 允許每個進程擁有自己的線程調度算法
缺點:
- 線程發起系統調用而阻塞時,整個進程進入等待
- 不支持基于線程的處理機搶占,除非當前運行線程主動放棄,它所在的線程的其他線程無法搶占CPU
- 只能按進程分配CPU時間,多個線程進程中,每個線程的時間片較少。
內核線程:
由內核通過系統調用實現的線程機制,由內核完成線程的創建、終止和管理。如Windows、Linux等
特點:
- 由內核維護PCB和TCB
- 線程執行系統調用而被阻塞不影響其他線程
- 線程的創建、終止和切換開銷相對較大,因為通過系統調用/內核函數,在內核空間實現
- 以線程為單位進行CPU時間分配,多線程的進程可以獲得更多CPU時間。
輕量級進程:
內核支持的用戶線程,一個進程可以有一個或多個輕量級進程,每個輕權進程由一個單獨的內核線程來支持。如Solaris。最后這個被證實優點沒有被很好地體現出來。
用戶線程與內核線程的對應關系:
可以有如下圖多種方式,最后證明一對一是最優的。
總結
以上是生活随笔為你收集整理的清华大学《操作系统》(九):进程和线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12306的数据库设计
- 下一篇: Windows PE的DIY你都会:那你