操作系统实验内容
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一Linux基本命令的使用实验
(一)实验学时:2学时
(二)实验类型:验证
(三)实验目的:
1. 掌握监视系统的几个Linux基本命令:
PS--查看系统的进程
tty--查看当前使用的终端
df--查看系统的文件系统的空间使用情况
du--查看具体某个文件和目录的磁盘空间的占用情况
free--查看使用的内存资源的情况
2. 掌握Linux下的联机帮助手册的使用
3. 掌握Linux命令的简要帮助的获取方法
4. 掌握一些其他常用的Linux命令:
adduser--添加新用户
passwd--修改用户口令
ls--查看文件属性
cal--显示日历
date--显示系统的日期和时间
clear--清屏
find--查找文件
uname--查看系统信息
who--查看其他登录的用户
which--查看命令的全路径
tar--Linux下的压缩与解压缩命令
(四)实验内容:
1.以root用户身份登陆,并使用“ls”、“cat”、“cd”等命令来实现基本的文件操作并观察
Linux文件系统的特点。
2.使用ps查看系统的进程运行情况,使用不同的命令选项并比较显示结果的差别;查
看当前系统已安装的文件系统的空间使用情况;查看用户的家目录占用了多少空间;
查看使用的内存资源的情况。
3.查看ls命令的详细使用方法,查看ps命令的详细使用方法。
4.获取ls命令的简要帮助信息,获取ps命令的简要帮助信息。
5.用cal命令显示日历,用date命令显示系统的日期和时间,用clear清除屏幕,用find
命令在系统中查找文件ch1.doc,用uname命令查看系统的信息,用who命令查看其他登录的用户,用which命令查看一些命令的全路径,用tar命令来压缩test目录下的所有后缀为doc的文件到文件doc.tar.gz中,将doc.tar.gz复制到用户的家目录并展开压缩文件。
实验二进程的创建实验
(一)实验学时:2学时
(二)实验类型:验证
(三)实验目的:
1、加深对进程概念的理解,明确进程和程序的区别
2、进一步认识并发执行的实质
(四)实验内容:
1、阅读linux的fork.c源码文件,分析进程的创建过程
2、学会在linux环境下编程及使用gcc编译器
3、编写一个输出“Hello world”的程序
4、编写一段程序,使用系统调用fork()函数创建两个子进程。当此程序运行时,在
系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“ c”。
5、修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时
屏幕上出现的现象,并分析其原因。
实验三进程的管理实验
(一)实验学时:2学时
(二)实验类型:验证
(三)实验目的:
分析进程争用资源的现象,学习解决进程互斥的方法
(四)实验内容:
1、阅读linux的sched.h源码文件,加深对进程管理概念的理解
2、在以下程序中使用系统调用lockf()来给进程加锁,实现进程之间的互斥,观察并
分析出现的现象
#include
main()
{
int p1,p2,i;
while((p1==fork())==-1);
if(p1==0)
for(i=0;i<500;i++)
printf("child%d\n",i);
else
{while((p2==fork())==-1);
if(p2==0)
for(i=0;i<500;i++)
printf("son%d\n",i);
else
for(i=0;i<500;i++)
printf("daughter%d\n",i);
}
}
实验四进程软中断通信实验
(一)实验学时:2学时
(二)实验类型:验证
(三)实验目的:
1.了解linux系统中进程软中断通信的基本原理
2.了解signal(SIGINT,SIG_IGN)和signal(SIGQUIT,SIG_IGN)两条语句的功能
(四)实验内容:
1.在程序中使用系统调用fork()来创建进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按del键),当捕捉到中断信号后,父进程用系统调用kill ()向两个子进程发出信号,观察并分析出现的现象
#include
#include
void waiting(),stop();
int wait_mark:
main(){
int p1,p2;
while((p1==fork())==-1);
if(p1>0){
while((p2==fork())==-1);
if(p2>0){wait_mark=1;
signal(SIGNAL,stop);
waitting(0);
kill(p1,16);
kill(p2,17);
wait(0);
wait(0);
printf("parent process is killed !\n");
exit(0);
}
else
{wait_mark=1;
signal(17,stop);
waitting();
lockf(stdout,1,0);
printf("child process2 is killed by parent !\n");
lockf(stdout,0,0);
exit(0);}
}
else
{wait_mark=1;
signal(16,stop);
waitting();
lockf(stdout,1,0);
printf("child process 1 is killed by parent ! \n");