操作系统实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一Linux基本命令的使用
一、实验学时:
1学时
二、实验目的:
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复制到用户的家目录并展开压缩文件。
实验二进程的创建
一、实验学时:
1学时
二、实验目的:
1、加深对进程概念的理解,明确进程和程序的区别
2、进一步认识并发执行的实质
三、实验内容:
1、阅读linux的fork.c源码文件,分析进程的创建过程
2、学会在linux环境下编程及使用gcc编译器
3、编写一个输出“Hello world”的程序
4、编写一段程序,使用系统调用fork()函数创建两个子进程。当此程序运行时,在
系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。
【程序】
#include
main()
{
int p1,p2;
while((p1=fork())= =-1); /*创建子进程p1,失败时循环*/
if(p1= =0) /*子进程p1创建成功*/
putchar(…b‟);
else /*父进程返回*/
{
while((p2=fork())= =-1); /*创建另一个子进程p2,失败时循环*/
if(p2= =0) /*子进程p2创建成功*/
putchar(…c‟);
else
putchar(…a‟); /*父进程执行*/
}
}
5、修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时
屏幕上出现的现象,并分析其原因。
【程序1】
#include
main()
{
int p1,p2,i;
while((p1=fork())= =-1);
if(p1= =0)
for(i=0;i<50;i++)
printf(“child %d\n”,i);
else
{
while((p2=fork())= =-1)
if(p2= =0)
for(i=0;i<50;i++)
printf(“son %d\n”,i);
else
for(i=0;i<50;i++)
printf(“daughter %d\n”,i);
}
}
实验三进程的管理
一、实验学时:
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);
}
}
〈程序1〉
#include
main()
{
int p1,p2,i;
if(p1=fork())
{
for(i=0;i<500;i++)
printf("parent%d\n",i);
wait(0); /* 保证在子进程终止前,父进程不会终止*/
exit(0);
}
else
{
if(p2=fork())
{
for(i=0;i<500;i++)
printf("son %d\n",i);
wait(0); /* 保证在子进程终止前,父进程不会终止*/
exit(0); /*向父进程信号0且该进程推出*/
}
else
{
for(i=0;i<500;i++)