3.進(jìn)程和線程

進(jìn)程和線程

進(jìn)程

進(jìn)程即是操作系統(tǒng)對(duì)運(yùn)行程序的一種抽象,操作系統(tǒng)需要識(shí)別運(yùn)行的程序以及分配內(nèi)存空間等,實(shí)現(xiàn)的方式也就是進(jìn)程,通俗的說(shuō)法就是操作系統(tǒng)資源分配的基本單位。
[圖片上傳失敗...(image-a51dea-1679213878869)]

進(jìn)程的組成

組成元素:進(jìn)程(進(jìn)程實(shí)體)由程序段、數(shù)據(jù)段、PCB(進(jìn)程控制塊)三部分組成。
同一個(gè)程序多個(gè)進(jìn)程的代碼段是共享的

進(jìn)程的特征

  • 獨(dú)立性:進(jìn)程是計(jì)算機(jī)系統(tǒng)中獨(dú)立運(yùn)行的基本單位,具有獨(dú)立的內(nèi)存空間和系統(tǒng)資源,不會(huì)被其他進(jìn)程干擾。

  • 動(dòng)態(tài)性:進(jìn)程是動(dòng)態(tài)創(chuàng)建、運(yùn)行和銷(xiāo)毀的,系統(tǒng)可以根據(jù)需要?jiǎng)?chuàng)建新的進(jìn)程,并在不需要時(shí)終止進(jìn)程。

  • 并發(fā)性:計(jì)算機(jī)系統(tǒng)中可以同時(shí)運(yùn)行多個(gè)進(jìn)程,進(jìn)程之間可以并發(fā)執(zhí)行,提高系統(tǒng)資源的利用率。

  • 阻塞性:進(jìn)程可能會(huì)因?yàn)榈却承┦录鴷和?zhí)行,例如等待輸入/輸出完成、等待信號(hào)量等。

  • 狀態(tài)可變性:進(jìn)程的狀態(tài)會(huì)隨著執(zhí)行過(guò)程中的不同情況而不斷變化,例如進(jìn)程創(chuàng)建、就緒、運(yùn)行、阻塞和終止等狀態(tài)。

  • 合作性:進(jìn)程可以與其他進(jìn)程進(jìn)行通信和協(xié)作,例如共享內(nèi)存、消息傳遞、管道等方式。

  • 時(shí)間片輪轉(zhuǎn)調(diào)度:多個(gè)進(jìn)程并發(fā)運(yùn)行時(shí),操作系統(tǒng)會(huì)采用時(shí)間片輪轉(zhuǎn)調(diào)度算法,按照一定的時(shí)間片分配給每個(gè)進(jìn)程運(yùn)行時(shí)間,以實(shí)現(xiàn)公平調(diào)度。

  • 系統(tǒng)資源的競(jìng)爭(zhēng):不同進(jìn)程之間需要爭(zhēng)奪系統(tǒng)資源,例如 CPU、內(nèi)存、IO等,需要通過(guò)進(jìn)程調(diào)度算法合理分配系統(tǒng)資源,避免出現(xiàn)饑餓和死鎖等問(wèn)題。

    程序運(yùn)行過(guò)程:
    [圖片上傳失敗...(image-e5cb5a-1679213878869)]

進(jìn)程運(yùn)行原理

進(jìn)程的運(yùn)行原理主要分為進(jìn)程的創(chuàng)建、調(diào)度和終止三個(gè)階段。

  1. 進(jìn)程創(chuàng)建:當(dāng)用戶需要執(zhí)行某個(gè)程序時(shí),操作系統(tǒng)會(huì)為該程序創(chuàng)建一個(gè)新的進(jìn)程。在進(jìn)程創(chuàng)建的過(guò)程中,操作系統(tǒng)會(huì)為該進(jìn)程分配一定的內(nèi)存空間,并為其初始化各種數(shù)據(jù)結(jié)構(gòu)。此外,進(jìn)程的創(chuàng)建還包括打開(kāi)程序的代碼和數(shù)據(jù)文件,將程序代碼裝入內(nèi)存等操作。

  2. 進(jìn)程調(diào)度:當(dāng)進(jìn)程被創(chuàng)建后,操作系統(tǒng)會(huì)按照一定的調(diào)度算法,將其放入就緒隊(duì)列中等待調(diào)度。在調(diào)度時(shí),操作系統(tǒng)會(huì)根據(jù)進(jìn)程的優(yōu)先級(jí)、進(jìn)程的執(zhí)行狀態(tài)等因素來(lái)決定調(diào)度順序。當(dāng)一個(gè)進(jìn)程被調(diào)度后,它會(huì)被分配一段時(shí)間片(time slice)來(lái)執(zhí)行,時(shí)間片結(jié)束后,操作系統(tǒng)會(huì)將該進(jìn)程暫停,并將其狀態(tài)置為就緒狀態(tài),等待下一次調(diào)度。

  3. 進(jìn)程終止:當(dāng)進(jìn)程執(zhí)行完畢或者出現(xiàn)異常情況時(shí),操作系統(tǒng)會(huì)將其從系統(tǒng)中清除。在進(jìn)程終止的過(guò)程中,操作系統(tǒng)會(huì)關(guān)閉進(jìn)程打開(kāi)的文件,釋放進(jìn)程占用的內(nèi)存空間,更新進(jìn)程控制塊等操作。此外,當(dāng)一個(gè)進(jìn)程終止時(shí),它會(huì)向操作系統(tǒng)發(fā)送一個(gè)終止信號(hào),通知操作系統(tǒng)將其從系統(tǒng)中清除。

總之,進(jìn)程的運(yùn)行原理是一個(gè)復(fù)雜的過(guò)程,它涉及到進(jìn)程的創(chuàng)建、調(diào)度和終止等多個(gè)方面。操作系統(tǒng)通過(guò)精細(xì)的調(diào)度算法,保證了不同進(jìn)程之間的資源共享和并發(fā)執(zhí)行,從而提高了系統(tǒng)的性能和效率。

進(jìn)程的狀態(tài)及轉(zhuǎn)換

  • 新建狀態(tài)(New):進(jìn)程剛被創(chuàng)建,還沒(méi)有被操作系統(tǒng)調(diào)度執(zhí)行。

  • 就緒狀態(tài)(Ready):進(jìn)程已經(jīng)被操作系統(tǒng)接受,已經(jīng)分配了所需的資源,只等待系統(tǒng)調(diào)度執(zhí)行。

  • 運(yùn)行狀態(tài)(Running):進(jìn)程正在被 CPU 執(zhí)行,占用了 CPU 資源。

  • 阻塞狀態(tài)(Blocked):進(jìn)程在等待某個(gè)事件的發(fā)生,比如等待 I/O 操作完成或等待資源釋放,此時(shí)進(jìn)程無(wú)法執(zhí)行。

  • 終止?fàn)顟B(tài)(Terminated):進(jìn)程已經(jīng)完成執(zhí)行或被操作系統(tǒng)終止。

進(jìn)程狀態(tài)之間的轉(zhuǎn)換如下:

  • 新建狀態(tài)(New) -> 就緒狀態(tài)(Ready):進(jìn)程被創(chuàng)建后,等待操作系統(tǒng)調(diào)度執(zhí)行。

  • 就緒狀態(tài)(Ready) -> 運(yùn)行狀態(tài)(Running):進(jìn)程被操作系統(tǒng)選中,獲得 CPU 時(shí)間片,開(kāi)始執(zhí)行。

  • 運(yùn)行狀態(tài)(Running) -> 就緒狀態(tài)(Ready):進(jìn)程執(zhí)行完畢或者時(shí)間片用完,進(jìn)入就緒狀態(tài)等待下一次調(diào)度。

  • 運(yùn)行狀態(tài)(Running) -> 阻塞狀態(tài)(Blocked):進(jìn)程需要等待某個(gè)事件的發(fā)生,如 I/O 操作,等待操作系統(tǒng)將其掛起并進(jìn)入阻塞狀態(tài)。

  • 阻塞狀態(tài)(Blocked) -> 就緒狀態(tài)(Ready):等待的事件已經(jīng)發(fā)生,操作系統(tǒng)將其喚醒并進(jìn)入就緒狀態(tài)等待調(diào)度。

  • 運(yùn)行狀態(tài)(Running) -> 終止?fàn)顟B(tài)(Terminated):進(jìn)程完成了任務(wù)或者被操作系統(tǒng)強(qiáng)制終止。

進(jìn)程控制(原語(yǔ))

創(chuàng)建原語(yǔ):create, 阻塞原語(yǔ):block, 喚醒原語(yǔ):wakeup, 撤銷(xiāo)原語(yǔ):destroy

線程

線程(Thread)是計(jì)算機(jī)中的一種基本執(zhí)行單位,是程序執(zhí)行的最小單元。線程是進(jìn)程中的一部分,一個(gè)進(jìn)程可以包含多個(gè)線程。多個(gè)線程可以共享同一進(jìn)程的內(nèi)存空間和其他資源,但每個(gè)線程都有自己的程序計(jì)數(shù)器、棧和局部變量等線程私有的數(shù)據(jù)。其目的是提高OS的并發(fā)性,注意包含用戶級(jí)線程和內(nèi)核級(jí)線程。

進(jìn)程和線程的區(qū)別

線程相較于進(jìn)程,大大降級(jí)了撤銷(xiāo)、創(chuàng)建和切換可執(zhí)行實(shí)體的成本和難度。

  • 資源占用:進(jìn)程是操作系統(tǒng)資源分配的基本單位,它擁有獨(dú)立的內(nèi)存空間、文件描述符等系統(tǒng)資源,不同進(jìn)程之間彼此獨(dú)立。而線程是進(jìn)程內(nèi)部的執(zhí)行單元,它共享進(jìn)程的內(nèi)存空間和系統(tǒng)資源。

  • 調(diào)度:進(jìn)程的創(chuàng)建、切換、銷(xiāo)毀等操作需要操作系統(tǒng)的介入,因此進(jìn)程調(diào)度的開(kāi)銷(xiāo)比線程調(diào)度大。線程是由進(jìn)程創(chuàng)建和管理的,線程的調(diào)度是由進(jìn)程內(nèi)的線程調(diào)度器完成的。

  • 并發(fā)性:由于進(jìn)程之間相互獨(dú)立,因此進(jìn)程的并發(fā)性高。而線程是共享進(jìn)程資源的,線程之間的并發(fā)性相對(duì)較低,因?yàn)榫€程的執(zhí)行需要協(xié)調(diào)和同步。

  • 系統(tǒng)開(kāi)銷(xiāo):由于進(jìn)程之間的獨(dú)立性,進(jìn)程的創(chuàng)建和銷(xiāo)毀需要消耗一定的系統(tǒng)資源,而線程的創(chuàng)建和銷(xiāo)毀開(kāi)銷(xiāo)相對(duì)較小。

  • 通信:由于進(jìn)程之間彼此獨(dú)立,因此它們需要通過(guò)一些特定的機(jī)制(例如管道、消息隊(duì)列、共享內(nèi)存等)來(lái)進(jìn)行通信。而線程之間共享進(jìn)程的內(nèi)存空間,因此它們可以通過(guò)直接訪問(wèn)共享內(nèi)存來(lái)進(jìn)行通信。

進(jìn)程的通信方式

  • 管道/匿名管道(Pipes) :用于具有親緣關(guān)系的父子進(jìn)程間或者兄弟進(jìn)程之間的通信。有名管道(Named Pipes) : 匿名管道由于沒(méi)有名字,只能用于親緣關(guān)系的進(jìn)程間通信。為了克服這個(gè)缺點(diǎn),提出了有名管道。有名管道嚴(yán)格遵循先進(jìn)先出(first in first out)。有名管道以磁盤(pán)文件的方式存在,可以實(shí)現(xiàn)本機(jī)任意兩個(gè)進(jìn)程通信。
  • 信號(hào)(Signal) :信號(hào)是一種比較復(fù)雜的通信方式,用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生;
  • 消息隊(duì)列(Message Queuing) :消息隊(duì)列是消息的鏈表,具有特定的格式,存放在內(nèi)存中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí)。管道和消息隊(duì)列的通信數(shù)據(jù)都是先進(jìn)先出的原則。與管道(無(wú)名管道:只存在于內(nèi)存中的文件;命名管道:存在于實(shí)際的磁盤(pán)介質(zhì)或者文件系統(tǒng))不同的是消息隊(duì)列存放在內(nèi)核中,只有在內(nèi)核重啟(即,操作系統(tǒng)重啟)或者顯式地刪除一個(gè)消息隊(duì)列時(shí),該消息隊(duì)列才會(huì)被真正的刪除。消息隊(duì)列可以實(shí)現(xiàn)消息的隨機(jī)查詢(xún),消息不一定要以先進(jìn)先出的次序讀取,也可以按消息的類(lèi)型讀取.比 FIFO 更有優(yōu)勢(shì)。消息隊(duì)列克服了信號(hào)承載信息量少,管道只能承載無(wú)格式字 節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)。
  • 信號(hào)量(Semaphores) :信號(hào)量是一個(gè)計(jì)數(shù)器,用于多進(jìn)程對(duì)共享數(shù)據(jù)的訪問(wèn),信號(hào)量的意圖在于進(jìn)程間同步。這種通信方式主要用于解決與同步相關(guān)的問(wèn)題并避免競(jìng)爭(zhēng)條件。
  • 共享內(nèi)存(Shared memory) :使得多個(gè)進(jìn)程可以訪問(wèn)同一塊內(nèi)存空間,不同進(jìn)程可以及時(shí)看到對(duì)方進(jìn)程中對(duì)共享內(nèi)存中數(shù)據(jù)的更新。這種方式需要依靠某種同步操作,如互斥鎖和信號(hào)量等??梢哉f(shuō)這是最有用的進(jìn)程間通信方式。
  • 套接字(Sockets) : 此方法主要用于在客戶端和服務(wù)器之間通過(guò)網(wǎng)絡(luò)進(jìn)行通信。套接字是支持 TCP/IP 的網(wǎng)絡(luò)通信的基本操作單元,可以看做是不同主機(jī)之間的進(jìn)程進(jìn)行雙向通信的端點(diǎn),簡(jiǎn)單的說(shuō)就是通信的兩方的一種約定,用套接字中的相關(guān)函數(shù)來(lái)完成通信過(guò)程。

進(jìn)程的上下文切換

在進(jìn)行上下文切換之前,操作系統(tǒng)需要先保存當(dāng)前進(jìn)程的上下文(包括寄存器的值、程序計(jì)數(shù)器、棧指針等狀態(tài)信息),以便在將來(lái)恢復(fù)該進(jìn)程的執(zhí)行。

接著,操作系統(tǒng)會(huì)將處理器的控制權(quán)交給另一個(gè)進(jìn)程,并將其之前保存的上下文信息恢復(fù)到寄存器中,使該進(jìn)程能夠從之前暫停的地方繼續(xù)執(zhí)行。這個(gè)過(guò)程稱(chēng)為進(jìn)程切換,通常需要消耗一定的處理器時(shí)間和系統(tǒng)資源。

需要注意上下文切換對(duì)于多任務(wù)操作系統(tǒng)的性能和穩(wěn)定性非常重要。如果上下文切換的頻率太高,會(huì)導(dǎo)致處理器花費(fèi)過(guò)多時(shí)間在保存和恢復(fù)進(jìn)程上,從而影響系統(tǒng)的整體性能。因此,操作系統(tǒng)需要對(duì)進(jìn)程進(jìn)行合理的調(diào)度,以最小化上下文切換的次數(shù),并確保所有進(jìn)程都能夠得到公平的處理器時(shí)間。

線程間同步方式

  • 互斥量(Mutex):采用互斥對(duì)象機(jī)制,只有擁有互斥對(duì)象的線程才有訪問(wèn)公共資源的權(quán)限。因?yàn)榛コ鈱?duì)象只有一個(gè),所以可以保證公共資源不會(huì)被多個(gè)線程同時(shí)訪問(wèn)。比如 Java 中的 synchronized 關(guān)鍵詞和各種 Lock 都是這種機(jī)制。
  • 信號(hào)量(Semaphore) :它允許同一時(shí)刻多個(gè)線程訪問(wèn)同一資源,但是需要控制同一時(shí)刻訪問(wèn)此資源的最大線程數(shù)量。事件(Event) :Wait/Notify:通過(guò)通知操作的方式來(lái)保持多線程同步,還可以方便的實(shí)現(xiàn)多線程優(yōu)先級(jí)的比較操作。

死鎖TODO

進(jìn)程調(diào)度算法TODO

進(jìn)程通信方式細(xì)解TODO

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 進(jìn)程的基本概念 首先介紹一個(gè)概念叫多道程序設(shè)計(jì)(multiprogramming)。所謂多道程序設(shè)計(jì)是指允...
    Zhehao閱讀 1,104評(píng)論 0 0
  • 1. 并行和并發(fā)有什么區(qū)別? 并發(fā),是指兩個(gè)或多個(gè)事件在同一時(shí)間間隔發(fā)生。 并行,是指兩個(gè)或者多個(gè)事件在同一時(shí)刻發(fā)...
    抄無(wú)止境閱讀 338評(píng)論 0 4
  • 一、計(jì)算機(jī)發(fā)展史 1、手工操作(無(wú)操作系統(tǒng)) 說(shuō)明還未出現(xiàn)操作系統(tǒng),計(jì)算機(jī)工作采用手工操作方式。手工操作 程序員將...
    唯老閱讀 640評(píng)論 0 2
  • 2.1 進(jìn)程與線程 2.1.1 進(jìn)程的概念和特征 2.1.1.1 進(jìn)程的概念 程序:是靜態(tài)的,就是個(gè)存放在磁盤(pán)里的...
    AdRainty閱讀 308評(píng)論 0 1
  • 又來(lái)到了一個(gè)老生常談的問(wèn)題,應(yīng)用層軟件開(kāi)發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個(gè)問(wèn)題開(kāi)始,來(lái)談?wù)劜?..
    tangsl閱讀 4,317評(píng)論 0 23

友情鏈接更多精彩內(nèi)容