实验2-进程控制与通信管理_第1页
实验2-进程控制与通信管理_第2页
实验2-进程控制与通信管理_第3页
实验2-进程控制与通信管理_第4页
实验2-进程控制与通信管理_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、年级 11级 专业 计算机科学与技术 班级 五班 组号 12组 实验室 9#205 日期 2014/05/17 实验 名称 实验二、进程控制与通信管理 实 验 内 容 分项内容 实验级别 1、Linux系统常用进程管理命令的使用 操作系统观察级 2、Linux系统常用进程创建与管理的系统调用 原码阅读与系统编程级 3、Windows平台常用进线程控制 API 原码阅读与系统编程级 4、进程冋步与互斥控制(读者与者、一豕人吃苹果桔子、 哲学家吃饭) 码阅读与系统编程级 5、简单进程通信(管道、消息缓冲、邮件槽等) (原码阅读与系统编程 级) 小 组 成 员 姓名 学号 组内分工 自我评分 教师评

2、分 独立完成实验二(1) 良好 独立完成实验二(2) 良好 独立完成实验二(3) 良好 独立完成实验二(4) 良好 独立完成实验二(5) 良好 小 组 成 绩 评 疋 教师签名: 年月日 实验 分项1 1、Linux系统常用进程管理命令的使用2、Linux系统常用进程创建与管理的系统调 用 3、Windows平台常用进线程控制 API 4、进程同步与互斥控制 信 5、简单进程通 实 一、实验目的: 验 目 的 1、加深对进程概念的理解,明确进程和程序的区别。 2、进一步认识并发执行的实质。 3、分析进程争用资源的现象,学习解决进程互斥的方法。 实 验 具体题目:进程创建、进程控制 要 系统平台

3、:Linux/Windows操作系统 求 二、实验原理 1. Linux系统常用进程管理命令 (1) at命令:定时运行命令 让系统在两天后的17 : 30执行文件data中指定的作业,使用命令: # at f data 15:30 +2 days (2) bg命令后台运行命令 实 如果要将一个大目录的文件进行排序后,将结果输入到一个文件中, 可以使用命令: 验 # du -a / | sort -rn /tmp/du.sorted 原 理 (3) Fg挂起程序 步 使用fg命令时,要加入后台任务号码,如果不加任何号码,则所变动的均是当前任 骤 ( 务。 算 # du -a / | sort

4、-rn /tmp/du.sorted who 2、 进程同步与互斥控制(数据同步),原理如下: (1) 、设置全局变量:int ticket=100;互斥量:HANDLE hMutex; (2) 、创建互斥信号量 ticket : hMutex=CreateMutex(NULL,TRUE,ticket); (3) 、用 WaitForSingleObject(hMutex,INFINITE);捕获互斥信号量 hMutex (4) 、用ReleaseMutex(hMutex);释放互斥量的使用权 3、通过邮件槽实现简单进程通信,原理如下: (1) 、油槽服务器: 1) hMailslot=Cre

5、ateMailslot(.mailslotMyMailslot,0, MAILSLOT_WAIT_FOREVER,NULL)/ 创建一个邮路。 2) ReadFile(hMailslot,buf,100,读取邮路数据 3) CloseHandle(hMailslot);/ 关闭油槽 (2) 、油槽客户端: 1) hMailslot=CreateFile(.mailslotMyMailslot,GENERIC_WRITE, FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); /创建油槽文件 2) WriteFile(hM

6、ailslot,buf,strle n(buf)+1, / 写入数据 3) CloseHandle(hMailslot);/ 关闭油槽 实验源代码如下: 1、进程同步与互斥控制(数据同步) #include stdafx.h #in clude #i ncludeiostream using n amespace std; int in dex =0; int ticket=100; HANDLE hMutex; DWORD WINAPI Fu n1Proc(LPVOID lpParameter) while(TRUE) WaitForSi ngleObject(hMutex,INFINITE

7、); if(ticketO) coutthread1 sell ticket :ticket-0) coutthread2 sell ticket :ticket-e ndl; else break; ReleaseMutex(hMutex); return 0; int _tmain(int argc, _TCHAR* argv) HANDLE hTread1; HANDLE hTread2; hTread 仁CreateThread(NULL,O,Fu n1Proc,NULL,0,NULL); hTread2=CreateThread(NULL,0,Fu n2Proc,NULL,0,NUL

8、L); CloseHa ndle(hTreadl); CloseHa ndle(hTread2); hMutex=CreateMutex(NULL,TRUE,ticket); if(hMutex) if(ERROR_ALREADY_EXISTS=GetLastError() cout Only one in sta nee can run !e ndl; return 0; ReleaseMutex(hMutex); ReleaseMutex(hMutex); Sleep(IOOOO); return 0; 2、邮件槽进程通信: 1)油槽服务器:(关键代码段) void C 油槽客户端 Dlg

9、:OnSend() / TODO:在此添加控件通知处理程序代码 HANDLE hMailslot; hMailslot=CreateFile(.mailslotMyMailslot,GENERIC_WRITE,FILE_SHARE_RE AD,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(INVALID_HANDLE_VALUE=hMailslot) MessageBox(打开油槽失败!”); return; CStri ng str; char buf100; m_edit.GetWi ndowText(str); strcpy_s(b

10、uf,str); DWORD dwWrite; if(!WriteFile(hMailslot,buf,strle n(buf)+1, return; CloseHa ndle(hMailslot); 2) 油槽客户端:(关键代码段) void C 油槽客户端 Dlg:OnSend() / TODO:在此添加控件通知处理程序代码 HANDLE hMailslot; hMailslot=CreateFile(.mailslotMyMailslot,GENERIC_WRITE,FILE_SHARE_RE AD,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NUL

11、L); if(INVALID_HANDLE_VALUE=hMailslot) MessageBox(打开油槽失败!”); return; CStri ng str; char buf1OO; m_edit.GetWi ndowText(str); strcpy_s(buf,str); DWORD dwWrite; if(!WriteFile(hMailslot,buf,strle n(buf)+1, return; CloseHa ndle(hMailslot); (写不完时,可另加附页。) 三、实验结果: 1、实验截图: 实 验 结 果 及 分 析 国3 匚:冷 d o wvste m 3

12、2c m d thradlticket: :1EIEI thread2 sell ticket : :99 thradlticket : :98 threadticket : 97 threadl sell ticket : 96 thread2 $911 ticket : :95 threadl sell ticket : :91 thread sell ticket : 93 thrdl sell ticket : :32 thrad2 well ticket : 31 threadl well ticket . :9G thread2 ell ticket ; threadl sell

13、ticket ; :88 thread sell ticket : ;87 threadl ell ticket . ;G thread2 sell ticket ; 85 threadl xll ticket ; thrad2 oell ticket ; :83 threadl dell ticket ; ;82 thrad2 cell ticket : :S1 threadl 命ell ticket : throad2 cell ticket : :79 threadl *1】ticket ; :78 thread2 soil ticket : ;77 threadl gll ticket

14、 ; tTG 2-1进程控制达到数据同步处理截图 2-2油槽通信控制面板截图 2-3油槽-服务器截图 2-4油槽-客户端截图 2-5发送-接受效果截图 2、结果分析: 1 )、Is命令列出了指定目录下的文件名和目录名,参数-I要求显示文件或目录的详 细信息,例如类型、访问权限、连接数、拥有者等。 在Linux中,用户通过利用fork创建的进程来与原进程运行相同的程序代码,为了 使新进程运行新的程序,用户可以使用系统调用exec来装入一个新的程序到当前进 程的地址空间,如果exec调用成功,系统开始执行新程序,永远不会返回原来的程 序。 2 )、进程同步与互斥控制,能有效的控制全局变量在某一进程

15、执行过程中唯一被访 问。在多线程程序中容易出现共享资源因时间片到期而终止访问,这样就很容易出 现数据的错乱。假如全局变量未火车票;对于线程函数(Fun Procl、Fun Proc2),在 访问全局变量ticket时,ticket自减一。如果在线程函数1 ( Fun Procl )访问ticket, 还没有来得及自减一就因时间片到期而被线程函数2( FunProc2 )抢占访问,然后 自减一。这样就造成了资源数据不一致,从而产生很危险的后果。 本实验通过设置互斥信号量从而达到线程之间对共享资源的同步访问,以此还可以 实现进程同步中的读者/写者问题。 3) 、由于油槽是单向通信机制,所以只能通过创建油槽服务器进程读取数据,打开 油槽客户端进程写入数据。如果只打开油槽服务器,创建读取数据进程而没有打开 客户端就会导致服务器进入无限等代状态,造成程序崩溃。 在创建进程句柄后要记得释放句柄,不然会产生不良后果。 心 得 体 会 在了解了操作系统中进程间的通信的方式我们使用了邮槽实现了简单的进程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论