**
《网络操作系统》实验预习报告
**
一、实验目的
1、学会用系统调用和库函数进行编程
2、加深对进程概念的理解,明确进程和程序的区别。
3、进一步认识并发执行的实质。
4、分析进程竞争资源现象,学习解决进程互斥的方法。
5、了解Linux系统中进程通信的基本原理。
二、实验内容
1、用fork( )创建进程,观察进程的并发执行
2、使用管道、消息队列机制进行进程间通信
三、预习心得
这部分实验内容需要有一点c语言功底,学会用fork创建进程,观察进程的并发执行,还要学会使用管道、消息队列机制完成进程间通信,但是确实看了好半天都不会!
**
《网络操作系统》实验报告
**
一、实验目的
1、学会用系统调用和库函数进行编程
2、加深对进程概念的理解,明确进程和程序的区别。
3、进一步认识并发执行的实质。
4分析进程竞争资源现象,学习解决进程互斥的方法。
5、了解Linux系统中进程通信的基本原理。
二、实验内容
1、用fork( )创建进程,观察进程的并发执行
2、使用管道、消息队列机制进行进程间通信
三、实验操作
1、编写一段C语言程序使其完成:父进程创建两个子进程,每个进程都在屏幕上显示自己的进程ID号。 运行结果示例:
(1)vi forktest.c 先创建源文件forktest.c,编译源程序代码
(2)gcc -o forktest forktest.c 将文件编译为可执行文件
(3)./forktest 运行程序,结果正确
2、上机调试下面的程序,观察运行结果,分析原因。
#include <sys/types.h>
#include <unistd.h>
int glob=3;
int main()
{
pid_t pid;
int loc=3;
printf(“befor fork():glob=%d,loc=%d\n”, glob, loc);
if ((pid=fork()) < 0)
{
printf(“fork() error\n”);
exit(0); }
else if (pid == 0)
{
glob++;
loc–;
printf(“child:glob=%d, loc=%d\n”, glob, loc);
else
{
printf(“parent:glob=%d, loc=%d\n”, glob, loc);
exit(0);
}
return 0;
}
(1)创建test.c文件
(2)消除警告 添加include<stdlib.h> 和include<stdio.h> 添加}
(3)生成可执行文件test,并执行
(4)调试过程 set follow-fork-child 追踪子进程
(5)子进程创建成功,输出创建子进程后变量的值
3、利用两个管道进行双向通信,实现父子进程协作把整数x从1加到10。
运行结果示例:
#./pipetest
child 5938 read: 1
parent 5937 read: 2
child 5938 read: 3
parent 5937 read: 4
child 5938 read: 5
parent 5937 read: 6
child 5938 read: 7
parent 5937 read: 8
child 5938 read: 9
parent 5937 read: 10
(1)创建piptest.c文件
(2)生成可执行文件,并运行
4、利用消息队列实现父子进程的通信。父进程创建消息队列,并向消息队列发送消息;子进程接受消息;父进程等待子进程接收消息后删除消息队列。
运行结果示例:
#./msgtest
Parent:Send to the message queue successfully!
The message sent is :This is the input!
Child:Receiving from the message queue:This is the input!
(1)代码创建文件
(2)执行结果
四、源程序清单、测试数据及结果
(1)
(2)
(3)
(4)
所有详细程序具体指令都在步骤三,见各题目下方
五、实验小结
本次实验花费时间太长,通过本次实验,很好的掌握了知识要点和具体命令要求,收获颇多,仍需要多练习!