操作系统实验报告
姓名: xxx
学号: 110703xx
完成时间:2013年11月21日
目录:
实验一:UNIX/LINUIX入门…………………………………………………………………………………………..3
实验二:进程管理………………………………………………………………………………………………………..5
实验三:线程的管理…………………………………………………………………………………………………..11
实验四:利用信号量实现进程间通信…………………………………………………………………….….15
实验五:基于消息队列和共享内存的进程间通信……………………………………………….…...20
实验六:一个进程启动另一个程序的执行…………………………………………………………..……25
实验一 UNIX/LINUIX入门
一、实验目的
了解UNIX/LINUX运行环境,熟悉UNIX/LINUX的常用基本命令,熟悉和掌握UNIX/LINUX下c语言程序的编写、编译、调试和运行方法。
二、实验内容
1、熟悉UNIX/LINUX的常用基本命令如ls、who、pwd、ps等。
2、练习UNIX/LINUX的文本行编辑器vi的使用方法
3、熟悉UNIX/LINUX下c语言编译器cc/gcc的使用方法。用vi编写一个简单的显示“Hello,World!”c语言程序,用gcc编译并观察编译后的结果,然后运行它。
三、实验要求
按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。
四、实验设计
代码如下:
#include<stdio.h>
int main() {
printf("Hello, world");
return 0;
}
五、运行结果
六、收获及机会
此次实验让我熟悉了c语言编译器cc/gcc的使用方法。
七、参考资料
《实验指导书》
实验二 进程管理
一、实验目的
加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质
二、实验内容
(1)进程创建
编写一段程序,使用系统调用 fork()创建两个子进程。当此程序运行时,在系统中有一
个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示“a“;子进
程分别显示字符”b“和字符“c”。试观察记录屏幕上的显示结果,并分析原因。
unix系统主要用于(2)进程控制
修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程
序执行时屏幕上出现的现象,并分析原因。
(3)进程的管道通信
编写程序实现进程的管道通信。使用系统调用pipe()建立一个管道,二个子进程P1 和
P2 分别向管道各写一句话:
Child 1 is sending a message!
Child 2 is sending a message!
父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。
三、实验要求
按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,
并写出实验报告。
四、实验设计
(1)进程创建
使用fork()创建两个子进程,父进程等待两个子进程执行完在运行。
(2)进程控制
使用fork()创建两个子进程,父进程等待两个子进程分别输出一句话在运行。
(3)进程的管道通信
建立一个管道。在程序中先建立一个子进程,然后向管道中输入数据,然后从子进程中退出到父进程,读出管道数据,然后再建立一个子进程,写入数据,再读出,即可。
代码如下:
(1)进程创建:
#include<stdio.h>
#include<stdlib.h>
void main() {
int pid1, pid2;
pid1 = fork();
if (pid1 < 0) {
printf("Fork 1 failed!!");
}
if (0 == pid1) {
printf("b");
exit(0);
}
if (pid1 >0) {
wait(NULL);
pid2 = fork();
if (pid2 < 0) {
printf("Fork 2 failed!!");
}
if (0 == pid2) {
printf("c");
exit(0);
}
if (pid2 >0) {
wait(NULL);
printf("a");
exit(0);
}
}
}
(2)进程控制:
#include<stdio.h>
#include<stdlib.h>
void main() {
int pid1, pid2;
pid1 = fork();
if (pid1 < 0) {
printf("Fork 1 failed!!");
}
if (0 == pid1) {
printf("this is child b\n");
exit(0);
}
if (pid1 >0) {
wait(NULL);
pid2 = fork();
if (pid2 < 0) {
printf("Fork 2 failed!!");
}
if (0 == pid2) {
printf("this is child c\n");
exit(0);
}
if (pid2 >0) {
wait(NULL);
printf("father a\n");
exit(0);
}
}
}
(3)进程的管道通信
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<memory.h>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论