操作系统实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++)

相关文档
最新文档