操作系統(三)

進程和線程

進程的定義

進程(process)描述
進程狀態(state)
線程(thread)
進程間通信(inter-process communication)
進程互斥與同步
死鎖(deadlock)

進程的定義
一個具有一定獨立功能的程序在一個數據集合上的一次動態執行過程。

I/O的控制方式:通道、DMA技術、緩存技術

進程線程模型
1.順序執行的特徵:順序性、封閉性、程序執行結果的確定性、程序結構的可在現性

多道程序的特點:獨立性、隨機性、資源共享性

進程是正在執行的程序。

進程的特性:併發性、動態性、獨立性、交往性、異步性。

進程的三種核心狀態:
1.就緒狀態
2.運行狀態
3.阻塞(等待)狀態

PCB表的組織方式:線性方式、索引方式、鏈接方式

Unix的fork()函數:父進程通過fork()創建子進程

引起進程阻塞的事件:請求系統服務、啓動某種操作、新數據尚未到達、無新工作可做

引起進程喚醒的事件:請求的系統服務得到滿足、啓動某種操作完成、新數據到達、有新工作可做

進程擁有資源的基本單位。

一個程序至少有一個進程,一個進程至少有一個線程。

進程的組成

(1)一個進程應該包括

  • 程序的代碼
  • 程序處理的數據
  • 程序計數器的值,指示下一條將運行的指令
  • 一組通用的寄存器的當前值,堆,棧
  • 一組系統資源(如打開的文件)
    總之,進程包含了正在運行的一個程序的所有狀態信息。

(2)進程與程序的聯繫
-程序是產生進程的基礎
-程序的每次運行構成不同的進程
-進程是程序功能的體現
-通過多次執行,一個程序可對應多個進程;通過調用關係,一個進程可包括多個程序。

(3)進程與程序的區別
-進程是動態的,程序是靜態的:程序是有序代碼的集合;進程是程序的執行,進程有核心態/用戶態
-進程是暫時的,程序是永久的:進程是一個狀態變化的過程,程序可長久保存
-進程與程序的組成不同:進程的組成包括程序,數據和進程控制塊(進程的狀態信息)

進程的特點

動態性:可動態地創建,結束進程
併發性:進程可以被獨立調度並佔用處理機運行
獨立性:不同進程的工作不互相影響
制約性:因訪問共享數據/資源或進程間同步而產生制約

程序 = 算法 + 數據結構
進程控制塊(process control block, PCB): 描述進程的數據結構,操作系統管理控制進程運行所用的信息集合。
操作系統爲每個進程都維護了一個PCB,用來保存與該進程有關的各種狀態信息,PCB是進程存在的唯一標誌。

進程控制塊PCB結構

PCB包含下列三大信息:
(1)進程標識信息。如本進程的標識,本進程的產生者標識(父進程標識);用戶標識

(2)處理機狀態信息保存區,保存進程的運行現場信息
->用戶可見寄存器,用戶程序可以使用的數據,地址等寄存器
->控制和狀態寄存器,如程序寄存器(PC),程序狀態字(PSW)
->棧指針,過程調用/系統調用/中斷處理和返回時需要用到它。

(3)進程的控制信息
調度和狀態信息:用於操作系統調度進程並佔用處理機使用;
進程間通信信息:爲支持進程間的與通信相關的各種標識,信號,信件等,這些信息存在接收方的PCB中;
存儲管理信息:包含有指向本進程映像存儲空間的數據結構;
進程所用資源:說明由進程打開,使用的系統資源,如打開的文件等;
有關數據結構等連接信息:進程可以連接到一個進程隊列中,或連接到相關的其它進程的PCB。

(4)PCB的組織方式
鏈表:統一狀態的進程其PCB成一臉表,多個狀態對應多個不同的鏈表,各狀態的進程形成不同的鏈表,例如就緒鏈表和阻塞鏈表
索引表:同一狀態的進程歸入一個index表(由index指向PCB),多個狀態對應多個不同的index,各狀態的進程形成不同的索引表,例如就緒索引表,阻塞索引表。

進程的生命週期管理

進程創建-進程運行-進程等待-進程喚醒-進程結束
(1)進程創建
引起進程創建的三個主要事件:系統初始化->用戶請求創建一個新進程->正在運行的進程執行了創建進程的系統調用

(2)進程等待
在以下情況中,進程等待(阻塞)
->請求並等待系統服務,無法馬上完成;
->啓動某種操作,無法馬上完成;
->需要的數據沒有到達。

(3)進程喚醒
喚醒進程的原因如下:
->被阻塞進程需要的資源可被滿足;
->被阻塞進程等待的事件到達;
->將該進程的PCB插入到就緒隊列中。

(4)進程結束
包括以下四種情形:
->正常退出(自願)
->錯誤推出(自願)
->致命錯誤(強制性)
->被其它進程所殺(強制性)

進程的狀態變化模型

進程的三種基本狀態:
進程在生命結束前處於且僅處於三種基本狀態之一,不用系統設置的進程狀態數目不同。

->運行狀態(running):當一個進程正在處理機上運行時;
->就緒狀態(ready):一個進程獲得了除處理機之外的一切所需資源,一旦得到處理機即可運行;
->等待狀態(或阻塞狀態blocked):一個進程正在等待某一事件而暫停運行時的狀態,如等待資源,等待I/O完成。

進程還有其它的基本狀態,包括,
->創建狀態(new),一個進程正在被創建,還沒被轉到就緒狀態之前的狀態。
->結束狀態(exit),一個進程正在從系統中消失時的狀態,這是因爲進程結束或由於其它原因所導致。

進程掛起suspend

== 進程掛起是一種合理且充分地利用系統資源的方式。掛起時,進程沒有佔用內存空間,處於掛起狀態的吧進程映像在磁盤上。==
掛起就是把一個進程從內存轉到外存。

** 掛起狀態**
阻塞掛起狀態(blocked-suspend):進程在外存並等待某事件的出現
就緒掛起狀態(ready-suspend):進程在外存,但只要進入內存,即可運行

(1)掛起:內存->外存
包括,
阻塞->阻塞掛起:沒有進程處於就緒狀態;或者就緒進程需要更多的內存資源;
就緒->就緒掛起:當 高優先級阻塞(系統認爲會很快就緒的)進程 和 低優先級就緒進程 衝突時,系統會掛起低優先級就緒進程;
運行->就緒掛起:對於搶先式分時系統,當有 高優先級阻塞掛起進程 因爲事件而變成 就緒掛起 時,系統可能會把正在運行的進程轉到 就緒掛起狀態。

(2)在外存中的狀態
包括,
阻塞掛起->就緒掛起:當 阻塞掛起的進程 因爲相關事件出現時,系統會把 阻塞掛起進程 轉化爲 就緒掛起狀態。

(3)解掛/激活(activate):外存->內存
包括,
就緒掛起->就緒:現在沒有就緒進程;當前的 就緒掛起進程 的優先級高於 就緒進程;
阻塞掛起->阻塞:當一個進程釋放足夠的內存時,系統會把一個高優先級的 阻塞掛起進程(系統認爲會很快出現所等待的事件發生) 轉爲阻塞進程。

從進程角度看待OS
用進程的觀點來看待OS,OS包括 用戶進程,磁盤管理進程,終端進程等;

以進程爲基本結構的OS包括:
最底層scheduler爲CPU的調度程序(包括中斷處理等);
上面一層爲一組各式各樣的進程。

** 狀態隊列**
(1)狀態隊列是由操作系統來維護的一組隊列,用來表示系統當中所有進程的當前狀態;
(2)不同的狀態分別用不同的隊列來表示(就緒隊列,各種類型的阻塞隊列等);
(3)每個進程的PCB都根據它的狀態加入到相應的隊列當中,當一個進程的狀態發生變化時,它的PCB從一個狀態隊列中脫離,加入到另一個狀態隊列裏。

爲什麼使用線程

因此,需要滿足:實體間能夠併發地執行;實體之間共享相同的地址空間。->線程

線程 = 進程 - 共享資源

線程的優點:
1.一個進程中可以同時存在多個線程
2.各個線程之間可以併發的執行
3. 各個線程之間可以共享地址空間和文件等資源。

線程的缺點:一個線程崩潰,會導致其所屬進程的索引線程崩潰。

在這裏插入圖片描述
你知道的越多,你不知道的越多。
有道無術,術尚可求,有術無道,止於術。
如有其它問題,歡迎大家留言,我們一起討論,一起學習,一起進步

發佈了114 篇原創文章 · 獲贊 67 · 訪問量 7996
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章