操做系統--進程、線程

1、進程

定義:進程就是一個具備獨立功能的程序在數據集合上的一次動態執行的過程
組成:shell

  • 程序的代碼
  • 程序處理的數據
  • 程序計數器的值,指示下一條將運行的指令
  • 一組通用的寄存器的當前值,堆、棧
  • 一組系統資源(如打開的文件)

總之,進程包含了正在運行的一個程序的全部狀態信息數據結構

一、進程與程序之間的聯繫

  • 程序是產生進程的基礎
  • 程序的每次運行產生不一樣進程
  • 進程是程序功能的體現
  • 經過屢次執行,一個程序能夠對應多個進程,經過調用關係,一個進程可包括多個程序

二、進程和程序的區別

  • 進程是動態的,程序是靜態的,程序是有序代碼的集合,進程是程序的執行,進程有內核態和用戶態
    經過系統調用就進入了內核態!
  • 進程是暫時的,程序是永久的;進程是一個變化過程,程序能夠長久保存
  • 進程和程序的組成不一樣,進程是由程序、數據、進程控制塊組成。

三、進程的特色

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

四、進程控制塊

描述進程的數據結構:進程控制塊
操做系統爲每一個進程都維護了一個PCB,它是操做系統管理控制進程運行所用的信息集合。
PCB能夠描述進程的基本狀況以及運行變化的過程。學習

進程建立:爲該進程生成一個PCB
進程終止:回收它的PCB
進程的組織管理:經過對PCB的組織管理來實現
PCB包含如下內容:操作系統

  • 進程標似信息
  • 處理機狀態信息保存區
  • 進程控制信息
    在這裏插入圖片描述

五、進程的生命期管理

進程建立
進程就緒
進程運行
進程等待(阻塞)
進程喚醒
進程結束.net

其中重點說下進程等待線程

在如下狀況會發生進程等待
(1)請求並等待系統服務,沒法立刻完成
(2)啓動某種操做,沒法立刻完成
(3)須要的數據沒有到達

注意:進程只能本身阻塞本身。由於只有進程自身才曉得本身何時須要等待什麼。code

進入阻塞狀態的程序,等待到了本身要的數據,會進行進程喚醒,這個操做多是操做系統也多是進程作。喚醒後進入就緒隊列,等待被調度佔用處理機運行。blog

六、進程的三種基本狀態

在這裏插入圖片描述

七、進程掛起

咱們先前學習了虛擬存儲器管理,咱們以前說一段程序,先分配給它一個連續的邏輯地址空間,這段程序其實就是進程,進程須要訪問物理內存,在內存不夠時能夠進行換入換出的操做。當把一個進程所對應的佔用的物理內存釋放並將內容換出到硬盤就叫作掛起狀態
這個分爲兩種
阻塞掛起狀態:進程在外存並等待某事件的出現
就緒掛起狀態:進程在外存,但只要進入內存,便可運行
在這裏插入圖片描述隊列

2、線程

進程是資源分配的單位,線程是cpu的調度單位
線程優勢:

  • 一個進程中能夠同時存在多個線程
  • 各個線程之間能夠併發的執行
  • 各個線程之間能夠共享地址空間和文件資源等

線程缺點:
一個線程崩潰,會致使其所屬進程的全部線程崩潰。
在這裏插入圖片描述
線程實現:

  • 用戶線程
  • 內核線程
  • 輕量級線程

3、上下文切換

中止當前運行進程(從運行狀態改變成其餘狀態),而且調度其餘進程(轉變爲運行狀態)
上下文切換也就是進程切換。
一個進程不可能一直佔用CPU運行,當時間片到,就會讓其餘進程佔用CPU運行,這個就是上下文切換

切換注意事項:

  • 必須在切換以前存儲許多部分的進程上下文
  • 必須可以在以後恢復它們,因此進程不能顯示它曾經被暫停過
  • 切換必須快速
相關文章
相關標籤/搜索