操作系統(tǒng)之進(jìn)程生產(chǎn)者消費(fèi)者實(shí)驗(yàn)報(bào)告_第1頁
操作系統(tǒng)之進(jìn)程生產(chǎn)者消費(fèi)者實(shí)驗(yàn)報(bào)告_第2頁
操作系統(tǒng)之進(jìn)程生產(chǎn)者消費(fèi)者實(shí)驗(yàn)報(bào)告_第3頁
操作系統(tǒng)之進(jìn)程生產(chǎn)者消費(fèi)者實(shí)驗(yàn)報(bào)告_第4頁
操作系統(tǒng)之進(jìn)程生產(chǎn)者消費(fèi)者實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、操作系統(tǒng)實(shí)驗(yàn)報(bào)告 生產(chǎn)者和消費(fèi)者問題姓名: 學(xué)號(hào): 班級(jí):一、實(shí)驗(yàn)內(nèi)容 1、模擬操作系統(tǒng)中進(jìn)程同步和互斥; 2、實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者問題的算法實(shí)現(xiàn);二、實(shí)驗(yàn)?zāi)康?、熟悉臨界資源、信號(hào)量及PV操作的定義與物理意義;2、了解進(jìn)程通信的方法;3、掌握進(jìn)程互斥與進(jìn)程同步的相關(guān)知識(shí);4、掌握用信號(hào)量機(jī)制解決進(jìn)程之間的同步與互斥問題;5、實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問題,深刻理解進(jìn)程同步問題;三、實(shí)驗(yàn)題目 在Windows操作系統(tǒng)下用C語言實(shí)現(xiàn)經(jīng)典同步問題:生產(chǎn)者消費(fèi)者,具體要求如下: (1)一個(gè)大小為10的緩沖區(qū),初始狀態(tài)為空。 (2)2個(gè)生產(chǎn)者,隨機(jī)等待一段時(shí)間,往緩沖區(qū)中添加數(shù)據(jù),若緩沖區(qū)已滿,等待消費(fèi)者取走數(shù)據(jù)

2、之后再添加,重復(fù)10次。 (3)2個(gè)消費(fèi)者,隨機(jī)等待一段時(shí)間,從緩沖區(qū)中讀取數(shù)據(jù),若緩沖區(qū)為空,等待生產(chǎn)者添加數(shù)據(jù)之后再讀取,重復(fù)10次。四、思想 本實(shí)驗(yàn)的主要目的是模擬操作系統(tǒng)中進(jìn)程同步和互斥。在系統(tǒng)進(jìn)程并發(fā)執(zhí)行異步推進(jìn)的過程中,由于資源共享和進(jìn)程間合作而造成進(jìn)程間相互制約。進(jìn)程間的相互制約有兩種不同的方式。 (1)間接制約。這是由于多個(gè)進(jìn)程共享同一資源(如CPU、共享輸入/輸出設(shè)備)而引起的,即共享資源的多個(gè)進(jìn)程因系統(tǒng)協(xié)調(diào)使用資源而相互制約。 (2)直接制約。只是由于進(jìn)程合作中各個(gè)進(jìn)程為完成同一任務(wù)而造成的,即并發(fā)進(jìn)程各自的執(zhí)行結(jié)果互為對(duì)方的執(zhí)行條件,從而限制各個(gè)進(jìn)程的執(zhí)行速度。 生產(chǎn)者和

3、消費(fèi)者是經(jīng)典的進(jìn)程同步問題,在這個(gè)問題中,生產(chǎn)者不斷的向緩沖區(qū)中寫入數(shù)據(jù),而消費(fèi)者則從緩沖區(qū)中讀取數(shù)據(jù)。生產(chǎn)者進(jìn)程和消費(fèi)者對(duì)緩沖區(qū)的操作是互斥,即當(dāng)前只能有一個(gè)進(jìn)程對(duì)這個(gè)緩沖區(qū)進(jìn)行操作,生產(chǎn)者進(jìn)入操作緩沖區(qū)之前,先要看緩沖區(qū)是否已滿,如果緩沖區(qū)已滿,則它必須等待消費(fèi)者進(jìn)程將數(shù)據(jù)取出才能寫入數(shù)據(jù),同樣的,消費(fèi)者進(jìn)程從緩沖區(qū)讀取數(shù)據(jù)之前,也要判斷緩沖區(qū)是否為空,如果為空,則必須等待生產(chǎn)者進(jìn)程寫入數(shù)據(jù)才能讀取數(shù)據(jù)。 在本實(shí)驗(yàn)中,進(jìn)程之間要進(jìn)行通信來操作同一緩沖區(qū)。一般來說,進(jìn)程間的通信根據(jù)通信內(nèi)容可以劃分為兩種:即控制信息的傳送與大批量數(shù)據(jù)傳送。有時(shí),也把進(jìn)程間控制在本實(shí)驗(yàn)中,進(jìn)程之間要進(jìn)行通信來操

4、作同一緩沖區(qū)。一般來說,進(jìn)程間的通信根據(jù)通信內(nèi)容可以劃分為兩種:即控制信息的傳送與大批量數(shù)據(jù)傳送。有時(shí),也把進(jìn)程間控制信息的交換稱為低級(jí)通信,而把進(jìn)程間大批量數(shù)據(jù)的交換稱為高級(jí)通信。 目前,計(jì)算機(jī)系統(tǒng)中用得比較普遍的高級(jí)通信機(jī)制可分為3大類:共享存儲(chǔ)器系統(tǒng)、消息傳遞系統(tǒng)及管道通信系統(tǒng)。 共享存儲(chǔ)器系統(tǒng) 共享存儲(chǔ)器系統(tǒng)為了傳送大量數(shù)據(jù),在存儲(chǔ)器中劃出一塊共享存儲(chǔ)區(qū),諸進(jìn)程可通過對(duì)共享存儲(chǔ)區(qū)進(jìn)行讀數(shù)據(jù)或?qū)憯?shù)據(jù)以實(shí)現(xiàn)通信。進(jìn)程在通信之前,向系統(tǒng)申請(qǐng)共享存儲(chǔ)區(qū)中的一個(gè)分區(qū),并為它指定一個(gè)分區(qū)關(guān)鍵字。 信息的交換稱為低級(jí)通信,而把進(jìn)程間大批量數(shù)據(jù)的交換稱為高級(jí)通信。 消息傳遞系統(tǒng) 在消息傳遞系統(tǒng)中,進(jìn)程

5、間的數(shù)據(jù)交換以消息為單位,在計(jì)算機(jī)網(wǎng)絡(luò)中被稱為報(bào)文。消息傳遞系統(tǒng)的實(shí)現(xiàn)方式又可以分為以下兩種:(1)直接通信方式 發(fā)送進(jìn)程可將消息直接發(fā)送給接收進(jìn)程,即將消息掛在接收進(jìn)程的消息緩沖隊(duì)列上,而接收進(jìn)程可從自己的消息緩沖隊(duì)列中取得消息。(2)間接通信方式 發(fā)送進(jìn)程將消息發(fā)送到指定的信箱中,而接收進(jìn)程從信箱中取得消息。這種通信方式又稱信箱通信方式,被廣泛地應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)中。相應(yīng)地,該消息傳遞系統(tǒng)被稱為電子郵件系統(tǒng)。 管道通信系統(tǒng) 向管道提供輸入的發(fā)送進(jìn)程,以字符流方式將大量的數(shù)據(jù)送入管道,而接收進(jìn)程從管道中接收數(shù)據(jù)。由于發(fā)送進(jìn)程和接收進(jìn)程是利用管道進(jìn)行通信的,故稱為管道通信。 為了協(xié)調(diào)發(fā)送和接收雙

6、方的通信,管道通信機(jī)制必須提供以下3方面的協(xié)調(diào)功能。(1)互斥 當(dāng)一個(gè)進(jìn)程正在對(duì)pipe文件進(jìn)行讀或?qū)懖僮鲿r(shí),另一個(gè)進(jìn)程必須等待。(2)同步 當(dāng)寫進(jìn)程把一定數(shù)量的數(shù)據(jù)寫入pipe文件后,便阻塞等待,直到讀進(jìn)程取走數(shù)據(jù)后,再把寫進(jìn)程喚醒。(3)確認(rèn)對(duì)方是否存在 只有確定對(duì)方已存在時(shí),才能進(jìn)行管道通信,否則會(huì)造成因?qū)Ψ讲淮嬖诙鵁o限制地等待。在這個(gè)問題當(dāng)中,我們采用信號(hào)量機(jī)制進(jìn)行進(jìn)程之間的通信,設(shè)置兩個(gè)信號(hào)量,空的信號(hào)量和滿的信號(hào)量。在Windows系統(tǒng)中,一個(gè)或多個(gè)信號(hào)量構(gòu)成一個(gè)信號(hào)量集合。使用信號(hào)量機(jī)制可以實(shí)現(xiàn)進(jìn)程之間的同步和互斥,允許并發(fā)進(jìn)程一次對(duì)一組信號(hào)量進(jìn)行相同或不同的操作。每個(gè)P、V操作

7、不限于減1或加1,而是可以加減任何整數(shù)。在進(jìn)程終止時(shí),系統(tǒng)可根據(jù)需要自動(dòng)消除所有被進(jìn)程操作過的信號(hào)量的影響 。1緩沖區(qū)采用循環(huán)隊(duì)列表示,利用頭、尾指針來存放、讀取數(shù)據(jù),以及判斷隊(duì)列是否為空。緩沖區(qū)中數(shù)組大小為10;2利用隨機(jī)函數(shù)rand()得到AZ的一個(gè)隨機(jī)字符,作為生產(chǎn)者每次生產(chǎn)的數(shù)據(jù),存放到緩沖區(qū)中;3. 使用shmget()系統(tǒng)調(diào)用實(shí)現(xiàn)共享主存段的創(chuàng)建, shmget()返回共享內(nèi)存區(qū)的ID。對(duì)于已經(jīng)申請(qǐng)到的共享段,進(jìn)程需把它附加到自己的虛擬空間中才能對(duì)其進(jìn)行讀寫。4.信號(hào)量的建立采用semget()函數(shù),同時(shí)建立信號(hào)量的數(shù)量。在信號(hào)量建立后,調(diào)用semctl()對(duì)信號(hào)量進(jìn)行初始化,例如

8、本實(shí)習(xí)中,可以建立兩個(gè)信號(hào)量SEM_EMPTY、SEM_FULL,初始化時(shí)設(shè)置SEM_EMPTY為10,SEM_FULL為0。使用操 作信號(hào)的函數(shù)semop()做排除式操作,使用這個(gè)函數(shù)防止對(duì)共享內(nèi)存的同時(shí)操作。對(duì)共享內(nèi)存操作完畢后采用shmctl()函數(shù)撤銷共享內(nèi)存段。5.使用循環(huán),創(chuàng)建2個(gè)生產(chǎn)者以及2個(gè)消費(fèi)者,采用函數(shù)fork()創(chuàng)建一個(gè)新的進(jìn)程。6一個(gè)進(jìn)程的一次操作完成后,采用函數(shù)fflush()刷新緩沖區(qū)。7程序最后使用semctl()函數(shù)釋放內(nèi)存。模擬程序的程序流程圖如下所示:1.主程序流程圖:2.生產(chǎn)者進(jìn)程流程圖3.消費(fèi)者進(jìn)程流程圖4.P操作流程圖5.V操作流程圖5、 實(shí)現(xiàn)代碼為:

9、/ exet5.cpp#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#define mSIZE 3#define pSIZE 20static int memerymSIZE = 0;static int processpSIZE = 0;/static int processpSIZE = 2,3,2,1,5,2,4,5,3,2,5,2;/static int processpSIZE = 7,10,1,2,10,3,10,4,2,3,10,3,2,1,2,10,1,7,10,1;v

10、oid build(); void LRU(); int main(intargc, char *argv)printf("Random sequence is as follows:n");build();printf("nInvoking LRU Algorithn: n");LRU();return 0;void build()int i = 0;for(i=0; i<pSIZE; i+) processi = (int)(10.0*rand()/(RAND_MAX);printf("%d ",processi); pri

11、ntf("n");void LRU()int flagmSIZE = 0; int i = 0, j = 0;int m = -1, n = -1;int max = -1,maxflag = 0; int count = 0;for(i = 0; i<pSIZE; i+) /Find the first free Physical Blockfor(j=0; j<mSIZE; j+) if(memeryj = 0) m = j;break; /Find if there are same processesfor(j = 0; j <mSIZE; j+)

12、 if(memeryj = processi) n = j; /Find free PBfor(j = 0; j <mSIZE;j+) if(flagj>maxflag) maxflag = flagj;max = j; if(n = -1) / Find no same process if(m != -1) / find free PB memerym = processi;flagm = 0;for(j = 0;j <= m; j+) flagj+; m = -1; else /NO find free PB memerymax = processi;flagmax =

13、 0;for(j = 0;j <mSIZE; j+) flagj+; max = -1; maxflag = 0;count+; else / Find same process memeryn = processi;flagn = 0;if(m != -1) /find free PB flagm = 0; for(j = 0;j <mSIZE; j+) flagj+;max = -1; maxflag = 0; n = -1; for(j = 0 ;j <mSIZE; j+)printf("%d ",memeryj);printf("n");printf("nThe times of page conversion is: %dn",count);六、實(shí)驗(yàn)總結(jié)及思考1、本次實(shí)驗(yàn)是關(guān)于生產(chǎn)者與消費(fèi)者之間互斥和同步的問題。問題的是指是P、V操作,實(shí)驗(yàn)設(shè)一個(gè)共享緩沖區(qū),生產(chǎn)者和消費(fèi)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論