- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《操作系统》课程实验报告
实验名称 进程同步算法的实现模拟 实验序号 1 姓 名 刘徐俊 系院专业 计算机 班 级 10网络1 学 号 1010322105 实验日期 2012-11-01 指导教师 阮鸥 成 绩 一、实验目的
进程同步问题是OS的核心内容。本实验要求用高级语言编写和调试一个程序来模拟进程同步算法。通过本实验可以加深理解有关同步技术、进程控制块、进程队列的概念,并体会和了解同步(生产者—消费者问题)算法的具体实施办法。 二、实验内容与要求
(1) 模拟实现生产者—消费者问题。Get、put二进程共用缓冲区s(大小为每次只存放一个记录)。Get负责输入记录到缓冲区s, put负责把t中的记录取出打印。
(2) 设计进程PCB结构和三种进程状态的队列,可以实现PCB队列的插入、删除、排序功能。
(3) 设计各进程使用的信号灯,画出各进程的P、V操作实现流程图;
(4)实现进程同步,完成记录的正常输出,要能够通过程序运行表现出对缓冲区s的进行临界区互斥和进程同步的思想(最好能记录或输出二个进程的实时状态和变化过程、二个进程队列的实时内容、几个缓冲区中实时内容,输出到屏幕上,这个过程同时记录在一个文本文件中);
(5) 编程语言不限制,tc2.0,vc6.0,.net,java都可以。 三、实验设备
地点: 科技楼 网络实验室602
硬件环境: Intel Pentium Processor 1.8G ,512M内存?,windows 操作系统
软件环境: win7系统 vc++6.0
实验步骤
模拟实现生产者—消费者问题。Get、put二进程共用缓冲区s(大小为每次只存放一个记录)。Get负责输入记录到缓冲区s, put负责把t中的记录取出打印。
实验代码:
#include windows.h
#include stdio.h
#include producerThread.h
#include consumerThread.h
DWORD WINAPI producerThread(LPVOID lp)
{
int n=(int)lp;
while(empty0)
{
EnterCriticalSection(CriticalSection);
printf(producer produce %dth good\n, n, T_MAX-empty+1);
empty--;
LeaveCriticalSection(CriticalSection);
Sleep(500);
}
void MyThread()
{ HANDLE get ,put;
get = CreateThread(NULL,NULL,producerThread,(void*)1,NULL,NULL);
put = CreateThread(NULL,NULL,producerThread,(void*)2,NULL,NULL);
int main(int argc, char* argv[])
{
//创建临界区对象
InitializeCriticalSection(CriticalSection);
if(empty0)
MyThread();
Sleep(50000);
//删除临界区对象
DeleteCriticalSection(CriticalSection);
return 0;
}
main()
{
int full=0;
int empty=n;
int mutex=1;
cobegin
p1();p2();p3();...pm();
c1();c2();c3();...ck();
coend
}
producer()
{
while(生产未完成)
.
.
.
生产一个产品;
P(empty);
p(mutex);
送一个产品到缓冲区;
v(mutex);
v(full);
}
}
consumer()
{
while(还要继续消费)
{
p(full);
p(mutex);
从有界缓冲区中取产品;
v(mutex);
v(empty);
.
.
.
消费一个产品;
}
}
具体实现程序:
#include stdafx.h
#include windows.h
#include string.h
char temp; //中间缓存
DWORD WINAPI Get(LPVOID lp)
{ //将要打印的字符取出并一个一个的存入缓存
char * sp;
sp=( char *) lp;
while(1)
您可能关注的文档
最近下载
- 探究感应电流的产生条件导学案.doc VIP
- 7的乘法口诀教学设计【省一等奖】.docx
- Hasselblad哈苏相机X2D II 100C User Manual - 简体中文用户手册说明书(中文版).pdf
- 中国计量大学803传感器技术1--2011--2020年考研初试真题.pdf VIP
- 参保单位派出证明.docx VIP
- 2025届安徽省“江南十校”高三联考英语试卷(含官方答案)原卷.pdf
- DB23_T(1621.10-1621.14)-2015:黑龙江省建设工程施工操作技术规程(三).pdf VIP
- 12YJ1工程用料做法.docx VIP
- 中考冲刺励志文案【90句】.pdf VIP
- 05175税收筹划自考课程.docx VIP
文档评论(0)