参考资料操作系统实验报告.docx
- 文档编号:14921303
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:32
- 大小:213.65KB
参考资料操作系统实验报告.docx
《参考资料操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《参考资料操作系统实验报告.docx(32页珍藏版)》请在冰点文库上搜索。
参考资料操作系统实验报告
《操作系统》
实验报告
专业计算机科学与技术
年级本科三年级
学号09070213
姓名刘跃翔
目录:
一、实验一---------------------------------------------4
1.实验目的-----------------------------------------------------------4
2.实验内容-----------------------------------------------------------4
3.实验要求-----------------------------------------------------------4
4.实验设计-----------------------------------------------------------4
5.实验程序-----------------------------------------------------------4
6.实验结果-----------------------------------------------------------4
7.实验感想-----------------------------------------------------------5
二、实验二---------------------------------------------5
1.实验目的-----------------------------------------------------------5
2.实验内容-----------------------------------------------------------5
3.实验要求-----------------------------------------------------------5
4.实验设计-----------------------------------------------------------5
5.实验程序-----------------------------------------------------------6
6.实验结果-----------------------------------------------------------8
7.实验感想-----------------------------------------------------------8
三、实验三---------------------------------------------8
1.实验目的-----------------------------------------------------------8
2.实验内容-----------------------------------------------------------8
3.实验要求-----------------------------------------------------------8
4.实验设计-----------------------------------------------------------9
5.实验程序-----------------------------------------------------------10
6.实验结果-----------------------------------------------------------11
7.实验感想-----------------------------------------------------------11
四、实验四---------------------------------------------11
1.实验目的-----------------------------------------------------------11
2.实验内容-----------------------------------------------------------11
3.实验要求-----------------------------------------------------------11
4.实验设计-----------------------------------------------------------12
5.实验结果-----------------------------------------------------------16
6.实验感想-----------------------------------------------------------17
五、实验五---------------------------------------------17
1.实验目的-----------------------------------------------------------17
2.实验内容-----------------------------------------------------------17
3.实验要求-----------------------------------------------------------17
4.实验设计-----------------------------------------------------------17
5.实验程序-----------------------------------------------------------18
6.实验结果-----------------------------------------------------------19
7.实验感想-----------------------------------------------------------19
六、实验六---------------------------------------------20
1.实验目的-----------------------------------------------------------20
2.实验内容-----------------------------------------------------------20
3.实验要求-----------------------------------------------------------20
4.实验设计-----------------------------------------------------------20
5.实验结果-----------------------------------------------------------23
6.实验感想-----------------------------------------------------------24
七、实验七---------------------------------------------24
1.实验目的-----------------------------------------------------------24
2.实验内容-----------------------------------------------------------24
3.实验要求-----------------------------------------------------------24
4.实验设计-----------------------------------------------------------25
5.实验程序-----------------------------------------------------------27
6.实验结果-----------------------------------------------------------28
7.实验感想-----------------------------------------------------------28
实验一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编译并观察编译后的结果,然后运行它。
三、实验要求
按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。
四、实验设计
Linux系统常用命令格式:
command[option][argument1][argument2]...
五、实验程序
#include
#include
intmain(void)
{
printf("HelloWorld!
\n");
system("pause");
return0;
}
六、实验结果
七、实验感想
通过第一次室验,熟悉了LINUX系统的操作,终端的使用,GCC编译c程序
实验二进程管理
一、实验目的
加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质。
二、实验内容
(1)进程创建
编写一段程序,使用系统调用fork()创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符:
父进程显示“a“;子进程分别显示字符”b“和字符“c”。
试观察记录屏幕上的显示结果,并分析原因。
(2)进程控制
修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。
(3)进程的管道通信
编写程序实现进程的管道通信。
使用系统调用pipe()建立一个管道,二个子进程P1和P2分别向管道各写一句话:
Child1issendingamessage!
Child2issendingamessage!
父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。
三、实验要求
按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。
四、实验设计
1、功能设计
实验要求建立一个管道实现父进程和子进程间的通信,子进程有两个,子进程向管道里写数据,父进程从管道里读出数据。
管道的作用是将两个缓冲区相关连起来,使得一个缓冲区写的东西可以从另一个缓冲区读出来,遵循先进先出的顺序。
程序的顺序是这样的:
先创建子进程1,向管道写入一句话,子进程1结束后创建子进程2,向管道写入一句话,最后父进程从管道中读出。
2、数据结构
子进程:
使用pid_tfork()函数创建,返回值为子进程号。
管道:
使用intpipe(intfiledis[2])创建无名管道,filedis[2]为两个文件描述符。
3、程序框图
五、实验程序
#include
#include
#include
intpipe(intfiledis[2]);
#defineINPUT0
#defineOUTPUT1
intmain()
{
intfile_descriptors[2];
pid_tpid1,pid2;//定义子进程
charbuf[256];
intreturned_count;
pipe(file_descriptors);//创建无名管道
if((pid1=fork())==-1)//创建子进程1
{
printf("Erroronfork\n");
exit
(1);
}
if(pid1==0)
{
printf("inthespawned(child1)process\n");
close(file_descriptors[INPUT]);//关闭通道的读端
write(file_descriptors[OUTPUT],"child1issendingmessage",strlen("child1issendingmessage"));//向管道中写一句话
exit(0);
}
else{
if((pid2=fork())==-1)//创建子进程2
{
printf("Erroronfork\n");
exit
(1);
}
if(pid2==0)
{
printf("inthespawned(child2)process\n");
close(file_descriptors[INPUT]);//关闭通道的读端
write(file_descriptors[OUTPUT],"child2issendingmessage",strlen("child1issendingmessage"));//向管道中写一句话
exit(0);
}
else{//父进程
printf("intheparentprocess\n");
close(file_descriptors[OUTPUT]);//关闭管道的写端
returned_count=read(file_descriptors[INPUT],buf,sizeof(buf));
printf("%dbytesofdatareceivedfromspawnedprocess:
%s\n",returned_count,buf);//父进程从管道中读出数据
}
}
return0;
}
六、实验结果
由图可知,父进程先后接受了子进程向管道写入的两句话,并成功地打印出来。
两个子进程分别向管道写入了25个字符,并且是子进程1先写的,子进程2后写的,故输出的顺序也是如此。
七、实验感想
通过本次实验,我们对进程的概念加深了理解,熟悉了进程的创建方法与作用机制,明确了进程与程序的异同。
同时,我们掌握了使用管道通信的机制,进一步认识了并发执行的实质。
实验三一个进程启动另一个程序的执行
一、实验目的
编写Linux环境下,fork()与exec()的结合使用实现一个进程启动另一个程序的执行的基本方法,掌握exec()的几种调用方法。
二、实验内容
父进程从终端读取要执行的命令,并交给子进程执行。
父进程等待子进程结束,并打印子进程的返回值。
提示:
从终端读取要执行的命令可用fgets()实现。
三、实验要求
按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。
四、实验设计
1、功能设计
根据实验要求,父进程和子进程将被分配不同的任务:
父进程从终端读取要执行的命令交给子进程,然后等待子进程技术打印子进程的返回值;子进程执行父进程读取的命令并返回给父进程。
因为子进程执行命令需要打开其他文件,所以需要使用exec()类的函数实现在一个进程来启动另一个程序,在这里应使用execlp()函数从PATH环境变量中查找文件并执行。
对于父进程,可以调用fget()从终端读取要执行的命令,以字符串形式存储然后交给子进程执行,待子进程执行完毕后接收子进程返回值并打印。
由于要求带参数的命令也可以执行,那么需要在父进程中fets两次,第一次gets得到命令给串command,然后gets参数给串command1,并且将这两个参数分别传到子进程的exec()函数,其中前两个都是command,第三个是command1。
2、数据结构
用char*型全局变量command存放指令
用char*型全局变量command1存放参数
3、程序框图
N
Y
五、实验程序
#include
charcommand[256];
charcommand1[256];
intmain()
{
intrtn;//子进程的返回数值
interrorno;
while
(1){
printf(">");//从终端读取要执行的命令
fgets(command,256,stdin);
printf("<");//从终端读取要执行命令的参数
fgets(command1,256,stdin);
command[strlen(command)-1]='\0';
command1[strlen(command1)-1]='\0';
if(fork()==0){//子进程执行此命令
errorno=(command1[0]==0)?
execlp(command,command,NULL,NULL),execlp(command,command,command1,NULL);//如果没有参数则前者的execlp()函数,如果有参数则执行后者,有无参数只需看command1[0]是否为0
perror(command);//如果exec函数返回,表明没有正常执行命令,打印错误信息
exit(errorno);
}
else{
//父进程,等待子进程结束,并打印子进程的返回值
wait(&rtn);
printf("childprocessreturn%d\n",rtn);
}
}
return0;
}
六、实验结果
由图可知,执行了ls命令,参数为-a,文件按字母顺序显示
六、实验感想
通过本次实验,我学会了如何用execlp()函数达到一个进程启动另外一个程序的目的。
并且对execlp()的几个参数的作用有了一定了解,别且对于fork()和exelp()联合使用的方法和功能。
同时,我们进一步熟悉了LINUX系统操作环境,学习了在LINUX环境下编译和调试程序的技巧。
实验四基于消息队列和共享内存的进程间通信
一、实验目的
Linux系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据。
本实验的目的是了解和熟悉:
1.Linux支持的消息通信机制及其使用方法
2.Linux系统的共享存储区的原理及使用方法。
二、实验内容
1.消息的创建、发送和接收
使用消息调用msgget()、msgsnd()、msggrev()、msgctrl()编制长度为1K的消息的发送和接收程序。
2.共享存储取得创建、附接和断接
使用系统调用shmget()、shmat()、shmctl()、shmctl(),编制一个与上述功能相同的程序。
三、实验要求
按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。
四、实验设计
1、消息的创建、发送和接收
(1)功能设计
为了实现进程之间消息的创建、发送和接收,首先应定义两个子进程,Server进程负责发送,Client进程负责接收,父进程负责创建。
其次需要用到msgget()、msgsnd()、msggrev()、msgctrl()等函数进行对消息的控制。
题目要求消息长度为1K,那么msgsnd(id,msgp,size,flag)和msgrcv(id,msgp,size,type,flag)函数中参数size应设为1024,msgget(key,flag)中的key应为75。
父进程获得创建消息后,子进程Server先后发送编号为1~10的10条消息,子进程Client先后接收这11条消息,方能达到实验目的。
(2)数据结构
消息(mymsg):
结构体实现,包含的成员变量有消息类型和消息内容,具体实现如下:
structmymsg{//消息的结构体声明
longintmymsgtype;//消息类型
inttext;//消息内容};
(3)程序框图
(4)程序
#include
#include
#include
#include
#include
#include
#defineMAX1024
structmymsg{//消息结构体
longintmymsgtype;//消息类型
inttext;//消息内容
}msg;
main(void)
{
pid_tpids;//发送进程
pid_tpidc;//接收进程
intmsgid;//消息队列号
inti=1;
msgid=msgget(KEY,0666|IPC_CREAT);//获得一个消息的描述符
if((pids=fork())==0){//创建Server子进程
while(i<11){
msg.mymsgtype=11-i;
msg.text=i;
printf("thesendedmessageis%dth\n",i);
i++;
msgsnd(msgid,&msg,MAX,0);//向msgid指定的消息队列发送消息,长度为1K
}
exit(0);
}
else{
i=10;
if((pidc=fork())==0){//创建Client子进程
while(i!
=1){
msgrcv(msgid,&msg,MAX,0,0);//从msgid指定的消息队列接收消息
printf("themessageis%dth\n",msg.text);
i=msg.mymsgtype;
}
exit(0);
}
else{
wait(0);//等待子进程结束
wait(0);
exit(0);}}}
2、共享存储区的创建、附接和断接
(1)功能设计
为了实现进程通过共享存储区进行通信,需要创建两个进程并且调用shmget()、shmat()、shmctl()函数实现共享存储区的创建、附接和断接。
由于共享存储区的写入和读取由两个子进程完成,而共享存储区在本程序中为所有进程共用的,因此共享存储区的创建、附接和断接均需要在父进程中完成。
具体的实现方式是现在父进程中创建一块共享存储区,然后用int类型指针li
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 参考资料 操作系统 实验 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)