第3章程序管理 第3講

2021-05-12 19:50:17 字數 2807 閱讀 9106

《作業系統》

主講人:黃伯虎

上一講內容回顧

程序間的相互作用

基本概念:同步、互斥、臨界資源、臨界區帶來的問題

解決方案

鎖變數法(測試和設定指令)

訊號量和p、v操作

訊號量的物理含義

s>0:表示可用資源數目。

s<=0:表示沒有資源可用。

s<0:其絕對值表示因為此訊號量而被阻塞的程序數。

}p(ss為訊號量

}v(s) //s為訊號量

s semaphore; //設定公有訊號量s = 1; //初值

process

v(s);……}

使用p 、v 操作時的注意事項

p 、v 操作(對同一訊號量)總是成對出現的;互斥操作時他們處於同一程序中;同步操作時他們處於不同程序中。

p 、v 操作的位置和次序十分重要,使用時注意邏輯關係。

s semaphore; //設定公有訊號量s = 1; //初值process v(s);……}

while (true)

生產者程序t1while (true)

消費者程序t2

ipc (inter-process communication)經典問題

讀者寫者問題

問題描述:乙個資料物件(檔案、記錄)可以為多個併發程序共享。

其中有的程序只需要讀其中的內容,我們稱為「讀者」;有的程序負責更新其中內容,我們稱為「寫者」。「讀者」可以同時讀取共享資料物件;「寫者」不能和其它任何程序同時訪問共享資料物件。

data

reader reader read read reader

read

...writer write writer write writer

write

...五、程序間的相互作用

分析:讀程序的行為:系統中會有多個讀程序同時訪問共享資料,不過我們可以將他們的行為合併,只需要區分第乙個進入的讀程序(佔

有臨界資源)和最後乙個離開的讀程序(釋放臨界資源)。因此需要

設定乙個計數器readnum來記錄讀程序的數目。

確定臨界資源:data, readnum

分清同步和互斥關係

①「讀者——讀者」:互斥訪問readnum

②「讀者——寫者」:互斥訪問data

③「寫者——寫者」:互斥訪問data

五、程序間的相互作用

設定訊號量:

int readnum =0; //計數,用於記錄讀者的數目

semaphore mutex, write ; //公用訊號量,用於互斥

mutex=1; write=1; //mutex 用於對readnum 互斥;write 用於寫者之間以及寫

者和讀者之間互斥p(mutex);//對readnum 互斥readnum ++; //讀者數目加1

if (readnum==1) //第乙個讀程序p(write);//申請使用data 資源v(mutex); //釋放readnum reading;

p(mutex); //對readnum 互斥readnum --;

if (readnum==0)//最後乙個讀程序v(write); //釋放data 資源v(mutex); //釋放readnum

讀者程序:

p(write); //申請使用data 資源writing;

v(write); //釋放data 資源

寫者程序:

自學:寫者優先(第二類讀者寫者問題)

理髮師問題

理髮椅理髮師

等候椅規則:

1.如果沒有顧客,理髮師睡覺;

2.如果顧客到來,理髮師正在睡覺,喚醒他理髮;

3.如果顧客到來,理髮師正忙給別人理髮,則顧客看看等候椅是否有空:

如果為有空,則坐下等候;

否則,離開。

}理髮師程序:else }

顧客程序:

設定訊號量:

semaphore customers, barbers ; //私有訊號量,用於同步

customers=0; barbers=0; //customers 表示顧客數目,barbers 表示理髮師狀態int wait=0; //等待的人,計數chairs //表示等候椅個數

哲學家問題

五個哲學家圍坐在一圓桌旁,桌**有一盤通心粉,每人面前有乙隻空盤子,每兩人之間放乙隻叉子。每個哲學家的行為是思

考,感到飢餓,然後吃通心粉。為了吃通心粉,每個哲學家必須

拿到兩隻叉子,並且每個人只能直接從自己的左邊或右邊去取叉

子。food

問題:五個人同時感到飢餓,拿起了左手(右手)邊的叉子——死鎖;

規定拿叉子的順序為從左至右(從右至左),如果右邊(左邊)的叉子不能用,則放下左手的叉子,過一段時間再拿。如果行動高度統

一——飢餓;

原因:p、v操作將同步和互斥操作分散到各個程序中,沒有乙個程序能對全域性進行考慮。

如何解決?

管程(monitor)

2023年,hoare和brinch hanson提出。是乙個由過程、變數和資料結構等組成的特殊的模組或者軟體包。

基本思想:

集中管理各程序中的臨界區;

程序可以呼叫管程中的過程,但是不能在管程外的過程中直接訪問管程內的資料結構。

系統保證在任何時刻管程中只能有乙個活躍程序存在(互斥執行)。

特點:模組化:可以單獨編譯的實體;

抽象資料型別:將資料結構和操作封裝在乙個模組中;

資訊隱蔽:管程如何實現其功能的對外界隱蔽。

優點:安全性、互斥性、等待機制。

作業p117 習題29, 31

第2章程序設計基礎

考點精講 考點 1 程式設計的方法與風格 養成良好的程式設計風格,主要考慮下述因素 1 源程式文件化 1 符號名的命名 符號名的命名應具有一定的實際含義,以便於對程式功能的理解。2 程式注釋 在源程式中新增正確的注釋可幫助人們理解程式。程式注釋可分為序言 性注釋和功能性注釋。語句結構清晰第 一 效率...

第3講銷售管理

1資訊科技與商務管理系25 1企業資源規劃 erp 資訊科技與商務管理系25 2企業資源規劃 erp 主要內容銷售管理業務型別 資訊科技與商務管理系25 3企業資源規劃 erp 企業銷售管理的職能是在企業供需鏈中處於市場 客戶 與企業 製造 資訊科技與商務管理系25 5企業資源規劃 erp 銷售管理...

第3講遞推

遞推是一種應用非常廣泛的常用演算法之一,與下一章的遞迴有著密切的聯絡。本章 遞推在求解數列 數陣以及計數等應用案例方面的應用。在紛繁變幻的世界,所有事物都隨時間的流逝發生著微妙的變化。許多現象的變化是有規律可循的,這種規律往往呈現出前因後果的關係。某種現象的變化結果與緊靠它前面變化的乙個或一些結果緊...