91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 46KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-05-16
  • 語(yǔ)言: C/C++
  • 標(biāo)簽:

資源簡(jiǎn)介

這個(gè)是很經(jīng)典的問(wèn)題 實(shí)驗(yàn)題目: 生產(chǎn)者與消費(fèi)者(綜合性實(shí)驗(yàn)) 實(shí)驗(yàn)環(huán)境: C語(yǔ)言編譯器 實(shí)驗(yàn)內(nèi)容: ① 由用戶指定要產(chǎn)生的進(jìn)程及其類別,存入進(jìn)入就緒隊(duì)列。    ② 調(diào)度程序從就緒隊(duì)列中提取一個(gè)就緒進(jìn)程運(yùn)行。如果申請(qǐng)的資源被阻塞則進(jìn)入相應(yīng)的等待隊(duì)列,調(diào)度程序調(diào)度就緒隊(duì)列中的下一個(gè)進(jìn)程。進(jìn)程運(yùn)行結(jié)束時(shí),會(huì)檢查對(duì)應(yīng)的等待隊(duì)列,激活隊(duì)列中的進(jìn)程進(jìn)入就緒隊(duì)列。運(yùn)行結(jié)束的進(jìn)程進(jìn)入over鏈表。重復(fù)這一過(guò)程直至就緒隊(duì)列為空。    ③ 程序詢問(wèn)是否要繼續(xù)?如果要轉(zhuǎn)直①開(kāi)始執(zhí)行,否則退出程序。 實(shí)驗(yàn)?zāi)康模?通過(guò)實(shí)驗(yàn)?zāi)M生產(chǎn)者與消費(fèi)者之間的關(guān)系,了解并掌握他們之間的關(guān)系及其原理。由此增加對(duì)進(jìn)程同步的問(wèn)題的了解。 實(shí)驗(yàn)要求: 每個(gè)進(jìn)程有一個(gè)進(jìn)程控制塊(PCB)表示。進(jìn)程控制塊可以包含如下信息:進(jìn)程類型標(biāo)號(hào)、進(jìn)程系統(tǒng)號(hào)、進(jìn)程狀態(tài)、進(jìn)程產(chǎn)品(字符)、進(jìn)程鏈指針等等。 系統(tǒng)開(kāi)辟了一個(gè)緩沖區(qū),大小由buffersize指定。 程序中有三個(gè)鏈隊(duì)列,一個(gè)鏈表。一個(gè)就緒隊(duì)列(ready),兩個(gè)等待隊(duì)列:生產(chǎn)者等待隊(duì)列(producer);消費(fèi)者隊(duì)列(consumer)。一個(gè)鏈表(over),用于收集已經(jīng)運(yùn)行結(jié)束的進(jìn)程 本程序通過(guò)函數(shù)模擬信號(hào)量的操作。 參考書(shū)目: 1)徐甲同等編,計(jì)算機(jī)操作系統(tǒng)教程,西安電子科技大學(xué)出版社 2)Andrew S. Tanenbaum著,陳向群,馬紅兵譯. 現(xiàn)代操作系統(tǒng)(第2版). 機(jī)械工業(yè)出版社 3)Abranham Silberschatz, Peter Baer Galvin, Greg Gagne著. 鄭扣根譯. 操作系統(tǒng)概念(第2版). 高等教育出版社 4)張堯?qū)W編著. 計(jì)算機(jī)操作系統(tǒng)教程(第2版)習(xí)題解答與實(shí)驗(yàn)指導(dǎo). 清華大學(xué)出版社 實(shí)驗(yàn)報(bào)告要求: (1) 每位同學(xué)交一份電子版本的實(shí)驗(yàn)報(bào)告,上傳到202.204.125.21服務(wù)器中。 (2) 文件名格式為班級(jí)、學(xué)號(hào)加上個(gè)人姓名,例如: 電子04-1-040824101**.doc   表示電子04-1班學(xué)號(hào)為040824101號(hào)的**同學(xué)的實(shí)驗(yàn)報(bào)告。 (3) 實(shí)驗(yàn)報(bào)告內(nèi)容的開(kāi)始處要列出實(shí)驗(yàn)的目的,實(shí)驗(yàn)環(huán)境、實(shí)驗(yàn)內(nèi)容等的說(shuō)明,報(bào)告中要附上程序代碼,并對(duì)實(shí)驗(yàn)過(guò)程進(jìn)行說(shuō)明。 基本數(shù)據(jù)結(jié)構(gòu): PCB* readyhead=NULL, * readytail=NULL; // 就緒隊(duì)列 PCB* consumerhead=NULL, * consumertail=NULL; // 消費(fèi)者隊(duì)列 PCB* producerhead=NULL, * producertail=NULL; // 生產(chǎn)者隊(duì)列 over=(PCB*)malloc(sizeof(PCB)); // over鏈表 int productnum=0; //產(chǎn)品數(shù)量 int full=0, empty=buffersize; // semaphore char buffer[buffersize]; // 緩沖區(qū) int bufferpoint=0; // 緩沖區(qū)指針 struct pcb { /* 定義進(jìn)程控制塊PCB */ int flag; // flag=1 denote producer; flag=2 denote consumer; int numlabel; char product; char state; struct pcb * processlink; …… }; processproc( )--- 給PCB分配內(nèi)存。產(chǎn)生相應(yīng)的的進(jìn)程:輸入1為生產(chǎn)者進(jìn)程;輸入2為消費(fèi)者進(jìn)程,并把這些進(jìn)程放入就緒隊(duì)列中。 waitempty( )--- 如果緩沖區(qū)滿,該進(jìn)程進(jìn)入生產(chǎn)者等待隊(duì)列;linkqueue(exe,&producertail); // 把就緒隊(duì)列里的進(jìn)程放入生產(chǎn)者隊(duì)列的尾部 void signalempty() bool waitfull() void signalfull() void producerrun() void comsuerrun() void main() { processproc(); element=hasElement(readyhead); while(element){ exe=getq(readyhead,&readytail); printf("進(jìn)程%d申請(qǐng)運(yùn)行,它是一個(gè)",exe->numlabel); exe->flag==1? printf("生產(chǎn)者\(yùn)n"):printf("消費(fèi)者\(yùn)n"); if(exe->flag==1) producerrun(); else comsuerrun(); element=hasElement(readyhead); } printf("就緒隊(duì)列沒(méi)有進(jìn)程\n"); if(ha

資源截圖

代碼片段和文件信息

/*

*/
#include
#include
#include

struct?PCB
{???
int?flag; //1為生產(chǎn)者2為消費(fèi)者
int?numLabel;
};
typedef?struct?QNode
{
PCB?data;//數(shù)據(jù)域
struct?QNode*?next;//指針域
}QNode?*QueuePtr;
typedef?struct
{
QueuePtr?front;//隊(duì)頭指針
QueuePtr?rear;//隊(duì)尾指針
}linkQueue;
typedef?struct?LNode
{
QueuePtr?data;
struct?LNode?*next;
}LNode?*linkList;

void?QueueInit(linkQueue&?Q)//初始化隊(duì)列

{
Q.front?=?Q.rear?=?(QueuePtr)malloc(sizeof(QNode));
Q.front->next?=?NULL;
}

void?linkListInit(linkList&?L)//初始化鏈表
{
L?=?(linkList)malloc(sizeof(LNode));
}

void?EnQueue(linkQueue&?Q?QueuePtr?p)//入隊(duì)
{
p->next?=?NULL;
Q.rear->next?=?p;
Q.rear?=?p;
}

QueuePtr?DeQueue(linkQueue&?Q)//出隊(duì)
{
QueuePtr?p?=?Q.front->next;
Q.front->next?=?p->next;
if(Q.rear?==?p)Q.rear?=Q.front;
return?p;
}

void?linkListInsert(linkList&?L?QueuePtr?e)//進(jìn)入鏈表
{
linkList?p?=?L;
linkList?q?=?(linkList)malloc(sizeof(LNode));
while(p->next)p++;
q->data?=?e;
q->next?=?NULL;
p->next?=?q;
}

void?processproc(linkQueue&?Q)//創(chuàng)建進(jìn)程進(jìn)入初始隊(duì)列
{
int?processNum?=?0;
cout<<“請(qǐng)輸入進(jìn)程的個(gè)數(shù):“;//確定進(jìn)程個(gè)數(shù),默認(rèn)為0
cin>>processNum;

for(int?i?=?0;?i? {
cout<<“輸入第“< struct?PCB?pcb;
cin>>pcb.flag;//輸入進(jìn)程的種類
pcb.numLabel?=?i+1;//進(jìn)程序號(hào)賦值
QueuePtr?p?=?(QueuePtr)malloc(sizeof(QNode));
p->data?=?pcb;
EnQueue(Q?p);
}
}

bool?HasElement(linkQueue?Q)//判斷隊(duì)列是否為空
{
if(Q.front?==?Q.rear)return?false;
else?return?true;
}

int?ProduceRun(int&?full?int?BufferSize)//運(yùn)行生產(chǎn)者進(jìn)程
{
if(full? {
full++;
return?1;
}
return?0;
}
int?ConsumeRun(int&?full?int?BufferSize)//運(yùn)行消費(fèi)者進(jìn)程
{
if(full?>?0)
{
full--;
return?1;
}
return?0;
}
void?DisPlay(linkQueue?Q)//打印隊(duì)列
{
QueuePtr?p?=?Q.front;
while(p->next){
cout<<“進(jìn)程“<next->data.numLabel< p?=?p->next;
}
}
void?main()
{
int?BufferSize;//設(shè)置緩沖區(qū)大小
cout<<“請(qǐng)?jiān)O(shè)置緩沖區(qū)的大小:?“;
cin>>BufferSize;
????int?full?=?0;//當(dāng)前緩沖區(qū)中的進(jìn)程數(shù)目
int?temp?=?1;

linkList?over;//用于收集已經(jīng)運(yùn)行結(jié)束的進(jìn)程
linkListInit(over);
linkQueue?ReadyQueue;//就緒隊(duì)列
linkQueue?ProducerWaitQueue;//生產(chǎn)者等待隊(duì)列
linkQueue?ConsumerWaitQueue;//消費(fèi)者等待隊(duì)列
//初始化
QueueInit(ReadyQueue);
QueueInit(ProducerWaitQueue);
QueueInit(ConsumerWaitQueue);

while(temp)//死循環(huán)
{
processproc(ReadyQueue);//創(chuàng)建進(jìn)程進(jìn)入就緒隊(duì)列
bool?element=HasElement(ReadyQueue);//判斷隊(duì)列是否為空

while(element)//當(dāng)它不是空的
{
cout<<“進(jìn)程“<next->data.numLabel<<“申請(qǐng)運(yùn)行他是一個(gè)“;
/********************************************************************/
if(ReadyQueue.front->next->data.flag?==?1)//如果它是一個(gè)生產(chǎn)者
{
cout<<“生產(chǎn)者“<
if(ProduceRun(full?BufferSize)?==?1)//判斷緩存區(qū)是否還有空間
{
cout<<“進(jìn)程“<next->data.numLabel<<“執(zhí)行完畢“< linkListInsert(over?DeQueue(ReadyQueue));//運(yùn)行結(jié)束,進(jìn)入over鏈表
if(HasElement(ProducerWaitQueue))//檢查生產(chǎn)者等待隊(duì)列,激活隊(duì)列中的進(jìn)程進(jìn)入就緒隊(duì)列
EnQueu

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----

?????文件???????5023??2009-01-07?20:35??sys2\sy2\sy2.cpp

?????文件??????94208??2009-01-07?20:35??sys2\實(shí)驗(yàn)報(bào)告2.doc

?????目錄??????????0??2011-06-12?08:54??sys2\sy2

?????目錄??????????0??2011-06-12?08:52??sys2

-----------?---------??----------?-----??----

????????????????99231????????????????????4


評(píng)論

共有 條評(píng)論

相關(guān)資源