日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

操作系统:第二章 进程管理1 - 进程、线程

發布時間:2024/2/28 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统:第二章 进程管理1 - 进程、线程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文已收錄至 Github(MD-Notes),若博客中圖片打不開,可以來我的 Github 倉庫,包含了完整圖文:https://github.com/HanquanHq/MD-Notes,涵蓋了互聯網大廠面試必問的知識點,講解透徹,長期更新中,歡迎一起學習探討 ~ 另外:
面試必會系列專欄:https://blog.csdn.net/sinat_42483341/category_10300357.html
操作系統系列專欄:https://blog.csdn.net/sinat_42483341/category_10519484.html


第二章 進程管理 - 進程、線程

目錄

  • 第二章 進程管理 - 進程、線程
      • 進程的概念
      • 進程的創建
      • PCB
      • 程序是如何運行的?
      • 進程的特征
      • 進程的5種狀態
        • 創建態
        • 就緒態
        • 運行態
        • 阻塞態
        • 終止態
      • 進程狀態的轉換
      • 進程的組織方式
      • 進程控制
        • 如何實現原語的原子性?
        • 進程控制相關的原語
      • 進程通信
          • 1、共享存儲
          • 2、管道通信
          • 3、消息傳遞
      • 線程
        • 為什么引入線程?
        • 線程的屬性
        • 線程的實現方式
          • 1、用戶級線程
          • 2、內核級線程
          • 3、多線程模型
            • 一對一模型
            • 多對一模型
            • 多對多模型


進程的概念

進程是進程實體的運行過程,是系統進行資源分配和調度的一個獨立單位。(線程是調度的基本單位)

程序:是靜態的,是一個存放在磁盤里的可執行文件,是一系列指令的集合

進程:是動態的,是程序的一次執行過程

例如,同時掛三個QQ號,會對應三個QQ進程,它們的PCB、數據段各不相同,但程序段的內容都是相同的(都是運行著相同的QQ程序)

進程的創建

當進程被創建時,操作系統會為該進程分配一個唯一的、不重復的“身份證號”—— PID(Process ID,進程ID)

PCB

進程相關的信息都被保存在一個數據結構PCB (Process Control Block)中,即進程控制塊

操作系統需要對各個并發運行的進程進行管理,但凡管理時所需要的信息,都會被放在PCB中

程序是如何運行的?

一個進程實體(進程映像)由 PCB、程序段、數據段 組成。

進程是動態的,進程實體(進程映像,類似于快照的概念)是靜態的。

進程實體反應了進程在某一時刻的狀態(如:x++后,x=2)

  • PCB 是給操作系統用的
  • 程序段、數據段是給進程自己用的。

進程的特征

進程的5種狀態

創建態

進程正在被創建時,它的狀態是“創建態”,在這個階段操作系統會為進程分配資源、初始化PCB

就緒態

當進程創建完成后,進入“就緒態”,處于就緒態的進程已經具備運行條件,但由于沒有空閑CPU,就暫時不能運行。當CPU空閑時,操作系統就會選擇一個就緒進程,讓它上處理機運行

運行態

如果一個進程此時在CPU上運行,那么這個進程處于“運行態”,CPU會執行該進程對應的程序(執行指令序列)

阻塞態

在進程運行的過程中,可能會請求等待某個事件的發生(如等待某種系統資源的分配,或者等待其他進程的響應)。在這個事件發生之前,進程無法繼續往下執行,此時操作系統會讓這個進程下CPU,并讓它進入“阻塞態”,當CPU空閑時,又會選擇另一個“就緒態”進程上CPU運行

終止態

一個進程可以執行 exit 系統調用,請求操作系統終止該進程。此時該進程會進入“終止態”,操作系統會讓該進程下CPU,并回收內存空間等資源,最后還要回收該進程的PCB。當終止進程的工作完成之后,這個進程就徹底消失了。

進程狀態的轉換

進程PCB中,會有一個變量state 來表示進程的當前狀態。如:1表示創建態、2表示就緒態、3表示運行態…

為了對同一個狀態下的各個進程進行統一的管理,操作系統會將各個進程的PCB組織起來。

進程的組織方式

大多數操作系統采用鏈接方式。

進程控制

進程控制的過程要一氣呵成,不可以被打斷,用原語來實現。

例如,“將PCB的state設為1” “將PCB從阻塞隊列放入就緒隊列” 這兩個步驟,不能被打斷

如何實現原語的原子性?

原語的執行具有原子性,即執行過程只能一氣呵成,期間不允許被中斷。

可以用“關中斷指令”和“開中斷指令”這兩個特權指令實現原子性。

正常情況下,CPU每執行完一條指令,都會例行檢查是否有中斷信號需要處理,如果有,則暫停運行當前這段程序,轉而執行相應的中斷處理程序。

而 CPU 執行了關中斷指令之后,就不再例行檢查中斷信號,直到執行開中斷指令之后才會恢復檢查。

這樣,關中斷、開中斷之間的這些指令序列就是不可被中斷的,這就實現了“原子性”

進程控制相關的原語

理解即可,不需要記憶

進程通信

顧名思義,進程通信就是指進程之間的信息交換。

進程是分配系統資源的單位(包括內存地址空間),因此各進程擁有的內存地址空間相互獨立。

為了保證安全,一個進程不能直接訪問另一個進程的地址空間。但是進程之間的信息交換又是必須實現的。為了保證進程間的安全通信,操作系統提供了一些方法。

1、共享存儲
  • 基于數據結構的共享:比如共享空間里只能放一個長度為10的數組。這種共享方式速度慢、限制多,是一種低級通信方式

  • 基于存儲區的共享:在內存中畫出一塊共享存儲區,數據的形式、存放位置都由進程控制,而不是操作系統。相比之下,這種共享方式速度更快,是一種高級通信方式。

2、管道通信

“管道”是指用于連接讀寫進程的一個共享文件,又名pipe文件。其實就是在內存中開辟一個大小固定的緩沖區

  • 管道只能采用半雙工通信,某一時間段內只能實現單向的傳輸。如果要實現雙向同時通信,則需要設置
    兩個管道。
  • 各進程要互斥地訪問管道。
  • 數據以字符流的形式寫入管道,當管道寫滿時,寫進程的 write() 系統調用將被阻塞,等待讀進程將數據
    取走。當讀進程將數據全部取走后,管道變空,此時讀進程的 read() 系統調用將被阻塞。
  • 如果沒寫滿,就不允許讀。如果沒讀空,就不允許寫。
  • 數據一旦被讀出,就從管道中被拋棄,這就意味著讀進程最多只能有一個,否則可能會有讀錯數據的情
    況。
  • 3、消息傳遞

    進程間的數據交換以格式化的消息(Message)為單位。進程通過操作系統提供的“發送消息/接收消息”兩個原語進行數據交換。

    線程

    為什么引入線程?

    有的進程可能需要“同時”做很多事,而傳統的進程只能串行地執行一系列程序。為此,引入了“線程”,來增加并發度。

    可以把線程理解為“輕量級進程”。線程是一個基本的CPU執行單元,也是程序執行流的最小單位。引入線程之后,不僅是進程之間可以并發,進程內的各線程之間也可以并發,從而進一步提升了系統的并發度,使得一個進程內也可以并發處理各種任務(如QQ視頻、文字聊天、傳文件)

    引入線程后,進程只作為除CPU之外的系統資源的分配單元(如打印機、內存地址空間等都是分配給進程的)。線程則作為處理機的分配單元。

    線程的屬性

    線程的實現方式

    1、用戶級線程

  • 用戶級線程由應用程序通過線程庫實現,所有的線程管理工作都由應用程序負責(包括線程切換)
  • 用戶級線程中,線程切換可以在用戶態下即可完成,無需操作系統干預。
  • 在用戶看來是多個線程。但是在操作系統內核看來,并意識不到線程的存在。
  • 優缺點
    • 優點:用戶級線程的切換在用戶空間即可完成,不需要切換到核心態,線程管理的系統開銷小
    • 缺點:當一個用戶級線程被阻塞后,整個進程都會被阻塞,并發度不高。多個線程不可在多核處理機上并行運行。
    2、內核級線程

  • 內核級線程的管理工作由操作系統內核完成。
  • 線程調度、切換等工作都由內核負責,因此內核級線程的切換必然需要在核心態下才能完成。
  • 操作系統會為每個內核級線程建立相應的TCB(Thread Control Block,線程控制塊),通過TCB對線程進行管理?!皟群思壘€程”就是“從操作系統內核視角看能看到的線程”
  • 優缺點
    優點:當一個線程被阻塞后,別的線程還可以繼續執行,并發能力強。多線程可在多核處理機上并行執行。
    缺點:一個用戶進程會占用多個內核級線程,線程切換由操作系統內核完成,需要切換到核心態,因此線程管理的成本高,開銷大。
  • 操作系統只“看得見”內核級線程,因此只有內核級線程才是處理機分配的單位。

    3、多線程模型
    一對一模型

    一個用戶級線程映射到一個內核級線程。每個用戶進程有與用戶級線程同數量的內核級線程。

    • 優點:當一個線程被阻塞后,別的線程還可以繼續執行,并發能力強。多線程可在多核處理機上并行執行。
    • 缺點:一個用戶進程會占用多個內核級線程,線程切換由操作系統內核完成,需要切換到核心態,因此線程管理的成本高,開銷大。
    多對一模型

    多個用戶級線程映射到一個內核級線程。且一個進程只被分配一個內核級線程。

    • 優點:用戶級線程的切換在用戶空間即可完成,不需要切換到核心態,線程管理的系統開銷小,效率高
    • 缺點:當一個用戶級線程被阻塞后,整個進程都會被阻塞,并發度不高。多個線程不可在多核處理機上并行運行
    多對多模型

    n 個用戶級線程映射到m 個內核級線程(n >= m)

    • 優點:克服了多對一模型并發度不高的缺點(一個阻塞全體阻塞),又克服了一對一模型中一個用
      戶線程庫 進程占用太多內核級線程,開銷太大的缺點。

    總結

    以上是生活随笔為你收集整理的操作系统:第二章 进程管理1 - 进程、线程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。