日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

操作系统生产者消费者问题实验报告

發(fā)布時(shí)間:2024/3/12 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统生产者消费者问题实验报告 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

操作系統(tǒng)實(shí)驗(yàn)報(bào)告

進(jìn)程通信

1. 問題描述及需求分析:

問題描述

本次實(shí)驗(yàn)實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者之間的通信,即生產(chǎn)者-消費(fèi)者問題。生產(chǎn)者一次生成一個(gè)元素放入緩沖池中,消費(fèi)者一次可以從緩沖池中取出一個(gè)元素。生產(chǎn)者放入的元素個(gè)數(shù)要與消費(fèi)者取出的元素個(gè)數(shù)一致。實(shí)驗(yàn)的輸出要能跟蹤生產(chǎn)者的每次“生產(chǎn)”行為,以及消費(fèi)者的每次“消費(fèi)”行為。本次實(shí)驗(yàn)旨在加深對(duì)進(jìn)程概念的理解,學(xué)習(xí)和探尋進(jìn)程間通信的方法并理解進(jìn)程間通信的過程。

輸入形式

定義還有5個(gè)元素的共享池,客戶端根據(jù)提示信息依次向共享池輸入5個(gè)元素(字符串),用來表示生產(chǎn)者總共生產(chǎn)了5個(gè)數(shù)據(jù)元素。

輸出形式

服務(wù)器端收到客戶端發(fā)送的狀態(tài)信息,用來表示生產(chǎn)者向共享池生產(chǎn)的第幾個(gè)元素,服務(wù)器端從共享池中拿到的元素。

測(cè)試數(shù)據(jù):

客戶端

服務(wù)器端

生產(chǎn)者生產(chǎn)第1個(gè)元素

輸入生產(chǎn)者生產(chǎn)的第一個(gè)元素:cfqp,提示:生產(chǎn)者已經(jīng)將第1個(gè)元素放入共享池,輸入生產(chǎn)者生產(chǎn)的第一個(gè)元素:

收到反饋:生產(chǎn)者已經(jīng)將第一個(gè)元素放入共享池,消費(fèi)者拿到數(shù)據(jù):cfqp

生產(chǎn)者生產(chǎn)第2個(gè)元素

鍵入:lty,提示:生產(chǎn)者已經(jīng)將第2個(gè)元素放入共享池,輸入生產(chǎn)者生產(chǎn)的第3個(gè)元素:

收到反饋:生產(chǎn)者已經(jīng)將第2個(gè)元素放入共享池,消費(fèi)者拿到數(shù)據(jù):lty

生產(chǎn)者生產(chǎn)第3個(gè)元素

鍵入:juicy,提示:生產(chǎn)者已經(jīng)將第3個(gè)元素放入共享池,輸入生產(chǎn)者生產(chǎn)的第4個(gè)元素:

收到反饋:生產(chǎn)者已經(jīng)將第3個(gè)元素放入共享池,消費(fèi)者拿到數(shù)據(jù):juicy

生產(chǎn)者生產(chǎn)第4個(gè)元素

鍵入:我愛java,提示:生產(chǎn)者已經(jīng)將第4個(gè)元素放入共享池,輸入生產(chǎn)者生產(chǎn)的第5個(gè)元素:

收到反饋:生產(chǎn)者已經(jīng)將第4個(gè)元素放入共享池,消費(fèi)者拿到數(shù)據(jù):我愛java

生產(chǎn)者生產(chǎn)第5個(gè)元素

鍵入:你好,TCP,我來啦,提示:生產(chǎn)者已經(jīng)將第5個(gè)元素放入共享池,

收到反饋:生產(chǎn)者已經(jīng)將第5個(gè)元素放入共享池,消費(fèi)者拿到數(shù)據(jù):你好,TCP,我來啦!

2. 實(shí)驗(yàn)設(shè)計(jì)

思路:

該程序采用Java語(yǔ)言編寫,包括客戶端Client.java,服務(wù)器端Server.java和共享文件share.txt,進(jìn)程之間采用TCP通信。實(shí)驗(yàn)思路為:客戶端控制臺(tái)依次輸入5個(gè)元素到共享池中,每次向共享池存入一個(gè)字符串時(shí),客戶端和服務(wù)器端通信,向服務(wù)器報(bào)告本次放入的是第幾個(gè)元素,服務(wù)器端接收到客戶端的反饋,從共享池里拿到該數(shù)據(jù)元素,并清空緩沖池。

函數(shù)功能:

創(chuàng)建一個(gè)流套接字,并將其連接到命名主機(jī)上的指定端口號(hào)。

Socket s = new Socket("cfqp", 10086); ?

將共享文件封裝為字符緩沖輸出流對(duì)象,用于向該字符流寫數(shù)據(jù)

BufferedWriter bw = new BufferedWriter(new FileWriter("io\\src\\demo\\share.txt"));

創(chuàng)建一個(gè)使用默認(rèn)大小的輸入緩沖區(qū)的緩沖字符輸入流,參數(shù)傳入轉(zhuǎn)換流InputStreamReader,從鍵盤讀入數(shù)據(jù)

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

返回此套接字的輸出流。

OutputStream os = s.getOutputStream();

讀取一行文本。

line = br.readLine();

向字符緩沖輸出流寫數(shù)據(jù)

bw.write(line);

換行

bw.newLine();

刷新緩沖區(qū)

bw.flush();

關(guān)閉此套接字。

s.close();

創(chuàng)建綁定到指定端口的服務(wù)器套接字

ServerSocket ss = new ServerSocket(10086);

3. 實(shí)驗(yàn)結(jié)果與分析

? ?

結(jié)果分析

客戶端從控制臺(tái)每次讀入一個(gè)元素,使用字符緩沖輸出流寫入到緩沖池share.txt中,客戶端向服務(wù)器報(bào)告狀態(tài)信息:我已經(jīng)向共享池寫入了第i個(gè)元素,你可以使用該數(shù)據(jù)了。服務(wù)器端使用綁定到10086端口的ServerSocket服務(wù)器套接字對(duì)象,調(diào)用其accept方法監(jiān)聽客戶端,返回一個(gè)Socket對(duì)象,調(diào)用該對(duì)象的getInputStream方法得到字節(jié)輸入流對(duì)象,使用InputStreamReader將其轉(zhuǎn)化為字符流,從此字符緩沖輸入流中得到客戶端的反饋:生產(chǎn)者已經(jīng)向共享池放入了第i個(gè)元素,我可以使用它了,于是消費(fèi)者從共享池文件讀出數(shù)據(jù)元素,輸出在控制臺(tái)上,并銷毀該元素,完成從共享池拿走數(shù)據(jù)元素這一操作。

實(shí)驗(yàn)心得

本實(shí)驗(yàn)涉及Java的文件讀寫操作,比如說使用字符流讀寫數(shù)據(jù)、文件轉(zhuǎn)換操作,比如說將字節(jié)流轉(zhuǎn)化為字符流,方便用戶讀寫數(shù)據(jù)、使用TCP通信,本次實(shí)驗(yàn)的代碼是自己獨(dú)立完成的,較好地實(shí)現(xiàn)了生產(chǎn)者與消費(fèi)者問題,但是還存在不足,生產(chǎn)者向緩沖池放入一個(gè)數(shù)據(jù)元素,生產(chǎn)者從緩沖池拿走一個(gè)數(shù)據(jù)元素,每一次操作之后,緩沖池里剩余的元素個(gè)數(shù)為0,沒有實(shí)現(xiàn)當(dāng)緩沖池滿時(shí),生產(chǎn)者不能生產(chǎn)元素;當(dāng)緩沖池為空時(shí),消費(fèi)者不能拿走數(shù)據(jù)。但是如果使用線程,我可以實(shí)現(xiàn)該功能。

總結(jié)

以上是生活随笔為你收集整理的操作系统生产者消费者问题实验报告的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。