操作系统实验报告Word文档格式.docx
- 文档编号:15765753
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:16
- 大小:74.44KB
操作系统实验报告Word文档格式.docx
《操作系统实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
2.6.实验分析5
3.实验二5
3.1.实验内容5
3.2.实验目的5
3.3.实验步骤5
3.4.代码设计6
3.5.实验结果8
3.6.实验分析9
4.实验三9
4.1.实验内容9
4.2.实验目的9
4.3.实验步骤9
4.4.代码设计10
4.5.实验结果14
4.6.实验分析14
5.体会14
1.实验概述
本课程实验共分为三次,系基于开源操作系统linux的上机操作实验。
旨在让学生接触linux操作系统,将平时课堂学到的操作系统知识运用到实践上,加深对操作系统知识的理解,同时加强学生动手能力。
三次实验分别为:
Ø
Linux系统的安装及用户界面的使用
Linux进程间通信
增加新的设备驱动程序
2.实验一
2.1.实验内容
●在VMWare虚拟机或真实物理机器上,安装Linux操作系统(选做)
●体验Linux系统中XWindows界面的使用
●尝试Linux系统键盘命令的使用,熟练掌握常用的基本命令
●用vi编辑器编写一个C语言程序,要求使用系统调用fork()创建两个子进程:
父进程循环显示字符’a’,两个子进程分别循环显示字符‘b’和‘c’。
用gcc命令编译,观察运行结果。
2.2.实验目的
●了解Linux系统的安装、熟悉系统的启动过程
●熟练使用Linux系统的用户界面
●熟悉Linux系统常用的基本命令
●掌握Linux环境下vi编辑器的使用方法
●掌握Linux系统中编辑、编译、调试、运行C语言程序的全过程
2.3.实验步骤
1.在xp系统中,装Vmware软件,然后装linux系统,本实验选用fedora这个版本的linux系统。
2.体验linux系统中的XWindows界面的使用
3.熟悉linux系统键盘命令
◆man对命令提供帮助解释
◆ls查看目录或者文件的属性,列举出任一目录下的文件
◆cp拷贝文件
◆rm删除文件和目录
◆mv移走目录或者改文件名
◆cd改变当前目录
◆pwd查看当前所在目录完整路径
◆cat将某个文件的所有内容显示出来
◆more将某个文件的内容分屏显示出来
◆chmod权限修改
◆clear清屏
◆date显示当前时间
◆su在不退出登陆的情况下,切换到另外一个人的身份
◆grep文本内容搜索
◆kill杀死某进程
◆passwd设置口令
◆mkdir创建目录
4.熟悉编辑器vim的使用,掌握基本编辑命令
5.设计一个程序,实现父进程循环显示字符’a’,两个子进程分别循环显示字符‘b’和‘c’
2.4.代码设计
#include<
stdio.h>
intmain()
{
intchild1,child2;
inti,j,k;
child1=fork();
if(child1==0)for(i=0;
i<
20;
i++)printf("
b\n"
);
else
{
child2=fork();
if(child2==0)for(j=0;
j<
j++)printf("
c\n"
elsefor(k=0;
k<
k++)printf("
a\n"
}
return0;
}
2.5.实验结果
设计的程序运行结果如下图所示:
2.6.实验分析
关于fork()函数,是返回两次的特殊函数,其代码在父进程和子进程中都有拷贝,即一式两份。
所以可以使用其创建两个子程序,分别显示b和c,而父进程显示a。
在进程调度时,因为共同使用屏幕这个独享的资源,故会产生竞争,而导致输出结果的不确定性,即多道程序运行时的与时间有关的错误问题。
从实验结果中可以看到,输出的结果是abc穿插输出,没有规律可言。
3.实验二
3.1.实验内容
1.进程的控制
编写一段程序,使用系统调用fork()创建两个子进程。
各进程循环显示不同的信息(如20次):
父进程显示:
“parent:
”加上进程ID,子进程分别显示:
“Child1:
”(或“Child2:
”)加上自己的进程ID。
观察程序执行时屏幕上出现的现象,并分析原因,进一步理解各个进程争夺临界资源(显示器)的情况。
接着在程序中使用系统调用locking()来给每一个进程加锁,实现进程之间的互斥,试观察并分析出现的现象。
2.进程的软中断通讯
编制一段程序,实现进程的软中断通讯:
使用系统调用fork()创建两个子进程;
再使用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del键);
在捕捉到中断信号后,父进程用系统调用kill()向两个子进程发信号;
子进程捕捉到信号后分别输出下列信息后终止:
Childprocess1iskilledbyparent!
Childprocess2iskilledbyparent!
父进程等待两个子进程都终止以后,输出如下信息后终止:
Parentprocessinkilled!
3.进程的管道通讯
编制一段程序,实现进程的管道通讯:
使用系统调用pipe()建立一条管道线;
两个子进程分别循环向这条管道写一句话:
Child1issendingamessage!
Child2issendingamessage!
而父进程则循环从管道中读出信息,显示在屏幕上。
3.2.实验目的
1)分析进程争用临界资源的现象,学习解决进程互斥的方法;
2)学习如何利用进程的“软中断”、管道机制进行进程间的通信,并加深对操作系统通信机制的理解。
3.3.实验步骤
1.按照老师给的实验提示,将老师给的代码运行,查看结果,推敲以下有关函数的使用方法。
vfork()
vwait()
vexit()
vgetpid()
vkill(pid,sig)
vsignal(sig,func)
vlockf(fd,mode,size)
vpipe(fd);
intfd[2];
2.分别编写实验内容中要求的代码,使用gcc编译,gdb调试运行,直至达到要求
3.4.代码设计
1.进程控制
child1-id:
%d\n"
getpid());
child2-id:
parent-id:
getpid());
2.进程软中断通信
signal.h>
sys/types.h>
unistd.h>
voidfunc(){}
voidfunc1(){printf("
Child1process1iskilledbyparent!
\n"
voidfunc2(){printf("
Child2process2iskilledbyparent!
intx,y;
while((x=fork())==-1);
if(x==0)
signal(17,func1);
sleep(10);
while((y=fork())==-1);
if(y==0)
{
signal(17,func2);
sleep(10);
}
else
signal(SIGINT,func);
sleep(5);
kill(x,17);
kill(y,17);
wait(0);
printf("
3.进程管道通讯
charstr1[80],str2[80];
pipe(fd);
while((x=fork())==-1);
if(x==0)
while
(1){
lockf(fd[0],1,0);
sprintf(str1,"
40);
write(fd[1],str1,40);
lockf(fd[0],0,0);
sleep
(2);
else
if(y==0){
while
(1){
lockf(fd[0],1,0);
sprintf(str2,"
write(fd[1],str2,40);
lockf(fd[0],0,0);
sleep
(2);
}
else{
lockf(fd[1],1,0);
read(fd[0],str1,40);
printf("
%s"
str1);
lockf(fd[1],0,0);
sleep(3);
}
3.5.实验结果
结果如下图所示:
图表1进程控制
图表2进程软中断通讯
图表3进程管道通讯
3.6.实验分析
进程控制实验同实验一其实是一样的,而进程软中断通讯接触到两个陌生的函数,分别是kill和signal函数,分别是发送信号和接受信号的函数,使用它们两个可以让某进程实现向指定进程发送信号,以及接受处理发给自己的信号。
至于进程管道通讯,要使用lockf函数锁定管道的读写端以免两个进程同时访问管道,导致冲突,当然还有使用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告