操作系统实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统实验报告

学号:

姓名:

指导老师:

完成日期:

目录

实验一 (1)

实验二 (2)

实验三 (7)

实验四 (10)

实验五 (15)

实验六 (18)

实验七 (22)

实验一UNIX/LINUX入门

一、实验目的

了解UNIX/LINUX 运行环境,熟悉UNIX/LINUX 的常用基本命令,熟悉和掌握UNIX/LINUX 下c 语言程序的编写、编译、调试和运行方法。

二、实验内容

熟悉UNIX/LINUX 的常用基本命令如ls、who、pwd、ps 等。

练习UNIX/LINUX的文本行编辑器vi 的使用方法

熟悉UNIX/LINUX 下c 语言编译器cc/gcc 的使用方法。用vi 编写一个简单的显示“Hello,World!”c 语言程序,用gcc 编译并观察编译后的结果,然后运行它。

三、实验要求

按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。

四、实验程序

#include

#include

int main()

{

printf ("Hello World!\n");

return 0;

}

五、实验感想

通过第一次室验,我了解UNIX/LINUX 运行环境,熟悉了UNIX/LINUX 的常用基本命令,熟悉和掌握了UNIX/LINUX 下c 语言程序的编写、编译、调试和运行方法。

实验二进程管理

一、实验目的

加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质。

二、实验内容

(1)进程创建

编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示“a“;子进程分别显示字符”b“和字符“c”。试观察记录屏幕上的显示结果,并分析原因。

(2)进程控制

修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。

(3)进程的管道通信

编写程序实现进程的管道通信。使用系统调用pipe()建立一个管道,二个子进程P1 和P2 分别向管道各写一句话:

Child 1 is sending a message!

Child 2 is sending a message!

父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。

三、实验要求

按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。

四、实验设计

1、功能设计

(1)进程创建

使用fork()创建两个子进程,父进程等待两个子进程执行完再运行。

(2)进程控制

使用fork()创建两个子进程,父进程等待两个子进程分别输出一句话再运行。

(3)进程的管道通信

先创建子进程1,向管道写入一句话,子进程1结束后创建子进程2,向管道写入一句话,最后父进程从管道中读出。

2、数据结构

子进程和管道。

3、程序框图

五、实验程序

(1)进程创建

#include

#include

int main()

{

int pid1, pid2;

pid1=fork();

if (pid1<0){ printf("Fork 1 failed!!");}

if (pid1==0){ printf("b\n");exit(0);}

if (pid1>0){ wait(NULL);

pid2 = fork();

if (pid2<0) { printf("Fork 2 failed!!"); }

if (pid2==0) { printf("c\n");exit(0);}

if (pid2>0) { wait(NULL);printf("a\n");exit(0);} }

}

(2)进程控制

#include

#include

int main()

{

int pid1, pid2;

pid1=fork();

if (pid1<0){ printf("Fork 1 failed!!");}

if (pid1==0){ printf("This is child b\n");exit(0);} if (pid1>0){ wait(NULL);

pid2 = fork();

if (pid2<0) { printf("Fork 2 failed!!"); }

if (pid2==0) { printf("This is child c\n");

exit(0);}

if (pid2>0) { wait(NULL);

printf("This is father a\n");

exit(0);}

}

}

(3)进程的管道通信

#include

#include

#include

#include

int main()

{

int pid1, pid2; int pfd[2];

char *msg1="Child 1 is sending a message!";

char *msg2="Child 2 is sending a message!";

char buf[256]; int r,w;

if(pipe(pfd)<0){ printf("pipe create error!\n"); exit(1);} pid1 = fork();

if (pid1<0){ printf("Fork 1 failed!!");}

if (pid1==0){ close(pfd[0]); //write

sleep(3);

if(w=write(pfd[1],msg1,strlen(msg1))<0){ printf("wirte error!\n");

exit(1);}

else { printf("child 1 send msg to pipe!\n"); }

相关文档
最新文档