freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

進程管理經(jīng)典培訓(xùn)講義-資料下載頁

2025-05-27 09:57本頁面

【導(dǎo)讀】基于進程而形成的。所以操作系統(tǒng)的學(xué)習(xí)者和設(shè)計者都要盡早地理解進程。邊聽著光盤上的音樂,一邊從網(wǎng)上下載著軟件,一邊還編輯著文本文件。在某一時段同時發(fā)。生幾件事的現(xiàn)象稱為并發(fā)。我們知道,計算機為我們自動地做某事,實際上是CPU自動執(zhí)行。在單CPU條件下同時運行幾道程序,從宏觀上看,這幾道程序是同時向前推進,但從。的開始與結(jié)束之間的某一處。察,卻是輪流地為每個程序執(zhí)行一段時間,循環(huán)往復(fù),直到所有程序依次完成。程序的這兩種不同的執(zhí)行方式,體現(xiàn)出不同的特性。其實現(xiàn),Linux中進程的實現(xiàn)。掌握進程通信、死鎖的概念及其解決方法,了解Linux. 一個具有獨立功能的程序獨占CPU運行,直至得到最終結(jié)果的過程稱為程序的順序執(zhí)行。序進行計算,最后將結(jié)果打印出來。除了人為的干預(yù)造成機器暫時停頓外,前一動作的。硬件的并行操作技術(shù)為程序的并發(fā)執(zhí)行提供了物質(zhì)基礎(chǔ)。程序并發(fā)執(zhí)行已喪失了順序執(zhí)行所保持的封閉性和可再現(xiàn)性。

  

【正文】 態(tài); ② 局部于該管程的一組操作過程,每個過程完成對上述數(shù)據(jù)的某種規(guī)定操作; ③ 對局部于該管程的數(shù)據(jù)的初始化。 進程 1 進程 1 進程 2 進程 2 進程 3 進程 3 ?? ?? ?? ?? ?? ?? 進程 n 進程 n 圖 10 管程示意圖 局部于管程內(nèi)的數(shù)據(jù)結(jié)構(gòu)只能被管程內(nèi)的過程所訪問,而局部于管程內(nèi)的過程只能訪問該管程內(nèi)的數(shù)據(jù)結(jié)構(gòu)。因此管程就如同一堵圍墻把關(guān)于某個共享資源的抽象數(shù)據(jù)結(jié) 構(gòu)以及對這些數(shù)據(jù)施行特定操作的若干過程圍了起來。任一進程要訪問某個共享資源,就必須通過相應(yīng)的管程才能進入。為了實現(xiàn)對臨界資源的互斥訪問,管程每次只允許一個進程進入其內(nèi)(即訪問管程內(nèi)的某個過程),這是由編譯系統(tǒng)保證的。 此外,當(dāng)一進程進入管程執(zhí)行管程的某個過程時,如果因某種原因而被阻塞,應(yīng)立即退出該管程,進入等待狀態(tài),否則就會因阻擋其它進程進入該管程,而它本身又無法執(zhí)行造成死鎖。為此,引入了條件 (condition)變量及其操作的概念。每個獨立的條件變量是與進程需要等待的某種原因(或說條件)相聯(lián)系的,當(dāng)定義一 個條件變量時,系統(tǒng)就建立一個相應(yīng)的等待隊列。對于條件變量 x 有兩種操作: 和 ,其中 x 為條件變量。 把調(diào)用者進程掛在與 x相應(yīng)的等待隊列 上, 。 經(jīng)典同步問題 把同步問題歸納為幾個典型的范例,就是經(jīng)典的同步問題。 1. 生產(chǎn)者與消費者問題 荷蘭計算機科學(xué)家 把廣義同步問題抽象成一種“生產(chǎn)者與消費者問題”( produceconsumer relationship)的模型。事實上,計算機 系統(tǒng)中的許多問題都可歸結(jié)為生產(chǎn)者與消費者問題,例如:對于需要輸出打印文件的某用戶進程和相對于打印機的管理進程,對各臨界資源的各種操作 中國最大的管理資源中心 50 該用戶進程是生產(chǎn)者,而后者便是消費者;同理,若該用戶進程需要讀入一個磁盤文件,相對于磁盤管理進程,該用戶進程是消費者,而磁盤管理進程則是生產(chǎn)者。生產(chǎn)者與消費者可以通過一個環(huán)形緩沖池(見圖 11)聯(lián)系起來,環(huán)形緩沖池由幾個大小相等的緩沖塊組成,每個緩沖塊容納一個產(chǎn)品。每個生產(chǎn)者可不斷地每次往緩沖池中送一個生產(chǎn)的產(chǎn)品,而每個消費者則可不斷地每次從緩沖池中取出一個產(chǎn)品。指針 i 和指針 j 分別指出當(dāng)前的第一個空緩沖塊和第一個滿緩沖塊。這里既存在合作同步問題,也存在臨界區(qū)互斥問題。當(dāng)緩沖池全滿時,表示供過于求,生產(chǎn)者必須等待,同時喚醒消費者;當(dāng)緩沖池全空時,表示供不應(yīng)求,消費者應(yīng)等待,同時喚醒生產(chǎn)者。這是相互合作同步。而緩沖池顯然是臨界資源,所有生產(chǎn)者與消費者都要使用它,而且都要改變它的狀態(tài),故關(guān)于緩沖池的操作必須是互斥的。 滿 j i 空 圖 11 生產(chǎn)者與消費者問題 下面給出基于環(huán)形緩沖區(qū)的生產(chǎn)者與消費者關(guān)系的形式描述,設(shè): ① 公用信號量 mutex:初值為 1,用于實現(xiàn)臨界區(qū)互斥; ② 生產(chǎn)者私用信號量 empty:初值為 n,指示空緩沖塊數(shù)目; ③ 消費者私用信號量, full初值為 0,指示滿緩沖塊數(shù)目; ④ 整型量 i和 j:初值均為 0, i指示空緩沖塊序號頭指針, j指示滿 緩沖塊序號頭指針。 semaphore mutex=1, empty=n, full=0; int i=j=0; item buffer [n]。 void producer( ) /*生產(chǎn)者進程 */ { while⑴ { produce next product; P(empty); P(mutex); buffer[i]=product; i=(i+1) % n; 中國最大的管理資源中心 51 V(mutex)。 V(full)。 } } void consumer( ) /*消費者進程 */ { while⑴ { P(full); P(mutex); product =buffer[j]; j=(j+1) % n; V(mutex)。 V(empty)。 consume the product; } } void main( ) { parbegin (producer( ), consumer( ))。 } 讀者可自己分析該算法的執(zhí)行過程,其中 producer 和 consumer 為并發(fā)進程。 注意:在此模塊中無論是生產(chǎn)者還是消費者,關(guān)于 P 操作的次序不能顛倒,否則可能造成死鎖。 生產(chǎn)者消費者問題之管程解決: monitor PC。 { int in= 0,out=0,count=0 。 item buffer[n]。 condition notfull, notempty 。 void put(item) { if (count=n) notfull. wait。 buffer [in]=nextp。 in =(in+l) % n。 count++。 if 。 中國最大的管理資源中心 52 } void get(item) . { if (count= 0) 。 nextc =buffer[out]。 out =(out+l) % n。 count 。 if 。 } } 有了管程,則生產(chǎn)者和消費者進程可描述如下: void producer( ) { while⑴ { produce an item in nextp。 PC. put(item)。 } } void consumer( ) { while⑴ { PC. get(item)。 consume the item in nexte。 } } void main( ) { parbegin (producer( ), consumer( ))。 } 由此可見,利用管程機制解決進程同步問題,大大簡化了程序員的工作,減少了出錯機會,同時也可以避免死鎖的發(fā)生。 讀者與寫者問題 一個數(shù)據(jù)對象(比如一個文件或記錄)若被多個并發(fā)進程所共享,且其中一些進程只要 中國最大的管理資源中心 53 求讀該數(shù)據(jù)對象的內(nèi)容,而另一些進程則要求修改它,對此,可把那些只想讀的進程稱之為“讀者”,而把要求修改的進程稱為“寫者”。顯然,如果有兩個甚至更多個讀者同時訪問這個可共享數(shù)據(jù)對象,那么任何一個讀者的訪問結(jié)果都 是正確的。但是,如果是一個寫者和任何一個其它的讀者或?qū)懻咄瑫r訪問這個數(shù)據(jù)對象,就有可能導(dǎo)致不確定的訪問結(jié)果。 所有類似的這類問題都可歸結(jié)為“讀者 — 寫者問題”。解決這類同步問題的基本思想是:任一寫者必須與其它寫者或讀者互斥訪問可共享的數(shù)據(jù)對象,而若干讀者可同時訪問共享的數(shù)據(jù)對象。下面給出讀者進程與寫者進程的解法: 讀者優(yōu)先 : int readcount=0; semaphore mutex = 1, wsem=1。 void reader( ) { while ⑴ { P(mutex)。 readcount++。 if (readcount== 1) P(wsem)。 V(mutex)。 READ。 P(mutex)。 readcount。 if (readcount == 0) V(wsem)。 V (mutex)。 } } void writer( ) { while ⑴ { P(wsem)。 WRITE。 V(wsem)。 } } void main( ) { parbegin(reader( ), writer( ))。 中國最大的管理資源中心 54 } 其中: 變量 readcount 記錄當(dāng)前正在訪問該對象的讀者個數(shù); 互斥信號量 mutex 用來互斥對 readcount 的修改; 互斥信號量 wsem 用于寫者互斥, 它也可由當(dāng)前第一個要求訪問該對象的讀者和最后一個退出訪問的讀者使用,但它不被中間的那些讀者使用。 注意:如果一個寫者已進入臨界區(qū)且有 n 個讀者要求訪問該數(shù)據(jù)對象,則只有一個讀者進入 wsem 等待隊列,其余 n1 個讀者則進入 mutex等待隊列。 設(shè)想當(dāng)一個讀者在使用數(shù)據(jù)庫時,另一個讀者也來訪問數(shù)據(jù)庫,由于同時允許多個讀者同時進行讀操作, 所 以第二個讀者也被允許進入,同理第三個及隨后更多的讀者都被允許進入。 現(xiàn)在假設(shè)一個寫者到來,由于寫操作是排他的,所以它不能訪問數(shù)據(jù)庫,而是被掛起。隨后其它的讀者到來,這樣只要 有一個讀者活躍,隨后而來的讀者都被允許訪問數(shù)據(jù)庫。這樣的結(jié)果是只要有讀者陸續(xù)到來,它們一來就被允許進入,而寫者將一直被掛起直到?jīng)]有一個讀者為止。假如每 2秒鐘來一個讀者,而 該 操作時間為 5 秒鐘,則寫者將永遠不能訪問數(shù)據(jù)庫,或者說寫者發(fā)生了饑餓現(xiàn)象。 這種算法適合于查詢較多修改較少的情況 。 對于修改頻繁的問題,應(yīng)采用寫者優(yōu)先算法。 寫者優(yōu)先 : int readcount, writecount。 semaphore mrc=l, mwc= 1, wr=1, wsem=1, rsem=l。 void reader( ) { while ⑴ { P(wr)。 P(rsem)。 P(mrc)。 readcount++。 if (readcount ==1) P(wsem)。 V(mrc)。 V(rsem); V(wr)。 READ。 P(mrc)。 readcount。 if (readcount ==0) V(wsem)。 V(mrc)。 中國最大的管理資源中心 55 } } void writer( ) { while ⑴ { P(mwc)。 writecount++。 if (writecount ==1) P(rsem)。, V(mwc)。 P(wsem)。 WR
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1