操作系统1-5完整实验.docx
文本预览下载声明
操作系统实验报告
学 号__________________
姓 名_______李航_________________
提交日期_______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
显示全部