张三.操作系统实验1_第1页
张三.操作系统实验1_第2页
张三.操作系统实验1_第3页
全文预览已结束

下载本文档

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

文档简介

班级:计科1142 学号:201411621299姓名:张三实验一进程同步与互斥实验目的 了解多进程并发执行时因控制不当而导致的运行结果不确定的竞争条件现象、以及消除竞争条件所采取的措施。实验内容有一个数据文件,名字是data,其中存放了一个十进制正整数。现有一个程序,该程序读出文件data中的数据、将其加一、再将结果更新到data之中,上述动作重复进行一百万次。如下给出完成上述功能的源程序:01 #include 02 #include 03 #include 04 #include 05 #include 06 #include 07 #include 08 int main()09 10 int num, fd,i;11 char buff100;12 fd = open(data, O_RDWR);13 if(fd=0)14 printf(open errorn);15 return 1;16 17 for(i=1;i=1000000;i+)18 lseek(fd, 0, SEEK_SET);19 int len = read(fd, buff, 100);20 bufflen=0;21 num = atoi(buff);22 sprintf(buff, %dn, num + 1);23 lseek(fd, 0, SEEK_SET);24 write(fd, buff,strlen(buff);25 26 close(fd);27 return 0;28 问题:1.请在linux中编译、链接、执行这个程序。如果该程序只作为单个进程执行,请观察运行结果,并分析代码。2.在不改变程序代码的情况下,怎样把上述程序作为多个进程来并发执行?请观察并发执行情况下的运行结果,分析运行结果错误的具体原因。3.请修改上述代码,采用上锁方式,以保证并发执行时运行结果的正确性,并分析得到了正确结果的原因。参考写法(不许复制):1.用vi data命令建立数据文件,并将文件内容设置为整数1234。用vi test1.c命令创建程序文件,并将上述源代码输入其中,保存、编译、连接、运行,最终结果是文件data中的原整数变为1001234,运行结果正确。该程序分析如下:第11行定义的buff字符数组用于存放从文件中读出的数字字符形式(即ascii码)的整数,其最大长度是100位十进制数,实际中不可能达到这样大的长度,长度定义为100只不过是保证了足够长度而已。第10行的num变量用于存放从buff转换而来的二进制形式的整数,fd是打开data文件之后的描述符,用于下文对data文件的读写操作。第12行打开文件,如果因种种原因(例如文件不存在等)致使文件无法打开,则13-16行显示错误信息并返回。17-25行进行了一百万次循环操作,每次循环中,第18行将文件的读写指针归零(即置于起始字节之处),因为文件刚刚被打开之后其读写指针默认为指向了起始字节处,所以乍看起来第18行的操作似乎是多余的,其实并不然。事实上第24行的写操作已经使得文件的读写指针置于文件末尾,所以一定要在第18行重置文件指针,只有这样才能读出新的数据。类似地,第23行的指针重置保证了用新的数据(即加了1之后的数据)覆盖旧的数据,如果缺少这一行,将导致文件中存放一序列递增的整数而不是一个整数。第9行从文件中读取一个字符串放入buff之中,如前所述,buff中保存的是字符串形式的整数,而在第21行,对atoi函数的调用则将字符串转换为二进制形式,并存放于num之中。第22行将加1之后的num转换为十进制字符串,并保存于buff之中。第24行将字符转写入文件。26行关闭文件,27行返回。2.为了让程序以多个进程的形式并发执行,可以设置多个窗口。例如cygwin窗口标题条上右击,选择new建立新窗口;超级终端putty可以启动多次,每次创建一个新窗口。每个窗口中启动程序,从而实现了多个进程的并发执行。(接下来写出你

温馨提示

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

评论

0/150

提交评论