文档详情

操作系统1-5完整实验.docx

发布:2015-12-18约1.83万字共37页下载文档
文本预览下载声明
操作系统实验报告 学 号__________________ 姓 名_______李航_________________ 提交日期_______2015-11-24___________ 出勤情况表现情况考核情况程序执行情况问题回答情况□全勤 □偶尔缺勤 □偶尔出勤 □从未出现□积极提问 □认真设计 □与同学一起商量 □主要靠别人讲解 □完全不参与□检查实验代码 □参加考试 题号( )□顺畅 □有问题,经过老师指出之后改正 □有问题,无法改正□立即正确回答 □经思考后正确回答 □回答有部分错误 □回答完全错误 □不能回答问题实验报告结构实验报告内容实验报告图表最终成绩□完全符合要求 □基本符合要求 □有比较多的缺陷 □完全不符合要求□充实正确 □基本正确 □有一些问题 □问题很大□符合规范 □基本符合规范 □有一定错误 □完全不正确 教师签字:________________________ 实验二 进程管理 实验学时:2学时 实验类型:验证型、设计型3 一、实验目的 加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质。 二、实验内容 (1)进程创建 编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示“a“;子进程分别显示字符”b“和字符“c”。试观察记录屏幕上的显示结果,并分析原因。(提示:对每个进程的打印循环执行10次,则可以发现执行顺序的不同) (2)进程控制 修改已编写的程序,将每一个进程输出一个字符改为用一个循环输出1000个字符(父进程输出1000个“a”,子进程分别输出1000个“b”和“c”),再观察程序执行时屏幕上出现的现象,并分析原因。 (3)进程的管道通信 编写程序实现进程的管道通信。使用系统调用pipe()建立一个无名管道,二个子进程P1和P2分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message! 父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1的消息,再接收P2的消息)。 三、实验要求 按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。 四、补充材料 管道是进程间通信中最古老的方式,它包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者用于运行于同一台机器上的任意两个进程间的通信。 无名管道的创建 无名管道由pipe()函数创建: #include unistd.h int pipe(int filedis[2]); 参数filedis返回两个文件描述符:filedes[0]为读而打开,filedes[1]为写而打开。filedes[1]的输出是filedes[0]的输入。 2、read( ) ? 系统调用格式 ?????? int read(fd,buf,nbyte) 功能:从fd所指示的文件中读出nbyte个字节的数据,并将它们送至由指针buf所指示的缓冲区中。如该文件被加锁,等待,直到锁打开为止。 ? 参数定义: ? int? fd; ? char *buf; unsigned? nbyte; 3、write( ) 系统调用格式 ????????int??read(fd,buf,nbyte) 功能:把nbyte 个字节的数据,从buf所指向的缓冲区写到由fd所指向的文件中。如文件加锁,暂停写入,直至开锁。 参数定义同read( )。 程序代码: (1) #include stdio.h #include stdlib.h #include sys/types.h #include unistd.h main() { int i; if ( fork() == 0 ) // 子进程1 { printf(b\n); //显示b exit(0); } else { if ( fork() == 0 ) // 子进程2 { printf(c\n); //显示c
显示全部
相似文档