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á)到滿意的效果