【正文】
在創(chuàng)建新線程時(shí) , 需要利用一個(gè)線程創(chuàng)建函數(shù) (或系統(tǒng)調(diào)用 ), 并提供相應(yīng)的參數(shù) , 如指向線程主程序的入口指針 、 堆棧的大小 , 以及用于調(diào)度的優(yōu)先級(jí)等 。 3. (1) 狀態(tài)參數(shù) 。 將消息緩沖區(qū) i中的信息復(fù)制到接收區(qū) b。 signal()。 圖 2 12 消息緩沖通信 s e n d e r : As i z e : 5t e x t : H e l l omqm u t e xsms e n d e r : As i z e : 5t e x t : H e l l on e x t : 0s e n d ( B , a )第一消息緩沖區(qū)s e n d e r : As i z e : 5t e x t : H e l l or e c e i v e ( b )a發(fā)送區(qū)ab接收區(qū)b進(jìn)程 BP C B ( B )進(jìn)程 A procedure send(receiver, a) begin getbuf(,i)。 在利用消息緩沖隊(duì)列通信機(jī)制時(shí) , 在設(shè)置消息緩沖隊(duì)列的同時(shí) , 還應(yīng)增加用于對(duì)消息隊(duì)列進(jìn)行操作和實(shí)現(xiàn)同步的信號(hào)量 , 并將它們置入進(jìn)程的 PCB中 。 (3) 發(fā)送進(jìn)程和接收進(jìn)程均不阻塞。 而根據(jù)通信方式的不同 , 則又可把鏈路分成兩種: ① 單向通信鏈路 , 只允許發(fā)送進(jìn)程向接收進(jìn)程發(fā)送消息; ② 雙向鏈路 , 既允許由進(jìn)程 A向進(jìn)程 B發(fā)送消息 , 也允許進(jìn)程 B同時(shí)向進(jìn)程 A發(fā)送消息 。 允許建立一個(gè)公用信箱 , 讓多個(gè)進(jìn)程都能向信箱中投遞消息;也可從信箱中取走屬于自己的消息 。 信箱的擁有者和共享者 , 都有權(quán)從信箱中取走發(fā)送給自己的消息 。 信箱的擁有者有權(quán)從信箱中讀取消息 , 其他用戶則只能將自己構(gòu)成的消息發(fā)送到該信箱中 。 當(dāng)進(jìn)程不再需要讀信箱時(shí) , 可用信箱撤消原語(yǔ)將之撤消 。 … send(consumer, nextp)。 而原語(yǔ) Receive(P1, m1)則表示接收由 P1發(fā)來(lái)的消息 m1。 ② 同步 , 指當(dāng)寫(輸入 )進(jìn)程把一定數(shù)量 (如 4 KB)的數(shù)據(jù)寫入 pipe, 便去睡眠等待 , 直到讀 (輸出 )進(jìn)程取走數(shù)據(jù)后 , 再把他喚醒 。 操作系統(tǒng)隱藏了通信的實(shí)現(xiàn)細(xì)節(jié) , 大大減化了通信程序編制的復(fù)雜性 , 而獲得廣泛的應(yīng)用 。 end consumer:begin repeat (item)。 nextc ∶ = buffer(out)。 buffer:array[ 0,…,n1] of item。 利用管程解決生產(chǎn)者 消費(fèi)者問(wèn)題 在利用管程方法來(lái)解決生產(chǎn)者 消費(fèi)者問(wèn)題時(shí) , 首先便是為它們建立一個(gè)管程 , 并命名為 ProclucerConsumer, 或簡(jiǎn)稱為 PC。 此時(shí) , wait 原 語(yǔ)應(yīng) 改 為 , 相應(yīng)地 , signal 應(yīng) 改為。 procedure entry P2(…)。 L,RN,0)。 end parend end 利用信號(hào)量集機(jī)制解決讀者 寫者問(wèn)題 Var RN integer。 readcount ∶ = readcount1。 讀者 Var rmutex, wmutex:semaphore ∶ = 1,1。 until false。 按此規(guī)定 , 將是 2號(hào)哲學(xué)家競(jìng)爭(zhēng) 1號(hào)筷子; 4號(hào)哲學(xué)家競(jìng)爭(zhēng) 3號(hào)筷子 。 … eat。 Ssignal(mutex, empty)。 … Swait(empty, mutex)。 until false。 until false。 in, out: integer ∶ = 0, 0。 S6。 end。 end。 begin parbegin begin S1。 begin parbegin process 1: begin repeat wait(mutex)。 此時(shí)在信號(hào)量集中只有一個(gè)信號(hào)量 S, 但允許它每次申請(qǐng) d個(gè)資源 , 當(dāng)現(xiàn)有資源數(shù)少于 d時(shí) , 不予分配 。 由死鎖理論可知 , 這樣就可避免上述死鎖情況的發(fā)生 。 wait(Dmutex)。 可見 , 該機(jī)制遵循了 “ 讓權(quán)等待 ” 準(zhǔn)則 。 它所包含的上述兩個(gè)數(shù)據(jù)項(xiàng)可描述為: type semaphore=record value:integer。 wait和 signal wait(S): while S≤0 do noop S ∶ =S1。 remainder section。 假設(shè): counter的當(dāng)前值是 5。 until false。 in ∶ = in+1 mod n。 in, out: 0, 1, …, n1。 用輸入指針 in來(lái)指示下一個(gè)可投放產(chǎn)品的緩沖區(qū) , 每當(dāng)生產(chǎn)者進(jìn)程生產(chǎn)并投放一個(gè)產(chǎn)品后 , 輸入指針加 1;用一個(gè)輸出指針 out來(lái)指示下一個(gè)可從中獲取產(chǎn)品的緩沖區(qū) , 每當(dāng)消費(fèi)者進(jìn)程取走一個(gè)產(chǎn)品后 , 輸出指針加 1。 假如采用的是搶占調(diào)度策略 , 則每當(dāng)有新進(jìn)程進(jìn)入就緒隊(duì)列時(shí) , 應(yīng)檢查是否要進(jìn)行重新調(diào)度 , 即由調(diào)度程序?qū)⒈患せ钸M(jìn)程與當(dāng)前進(jìn)程進(jìn)行優(yōu)先級(jí)的比較 , 如果被激活進(jìn)程的優(yōu)先級(jí)更低 , 就不必重新調(diào)度;否則 , 立即剝奪當(dāng)前進(jìn)程的運(yùn)行 , 把處理機(jī)分配給剛被激活的進(jìn)程 。 喚醒原語(yǔ)執(zhí)行的過(guò)程是:首先把被阻塞的進(jìn)程從等待該事件的阻塞隊(duì)列中移出 , 將其 PCB中的現(xiàn)行狀態(tài)由阻塞改為就緒 , 然后再將該 PCB插入到就緒隊(duì)列中 。 (4) 將被終止進(jìn)程所擁有的全部資源 , 或者歸還給其父進(jìn)程 , 或者歸還給系統(tǒng) 。 3) 外界干預(yù)并非指在本進(jìn)程運(yùn)行中出現(xiàn)了異常事件 ,而是指進(jìn)程應(yīng)外界的請(qǐng)求而終止運(yùn)行 。 進(jìn)程試圖去訪問(wèn)一個(gè)不允許訪問(wèn)的資源或文件 , 或者以不適當(dāng)?shù)姆绞竭M(jìn)行訪問(wèn) , 例如 , 進(jìn)程試圖去寫一個(gè)只讀文件; ③ 非法指令 。 (4) 將新進(jìn)程插入就緒隊(duì)列,如果進(jìn)程就緒隊(duì)列能夠接納新進(jìn)程, 便將新進(jìn)程插入就緒隊(duì)列。 4) 進(jìn)程控制信息包括: ① 程序和數(shù)據(jù)的地址 , 是指進(jìn)程的程序和數(shù)據(jù)所在的內(nèi)存或外存地 (首 )址 , 以便再調(diào)度到該進(jìn)程執(zhí)行時(shí) , 能從 PCB中找到其程序和數(shù)據(jù); ② 進(jìn)程同步和通信機(jī)制 , 指實(shí)現(xiàn)進(jìn)程同步和進(jìn)程通信時(shí)必需的機(jī)制 , 如消息隊(duì)列指針 、 信號(hào)量等 , 它們可能全部或部分地放在 PCB中; ③ 資源清單 , 是一張列出了除 CPU以外的 、進(jìn)程所需的全部資源及已經(jīng)分配到該進(jìn)程的資源的清單;④ 鏈接指針 , 它給出了本進(jìn)程 (PCB)所在隊(duì)列中的下一個(gè)進(jìn)程的 PCB的首地址 。 (2) 外部標(biāo)識(shí)符 。 (3) 靜止就緒 → 活動(dòng)就緒。 (3) 進(jìn)程是程序在一個(gè)數(shù)據(jù)集合上運(yùn)行的過(guò)程 , 它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位 。 S1: a∶ =x+2 S2: b∶ =y+4 S3: c∶ =a+b S4: d∶ =c+b 圖 24 四條語(yǔ)句的前趨關(guān)系 S1S2S3S4 程序并發(fā)執(zhí)行時(shí)的特征 1) 間斷性 2) 失去封閉性 3) 不可再現(xiàn)性 例如 , 有兩個(gè)循環(huán)程序 A和 B, 它們共享一個(gè)變量 N。 S2: b ∶ =a5。 S3: c ∶ =b+1。 程序 A每執(zhí)行一次時(shí) , 都要做 N∶ =N+1操作;程序 B每執(zhí)行一次時(shí) , 都要執(zhí)行 Print(N)操作 , 然后再將 N置成 “ 0”。 在引入了進(jìn)程實(shí)體的概念后 , 我們可以把傳統(tǒng) OS中的進(jìn)程定義為: “ 進(jìn)程是進(jìn)程實(shí)體的運(yùn)行過(guò)程 , 是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位 ” 。 (4) 靜止阻塞 → 活動(dòng)阻塞。 它由創(chuàng)建者提供 , 通常是由字母 、 數(shù)字組成 , 往往是由用戶 (進(jìn)程 )在訪問(wèn)該進(jìn)程時(shí)使用 。 3. 進(jìn)程控制塊的組織方式 1) 鏈接方式 圖 27 PCB鏈接隊(duì)列示意圖 P C B 1 4P C B 2P C B 3P C B 4P C B 5P C B 6P C B 7P C B 8P C B 93087901執(zhí)行指針就 緒 隊(duì) 列指 針阻 塞 隊(duì) 列指 針空 閑 隊(duì) 列指 針…2) 索引方式 圖 28 按索引方式組織 PCB 執(zhí)行指針就緒索引表P C B 1P C B 2P C B 3P C B 4P C B 5P C B 6P C B 7阻塞索引表就緒表指針阻塞表指針2 進(jìn) 程 控 制 1 進(jìn)程的創(chuàng)建 1. 進(jìn)程圖 (Process Graph) 圖 29 進(jìn)程樹 D E F G HB CI J K L MA 引起創(chuàng)建進(jìn)程的事件 (1) 用戶登錄。 2 進(jìn)程的終止 1. 引起進(jìn)程終止 (Termination of Process) 1) 在任何計(jì)算機(jī)系統(tǒng)中 , 都應(yīng)有一個(gè)用于表示進(jìn)程已經(jīng)運(yùn)行完成的指示 。 程序試圖去執(zhí)行一條不存在的指令 。 這些干預(yù)有: ① 操作員或操作系統(tǒng)干預(yù) 。 (5) 將被終止進(jìn)程 (它的 PCB)從所在隊(duì)列 (或鏈表 )中移出, 等待其他程序來(lái)搜集信息。 4 進(jìn)程的掛起與激活 1. 當(dāng)出現(xiàn)了引起進(jìn)程掛起的事件時(shí) , 比如 , 用戶進(jìn)程請(qǐng)求將自己掛起 , 或父進(jìn)程請(qǐng)求將自己的某個(gè)子進(jìn)程掛起 , 系統(tǒng)將利用掛起原語(yǔ) suspend( )將指定進(jìn)程或處于阻塞狀態(tài)的進(jìn)程掛起 。 3 進(jìn) 程 同 步 進(jìn)程同步的基本概念 1. 兩種形式的制約關(guān)系 (1) 間接相互制約關(guān)系。 由于這里的緩沖池是組織成循環(huán)緩沖的 , 故應(yīng)把輸入指針加1表示成 in∶ =(in+1)mod n;輸出指針加 1表示成 out∶ =(out+1) mod n。 counter: 0, 1, …, n。 counter ∶ = counter+1。 雖然上面的生產(chǎn)者程序和消費(fèi)者程序 , 在分別看時(shí)都是正確的 , 而且兩者在順序執(zhí)行時(shí)其結(jié)果也會(huì)是正確的 , 但若并發(fā)執(zhí)行時(shí) , 就會(huì)出現(xiàn)差錯(cuò) , 問(wèn)題就在于這兩個(gè)進(jìn)程共享變量 counter。 如果生產(chǎn)者進(jìn)程先執(zhí)行左列的三條機(jī)器語(yǔ)言語(yǔ)句 , 然后消費(fèi)者進(jìn)程再執(zhí)行右列的三條語(yǔ)句 , 則最后共享變量 counter的值仍為 5;反之 , 如果讓消費(fèi)者進(jìn)程先執(zhí)行右列的三條語(yǔ)句 , 然后再讓生產(chǎn)者進(jìn)程執(zhí)行左列的三條語(yǔ)句 , counter值也還是 5, 但是 , 如果按下述順序執(zhí)行: register 1 ∶ = counter。 until false。 signal(S): S ∶ =S+1。 L:list of process。 此時(shí) 的數(shù)目 。 若進(jìn)程 A和 B按下述次序交替執(zhí)行 wait process A: wait(Dmutex)。 為此 , 在 wait操作中 , 增加了一個(gè) “ AND”條件 , 故稱為 AND同步 , 或稱為同時(shí) wait操作 , 即 Swait(Simultaneous wait)定義如下: Swait(S1, S2, …, Sn) if Si≥1 and … and Sn≥1 then for i ∶ = 1 to n do Si ∶ = Si1。 (2) Swait(S, 1, 1)。 critical section signal(mutex)。 signal(a)。 begin wait(b)。 begin wait(d)。 end。 begi