2012年 操作系统实验1.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

文档评论(0)

187****5045 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档