日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【OS】进程与线程

發(fā)布時間:2023/12/15 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OS】进程与线程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 進程的概念和特征
    • 進程和程序的關(guān)系
    • 進程的特征
    • 進程的狀態(tài)和轉(zhuǎn)換
    • 進程控制
    • 引起`進程終止`的事件主要有:
    • 操作系統(tǒng)`終止進程`過程如下(`撤銷原語`):
    • `阻塞原語`的執(zhí)行過程如下:
    • `喚醒原語`的執(zhí)行過程如下:
    • `進程切換`的過程如下:
    • 進程組織
    • 進程通信
    • 線程概念和多線程模式
    • 線程的提出有利于提高系統(tǒng)并發(fā)性
    • 小結(jié)

進程的概念和特征

  • 進程的概念
    在多道程序環(huán)境下允許多個程序并發(fā)執(zhí)行,此時這些程序會失去封閉性,并具有間斷性以及不可再現(xiàn)性。為此引入了進程(Process)的概念,以便于更好的去描述和控制程序的并發(fā)執(zhí)行,實現(xiàn)操作系統(tǒng)的并發(fā)性和共享性(操作系統(tǒng)最基本的兩個特征)。
    為了能使參與并發(fā)執(zhí)行的程序能夠獨立運行,必須要為每個進程配置一個進程控制塊(PCB)。
  • 系統(tǒng)利用PCB來描述進程的基本情況和運行狀態(tài),進而控制和管理進程

    進程映像(進程實體)由程序段、相關(guān)數(shù)據(jù)段和PCB三部分構(gòu)成。進程映像是靜態(tài)的,進程是動態(tài)的,進程是進程映像的運行過程。所謂創(chuàng)建進程實質(zhì)上是創(chuàng)建進程映像中的PCB,而撤銷進程實質(zhì)上是撤銷進程的PCB。

    !!!PCB是進程存在的唯一標志。

    進程和程序的關(guān)系

  • 進程是動態(tài)的,程序是靜態(tài)的
  • 進程是暫時的,程序是永久的
  • 進程和程序的組成不同
  • 一個程序可以產(chǎn)生多個不同的進程,一個進程可以執(zhí)行多個程序;
    進程可以創(chuàng)建其他進程,程序不能產(chǎn)生新程序
  • 進程具有并行特性(獨立性和異步性),程序沒有
  • ①進程是程序的一次執(zhí)行過程。
    ②進程是一個程序及其數(shù)據(jù)在處理機上順序執(zhí)行時所發(fā)生的活動。
    ③進程是具有獨立功能的程序在一個數(shù)據(jù)集合上運行的過程,它是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位。

    進程的特征

    進程是由多道程序的并發(fā)執(zhí)行引出的,它和程序是兩個不同的概念,進程的基本特征是對比單個程序的順序執(zhí)行提出的,也是對進程管理提出的基本要求。
    ①動態(tài)性
    進程是程序的一次執(zhí)行,它有著創(chuàng)建、活動、暫停、終止等過程,具有一定的生命周期,是動態(tài)的產(chǎn)生,變化和消亡的。動態(tài)性是進程最基本的特征
    ②并發(fā)性
    并發(fā)性是指多個進程實體同時存于內(nèi)存中,能在一段時間內(nèi)同時運行。并發(fā)性是進程的重要特征,同時也是操作系統(tǒng)的重要特征,引入進程的目的就是為了使程序能與其他進程的程序并發(fā)執(zhí)行,從而提高資源利用率。
    ③獨立性
    獨立性是指進程實體是一個能獨立運行,獨立獲得資源和獨立接受調(diào)度的基本單位。
    凡未建立PCB的程序都不能作為一個獨立的單位參與運行。
    ④異步性
    由于進程的相互制約,使得進程具有執(zhí)行的間斷性,即進程按各自獨立的、不可預知的速度向前推進。異步性會導致執(zhí)行結(jié)果的不可再現(xiàn)性,為此,在操作系統(tǒng)中必須配置相應的進程同步機制。
    ⑤結(jié)構(gòu)性
    每個進程都配置一個PCB對其進行描述。從結(jié)構(gòu)上看進程實體是由程序段、數(shù)據(jù)段和進程控制塊三部分組成。

    進程的狀態(tài)和轉(zhuǎn)換

    一個進程在其生命周期中,由于系統(tǒng)各進程之間的相互制約關(guān)系以及系統(tǒng)的運行環(huán)境的變化,會使得進程的狀態(tài)也在不斷的發(fā)生變化(一個進程會經(jīng)歷若干不同的狀態(tài)),通常情況下會有以下5種狀態(tài),前3種是進程的基本狀態(tài)。

  • 運行態(tài)
    進程正在處理機上運行。在單處理機環(huán)境下,每個時刻最多只有一個進程處于運行態(tài)。
  • 就緒態(tài)
    進程獲得了除處理機之外的一切所需資源,一旦得到處理機便可立即運行。系統(tǒng)中處于就緒狀態(tài)的進程可能有多個,通常將它們排成一個隊列稱為就緒隊列。
  • 阻塞態(tài)
    阻塞態(tài)又稱等待態(tài)。進程正在等待某一事件而暫停運行,如等待某資源為可用(不包括處理機)或等待輸入/輸出完成。即使處理機空閑,該進程也不能運行。
  • 創(chuàng)建態(tài)
    進程正在被創(chuàng)建,尚未轉(zhuǎn)到就緒態(tài)。
    進程創(chuàng)建通常需要多個步驟:
    首先申請一個空白的PCB,并向PCB中填寫一些控制和管理進程的信息,然后由系統(tǒng)為該進程分配運行時所必需的資源,最后把該進程轉(zhuǎn)入就緒態(tài)。
  • 結(jié)束態(tài)
    進程正從系統(tǒng)中消失,可能是進程正常結(jié)束或者是其他原因中斷退出運行。進程需要結(jié)束運行時,系統(tǒng)首先必須置該進程為結(jié)束態(tài),然后再進一步處理資源釋放和回收等工作。
  • 注意區(qū)別就緒態(tài)和等待態(tài):
    就緒態(tài)是指進程僅僅缺少了處理機,只要獲得處理機資源就可以立即運行進程,而等待態(tài)是指進程需要其他資源(除了處理機)或等待某一件事件。

    之所以將處理機和其他資源劃分開,是因為在分時系統(tǒng)的時間片輪轉(zhuǎn)機制中,每個進程分到的時間片是幾毫秒,也就是說進程得到處理機的時間很短,而且非常頻繁,進程在運行過程中實際上是頻繁的轉(zhuǎn)換到就緒態(tài),而其他資源(比如說外設(shè))的使用和分配或某一事件的發(fā)生(如io操作的完成)對應的時間相對來說很長,進程轉(zhuǎn)換到等待態(tài)的次數(shù)也相對較少,這樣看來就緒態(tài)和等待態(tài)是進程生命周期中兩個完全不同的狀態(tài),需要加以區(qū)分。

    • 就緒態(tài)→運行態(tài)
      處于就緒態(tài)的進程被調(diào)度后獲得處理機資源(分派處理機時間片),于是進程由就緒態(tài)轉(zhuǎn)換為運行態(tài)。
    • 運行態(tài)→就緒態(tài)
      處于運行態(tài)的進程,在時間片用完后不得不讓出處理機,從而進程由運行態(tài)轉(zhuǎn)化為就緒態(tài),此外在可剝奪的操作系統(tǒng)中,當有更高優(yōu)先級的進程就緒時,調(diào)度程度將正在執(zhí)行的進程轉(zhuǎn)化為就緒態(tài),讓更高優(yōu)先級的進程執(zhí)行。
    • 運行態(tài)→阻塞態(tài)
      進程請求某一資源(如外設(shè))的使用和分配,或等待某一事件的發(fā)生時,它就從運行態(tài)轉(zhuǎn)換為阻塞態(tài),進程以系統(tǒng)調(diào)用的形式請求操作系統(tǒng)提供服務,這是一種特殊的由運行用戶態(tài)程序調(diào)用操作系統(tǒng)內(nèi)核過程的程序。
    • 阻塞態(tài)→就緒態(tài)
      進程等待的事件到來時(如IO操作結(jié)束或中斷結(jié)束時),中斷處理程序必須把相應進程的狀態(tài)由阻塞態(tài)轉(zhuǎn)化為就緒態(tài)。

    一個進程從運行態(tài)變?yōu)樽枞麘B(tài)是主動行為,而從阻塞態(tài)變成就緒態(tài)是被動行為,需要其他相關(guān)進程的協(xié)助。

    進程控制

    一般把進程控制用的程序段稱為原語,原語的特點是執(zhí)行期間不允許中斷,它是一個不可分割的基本單位。

  • 進程創(chuàng)建
    允許一個進程創(chuàng)建另外一個進程,創(chuàng)建者稱為父進程,被創(chuàng)建的進程稱為子進程。子進程可以繼承父進程所擁有的資源,當子進程被撤銷時,應將其從父進程那里獲得的資源歸還給父進程,此外在撤銷父進程時必須同時撤銷其所有的子進程。
    在操作系統(tǒng)中,終端用戶登錄系統(tǒng)、作業(yè)調(diào)度、系統(tǒng)提供服務、用戶程序的請求等都會引起新進程的創(chuàng)建。操作系統(tǒng)會創(chuàng)建一個新的進程(創(chuàng)建原語):
    為新進程分配一個唯一的進程標識號,并申請一個空白的PCB(PCB是有限的)。若PCB申請失敗,則創(chuàng)建失敗。
    為進程分配資源,為新進程的程序和數(shù)據(jù)及用戶棧分配必要的內(nèi)存空間(PCB中體現(xiàn))。若資源不足,則并不是創(chuàng)建失敗,而是處于阻塞態(tài),等待內(nèi)存資源。
    初始化PCB主要包括初始化標志信息,初始化處理機狀態(tài)信息和初始化處理機控制信息,以及設(shè)置進程的優(yōu)先級等。
    若進程就緒隊列能夠接納新進程,則將新進程插入就緒隊列,等待被調(diào)度運行。
  • 進程終止
  • 引起進程終止的事件主要有:

    ①正常結(jié)束,表示進程的任務已完成,并準備退出運行。
    ②異常結(jié)束,表示進程在運行時發(fā)生了某種異常事件,使程序無法繼續(xù)運行。
    ③外界干預,指進程應外界的請求而終止運行。

    操作系統(tǒng)終止進程過程如下(撤銷原語):

    ①根據(jù)被終止進程的標識符,檢索PCB,從中讀出該進程的狀態(tài)。

    ②若被終止進程處于執(zhí)行狀態(tài),立即終止該進程的執(zhí)行,將處理機資源分配給其他進程。

    ③若該進程還有子孫進程,則應將其所有子孫進程終止。

    ④將該進程所擁有的全部資源,或歸還給其父進程,或歸還給操作系統(tǒng)。

    ⑤將該PCB從所在隊列(鏈表)中刪除。

  • 進程阻塞和喚醒
    正在執(zhí)行的進程,由于期待的某些事件尚未發(fā)生(如請求系統(tǒng)資源失敗,等待某種操作完成,新數(shù)據(jù)尚未到達或無心工作可做等),由系統(tǒng)自動執(zhí)行阻塞原語(Block),使自己由運行態(tài)變?yōu)樽枞麘B(tài),可見進程的阻塞是進程自身的一種主動行為,也因此只有處于運行態(tài)的進程才可能將其轉(zhuǎn)為阻塞態(tài)
  • 阻塞原語的執(zhí)行過程如下:

    ①找到將要被阻塞進程的標識號對應的PCB
    ②若該進程為運行態(tài),則保護其現(xiàn)場,將其狀態(tài)轉(zhuǎn)為阻塞態(tài)停止運行
    ③把該PCB插入相應事件的等待隊列,將處理機資源調(diào)度給其他就緒進程

    當被阻塞進程所期待的事件發(fā)生(如它所啟動的IO操作已完成,或其所期待的數(shù)據(jù)已到達)時,由有關(guān)進程調(diào)用喚醒原語(Wakeup),將等待該事件的進程喚醒。

    喚醒原語的執(zhí)行過程如下:

    ①在該事件的等待隊列中找到相應的進程的PCB

    ②將其從等待隊列中移出,并致其狀態(tài)為就緒態(tài)

    ③把該PCB插入就緒隊列,等待調(diào)度程序調(diào)度

    Block原語和Wakeup原語是一對作用剛好相反的原語,必須成對使用。Block原語是被阻塞進程自我調(diào)用實現(xiàn)的,而Wakeup原語則是由一個與被喚醒進程合作或被其他相關(guān)的進程調(diào)用實現(xiàn)的。

  • 進程切換
    對于通常的進程來說,其創(chuàng)建、撤銷及要求由系統(tǒng)設(shè)備完成的IO操作都是利用系統(tǒng)調(diào)用而進入內(nèi)核的,再由內(nèi)核中的相應處理程序予以完成。進程切換同樣是在內(nèi)核的支持下實現(xiàn)的,可以說任何競爭都是在操作系統(tǒng)內(nèi)核的支持下運行的,是與內(nèi)核緊密相關(guān)。
    進程切換是指處理機從一個進程的運行轉(zhuǎn)到另一個進程上運行,在這個過程中進程的運行環(huán)境產(chǎn)生了實質(zhì)性的變化
  • 進程切換的過程如下:

    ①保存處理機上下文,包括程序計數(shù)器和其他寄存器。

    ②更新PCB信息。

    ③把進程的PCB移入相應的隊列。如就緒、在某事件阻塞等隊列。

    ④選擇另一個進程執(zhí)行并更新其PCB。

    ⑤更新內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)。

    ⑥恢復處理機上下文。

    進程切換與處理機模式切換是不同的,模式切換時處理機邏輯上可能還在同一進程中運行。若進程因中斷或異常進入核心態(tài)運行,執(zhí)行完后又回到用戶態(tài)剛被中斷的程序運行,則操作系統(tǒng)只需恢復進程進入內(nèi)核時所保存的CPU現(xiàn)場,而無需改變當前進程的環(huán)境信息。但若要切換進程,當前的運行進程改變了,則當前進程的環(huán)境信息也需要改變。

    進程組織

    進程是一個獨立的運行單位,也是操作系統(tǒng)進行資源分配和調(diào)度的基本單位,由以下三部分組成,最核心的部分是進程控制塊PCB。

  • 進程控制塊
    1)進程創(chuàng)建時,操作系統(tǒng)為它新建一個PCB,該結(jié)構(gòu)之后常駐內(nèi)存,任何時刻都可以存儲,并在進程結(jié)束時刪除,PCB是進程實體的一部分,是進程存在的唯一標志。
    2)進程執(zhí)行時,系統(tǒng)通過其PCB了解進程的現(xiàn)行狀態(tài)信息,以便對其進行控制和管理。
    3)進程結(jié)束時系統(tǒng)回收其PCB,該進程隨之消亡,操作系統(tǒng)通過PCB表來管理和控制進程。
    4)當操作系統(tǒng)想要調(diào)度某進程運行時,要從該進程的PCB中查出其現(xiàn)行狀態(tài)和優(yōu)先級;在調(diào)度到某進程后,要根據(jù)其PCB所保存的處理機狀態(tài)信息,設(shè)置該進程恢復運行的現(xiàn)場,并根據(jù)其PCB中的程序和數(shù)據(jù)的內(nèi)存地址找到其程序和數(shù)據(jù)。
    5)進程在運行過程中,當需要和與之合作的進程實現(xiàn)同步、通信或訪問文件時,也需要訪問PCB。
    6)當進程由于某種原因而暫停運行時,又需將其斷點的處理機環(huán)境保存在PCB中。
    可見在進程的整個生命期中,系統(tǒng)總是通過PCB對進程進行控制,系統(tǒng)唯有通過進程的PCB才能感知到其進程的存在。
    PCB主要包括進程描述、信息進程控制、管理信息、資源分配清單和處理機相關(guān)信息等。
  • ①進程描述信息
    進程標識符:標志各個進程,每個進程都有唯一一個標識號。
    用戶標識符:進程歸屬的用戶,用戶標識符主要為共享和保護服務。

    ②進程控制和管理信息
    進程當前狀態(tài):描述進程的狀態(tài)信息作為處理機分配調(diào)度的依據(jù)。
    進程優(yōu)先級:描述進程搶占處理機的優(yōu)先級,優(yōu)先級高的進程可優(yōu)先獲得處理機。

    ③資源分配清單
    用于說明有關(guān)內(nèi)存地址空間或虛擬地址空間的情況,所打開文件的列表和所使用的輸入輸出設(shè)備信息。

    處理機相關(guān)信息
    主要指處理機中各寄存器的值。當進程被切換時,處理機狀態(tài)信息都必須保存在相應的PCB中,以便在該進程重新執(zhí)行時,能從斷點繼續(xù)執(zhí)行。

    PCB包含內(nèi)容:

    在一個系統(tǒng)中通常存在著許多進程的PCB,有的處于就緒態(tài),有的處于阻塞態(tài),而且阻塞下來的原因各不相同。
    為了方便進程的調(diào)度和管理,需要將各進程的PCB用適當?shù)姆椒ńM織起來,目前常用的組織方式有鏈接方式和索引方式兩種:
    鏈接方式:將同一狀態(tài)的PCB鏈接成一個隊列,不同狀態(tài)對應不同的隊列,也可把處于阻塞態(tài)的進程的PCB,根據(jù)其阻塞原因的不同,排成多個阻塞隊列。
    索引方式:將同一狀態(tài)的進程組織在一個索引表中,索引表的表項指向相應的PCB,不同狀態(tài)對應不同的索引表,如就緒索引表和阻塞索引表等。
    2. 程序段
    程序段就是能被進程調(diào)度程序調(diào)度到CPU執(zhí)行的程序代碼段。
    程序可被多個進程共享,即多個進程可以運行同一個程序。
    3. 數(shù)據(jù)段
    一個進程的數(shù)據(jù)段可以是進程對應的程序加工處理的原始數(shù)據(jù),也可以是程序執(zhí)行時產(chǎn)生的中間或最終結(jié)果。

    進程通信

    進程通信是指進程之間的信息交換,PV操作是低級通信方式,高級通信方式是指以較高的效率傳輸大量數(shù)據(jù)的通信方式,高級通信方法主要有以下三類:

  • 共享存儲
    在通信的進程之間存在一塊可直接訪問的共享空間,通過對這片共享空間進行讀寫操作實現(xiàn)進程之間的信息交換。在對共享空間進行讀寫操作時,需要使用同步互斥工具(如PV操作),對共享空間的讀/寫操作進行控制。
    共享存儲又分為兩種:
    低級共享是基于數(shù)據(jù)結(jié)構(gòu)的共享
    高級共享是基于存儲區(qū)的共享
    操作系統(tǒng)只負責為通信進程提供可共享使用的存儲空間和同步互斥工具,而數(shù)據(jù)交換則由用戶自己安排讀寫指令完成
  • 注意:用戶進程空間一般都是獨立的,進程運行期間一般不能訪問其他進程的空間,要想讓兩個用戶進程共享空間必須通過特殊的系統(tǒng)調(diào)用實現(xiàn),而進程內(nèi)的線程是自然共享進程空間的。

  • 消息傳遞
    在消息傳遞系統(tǒng)中,進程間的數(shù)據(jù)交換是以格式化的消息為單位的,如果通信的進程之間不存在可直接訪問的共享空間,則必須利用操作系統(tǒng)提供的消息傳遞方法實現(xiàn)進程通信。
    進程通過系統(tǒng)提供的發(fā)送消息和接收消息兩個原語進行數(shù)據(jù)交換
    ①直接通信方式
    發(fā)送進程直接把消息發(fā)送給接收進程,并將它掛在接收進程的消息緩沖隊列上,接收進程從消息緩沖隊列中取得信息。

    ②間接通信方式
    發(fā)送進程把消息發(fā)送到某個中間實體,接收進程從中間實體取得消息,這種中間實體一般稱為信箱,這種通信方式又成為信箱通信方式。
    該通信方式廣泛應用于計算機網(wǎng)絡中,相應的通信系統(tǒng)稱為電子郵件系統(tǒng)。

  • 管道通信
    管道通信是消息傳遞的一種特殊方式

  • 所謂“管道”是指用于連接一個讀進程和一個寫進程,以實現(xiàn)它們之間的通信的一個共享文件,又名pipe文件。向管道(共享文件)提供輸入的發(fā)送進程(寫進程),以字符流形式將大量的數(shù)據(jù)送入寫通道,而接收管道輸出的接收進程(讀進程)則從管道中接收(讀)數(shù)據(jù),為了協(xié)調(diào)雙方的通信,管道機制必須提供以下三個方面的協(xié)調(diào)能力:互斥、同步和確定對方存在。

    以Linux中的管道為例:
    在Linux中管道是一種使用非常頻繁的通信機制,從本質(zhì)上說管道也是一種文件,但它又和一般的文件有所不同,管道可以克服使用文件進行通信的兩個問題:
    ①限制管道的大小。
    實際上管道是一個固定大小的緩沖區(qū),在Linux中該緩沖區(qū)的大小為4,kb,這是它的大小,不像穩(wěn)健那樣不加檢驗的增長,使用單個固定緩沖區(qū)也會帶來問題,比如在斜管道時可能變滿,這種情況發(fā)生時隨后對管道的right調(diào)用將默認的被阻塞,等待某些數(shù)據(jù)被讀取,以便騰出足夠的空間共write調(diào)用。

    ②獨進程也可能工作的比寫進程快。
    當所有當前進程數(shù)據(jù)已被讀取時,管道變空,當這種情況發(fā)生時,一個隨后的read調(diào)用將默認的被阻塞,等待某些數(shù)據(jù)被寫入,這解決了瑞的調(diào)用返回文件結(jié)束的問題。

    管道可以理解為共享存儲的優(yōu)化和發(fā)展。因為在共享存儲中,若某進程要訪問共享存儲空間,則必須沒有其他進程在該共享存儲空間中進行寫操作,否則訪問行為就會被阻塞,而管道通信中存儲空間進化成了緩沖區(qū),緩沖區(qū)只允許一邊寫入另一邊讀出,因此只要緩沖區(qū)中有數(shù)據(jù)進程就能從緩沖區(qū)中讀出,而不必擔心會被其他進程在另一在其中進行寫操作而遭到阻塞。因為寫進程會先把緩沖區(qū)寫滿,然后才讓讀進程讀,當緩沖區(qū)中還有數(shù)據(jù)時寫進程不會往緩沖區(qū)寫數(shù)據(jù),這也決定了管道通信必然是半雙工通信。

    線程概念和多線程模式

  • 線程的基本概念
    引入進程的目的是為了更好地使多道程序并發(fā)執(zhí)行,提高資源利用率和系統(tǒng)吞吐量,而引入線程的目的則是為了減小程序在并發(fā)執(zhí)行時所付出的時空開銷,提高操作系統(tǒng)的并發(fā)性能
    線程最直接的理解就是“輕量級進程”,它是一個基本的CPU執(zhí)行單元,也是程序執(zhí)行流的最小單元,由線程ID、程序計數(shù)器、寄存器集合和堆棧組成。
    線程是進程中的一個實體,是被系統(tǒng)獨立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點兒在運行中必不可少的資源,但它可與同屬一個進程的其他線程共享進程所擁有的全部資源一個線程可以創(chuàng)建和撤銷另一個線程,同一進程中的多個線程之間可以并發(fā)執(zhí)行。由于線程之間的相互制約,致使線程在運行中呈現(xiàn)出間斷性。線程也有就緒、阻塞和運行三種基本狀態(tài)
    引入線程后,進程只作為除CPU外的系統(tǒng)資源的分配單元,而線程則作為處理機的分配單元。由于一個進程內(nèi)部有多個線程,若線程的切換發(fā)生在同一個進程內(nèi)部,則只需要很少的時空開銷。

  • 線程與進程
    1 )調(diào)度
    在傳統(tǒng)的操作系統(tǒng)中,擁有資源和獨立調(diào)度的基本單位都是進程。
    在引入線程的操作系統(tǒng)中,線程是獨立調(diào)度的基本單位,進程是擁有資源的基本單位在同一進程中,線程的切換不會引起進程切換。在不同進程中進行線程切換,如從個進程內(nèi)的線程切換到另一個進程中的線程時,會引起進程切換
    2 )擁有資源
    不論是傳統(tǒng)操作系統(tǒng)還是設(shè)有線程的操作系統(tǒng),進程都是擁有資源的基本單位,而線程不擁有系統(tǒng)資源(也有點兒必不可少的資源) ,但線程可以訪問其隸屬進程的系統(tǒng)資源。要知道,若線程也是擁有資源的單位,則切換線程就需要較大的時空開銷,線程這個概念的提出就沒有意義。
    3 )并發(fā)性
    在引入線程的操作系統(tǒng)中,不僅進程之間可以并發(fā)執(zhí)行,而且多個線程之間也可以并發(fā)執(zhí)行,從而使操作系統(tǒng)具有更好的并發(fā)性,提高了系統(tǒng)的吞吐量
    4 )系統(tǒng)開銷
    由于創(chuàng)建或撤銷進程時,系統(tǒng)都要為之分配或回收資源,如內(nèi)存空間、I/O設(shè)備等,因此操作系統(tǒng)所付出的開銷遠大于創(chuàng)建或撤銷線程時的開銷。類似地,在進行進程切換時,涉及當前執(zhí)行進程CPU環(huán)境的保存及新調(diào)度到進程CPU環(huán)境的設(shè)置,而線程切換時只需保存和設(shè)置少量寄存器內(nèi)容,開銷很小。此外,由于同進程內(nèi)的多個線程共享進程的地址空間,因此這些線程之間的同步與通信非常容易實現(xiàn),甚至無須操作系統(tǒng)的干預
    5 )地址空間和其他資源(如打開的文件)
    進程的地址空間之間互相獨立,同一進程的各線程間共享進程的資源,某進程內(nèi)的線程對于其他進程不可見
    6 )通信方面
    進程間通信(IPC) 需要進程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性,而線程間可以直接讀/寫進程數(shù)據(jù)段(如全局變量)來進行通信

  • 線程屬性
    多線程操作系統(tǒng)把線程作為獨立運行(或調(diào)度)的基本單位,此時的進程已不再是一個基本的可執(zhí)行實體,但它仍具有與執(zhí)行相關(guān)的狀態(tài)。所謂進程處于“執(zhí)行”狀態(tài),實際上是指該進程中的某線程正在執(zhí)行。線程的主要屬性如下:
    1 )線程是一個輕型實體, 它不擁有系統(tǒng)資源,但每個線程都應有一一個唯一的標識符和一一個線程控制塊,線程控制塊記錄了線程執(zhí)行的寄存器和棧等現(xiàn)場狀態(tài)。
    2 )不同的線程可以執(zhí)行相同的程序,即同一個服務程序被不同的用戶調(diào)用時,操作系統(tǒng)把它們創(chuàng)建成不同的線程
    3 )同一進程中的各個線程共享該進程所擁有的資源
    4 )線程是處理機的獨立調(diào)度單位,多個線程是可以并發(fā)執(zhí)行的
    在單CPU的計算機系統(tǒng)中,各線程可交替地占用CPU;在多CPU的計算機系統(tǒng)中,各線程可同時占用不同的CPU,若各個CPU同時為一個進程內(nèi)的各線程服務,則可縮短進程的處理時間
    5 )一個線程被創(chuàng)建后,便開始了它的生命周期,直至終止。線程在生命周期內(nèi)會經(jīng)歷阻塞態(tài)、就緒態(tài)和運行態(tài)等各種狀態(tài)變化

  • 線程的提出有利于提高系統(tǒng)并發(fā)性

    由于有了線程,線程切換時,有可能會發(fā)生進程切換,也有可能不發(fā)生進程切換,平均而言每次切換所需的開銷就變小了,因此能夠讓更多的線程參與并發(fā),而不會影響到響應時間等問題。

  • 線程實現(xiàn)方式
    線程的實現(xiàn)可以分為兩類:用戶級線程(User-Level Thread, ULT)和內(nèi)核級線程(Kermel-Level Thread, KLT)。內(nèi)核級線程又稱內(nèi)核支持的線程
    1)在用戶級線程中
    有關(guān)線程管理(線程的創(chuàng)建、撤銷和切換等)的所有工作都由應用程序完成,內(nèi)核意識不到線程的存在。應用程序可以通過使用線程庫設(shè)計成多線程程序。應用程序從單線程開始,在該線程中開始運行,在其運行的任何時刻,可以通過調(diào)用線程庫中的派生例程創(chuàng)建一個在相同進程中運行的新線程。
    2)在內(nèi)核級線程中
    線程管理的所有工作由內(nèi)核完成,應用程序沒有進行線程管理的代碼,只有一個到內(nèi)核級線程的編程接口。內(nèi)核為進程及其內(nèi)部的每個線程維護上下文信息,調(diào)度也在內(nèi)核基于線程架構(gòu)的基礎(chǔ)上完成。
    3)有些系統(tǒng)中使用組合方式的多線程實現(xiàn)
    線程創(chuàng)建完全在用戶空間中完成,線程的調(diào)度和同步也在應用程序中進行。一個應用程序中的多個用戶級線程被映射到一些(小于等于用戶級線程的數(shù)目)內(nèi)核級線程上。

  • 多線程模式
    有些系統(tǒng)同時支持用戶線程內(nèi)核線程,由此產(chǎn)生了不同的多線程模型,即實現(xiàn)用戶級線程和內(nèi)核級線程的連接方式
    1)多對一模型
    多個用戶級線程映射到一個內(nèi)核級線程,線程管理在用戶空間完成。此模式中,用戶級線程對操作系統(tǒng)不可見(即透明)。

  • 優(yōu)點:線程管理是在用戶空間進行的,因而效率比較高。
    缺點:一個線程在使用內(nèi)核服務時被阻塞,整個進程都會被阻塞;多個線程不能并行地運行在多處理機上。

    2)一對一模型
    每個用戶級線程映射到一個內(nèi)核級線程

    優(yōu)點:當一個線程被阻塞后,允許另一個線程繼續(xù)執(zhí)行,所以并發(fā)能力較強。

    缺點:每創(chuàng)建一個用戶級線程都需要創(chuàng)建一個內(nèi)核級線程與其對應,這樣創(chuàng)建線程的開銷比較大,會影響到應用程序的性能。

    3)多對多模型
    n個用戶級線程映射到m個內(nèi)核級線程上(m≤n)

    特點:多對多模型是多對一模型和一對一模型的折中,既克服了多對模型并發(fā)度不高的缺點,又克服了一對一模型的一個用戶進程占用太多內(nèi)核級線程而開銷太大的缺點。此外,還擁有多對一模型和一對一模型各自的優(yōu)點。

    小結(jié)

    1)為什么要引入進程?

    在多道程序同時運行的背景下,進程之間需要共享系統(tǒng)資源,因此會導致各程序在執(zhí)行過程中出現(xiàn)相互制約的關(guān)系,程序的執(zhí)行會表現(xiàn)出間斷性的特征。這些特征都是在程序的執(zhí)行過程中發(fā)生的,是動態(tài)的過程,而傳統(tǒng)的程序本身是一組指 令的集合,是一 一個靜態(tài)的概念,無法描述程序在內(nèi)存中的執(zhí)行情況,即我們無法從程序的字面上看出它何時執(zhí)行、何時停頓,也無法看出它與其他執(zhí)行程序的關(guān)系,因此,程序這個靜態(tài)概念已不能如實反映程序并發(fā)執(zhí)行過程的特征。為了深刻描述程序動態(tài)執(zhí)行過程的性質(zhì)乃至更好地支持和管理多道程序的并發(fā)執(zhí)行,人們引入了進程的概念。

    2)什么是進程?進程由什么組成?

    進程是一個具有獨立功能的程序關(guān)于某個數(shù)據(jù)集合的一次運行活動。它可以申請和擁有系統(tǒng)資源,是一個動態(tài)的概念,是一 一個活動的實體。它不只是程序的代碼本身,還包括當前的活動,通過程序計數(shù)器的值和處理寄存器的內(nèi)容來表示。

    一個進程實體由程序段、相關(guān)數(shù)據(jù)段和PCB三部分構(gòu)成,其中PCB是標志一個進程存在的唯一標識,程序段是進程運行的程序的代碼,數(shù)據(jù)段則存儲程序運行過程中相關(guān)的一些數(shù)據(jù)。

    3)進程是如何解決問題的?

    進程把能夠識別程序運行態(tài)的一些變量存放在PCB中,通過這些變量系統(tǒng)能夠更好地了解進程的狀況,并在適當時進行進程的切換,以避免一些資源的浪費,甚至劃分為更小的調(diào)度單位一線程來提高系統(tǒng)的并發(fā)度。

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的【OS】进程与线程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。