郝亞洲 李文敏
計(jì)算機(jī)操作系統(tǒng)原理課程是計(jì)算機(jī)科學(xué)與技術(shù)及相關(guān)專業(yè)的核心課程,歷來為計(jì)算機(jī)及信息學(xué)科所重視。操作系統(tǒng)原理課程中重要的一環(huán)就是進(jìn)程間的通信問題。而“讀者-寫者”問題更是進(jìn)程間通信的經(jīng)典,學(xué)好它不僅可使學(xué)生鞏固理論學(xué)習(xí)的概念、原理、設(shè)計(jì)及算法,同時(shí)也可培養(yǎng)軟件開發(fā)所應(yīng)有的系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和軟件工程素養(yǎng)。
操作系統(tǒng);文件系統(tǒng);功能調(diào)用
1.問題的提出及論文的目的
在Windows7環(huán)境下,創(chuàng)建一個(gè)控制臺(tái)進(jìn)程,此進(jìn)程包含n個(gè)線程。用這n個(gè)線程來表示n個(gè)讀者或?qū)懻?。每個(gè)線程按相應(yīng)測(cè)試數(shù)據(jù)文件的要求進(jìn)行讀寫操作。用信號(hào)量機(jī)制分別實(shí)現(xiàn)讀者優(yōu)先和寫者優(yōu)先問題。
通過分析并實(shí)現(xiàn)經(jīng)典的“讀者-寫者”問題,鞏固對(duì)線程及其同步機(jī)制的學(xué)習(xí)效果,加深對(duì)相關(guān)基本概念的理解,并讓讀者了解如何將基本原理和實(shí)際設(shè)計(jì)有機(jī)的結(jié)合。
2.設(shè)計(jì)思路
可以將所有讀者和所有寫者分別存于一個(gè)讀者等待隊(duì)列和一個(gè)寫者等待隊(duì)列中,每當(dāng)讀允許時(shí),就從讀者隊(duì)列中釋放一個(gè)或多個(gè)讀者線程進(jìn)行讀操作;每當(dāng)寫允許時(shí),就從寫者隊(duì)列中釋放一個(gè)寫者線程進(jìn)行寫操作。
讀者優(yōu)先。讀者優(yōu)先指的是除非有寫者在寫文件,否則讀者不需要等待。所以可以用一個(gè)整數(shù)變量Read count記錄當(dāng)前的讀者數(shù)目,用于確定是否需要釋放正在等待的寫者進(jìn)程(當(dāng)Read count=0時(shí),表明所有的讀者讀完,需要釋放寫者等待隊(duì)列中的一個(gè)寫者)。每當(dāng)一個(gè)讀者開始讀文件時(shí),必須修改Read count變量。因此需要一個(gè)互斥對(duì)象mutex來實(shí)現(xiàn)對(duì)全局變量Read count修改時(shí)的互斥。
另外,為了實(shí)現(xiàn)讀-寫互斥,需要增加一個(gè)臨界區(qū)對(duì)象Write。當(dāng)寫者發(fā)出寫請(qǐng)求時(shí),必須申請(qǐng)臨界區(qū)對(duì)象的所有權(quán)。通過這種方法,可以實(shí)現(xiàn)讀-寫互斥,當(dāng)Read count=1時(shí)(即第一個(gè)讀者到來時(shí)),讀者線程也必須申請(qǐng)臨界區(qū)對(duì)象的所有權(quán)。
當(dāng)讀者擁有臨界區(qū)的所有權(quán)時(shí),寫者阻塞在臨界區(qū)對(duì)象Write上。當(dāng)寫者擁有臨界區(qū)的所有權(quán)時(shí),第一個(gè)讀者判斷完”Read count==1”后阻塞在Write上,其余的讀者由于等待對(duì)Read count的判斷,阻塞在mutex上。
寫者優(yōu)先。寫者優(yōu)先與讀者優(yōu)先相類似。不同之處在于一旦一個(gè)寫者到來,它應(yīng)該盡快對(duì)文件進(jìn)行寫操作,如果有一個(gè)寫者在等待,則新到來的讀者不允許進(jìn)行讀操作。為此應(yīng)當(dāng)填加一個(gè)整形變量Write count,用于記錄正在等待的寫者的數(shù)目,當(dāng)Write count=0時(shí),才可以釋放等待的讀者線程隊(duì)列。
為了對(duì)全局變量Write count實(shí)現(xiàn)互斥,必須增加一個(gè)互斥對(duì)象mutex3。
為了實(shí)現(xiàn)寫者優(yōu)先,應(yīng)當(dāng)填加一個(gè)臨界區(qū)對(duì)象read,當(dāng)有寫者在寫文件或等待時(shí),讀者必須阻塞在read上。
讀者線程除了要對(duì)全局變量Read count實(shí)現(xiàn)操作上的互斥外,還必須有一個(gè)互斥對(duì)象對(duì)阻塞read這一過程實(shí)現(xiàn)互斥。這兩個(gè)互斥對(duì)象分別命名為mutex1,mutex2。
以上內(nèi)容很清楚的講述了進(jìn)程間通信之經(jīng)典問題—“讀者-寫著”問題的本質(zhì),并且提出了實(shí)現(xiàn)的方法,可以幫助讀者學(xué)好操作系統(tǒng)這門核心的計(jì)算機(jī)專業(yè)課程。
[1]湯子瀛.計(jì)算機(jī)操作系統(tǒng)[M].西安:西安電子科技大學(xué)出版社,2011.08
[2]特南鮑姆.現(xiàn)代操作系統(tǒng)[M].北京:機(jī)械工業(yè)出版社,2002.01
[3]William Stalling.操作系統(tǒng):精髓與設(shè)計(jì)原理[M].北京:電子工業(yè)出版社,2006.03