最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

操作系統(tǒng)3 互斥與同步

2018-11-05 09:40 作者:swiss126  | 我要投稿

三、互斥與同步

1.進(jìn)程同步的基本概念

?兩種形式的制約關(guān)系:互斥與同步

?臨界資源:打印機(jī)、 磁帶機(jī)、共享變量等,都屬于臨界資源,一次只能被一個(gè)進(jìn)程使用的資源。諸進(jìn)程互斥共享臨界資源。

?臨界區(qū):每個(gè)進(jìn)程中訪問(wèn)臨界資源的那段代碼稱為臨界區(qū)

?臨界區(qū)管理的三個(gè)要求:

(1)? 一次最多允許一個(gè)進(jìn)程停留在相關(guān)的臨界區(qū)內(nèi);

(2)? 一個(gè)進(jìn)程不能無(wú)限止地停留在臨界區(qū);

(3)? 一個(gè)進(jìn)程不能無(wú)限止地等待進(jìn)入在臨界區(qū)。

?同步機(jī)制應(yīng)遵循的規(guī)則:

空閑讓進(jìn)、忙則等待、有限等待、讓權(quán)等待。

2、互斥的實(shí)現(xiàn)方法

2.1標(biāo)志法

? ? ? ? ??

2.2硬件實(shí)現(xiàn)方法(TS、Swap、關(guān)中斷)

(1)利用Test-and-Set指令實(shí)現(xiàn)互斥

Boolean TS(boolean *lock){

???????? boolean old;

???????? old =*lock;

???????? *lock=true;

???????? return old;

}?????????????????????????????????????

???????? …

???????? while TS(&lock);????? //測(cè)試lock并設(shè)置lock的值

???????? 臨界區(qū);

???????? lock = false;

???????? ….

分析:當(dāng)TS(&lock)的值為假時(shí),設(shè)置lock為真并結(jié)束循環(huán)。

當(dāng)TS(&lock)的值為真時(shí),繼續(xù)循環(huán)。

(2)利用Swap指令實(shí)現(xiàn)進(jìn)程互斥

swap(boolean a,boolean b)

{

???????? boolean temp;

???????? temp=a;

???????? a=b;

???????? b=temp

}

???????? …

???????? boolean key;???

???????? key=true;

???????? do

?????????????????? swap(&lock,key);

???????? while (key);

???????? 臨界區(qū);

???????? lock=false;

???????? …

(3)關(guān)中斷

在進(jìn)入鎖測(cè)試之前關(guān)閉中斷,直到完成鎖測(cè)試并上鎖之后才能打開中斷。進(jìn)程在臨界區(qū)執(zhí)行期間,計(jì)算機(jī)系統(tǒng)不響應(yīng)中斷,從而不會(huì)引發(fā)調(diào)度,也就不會(huì)發(fā)生進(jìn)程或線程切換。保證了對(duì)鎖的測(cè)試和關(guān)鎖操作的連續(xù)性和完整性,有效地保證了互斥。

但是,關(guān)中斷的方法存在許多缺點(diǎn):

①濫用關(guān)中斷權(quán)力可能導(dǎo)致嚴(yán)重后果;②關(guān)中斷時(shí)間過(guò)長(zhǎng),會(huì)影響系統(tǒng)效率,限制了處理器交叉執(zhí)行程序的能力;③關(guān)中斷方法也不適用于多CPU 系統(tǒng),因?yàn)樵谝粋€(gè)處理器上關(guān)中斷并不能防止進(jìn)程在其它處理器上執(zhí)行相同的臨界段代碼。

2.3信號(hào)量及P、V原語(yǔ)

?解決問(wèn)題:

1)TS或SWAP指令管理臨界區(qū),采用忙式輪詢,效率低;
2)關(guān)開中斷管理臨界區(qū),不便交給用戶程序使用。

1. 信號(hào)量的構(gòu)思

?????? 一種可動(dòng)態(tài)定義的軟件資源:信號(hào)量

◆核心數(shù)據(jù)結(jié)構(gòu):等待進(jìn)程隊(duì)列

◆信號(hào)量聲明:資源報(bào)到,建立隊(duì)列

◆申請(qǐng)資源的原語(yǔ):若申請(qǐng)不到,調(diào)用進(jìn)程入隊(duì)等待。

◆歸還資源的原語(yǔ):若隊(duì)列中有等待進(jìn)程,需釋放。

◆信號(hào)量撤銷:資源注銷,撤銷隊(duì)列。

2. 記錄型信號(hào)量

■其數(shù)據(jù)結(jié)構(gòu)如下:

??? typedef struct semaphore{

??????? int value;????????????? //信號(hào)量值

??????? struct pcb *list;??? //信號(hào)量等待進(jìn)程隊(duì)列指針

????? }

■ 每個(gè)信號(hào)量建立一個(gè)等待進(jìn)程隊(duì)列

■ 每個(gè)信號(hào)量相關(guān)一個(gè)整數(shù)值

?正值表示資源可用的數(shù)量

?0值表示無(wú)資源且無(wú)進(jìn)程等待

?負(fù)值表示等待隊(duì)列中進(jìn)程的個(gè)數(shù)

3. ?P、V操作原語(yǔ)

  Viod P(semaphore s){

????? s.value=s.value-1;

????? if (s.value<0) {

????????? 將該進(jìn)程插入到s.list的等待進(jìn)程隊(duì)列中;

????????? block(s.list);

????? }

??? }

??? Viod V(semaphore s){

????? s.value=s.value+1;

????? if (s.value<=0) {

????????? 從s.list的等待進(jìn)程隊(duì)列中釋放一個(gè)進(jìn)程P;

????????? wakeup(P);

????? }

??? }

2.4用P、V操作原語(yǔ)實(shí)現(xiàn)進(jìn)程互斥

  semaphore mutex;

??? mutex=1;

??? …

??? process Pi{

????? …

????? P(mutex);

????? 進(jìn)程Pi進(jìn)入臨界區(qū)

????? V(mutex);

????? …

??? }

2.5用PV操作解決緩沖區(qū)問(wèn)題

(1)單緩沖區(qū)問(wèn)題


(2)M生產(chǎn)者N消費(fèi)者K個(gè)緩沖區(qū)

3、進(jìn)程通信

3.1進(jìn)程通信的類型

1. 共享存儲(chǔ)器系統(tǒng)(Shared-Memory System)

可分為以下兩種類型:

①基于共享數(shù)據(jù)結(jié)構(gòu)的通信方式。②基于共享存儲(chǔ)區(qū)的通信方式。

2. 管道(pipe)通信系統(tǒng)

為了協(xié)調(diào)雙方的通信,管道機(jī)制必須提供以下三方面的協(xié)調(diào)能力:

①互斥②同步③確定對(duì)方是否存在

3. 消息傳遞系統(tǒng)(Message passing system)

可進(jìn)一步分成直接通信方式和間接通信方式

3.2消息傳遞通信的實(shí)現(xiàn)方式

1. 直接消息傳遞系統(tǒng)

1)直接傳遞原語(yǔ)

?????? send(P,信件):把信件發(fā)送給進(jìn)程P

?????? receive(Q ,信件):從進(jìn)程Q接收信件

2) 進(jìn)程的同步方式

3) 通信鏈路

2.間接消息傳遞系統(tǒng)——信箱通信

■ 發(fā)送或者接收信件通過(guò)一個(gè)信箱來(lái)進(jìn)行,該信箱有唯一標(biāo)識(shí)符。

■多個(gè)進(jìn)程共享一個(gè)信箱。

信箱通信原語(yǔ)

Send(A,信件):把信件傳送到A信箱;
Receive(A,信件):從A信箱中接收信件。

4、死鎖

4.1死鎖的概念

1.定義:在一組進(jìn)程發(fā)生死鎖的情況下,這組死鎖進(jìn)程中的每一個(gè)進(jìn)程,都在等待另一個(gè)死鎖進(jìn)程所占有的資源。

2.可重用性資源和消耗性資源

3.可搶占性資源和不可搶占性資源

4. 計(jì)算機(jī)系統(tǒng)中的死鎖

1)競(jìng)爭(zhēng)不可搶占性資源引起死鎖

2) 競(jìng)爭(zhēng)可消耗資源引起死鎖

3) 進(jìn)程推進(jìn)順序不當(dāng)引起死鎖

4.2死鎖的必要條件(互斥、部分分配、不可搶占、循環(huán)等待)

4.3死鎖的防止:破壞產(chǎn)生死鎖的四個(gè)必要條件中的一個(gè)或幾個(gè),以避免發(fā)生死鎖。

■破壞互斥條件,把獨(dú)占型資源改造成共享型資源

■采用剝奪式調(diào)度方法可以破壞不可搶占條件

■破壞部分分配條件,一次性為進(jìn)程分配所有應(yīng)使用的資源。

■破壞循環(huán)等待條件,使運(yùn)行期間不存在進(jìn)程循環(huán)等待現(xiàn)象。

*主要方法:

1. 靜態(tài)分配法

■開始運(yùn)行之前,必須一次性地申請(qǐng)其在整個(gè)運(yùn)行過(guò)程中所需的全部資源。破壞了部分分配條件。

■層次分配法

■ 在層次分配策略下,資源被分成多個(gè)層次;

■ 一個(gè)進(jìn)程得到某一層的一個(gè)資源后,他只能在申請(qǐng)?jiān)谳^高層次的資源;

■當(dāng)一個(gè)進(jìn)程要釋放一個(gè)資源時(shí),必須先釋放所占用的較高層次的資源;

■當(dāng)一個(gè)進(jìn)程獲得了某一層的一個(gè)進(jìn)程后,它想再申請(qǐng)改層中的另一個(gè)資源,那么,必須先釋放改層中的已占有資源。

■不可能形成循環(huán)回路,故阻止了循環(huán)等待的出現(xiàn)。

4.4死鎖的避免(銀行家算法:借錢給有償還能力的客戶)

1.銀行家算法(單一資源)

假設(shè)系統(tǒng)有三個(gè)進(jìn)程P,Q,R,系統(tǒng)只有一類資源共10個(gè),目前分配情況如下:

安全序列:{Q,P,R}

2.銀行家算法(多個(gè)資源)

假定系統(tǒng)中有五個(gè)進(jìn)程{P0, P1, P2, P3, P4}和三類資源{A, B, C},各種資源的數(shù)量分別為10、5、7,在T0時(shí)刻的資源分配情況如圖所示,給出一個(gè)安全序列。

?(1)從題目中,可以提取出Max矩陣和Allocation,用二個(gè)矩陣相減得到Need矩陣:

(2)用Avaliable向量與Need矩陣各行比較,找出比Avaliable向量小的行:

(3? 3? 2)>(1? 2? 2)和(3? 3 ?2)>(0 ?1 ?1)

對(duì)應(yīng)的二個(gè)進(jìn)程分別為P1和P3,我們選擇P1加入安全序列。

(3)釋放P1所占有的資源,即把P1進(jìn)程對(duì)應(yīng)的Allocation矩陣中的一行與Avaliable向量相加:

(3? 3 ?2)+(2 ?0 ?0)=(5 ?3? 2)= ?Avaliable

(4)在Need矩陣中去掉P1對(duì)應(yīng)的行

(5)重復(fù)第(2)步,最后得到一個(gè)安全序列:{P1,P3,P4,P2,P0}?

故系統(tǒng)是安全的。

4.5死鎖的檢測(cè)與恢復(fù)

如果在系統(tǒng)中,既不采取死鎖預(yù)防措施,也未配有死鎖避免算法,系統(tǒng)很可能會(huì)發(fā)生死鎖。在這種情況下,系統(tǒng)應(yīng)當(dāng)提供兩個(gè)算法:

① 死鎖檢測(cè)算法。該方法用于檢測(cè)系統(tǒng)狀態(tài),以確定系統(tǒng)中是否發(fā)生了死鎖。

② 死鎖解除算法。當(dāng)認(rèn)定系統(tǒng)中已發(fā)生了死鎖,利用該算法可將系統(tǒng)從死鎖狀態(tài)中解脫出來(lái)。

1. 死鎖的檢測(cè)
為了能對(duì)系統(tǒng)中是否已發(fā)生了死鎖進(jìn)行檢測(cè),在系統(tǒng)中必須:① 保存有關(guān)資源的請(qǐng)求和分配信息;② 提供一種算法,它利用這些信息來(lái)檢測(cè)系統(tǒng)是否已進(jìn)入死鎖狀態(tài)。
1) 資源分配圖

2) 等待圖:

2. 死鎖的解除
1)終止進(jìn)程的方法:終止所有死鎖進(jìn)程、逐個(gè)終止進(jìn)程

2)校驗(yàn)點(diǎn):執(zhí)行過(guò)程中定時(shí)設(shè)置校驗(yàn)點(diǎn)。從校驗(yàn)點(diǎn)開始重新執(zhí)行。


操作系統(tǒng)3 互斥與同步的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
措勤县| 若尔盖县| 光泽县| 祁门县| 天台县| 开鲁县| 甘孜县| 忻州市| 巧家县| 南华县| 柞水县| 江孜县| 习水县| 遂溪县| 庐江县| 灵宝市| 呼图壁县| 盐边县| 渝北区| 竹山县| 云林县| 莆田市| 嘉祥县| 小金县| 抚州市| 景泰县| 望奎县| 炉霍县| 潞西市| 崇信县| 德江县| 兴宁市| 长武县| 汤阴县| 柳江县| 谢通门县| 吉安县| 桐梓县| 靖安县| 汕头市| 城口县|