日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

操作系统课程设计报告

發(fā)布時(shí)間:2023/12/10 windows 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统课程设计报告 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

完整課程設(shè)計(jì)CSDN下載:https://download.csdn.net/download/eseszb/10503175

代碼下載:https://download.csdn.net/download/eseszb/10506006



操作系統(tǒng)課程設(shè)計(jì)報(bào)告

?

?

?

?

?

題目:???進(jìn)程同步實(shí)現(xiàn)—生產(chǎn)者和消費(fèi)者的問題????????????????????????????

學(xué)號(hào):???????????????????????????

姓名:????????????????????????

任課教師:???????????????????????????

?

?

?

?

?

?

?

?

2017年12月

本課程設(shè)計(jì)利用模擬用信號(hào)量機(jī)制實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者問題:通過用戶控制取進(jìn)程和放進(jìn)程,反應(yīng)生產(chǎn)者和消費(fèi)者問題中所涉及的進(jìn)程的同步與互斥。在理解和分析了生產(chǎn)者消費(fèi)者問題的核心問題以及狀態(tài)的本質(zhì)涵義的前提下,對(duì)進(jìn)程同步的實(shí)現(xiàn)在總體上進(jìn)行了設(shè)計(jì),包括在對(duì)算法分模塊設(shè)計(jì),并對(duì)各個(gè)模塊的算法思想通過流程圖表示,分塊編寫代碼,并進(jìn)行測(cè)試,最后進(jìn)行程序的測(cè)試,在設(shè)計(jì)思路上嚴(yán)格按照軟件工程的思想執(zhí)行,確保了設(shè)計(jì)和實(shí)現(xiàn)的可行,可信。代碼實(shí)現(xiàn)采用C++語言。

?

?

?

?

?

?

?

?

關(guān)鍵詞:生產(chǎn)者、消費(fèi)者、進(jìn)程同步、臨界資源、緩沖區(qū)


???目錄

?

第一章?緒論 1

1.1 課程設(shè)計(jì)的目的 1

1.2 課程設(shè)計(jì)的內(nèi)容 1

1.3 相關(guān)知識(shí) 1

1.4章節(jié)安排 2

1.5 本章小結(jié) 3

第二章?生產(chǎn)者消費(fèi)者問題的需求分析 4

2.1 環(huán)境需求 4

2.2 功能需求 4

2.3 性能需求 4

2.4 本章小結(jié) 5

第三章?實(shí)現(xiàn)進(jìn)程同步的設(shè)計(jì) 6

3.1 總體設(shè)計(jì) 6

3.2 功能模塊設(shè)計(jì) 6

3.3 本章小結(jié) 7

第四章?算法的實(shí)現(xiàn) 9

4.1 開發(fā)環(huán)境介紹 9

4.2 主要功能模塊的實(shí)現(xiàn) 9

4.3 本章小結(jié) 16

第五章?測(cè)試及成果展示 17

5.1 測(cè)試環(huán)境 17

5.2 測(cè)試用例和結(jié)果 17

5.3 成果展示 25

5.4 本章小結(jié) 29

第六章?總結(jié)與展望 30

附錄 31

參考文獻(xiàn) 38

第一章 緒論

1.1 課程設(shè)計(jì)的目的

“操作系統(tǒng)”是計(jì)算機(jī)專業(yè)的核心專業(yè)課,“操作系統(tǒng)課程設(shè)計(jì)”是理解和鞏固操作系統(tǒng)基本理論、原理和方法的重要實(shí)踐環(huán)節(jié)。

通過實(shí)驗(yàn)?zāi)M生產(chǎn)者和消費(fèi)者之間的關(guān)系,了解并掌握他們之間的關(guān)系及其原理。由此增加對(duì)進(jìn)程同步的問題的了解。具體如下:
????1)掌握基本的同步互斥算法,理解生產(chǎn)者和消費(fèi)者模型;

?2)了解windows中多線程(多進(jìn)程)的并發(fā)執(zhí)行機(jī)制,線程(進(jìn)程)間的同步和互斥;
????3)學(xué)習(xí)使用windows中基本的同步對(duì)象,掌握相應(yīng)的API。

本課程通過設(shè)計(jì)實(shí)現(xiàn)一個(gè)綜合作業(yè),加深對(duì)操作系統(tǒng)原理的理解,提高綜合運(yùn)用所學(xué)知識(shí)的能力,培養(yǎng)學(xué)生獨(dú)立工作和解決問題的能力,取得設(shè)計(jì)與調(diào)試的實(shí)踐經(jīng)驗(yàn),為今后進(jìn)一步從事計(jì)算機(jī)系統(tǒng)軟件和應(yīng)用軟件的分析、研制和開發(fā)打下良好的基礎(chǔ)。

?

1.2 課程設(shè)計(jì)的內(nèi)容

本次課程設(shè)計(jì)主要通過C++模擬信號(hào)量制中各個(gè)進(jìn)程,及各進(jìn)程之間的互斥、同步關(guān)系,來實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者問題。

生產(chǎn)者消費(fèi)者問題(英語:Producer-consumer problem),也稱有限緩沖問題(英語:Bounded-buffer problem),是一個(gè)多線程同步問題的經(jīng)典案例。該問題描述了兩個(gè)共享固定大小緩沖區(qū)線程——即所謂的“生產(chǎn)者”和“消費(fèi)者”——在實(shí)際運(yùn)行時(shí)會(huì)發(fā)生的問題。生產(chǎn)者的主要作用是生成一定量的數(shù)據(jù)放到緩沖區(qū)中,然后重復(fù)此過程。與此同時(shí),消費(fèi)者也在緩沖區(qū)消耗這些數(shù)據(jù)。該問題的關(guān)鍵就是要保證生產(chǎn)者不會(huì)在緩沖區(qū)滿時(shí)加入數(shù)據(jù),消費(fèi)者也不會(huì)在緩沖區(qū)中空時(shí)消耗數(shù)據(jù)。

要解決該問題,就必須讓生產(chǎn)者在緩沖區(qū)滿時(shí)休眠(要么干脆就放棄數(shù)據(jù)),等到下次消費(fèi)者消耗緩沖區(qū)中的數(shù)據(jù)的時(shí)候,生產(chǎn)者才能被喚醒,開始往緩沖區(qū)添加數(shù)據(jù)。同樣,也可以讓消費(fèi)者在緩沖區(qū)空時(shí)進(jìn)入休眠,等到生產(chǎn)者往緩沖區(qū)添加數(shù)據(jù)之后,再喚醒消費(fèi)者。如果解決方法不夠完善,則容易出現(xiàn)死鎖的情況。出現(xiàn)死鎖時(shí),兩個(gè)線程都會(huì)陷入休眠,等待對(duì)方喚醒自己。該問題也能被推廣到多個(gè)生產(chǎn)者和消費(fèi)者的情形。

1.3 相關(guān)知識(shí)

(1)生產(chǎn)者、消費(fèi)者:兩個(gè)共享固定大小緩沖區(qū)線程

2)進(jìn)程間的同步異步環(huán)境下的一組并發(fā)進(jìn)程因直接制約而互相發(fā)送消息、進(jìn)行互相合作、互相等待,使得各進(jìn)程按一定的速度執(zhí)行的過程

3)緩沖區(qū):暫時(shí)置放輸入或輸出資料的內(nèi)

4)臨界資源:一次僅允許一個(gè)進(jìn)程使用的資源

?

1.4章節(jié)安排

本文的組織結(jié)構(gòu)為:第一章為緒論,第二章需求分析內(nèi)容,第三章是進(jìn)程同步問題的實(shí)現(xiàn),第四章是算法的具體實(shí)現(xiàn),第五章是軟件實(shí)現(xiàn)后的測(cè)試,包過測(cè)試用例和測(cè)試結(jié)果,第六章節(jié)為本次論文的總結(jié),最后是附錄為軟件源代碼和參考文獻(xiàn)。

第一章緒論,主要是介紹本次課程設(shè)計(jì)的目的、內(nèi)容等。

第二章需求分析,主要介紹算法應(yīng)該實(shí)現(xiàn)的功能需求,以及算法應(yīng)該改滿足的性能要求。

第三章是算法的設(shè)計(jì),本次實(shí)現(xiàn)進(jìn)程同步

第四章是算法的實(shí)現(xiàn),根據(jù)第三章的設(shè)計(jì),畫出每個(gè)模塊的流程圖,很據(jù)設(shè)計(jì)和流程圖編程實(shí)現(xiàn)每一個(gè)模塊的功能。

第五章是測(cè)試,主要是進(jìn)行軟件的測(cè)試,選擇測(cè)試用例,看軟件是否滿足所有的需求分析。

第六章是總結(jié),總結(jié)本次設(shè)計(jì)的結(jié)果,意義以及對(duì)未來的展望。

1.5 本章小結(jié)

本章的主要是對(duì)于此次進(jìn)程同步問題的背景、意義以及設(shè)計(jì)安排的進(jìn)行概述,使讀者能夠大體了解本課程設(shè)計(jì)主要實(shí)現(xiàn)目標(biāo)與構(gòu)成要素,對(duì)于接下來的章節(jié)的論述有著系統(tǒng)導(dǎo)向作用。

?

?

?

?

?

?

第二章 生產(chǎn)者消費(fèi)者問題的需求分析

?

2.1環(huán)境需求:

???????Windows7系統(tǒng)、Microsoft visual VC++ 6.0

?

2.2功能需求:

n?對(duì)于生產(chǎn)者進(jìn)程:產(chǎn)生一個(gè)數(shù)據(jù),當(dāng)要送入緩沖區(qū)時(shí),要檢查緩沖區(qū)是否已滿,若未滿,則可將數(shù)據(jù)送入緩沖區(qū),并通知消費(fèi)者進(jìn)程;否則,等待;

n?對(duì)于消費(fèi)者進(jìn)程:當(dāng)它去取數(shù)據(jù)時(shí),要看緩沖區(qū)中是否有數(shù)據(jù)可取,若有則取走一個(gè)數(shù)據(jù),并通知生產(chǎn)者進(jìn)程,否則,等待。

n?緩沖區(qū)是個(gè)臨界資源,因此,諸進(jìn)程對(duì)緩沖區(qū)的操作程序是一個(gè)共享臨界區(qū),所以,還有個(gè)互斥的問題。

?

2.3性能需求 :

1.生產(chǎn)者、消費(fèi)者將會(huì)進(jìn)行生產(chǎn)和消費(fèi)動(dòng)作,并顯示當(dāng)前的狀態(tài)。

2.程序能夠一直進(jìn)行生產(chǎn)消費(fèi)活動(dòng),直到人為結(jié)束(在本程序里為按下回車鍵)。

3.執(zhí)行過程中不會(huì)出現(xiàn)爭(zhēng)奪資源而中止。

?

2.4本章小結(jié):

本章的主要是對(duì)于此次設(shè)計(jì)并且實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問題的需求進(jìn)行分析,包括環(huán)境需求、功能需求和性能需求進(jìn)行詳細(xì)的分析,確定了此次設(shè)計(jì)并且實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問題的運(yùn)行測(cè)試環(huán)境,以及設(shè)計(jì)并且生產(chǎn)者消費(fèi)者問題的功能要求和性能要求,為后面的實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問題確定了明確的目標(biāo)。

?

?

?

?

?

?

?

?

?

?

?

?

第三章 生產(chǎn)者消費(fèi)者問題的設(shè)計(jì)

?

3.1 總體設(shè)計(jì)

利用模擬用信號(hào)量機(jī)制實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者問題:通過用戶控制取進(jìn)程和放進(jìn)程,反應(yīng)生產(chǎn)者和消費(fèi)者問題中所涉及的進(jìn)程的同步與互斥。

?

3.2 功能模塊設(shè)計(jì)

3.2.1數(shù)據(jù)流程圖:

1、生產(chǎn)者

?

?

?

?

2、消費(fèi)者

?

?

3.2.2模塊說明:

const???unsigned???short???SIZE_OF_BUFFER ??= ??10; ??//緩沖區(qū)長(zhǎng)度

??unsigned???short???ProductID ??= ??0; ????????//產(chǎn)品號(hào) ?

??unsigned???short???ConsumeID ??= ??0; ????????//將被消耗的產(chǎn)品號(hào)

??unsigned???short???in ??= ??0; ????????????//產(chǎn)品進(jìn)緩沖區(qū)時(shí)的緩沖區(qū)下標(biāo) ?

??unsigned???short???out ??= ??0; ????????????//產(chǎn)品出緩沖區(qū)時(shí)的緩沖區(qū)下標(biāo) ??

????

??int???g_buffer[SIZE_OF_BUFFER]; ????????//緩沖區(qū)是個(gè)循環(huán)隊(duì)列 ??

??bool???g_continue ??= ??true; ????????????//控制程序結(jié)束 ??

??HANDLE ??g_hMutex; ??????????????//用于線程間的互斥 ??

??HANDLE ??g_hFullSemaphore; ??????????//當(dāng)緩沖區(qū)滿時(shí)迫使生產(chǎn)者等待

??HANDLE ??g_hEmptySemaphore; ??????????//當(dāng)緩沖區(qū)空時(shí)迫使消費(fèi)者等待 ?

????

??DWORD ??WINAPI ??Producer(LPVOID); ????????//生產(chǎn)者線程

??DWORD ??WINAPI ??Consumer(LPVOID); ????????//消費(fèi)者線程 ?

?

3.3本章小結(jié)

本章主要講述了生產(chǎn)者消費(fèi)者問題的設(shè)計(jì),包括生產(chǎn)者、消費(fèi)者的數(shù)據(jù)流程圖、以及一些模塊說明。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

第四章 算法的實(shí)現(xiàn)

?

4.1 開發(fā)環(huán)境介紹

1.window XP或window 7系統(tǒng)。

2. Microsoft visual VC++ 6.0

?

4.2 算法原理介紹

本課程設(shè)計(jì)利用模擬用信號(hào)量機(jī)制實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者問題,即在生產(chǎn)一個(gè)產(chǎn)品之前添加P1操作,在其后添加V1操作;在消費(fèi)一個(gè)產(chǎn)品之前添加P2操作,在其后添加V2操作。

?

而本算法則用

WaitForSingleObject(g_hFullSemaphore,INFINITE);實(shí)現(xiàn)資源信號(hào)量的P操作,WaitForSingleObject(g_hMutex,INFINITE);實(shí)現(xiàn)互斥信號(hào)量的P操作,

ReleaseMutex(g_hMutex)實(shí)現(xiàn)互斥信號(hào)量的V操作,ReleaseSemaphore(g_hEmptySemaphore,1,NULL);實(shí)現(xiàn)資源信號(hào)量的V操作。

Take();??????//從緩沖區(qū)中取出一個(gè)產(chǎn)品

Consume();???//消費(fèi)一個(gè)產(chǎn)品

Produce();????//生產(chǎn)一個(gè)產(chǎn)品

Append();????//把新生產(chǎn)的產(chǎn)品放入緩沖區(qū)

?

4.3 主要功能模塊的實(shí)現(xiàn)

4.2.1生產(chǎn)一個(gè)產(chǎn)品,輸出其ID號(hào)

void Produce()

{

std::cout<<std::endl;

std::cerr<<"生產(chǎn)一個(gè)產(chǎn)品: "<<++ProductID;

std::cout<<std::endl;

}

?

4.2.2把新生產(chǎn)的產(chǎn)品放入緩沖區(qū)

void Append()

{

std::cerr<<"把生產(chǎn)的產(chǎn)品送入緩沖區(qū)";

g_buffer[in]=ProductID;

in=(in+1)%SIZE_OF_BUFFER;

std::cerr<<std::endl;

std::cout<<"緩沖區(qū) ?產(chǎn)品 ?生產(chǎn)者/消費(fèi)者"<<std::endl;

//新產(chǎn)品放入緩沖區(qū)后,輸出緩沖區(qū)當(dāng)前的狀態(tài)

for(int i=0;i<SIZE_OF_BUFFER;++i)

{

//輸出緩沖區(qū)下標(biāo)

if (i<10)

std::cout<<i<<" ??????"<<g_buffer[i];

else

std::cout<<i<<" ?????"<<g_buffer[i];

if(i==in)

{

if(g_buffer[i]<10)

std::cout<<" ???";

else

std::cout<<" ??";

std::cout<<" <-- 生產(chǎn)者";//輸出生產(chǎn)者的指針位置

}

if(i==out)

{

if(g_buffer[i]<10)

std::cout<<" ???";

else

std::cout<<" ??";

std::cout<<" <-- 消費(fèi)者";//輸出消費(fèi)者的指針位置

}

std::cout<<std::endl;

}

}

?

4.2.3消費(fèi)一個(gè)產(chǎn)品

void Consume()//消費(fèi)一個(gè)產(chǎn)品

{

std::cout<<std::endl;

std::cerr<<"消費(fèi)一個(gè)產(chǎn)品: "<<ConsumeID;

std::cout<<std::endl;

}

?

4.2.4從緩沖區(qū)中取出一個(gè)產(chǎn)品

void Take()

{

std::cout<<std::endl;

std::cerr<<"從緩沖區(qū)取出一個(gè)產(chǎn)品";

ConsumeID=g_buffer[out];

out=(out+1)%SIZE_OF_BUFFER;

std::cerr<<std::endl;

std::cout<<std::endl;

std::cout<<"緩沖區(qū) ?產(chǎn)品 ?生產(chǎn)者/消費(fèi)者"<<std::endl;

//取出一個(gè)產(chǎn)品后,輸出緩沖區(qū)當(dāng)前的狀態(tài)

for(int i=0;i<SIZE_OF_BUFFER;++i)

{

//輸出緩沖區(qū)下標(biāo)

if(i<10)

std::cout<<i<<" ??????"<<g_buffer[i];

else

std::cout<<i<<" ?????"<<g_buffer[i];

if(i==in)

{

if(g_buffer[i]<10)

std::cout<<" ???";

else

std::cout<<" ??";

std::cout<<" <-- 生產(chǎn)者";//輸出生產(chǎn)者的指針位置

}

if(i==out)

{

if(g_buffer[i]<10)

std::cout<<" ???";

else

std::cout<<" ??";

std::cout<<" <-- 消費(fèi)者";//輸出消費(fèi)者的指針位置

}

std::cout<<std::endl;

}

}

總結(jié)

以上是生活随笔為你收集整理的操作系统课程设计报告的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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