一、進程
定義:進程就是一個具有獨立功能的程序在數據集合上的一次動態執行的過程
組成:
- 程序的代碼
- 程序處理的數據
- 程序計數器的值,指示下一條將運行的指令
- 一組通用的寄存器的當前值,堆、棧
- 一組系統資源(如打開的文件)
總之,進程包含了正在運行的一個程序的所有狀態信息
1、進程與程序之間的聯繫:
- 程序是產生進程的基礎
- 程序的每次運行產生不同進程
- 進程是程序功能的體現
- 通過多次執行,一個程序可以對應多個進程,通過調用關係,一個進程可包括多個程序
2、進程和程序的區別:
- 進程是動態的,程序是靜態的,程序是有序代碼的集合,進程是程序的執行,進程有內核態和用戶態
通過系統調用就進入了內核態! - 進程是暫時的,程序是永久的;進程是一個變化過程,程序可以長久保存
- 進程和程序的組成不同,進程是由程序、數據、程序控制塊組成。
3、進程的特點
動態性:可動態地創建、結束進程
併發性:進程可以被獨立調度並佔用處理機運行
獨立性:不同進程的工作互不影響
制約性:因訪問共享數據/資源或進程間同步而產生的制約
4、進程控制塊
描述進程的數據結構:進程控制塊
操作系統爲每個進程都維護了一個PCB,它是操作系統管理控制進程運行所用的信息集合。
PCB可以描述進程的基本情況以及運行變化的過程。
進程創建:爲該進程生成一個PCB
進程終止:回收它的PCB
進程的組織管理:通過對PCB的組織管理來實現
PCB包含以下內容:
- 進程標似信息
- 處理機狀態信息保存區
- 進程控制信息
5、進程的生命期管理
進程創建
進程就緒
進程運行
進程等待(阻塞)
進程喚醒
進程結束
其中重點說下進程等待
:
在以下情況會發生進程等待
(1)請求並等待系統服務,無法馬上完成
(2)啓動某種操作,無法馬上完成
(3)需要的數據沒有到達
注意:進程只能自己阻塞自己
。因爲只有進程自身才曉得
自己什麼時候需要等待什麼。
進入阻塞狀態的程序,等待到了自己要的數據,會進行進程喚醒,這個操作可能是操作系統也可能是進程做。喚醒後進入就緒隊列,等待被調度佔用處理機運行。
6、進程的三種基本狀態
7、進程掛起
我們先前學習了虛擬存儲器管理,我們之前說一段程序,先分配給它一個連續的邏輯地址空間,這段程序其實就是進程,進程需要訪問物理內存,在內存不夠時可以進行換入換出的操作。當把一個進程所對應的佔用的物理內存釋放並將內容換出到硬盤就叫做掛起狀態
。
這個分爲兩種
阻塞掛起狀態:進程在外存並等待某事件的出現
就緒掛起狀態:進程在外存,但只要進入內存,即可運行
二、線程
進程是資源分配的單位,線程是cpu的調度單位
線程優點:
- 一個進程中可以同時存在多個線程
- 各個線程之間可以併發的執行
- 各個線程之間可以共享地址空間和文件資源等
線程缺點:
一個線程崩潰,會導致其所屬進程的所有線程崩潰。
線程實現:
- 用戶線程
- 內核線程
- 輕量級線程
三、上下文切換
停止當前運行進程(從運行狀態改變成其他狀態),並且調度其他進程(轉變爲運行狀態)
上下文切換也就是進程切換。
一個進程不可能一直佔用CPU運行,當時間片到,就會讓其他進程佔用CPU運行,這個就是上下文切換
切換注意事項:
- 必須在切換之前存儲許多部分的進程上下文
- 必須能夠在之後恢復它們,所以進程不能顯示它曾經被暫停過
- 切換必須快速