第二章 進(jìn)程的描述與控制

2.2 進(jìn)程的描述 P35 全考

  • 1屑柔、進(jìn)程的定義
    • (1)、進(jìn)程是程序的一次執(zhí)行
    • (2)、進(jìn)程是一個程序及其數(shù)據(jù)在處理機(jī)上順序執(zhí)行時所發(fā)生的活動
    • (3)、進(jìn)程是具有獨(dú)立功能的程序在一個數(shù)據(jù)集合上運(yùn)行的過程废岂,它是系統(tǒng)進(jìn)行資源分配和調(diào)度的獨(dú)立單位
    • 總結(jié):在引入進(jìn)程實(shí)體的概念后,可以把傳統(tǒng)OS中的進(jìn)程定義為“進(jìn)程是進(jìn)程實(shí)體的運(yùn)行過程狱意,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位湖苞。”
  • 2详囤、進(jìn)程的特征
    • (1)動態(tài)性财骨。進(jìn)程的實(shí)質(zhì)是進(jìn)程實(shí)體的執(zhí)行過程,所有動態(tài)性是進(jìn)程的基本特征纬纪。
    • (2)并發(fā)性蚓再。指多個進(jìn)程實(shí)體同存于內(nèi)存中,且能在一段時間內(nèi)同時運(yùn)行包各。
    • (3)獨(dú)立性。指進(jìn)程實(shí)體是一個能獨(dú)立運(yùn)行靶庙、獨(dú)立獲得資源和獨(dú)立接受調(diào)度的基本單位问畅。
    • (4)異步性 。指進(jìn)程是按照異步方式運(yùn)行的,即按各自獨(dú)立的护姆、不可預(yù)知的速度向前推進(jìn)矾端。
  • 3、進(jìn)程的基本狀態(tài)及轉(zhuǎn)換
    • 1卵皂、進(jìn)程的三種基本狀態(tài)
      • (1)秩铆、就緒(Ready)狀態(tài)。指進(jìn)程已處于準(zhǔn)備好運(yùn)行的狀態(tài)灯变,指進(jìn)程已經(jīng)分配到除CPU外的所有必要資源殴玛,只要獲取到CPU便可立即執(zhí)行。
      • (2)添祸、執(zhí)行(Running)狀態(tài)滚粟。指進(jìn)程以獲取到CPU,其程序正在執(zhí)行的狀態(tài)
      • (3)刃泌、阻塞(Block)狀態(tài)凡壤。指正在執(zhí)行的進(jìn)程由于發(fā)生某些事件(如I/O請求、申請緩沖區(qū)失敗等)暫時無法繼續(xù)執(zhí)行的狀態(tài)耙替,也就是進(jìn)程的執(zhí)行收到阻塞亚侠。此時會引起進(jìn)程調(diào)度,OS把處理機(jī)分配給另一個就緒進(jìn)程俗扇,而讓受阻的進(jìn)程處于暫停的狀態(tài)硝烂,一般將這種狀態(tài)稱為阻塞狀態(tài),有時也稱為等待狀態(tài)或封鎖狀態(tài)狐援。
      • 備注:OS將阻塞的進(jìn)程放進(jìn)一個隊(duì)列钢坦,這個隊(duì)列稱為阻塞隊(duì)列
    • 2、三種基本狀態(tài)的轉(zhuǎn)換
      • 就緒狀態(tài)的進(jìn)程啥酱,獲得處理機(jī)之后便可執(zhí)行爹凹,此時轉(zhuǎn)換為執(zhí)行狀態(tài);
      • 執(zhí)行狀態(tài)的進(jìn)程镶殷,因?yàn)榉峙涞臅r間片已完禾酱,此時轉(zhuǎn)換為就緒狀態(tài);
      • 執(zhí)行狀態(tài)的進(jìn)程绘趋,因?yàn)榘l(fā)送某些事件導(dǎo)致執(zhí)行受阻颤陶,此時轉(zhuǎn)換為阻塞狀態(tài);
    • 3陷遮、創(chuàng)建和終止?fàn)顟B(tài)
      • (1)創(chuàng)建狀態(tài):進(jìn)程是由創(chuàng)建產(chǎn)生的滓走。對于創(chuàng)建狀態(tài)的進(jìn)程,當(dāng)其獲得了所需的資源以及對PCB的初始化工作完成后帽馋,便可由創(chuàng)建狀態(tài)轉(zhuǎn)入就緒狀態(tài)搅方。
      • (2)終止?fàn)顟B(tài):進(jìn)程自然結(jié)束比吭,或是出現(xiàn)了無法克服的錯誤,或是被操作系統(tǒng)終結(jié)姨涡,將進(jìn)入終止?fàn)顟B(tài)衩藤。
  • 4、掛起操作和進(jìn)程的狀態(tài)轉(zhuǎn)換
    • 1涛漂、什么是掛起
      • 當(dāng)操作作用于某個進(jìn)程時赏表,該進(jìn)程將被掛起,此時進(jìn)程處于靜止?fàn)顟B(tài)
      • 如果進(jìn)程正在執(zhí)行匈仗,將被暫停執(zhí)行
      • 如果進(jìn)程處于就緒狀態(tài)瓢剿,則該進(jìn)程暫不接受調(diào)度。
      • 與掛起操作相對應(yīng)的是激活操作
    • 2锚沸、掛起操作的引入
      • (1)終端用戶的需要跋选。當(dāng)終端用戶在自己的程序運(yùn)行期間發(fā)現(xiàn)有可疑問題,希望暫停自己的程序運(yùn)行哗蜈,使之停下來前标,以便用戶研究其直行情況或?qū)Τ绦蜻M(jìn)行修改。
      • (2)父進(jìn)程請求距潘。有時父進(jìn)程希望掛起自己的某個子進(jìn)程炼列,以便考查和修改該子進(jìn)程,或者協(xié)調(diào)各子進(jìn)程間的活動音比。
      • (3)負(fù)荷調(diào)節(jié)的需要俭尖。當(dāng)實(shí)時系統(tǒng)中的負(fù)荷較重,有可能影響到對實(shí)時任務(wù)的控制時洞翩,可由系統(tǒng)把一些不重要的進(jìn)程掛起稽犁,以保證系統(tǒng)能夠正常運(yùn)行。
      • (4)操作系統(tǒng)的需要骚亿。操作系統(tǒng)有時希望掛起某些進(jìn)程已亥,以便檢查運(yùn)行中的資源使用情況或進(jìn)行記賬。
    • 3来屠、引入掛起原語操作后的三個進(jìn)程狀態(tài)的轉(zhuǎn)換
      • (1)活動就緒->靜止就緒虑椎。未被掛起的就緒狀態(tài),稱為活動就緒俱笛。被掛起的就緒狀態(tài)捆姜,稱為靜止就緒狀態(tài),此狀態(tài)不再被調(diào)度執(zhí)行迎膜。
      • (2)活動阻塞->靜止阻塞泥技。未被掛起的阻塞狀態(tài),稱為活動阻塞磕仅。被掛起的阻塞狀態(tài)零抬,稱為靜止阻塞镊讼。處于該狀態(tài)的進(jìn)程在其所期待的事件出現(xiàn)之后宽涌,又禁止阻塞變?yōu)殪o止就緒狀態(tài)平夜。
      • (3)靜止就緒->活動就緒。靜止就緒狀態(tài)的進(jìn)程若用激活原語激活后卸亮。則轉(zhuǎn)換為活動就緒狀態(tài)忽妒。
      • (4)靜止阻塞->活動阻塞。靜止阻塞狀態(tài)的進(jìn)程若用激活原語激活后兼贸。則轉(zhuǎn)換為活動阻塞狀態(tài)段直。
    • 4、引入掛起操作后五個進(jìn)程狀態(tài)的轉(zhuǎn)換
      • (1)NULL->創(chuàng)建:一個新的進(jìn)程產(chǎn)生時溶诞,處于創(chuàng)建狀態(tài)鸯檬。
      • (2)創(chuàng)建->活動就緒:在當(dāng)前操作系統(tǒng)資源允許的情況下,完成對創(chuàng)建進(jìn)程的必要操作之后螺垢,進(jìn)程轉(zhuǎn)換為活動就緒狀態(tài)
      • (3)創(chuàng)建->靜止就緒:如果操作系統(tǒng)沒有給進(jìn)程分配所需的資源喧务,則進(jìn)程轉(zhuǎn)換為靜止就緒狀態(tài),不參與調(diào)度枉圃,此時創(chuàng)建進(jìn)程操作尚未完成功茴。
      • (4)執(zhí)行->終止:進(jìn)程執(zhí)行完,或出現(xiàn)錯誤孽亲,或被系統(tǒng)和其他進(jìn)程所終結(jié)坎穿,則轉(zhuǎn)換為終止?fàn)顟B(tài)。


        image.png
  • 5返劲、進(jìn)程管理中的數(shù)據(jù)結(jié)構(gòu)
    • 1玲昧、操作系統(tǒng)中用于管理控制的數(shù)據(jù)結(jié)構(gòu)
      • 在計算機(jī)系統(tǒng)中,對于每個資源和每個進(jìn)程都設(shè)置了一個數(shù)據(jù)結(jié)構(gòu)篮绿,用于表征其實(shí)體孵延,稱之為資源信息表或進(jìn)程信息表。其中包含了資源或進(jìn)程的標(biāo)識搔耕、描述隙袁、狀態(tài)等信息以及一批指針。
      • OS管理這些數(shù)據(jù)結(jié)構(gòu)一般分為四類:內(nèi)存表弃榨、設(shè)備表菩收、文件表、進(jìn)程表(進(jìn)程控制塊PCB)鲸睛。
    • 2娜饵、進(jìn)程控制塊PCB的作用
      • PCB的作用是使一個在多道程序環(huán)境下不能獨(dú)立運(yùn)行的程序(含數(shù)據(jù))稱為一個能夠獨(dú)立運(yùn)行的基本單位,一個能與其它進(jìn)程并發(fā)執(zhí)行的進(jìn)程官辈。
      • (1)作為獨(dú)立運(yùn)行基本單位的標(biāo)志:系統(tǒng)通過PCB感知進(jìn)程的存在箱舞,PCB是進(jìn)程存在于系統(tǒng)的唯一標(biāo)志遍坟。
      • (2)能實(shí)現(xiàn)間斷性運(yùn)行方式:系統(tǒng)可將中斷進(jìn)程的CPU現(xiàn)場信息保存在PCB中,以便進(jìn)程再次被調(diào)度執(zhí)行時恢復(fù)CPU現(xiàn)場時使用晴股。
      • (3)提供進(jìn)程管理所需的信息:進(jìn)程的整個生命周期中愿伴,操作系統(tǒng)都需要根據(jù)PCB實(shí)施對進(jìn)程的控制和管理。
      • (4)提供進(jìn)程調(diào)度所需的信息:PCB存儲了進(jìn)程的狀態(tài)信息电湘、執(zhí)行時間和已執(zhí)行時間等隔节,以便調(diào)度使用。
      • (5)實(shí)現(xiàn)與其它進(jìn)程的同步與通信:PCB中具有用于同步的信號量寂呛、用于實(shí)現(xiàn)進(jìn)程通信的區(qū)域或通信隊(duì)列指針等怎诫。
    • 3、進(jìn)程控制塊中的信息
      • 1贷痪、進(jìn)程標(biāo)識符:用于唯一的標(biāo)識一個進(jìn)程

        • (1)外部標(biāo)識符:為方便用戶(進(jìn)程)對進(jìn)程的訪問
        • (2)內(nèi)部標(biāo)識符:為方便系統(tǒng)對進(jìn)程的使用幻妓,通常為進(jìn)程的序號
      • 2、處理機(jī)狀態(tài):也被稱為處理機(jī)的上下文劫拢,主要由處理機(jī)的各種寄存器中的內(nèi)容組成肉津。

        • 寄存器包括:通用寄存器、指令寄存器尚镰、程序狀態(tài)字PSW阀圾、用戶棧指針
        • 當(dāng)進(jìn)程被切換時,處理機(jī)狀態(tài)信息都必須保存在相對應(yīng)的PCB中狗唉,以便該進(jìn)程重新執(zhí)行時能再從斷點(diǎn)繼續(xù)執(zhí)行初烘。
      • 3、進(jìn)程調(diào)度信息:指進(jìn)程狀態(tài)及有關(guān)調(diào)度的信息

        • (1)進(jìn)程狀態(tài):指明當(dāng)前進(jìn)程的狀態(tài)分俯,作為進(jìn)程調(diào)度時和對換時的依據(jù)
        • (2)進(jìn)程優(yōu)先級:用于描述進(jìn)程使用處理機(jī)的優(yōu)先級別的一個整數(shù)肾筐,優(yōu)先級高的進(jìn)程應(yīng)優(yōu)先獲得處理機(jī)。
        • (3)進(jìn)程調(diào)度的其他信息:與所采用的的進(jìn)程調(diào)度算法有關(guān)缸剪,如進(jìn)程已等待CPU時間總和吗铐、進(jìn)程已執(zhí)行時間總和等。
        • (4)事件:指進(jìn)程由執(zhí)行狀態(tài)轉(zhuǎn)換為阻塞狀態(tài)所等待發(fā)生的事件杏节,及阻塞原因唬渗。
      • 4、進(jìn)程控制信息:指用于進(jìn)程控制所必須的信息

        • (1)程序和數(shù)據(jù)的地址:能夠從PCB中通過地址找到程序和數(shù)據(jù)奋渔。
        • (2)進(jìn)程同步和通信機(jī)制:實(shí)現(xiàn)進(jìn)程同步和進(jìn)程通信時所必須的機(jī)制镊逝,如消息隊(duì)列指針、信號量等
        • (3)資源清單:列出了進(jìn)程執(zhí)行期間所需的全部資源(CPU除外)嫉鲸,以及一張已分配到資源的清單
        • (4)鏈接指針:它給出了本進(jìn)程(PCB)所在隊(duì)列的下一個進(jìn)程的PCB的首地址
    • 4撑蒜、進(jìn)程控制塊的組織方式
      • (1)線性方式

      將系統(tǒng)中所有的PCB都組織在一張線性表中,將該表的首地址存放在內(nèi)存的一個專用區(qū)域中。
      優(yōu)點(diǎn):實(shí)現(xiàn)簡單座菠、開銷小
      缺點(diǎn):每次查找都要掃描整張表狸眼,因此適合進(jìn)程數(shù)目不多的系統(tǒng)

      • (2)鏈接方式

      把具有相同狀態(tài)的PCB分別通過PCB中的鏈接字鏈接成一個隊(duì)列。
      優(yōu)點(diǎn):可以形成就緒隊(duì)列浴滴、若干個阻塞隊(duì)列和空白隊(duì)列等拓萌。也可以把阻塞狀態(tài)進(jìn)程的PCB根據(jù)其阻塞狀態(tài)的原因不同,排成多個阻塞隊(duì)列巡莹,如等待I司志、O操作完成的隊(duì)列和等待分配內(nèi)存的隊(duì)列。

      • (3)索引方式

      系統(tǒng)根據(jù)所有進(jìn)程狀態(tài)的不同降宅,建立多張索引表。

  • 2.3 進(jìn)程控制 P42 不考2.3.5 進(jìn)程的掛起與激活

    • 進(jìn)程控制主要包括:創(chuàng)建新進(jìn)程囚霸、終止已完成進(jìn)程腰根、將異常進(jìn)程轉(zhuǎn)換為阻塞狀態(tài)、負(fù)責(zé)進(jìn)程運(yùn)行中的狀態(tài)轉(zhuǎn)換等功能
    • 進(jìn)程控制一般是由OS的內(nèi)核中的原語來實(shí)現(xiàn)
  • 1拓型、操作系統(tǒng)內(nèi)核
    • 什么是系統(tǒng)內(nèi)核

    將一些與硬件緊密相關(guān)的模塊都安排在緊靠硬件的軟件層次中额嘿,將它們常駐內(nèi)存,通常被稱為OS內(nèi)核劣挫。
    優(yōu)點(diǎn):1册养、便于對這些軟件進(jìn)行保護(hù),防止遭受其他應(yīng)用程序的破壞压固;2球拦、可以提高OS的運(yùn)行效率

    • 處理機(jī)的執(zhí)行狀態(tài)分為系統(tǒng)態(tài)和用戶態(tài)兩種不同的形態(tài):

    (1)系統(tǒng)態(tài):也叫做管態(tài)或內(nèi)核態(tài),具有較高的特權(quán)帐我,能執(zhí)行一切命令坎炼,訪問所有寄存器和存儲區(qū)
    (2)用戶態(tài):也交目態(tài),是一種具有較低特權(quán)的執(zhí)行狀態(tài)拦键,能執(zhí)行規(guī)定的指令谣光,訪問規(guī)定的存儲區(qū)和寄存器

    • 通常操作系統(tǒng)內(nèi)核運(yùn)行在系統(tǒng)態(tài),用戶程序運(yùn)行在用戶態(tài)
    • 主要功能:

      • 1芬为、支撐功能

      中斷處理
      時鐘管理
      原語操作

      • 2萄金、資源管理功能

      進(jìn)程管理
      存儲器管理
      設(shè)備管理

  • 2、進(jìn)程的創(chuàng)建
    • 創(chuàng)建進(jìn)程是通過創(chuàng)建原語完成的媚朦,被創(chuàng)建的進(jìn)程稱為子進(jìn)程氧敢,創(chuàng)建子進(jìn)程的進(jìn)程稱之為父進(jìn)程。
    • 子進(jìn)程可以創(chuàng)建自己的子進(jìn)程莲镣,從而形成一課有向的進(jìn)程樹福稳,即進(jìn)程圖。
    • 進(jìn)程創(chuàng)建原語的主要任務(wù)是創(chuàng)建進(jìn)程控制塊PCB瑞侮;步驟為先從PCB集合中申請一個空閑的PCB的圆,再為新進(jìn)程分配內(nèi)存等資源鼓拧,并根據(jù)父進(jìn)程提供的參數(shù)和分配到的資源情況來對PCB進(jìn)行初始化,最后將新進(jìn)程插入就緒隊(duì)列越妈。
  • 3季俩、進(jìn)程的終止
    • 進(jìn)程終止的實(shí)質(zhì)是收回PCB
    • 當(dāng)進(jìn)程完成任務(wù)或遇到異常情況和外界干預(yù)需要結(jié)束時,應(yīng)通過進(jìn)程終止原語來終止進(jìn)程梅掠。
  • 4酌住、進(jìn)程的阻塞與喚醒
    • 當(dāng)正在執(zhí)行的進(jìn)程需要等待某種事件的完成或本身無任務(wù)時,應(yīng)調(diào)用阻塞原語將自己從執(zhí)行狀態(tài)轉(zhuǎn)換為阻塞狀態(tài)阎抒。
    • 當(dāng)阻塞進(jìn)程所等待的事件完成時酪我,應(yīng)調(diào)用喚醒原語將該進(jìn)程的狀態(tài)從阻塞狀態(tài)轉(zhuǎn)換成就緒狀態(tài)。
  • 2.4 進(jìn)程同步 P47 不考2.4.5管程機(jī)制

    • 進(jìn)程同步是指對多個相關(guān)進(jìn)程在執(zhí)行次序上進(jìn)行協(xié)調(diào)且叁,目的是使系統(tǒng)中的進(jìn)程之間能夠按照一定的規(guī)則(或時序)都哭,共享資源和相互合作,從而使程序的執(zhí)行具有可再現(xiàn)性逞带。
    • 用來實(shí)現(xiàn)同步的機(jī)制稱為同步機(jī)制
  • 1欺矫、進(jìn)程同步的基本概念
    • (1)兩種形式的制約關(guān)系
      • 1、間接相互制約展氓。這種制約主要源于資源共享穆趴。
      • 2、直接相互制約遇汞。這種制約主要源于進(jìn)程合作未妹。
    • (2)臨界資源和臨界區(qū)
      • 臨界資源:一次只能被一個進(jìn)程使用的資源稱為臨界資源
      • 臨界區(qū):每個進(jìn)程中,訪問臨界資源的那段代碼稱為臨界區(qū)
      • 進(jìn)入?yún)^(qū):臨界區(qū)前用來檢查臨界資源是否被占用的代碼稱為進(jìn)入?yún)^(qū)
      • 退出區(qū):臨界區(qū)后用來標(biāo)志未被訪問的代碼稱為退出區(qū)
    • (3)同步機(jī)制應(yīng)遵循的規(guī)則
      • 1勺疼、空閑讓步:臨界資源空閑時教寂,應(yīng)允許一個請求資源的進(jìn)程立即進(jìn)入自己的臨界區(qū),以便有效利用資源
      • 2执庐、忙則等待:臨界資源被占用時酪耕,其他請求資源的進(jìn)程必須等待,以保證臨界資源的互斥使用
      • 3轨淌、有限等待:任何要求訪問臨界資源的進(jìn)程應(yīng)能在有限的時間進(jìn)入自己的臨界區(qū)迂烁,以免“死等”
      • 4、讓權(quán)等待:不能進(jìn)入臨界區(qū)的進(jìn)程應(yīng)立即釋放CPU递鹉,以免“忙等”
  • 2盟步、硬件同步機(jī)制
    • 關(guān)中斷:是實(shí)現(xiàn)互斥最簡單的方法之一
    • Test-and-Set指令:使用指令TS(硬件指令-“測試并建立”)來實(shí)現(xiàn)互斥
    • Swap:也稱為對換指令
  • 3、信號量機(jī)制
    • 1躏结、整型信號量
      • 一個整型信號量通常對應(yīng)一類臨界資源
      • 是一個非負(fù)的共享整數(shù)却盘,用來表示該類資源的數(shù)目
      • 除了初始化外,只能通過兩個標(biāo)準(zhǔn)的原子操作wait(也稱作 P)和signal(也稱作 V)來訪問
      • 整型變量不遵循“讓權(quán)等待”的規(guī)則


        image.png
    • 2、記錄型信號量
      • 除了一個表示資源的數(shù)目的整型變量value外黄橘,還增加了一個進(jìn)程鏈表指針list兆览,用于鏈接等待該資源的進(jìn)程
      • 記錄型信號量遵循“讓權(quán)等待”的規(guī)則


        image.png
  • 4、信號量的應(yīng)用
    • 1塞关、利用信號量實(shí)現(xiàn)前驅(qū)關(guān)系:信號量可以用來描述程序或語句之間的前驅(qū)關(guān)系
    • 2抬探、利用信號量實(shí)現(xiàn)互斥:為資源設(shè)置互斥信號量mutex


      image.png
  • 2.5 經(jīng)典進(jìn)程的同步問題 P60

不考利用管程解決同步問題
不考使用AND型信號量解決同步問題

  • 1、生產(chǎn)者-消費(fèi)者問題
    • 描述了一組生產(chǎn)者與一組消費(fèi)者帆赢,共享一個有界緩沖池小压,生產(chǎn)者向池中投入產(chǎn)品,消費(fèi)者從池中取得產(chǎn)品椰于。


      image.png
  • 2怠益、哲學(xué)家進(jìn)餐問題
    image.png
  • 3、讀者-寫者問題
    • 允許多讀廉羔,但不允許多寫溉痢,如文件


      image.png

      image.png

2.6 進(jìn)程通信 P67 不考2.6.3 直接傳遞消息系統(tǒng)實(shí)例

  • 1、進(jìn)程通信的類型
    • (1)共享存儲器系統(tǒng):進(jìn)程之間通過對共享存儲區(qū)的讀寫進(jìn)行數(shù)據(jù)交換憋他。
    • (2)管道通信:指連接兩個進(jìn)程的一個共享文件。只有在確定了對方存在時才能進(jìn)行通信髓削。
    • (3)消息傳遞系統(tǒng):進(jìn)程間的數(shù)據(jù)交互以格式化的消息(網(wǎng)絡(luò)中稱為報文)為單位竹挡。
      • 直接通信:源進(jìn)程直接將消息發(fā)送給目標(biāo)進(jìn)程
      • 間接通信:進(jìn)程間需要通過中間實(shí)體進(jìn)行通信,既能實(shí)現(xiàn)實(shí)時通信也能實(shí)現(xiàn)非實(shí)時通信
    • (4)客戶機(jī)-服務(wù)器系統(tǒng):廣泛應(yīng)用于網(wǎng)絡(luò)環(huán)境的各種應(yīng)用領(lǐng)域立膛,實(shí)現(xiàn)方式主要有套接字揪罕、遠(yuǎn)程過程調(diào)用、遠(yuǎn)程方法調(diào)用
      • 套接字:
        • 基于文件類型的套接字關(guān)聯(lián)到一個特殊文件宝泵,同一臺計算機(jī)上的通信方式好啰,通過這個特殊文件的讀寫來實(shí)現(xiàn)彼此之間的通信。實(shí)現(xiàn)原理類似于管道儿奶。
        • 基于網(wǎng)絡(luò)類型的套接字就是一個通信標(biāo)識類型的數(shù)據(jù)結(jié)構(gòu)框往,是進(jìn)程通信和網(wǎng)絡(luò)通信的基本結(jié)構(gòu)。
      • 遠(yuǎn)程過程調(diào)用和遠(yuǎn)程方法調(diào)用
        遠(yuǎn)程過程(函數(shù))調(diào)用RPC是一個通信協(xié)議闯捎,用于通過網(wǎng)絡(luò)連接的系統(tǒng)椰弊。
        該協(xié)議允許運(yùn)行于一臺主機(jī)上的進(jìn)程進(jìn)行遠(yuǎn)程調(diào)用另一臺主機(jī)系統(tǒng)上的過程,就如同調(diào)用本地過程一樣瓤鼻。如果設(shè)計軟件采用面向?qū)ο缶幊瘫妫敲催h(yuǎn)程過程調(diào)用亦可稱之為遠(yuǎn)程方法調(diào)用。
  • 2茬祷、消息傳遞通信的實(shí)現(xiàn)方式
    • 直接消息傳遞系統(tǒng)
      • 1清焕、直接通信原語:對稱尋址方式和非對稱尋址方式
      • 2、消息的格式:采用可變長的消息格式
      • 3、進(jìn)程間的同步方式
      • 4秸妥、通信鏈路
    • 信箱通信
      • 1滚停、信箱的結(jié)構(gòu):信箱頭、信箱體
      • 2筛峭、信箱通信原語:郵件的創(chuàng)建和撤銷铐刘、消息的發(fā)送和接收
      • 3、信箱的類型:私有郵箱影晓、公共郵箱镰吵、共享郵箱

2.7 線程(Threads)的基本概念 P75 全考*

  • 1、線程的引入

    • 目的是為了減少程序并發(fā)執(zhí)行時所付出的時空開銷挂签。從而使OS具有更好的并發(fā)性疤祭。
    • 在多線程OS中,將擁有資源的基本單位與調(diào)度和分派的基本單位分開處理饵婆,此時一個進(jìn)程包含一個或多個相對獨(dú)立的線程勺馆,進(jìn)程只是擁有資源的基本單位,而不再是一個可執(zhí)行的實(shí)體侨核;每個線程都是一個可執(zhí)行的實(shí)體草穆,即CPU調(diào)度和分派的基本單位是線程。
    • 線程的優(yōu)點(diǎn)

    由于線程基本不擁有資源搓译,因此悲柱,創(chuàng)建線程時不需要另行分配資源、終止時也不需要進(jìn)行資源回收些己,而切換時大大減少了需要保存和恢復(fù)的現(xiàn)場信息豌鸡,因此,線程的創(chuàng)建段标、終止和切換都比進(jìn)程迅速涯冠,且開銷小。
    由于同一個進(jìn)程內(nèi)的各個線程可以共享該進(jìn)程所占用的內(nèi)存空間和打開的文件逼庞,因此蛇更,進(jìn)程間的通信也非常簡單和迅速。

    • 線程的創(chuàng)建

    在多線程OS環(huán)境下往堡,應(yīng)用程序啟動時械荷,OS將為它創(chuàng)建一個進(jìn)程,同時為該進(jìn)程創(chuàng)建第一個線程虑灰。在線程運(yùn)行的過程中吨瞎,可以線程可以根據(jù)需要利用線程創(chuàng)建函數(shù)(或系統(tǒng)調(diào)用)再去創(chuàng)建若干個線程。所以線程是由線程創(chuàng)建的穆咐,但線程間不提供父子關(guān)系的支持颤诀。

  • 2字旭、線程與進(jìn)程的比較

    • 1、調(diào)度的基本單位
      • 傳統(tǒng)OS中崖叫,進(jìn)程是作為獨(dú)立調(diào)度和分派的基本單位遗淳,因?yàn)檫M(jìn)程是獨(dú)立運(yùn)行的基本單位;每次調(diào)度時心傀,都需要進(jìn)行上下文切換屈暗,開銷較大
      • 引入線程OS中,線程是作為調(diào)度和分派的基本單位脂男,因?yàn)檫M(jìn)程是獨(dú)立運(yùn)行的基本單位养叛;線程切換時,僅需要保存和設(shè)置少量寄存器內(nèi)容宰翅,切換代價遠(yuǎn)低于進(jìn)程弃甥。
      • 同一個進(jìn)程中,線程的切換不會引起進(jìn)程的切換汁讼。但從一個進(jìn)程中的線程切換到另一個進(jìn)程中的線程時淆攻,必然引起進(jìn)程的切換。
    • 2嘿架、并發(fā)性
      • 在引入線程的OS中瓶珊,不僅進(jìn)程之間可以并發(fā)地執(zhí)行,而且在一個進(jìn)程中的多個線程之間也可以并發(fā)執(zhí)行耸彪,甚至運(yùn)行一個進(jìn)程中的所有線程都能并發(fā)執(zhí)行艰毒。
      • 不同進(jìn)程中的線程也能并發(fā)地執(zhí)行。這使得OS具有更好的并發(fā)性搜囱,從而能更加有效的提高系統(tǒng)資源的利用率和系統(tǒng)的吞吐量。
    • 3柑土、擁有資源
      • 進(jìn)程可以擁有資源蜀肘,并作為系統(tǒng)中擁有資源的一個基本單位。
      • 線程本身并不擁有資源稽屏,而是僅有一點(diǎn)必不可少的扮宠、能夠保證獨(dú)立運(yùn)行的資源。比如每個線程都應(yīng)具有一個用于控制線程運(yùn)行的線程控制塊TCB狐榔、用于指示被執(zhí)行序列的程序計數(shù)器坛增、保留局部變量、少數(shù)狀態(tài)參數(shù)和返回地址等的一組寄存器和堆棧薄腻。
      • 線程除了擁有自己的少量資源外收捣,還允許多個線程共享該進(jìn)程的所擁有的資源,
        • 1庵楷、屬于同一進(jìn)程的所有線程都具有相同的地址空間罢艾,這意味著線程可以訪問該地址空間中的每一個虛地址
        • 2楣颠、可以訪問進(jìn)程所擁有的資源,如已打開的文件咐蚯、定時器童漩、信號量機(jī)構(gòu)等的內(nèi)存空間和它所申請到的I/O設(shè)備等
    • 4、獨(dú)立性
      • 同一個進(jìn)程內(nèi)的不同線程之間的獨(dú)立性要比不同進(jìn)程之間的獨(dú)立性低得多春锋。
      • 每個進(jìn)程都擁有一個獨(dú)立的空間地址和其他資源矫膨,除了共享全局變量外,不允許其他的進(jìn)程訪問期奔。
      • 同一個進(jìn)程內(nèi)的不同線程侧馅,往往是為了提高并發(fā)性以及相互之間的合作而創(chuàng)建的,他們共享進(jìn)程的內(nèi)存地址空間和資源能庆,如每個線程都可以訪問它們所屬進(jìn)程地址空間的所有地址施禾,如一個線程的堆棧可以被其他線程讀寫搁胆,甚至完全清除弥搞。有一個線程打開的文件可以供其他線程讀寫。
    • 5渠旁、系統(tǒng)開銷
      • 在創(chuàng)建和撤銷進(jìn)程時攀例,系統(tǒng)都要為之分配和回收進(jìn)程控制塊、分配或回收其它資源顾腊,如內(nèi)存空間和I/O設(shè)備等粤铭。OS為此所付出的開銷,明細(xì)大于線程創(chuàng)建或撤銷時所付出的開銷杂靶。
      • 進(jìn)程切換時涉及到進(jìn)程上下文的切換梆惯,而線程的切換代價遠(yuǎn)低于進(jìn)程的
      • 線程間的同步和通信比進(jìn)程簡單
      • 在一些OS中,線程的切換吗垮、同步和通信都無需操作系統(tǒng)內(nèi)核的干預(yù)
    • 6垛吗、支持多處理機(jī)系統(tǒng)
      • 在多處理機(jī)系統(tǒng)中,對于傳統(tǒng)的進(jìn)程烁登,即單線程進(jìn)行怯屉,不管有多少處理機(jī),該進(jìn)程只能運(yùn)行在一個處理機(jī)上饵沧。但是對于多線程進(jìn)程锨络,就可以將一個進(jìn)程的多個線程分配到多個處理機(jī)上,使他們并行執(zhí)行狼牺,這無疑將加速進(jìn)程的完成羡儿。
      • 現(xiàn)代處理機(jī)OS中,都無一例外地引入了多線程
  • 3锁右、線程的狀態(tài)與線程控制塊

    • 每個線程被創(chuàng)建后失受,便可與其它線程一起并發(fā)地運(yùn)行讶泰。并發(fā)運(yùn)行的線程之間也存在著共享資源和相互合作的制約關(guān)系,致使線性在執(zhí)行時也有間斷性拂到。即線程的運(yùn)行也具有:執(zhí)行痪署、就緒阻塞三種基本狀態(tài)。
    • 線程完成工作后兄旬,便可正常終止狼犯;也會因?yàn)槠渌虮粡?qiáng)行終止。但是有些進(jìn)程(主要是系統(tǒng)進(jìn)程)领铐,一旦被建立起來之后悯森,便會一直運(yùn)行下去而不終止。
    • (1)內(nèi)核支持線程
      • 在核心空間實(shí)現(xiàn)
      • 內(nèi)核為每個線程在核心空間中設(shè)置了一個線程控制塊绪撵,用來登記該線程的線程標(biāo)識符瓢姻、寄存器值、狀態(tài)音诈、優(yōu)先級等信息幻碱。
      • 所有對線程的操作,都通過系統(tǒng)功能調(diào)用细溅,有內(nèi)核中響應(yīng)的處理程序完成褥傍。
      • 優(yōu)點(diǎn):
        1、內(nèi)核可以把同一個進(jìn)程中的多個線程調(diào)度到多個處理器中喇聊;
        2恍风、進(jìn)程中的一個線程被阻塞,內(nèi)核可以調(diào)用同一個進(jìn)程中的另一個線程誓篱;
        3朋贬、內(nèi)核本身也可以使用多線程的方式來實(shí)現(xiàn)
      • 缺點(diǎn):
        1、即使CPU在同一個進(jìn)程內(nèi)的多個線程之間切換窜骄,也需要陷入內(nèi)核兄世,因此速度和效率不如用戶級線程
    • (2)用戶級線程
      • 僅存在于用戶空間中,與內(nèi)核無關(guān)
      • 對線程的操作在用戶空間中有線程庫中的函數(shù)(過程)完成
      • 優(yōu)點(diǎn):
        1啊研、不需要內(nèi)核的支持;
        2鸥拧、切換開銷小党远、速度非常快富弦;
        3沟娱、線程庫提供多種調(diào)度算法給應(yīng)用程序選擇使用。
      • 缺點(diǎn):
        1腕柜、當(dāng)一個線程因?yàn)閳?zhí)行系統(tǒng)調(diào)用而阻塞時济似,將導(dǎo)致對應(yīng)進(jìn)程中的所有進(jìn)程阻塞矫废;
        2、無法享用多處理機(jī)系統(tǒng)中多個處理器帶來的好處砰蠢。
    • (3)組合方式
      • 通過時分多路復(fù)用技術(shù)蓖扑,用戶級線程可以連接到一些內(nèi)核支持線程上。
      • 可以根據(jù)需要靈活的決定台舱,需要多少個內(nèi)核支持線程與自己的用戶級線程多路復(fù)用律杠,以達(dá)到滿意的效果
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芥驳,老刑警劉巖茂嗓,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異掉蔬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進(jìn)店門股耽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞻颂,你說我怎么就攤上這事豺谈。” “怎么了贡这?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵茬末,是天一觀的道長。 經(jīng)常有香客問我盖矫,道長丽惭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任辈双,我火速辦了婚禮责掏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘湃望。我一直安慰自己换衬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布证芭。 她就那樣靜靜地躺著瞳浦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪废士。 梳的紋絲不亂的頭發(fā)上叫潦,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天,我揣著相機(jī)與錄音官硝,去河邊找鬼矗蕊。 笑死短蜕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的傻咖。 我是一名探鬼主播朋魔,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼没龙!你這毒婦竟也來了铺厨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤硬纤,失蹤者是張志新(化名)和其女友劉穎解滓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筝家,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洼裤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了溪王。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腮鞍。...
    茶點(diǎn)故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖莹菱,靈堂內(nèi)的尸體忽然破棺而出移国,到底是詐尸還是另有隱情,我是刑警寧澤道伟,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布迹缀,位于F島的核電站,受9級特大地震影響蜜徽,放射性物質(zhì)發(fā)生泄漏祝懂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一拘鞋、第九天 我趴在偏房一處隱蔽的房頂上張望砚蓬。 院中可真熱鬧,春花似錦盆色、人聲如沸灰蛙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缕允。三九已至,卻和暖如春蹭越,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背教届。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工响鹃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驾霜,地道東北人。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓买置,卻偏偏與公主長得像粪糙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子忿项,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容