操作系统实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统原理实验报告

实验一:用户接口实验

一.实验目的

1)理解面向操作命令的接口Shell。

2)学会简单的shell编码。

3)理解操作系统调用的运行机制。

4)掌握创建系统调用的方法。

二.实验内容

1)控制台命令接口实验

该实验是通过“几种操作系统的控制台命令”、“终端处理程序”、“命令解释程序”和“Linux操作系统的bash”来让实验者理解面向操作命令的接口shell 和进行简单的shell编程。

查看bash版本。

编写bash脚本,统计/my目录下c语言文件的个数

2)系统调用实验

该实验是通过实验者对“Linux操作系统的系统调用机制”的进一步了解来理解操作系统调用的运行机制;同时通过“自己创建一个系统调用mycall()”

和“编程调用自己创建的系统调用”进一步掌握创建和调用系统调用的方法。

编程调用一个系统调用fork(),观察结果。

编程调用创建的系统调用foo(),观察结果。

自己创建一个系统调用mycall(),实现功能:显示字符串到屏幕上。

编程调用自己创建的系统调用。

三.实验原理

1.控制台命令接口

操作系统向用户提供一组控制台命令,用户可以通过终端输入命令的方式获得操作系统的服务,并由此来控制自己作业的运行。一般来讲,控制台命令应该

包含:一组命令、终端处理程序以及命令解释程序。

1)bash的由来

当登录Linux或者打开一个xterm时,当前默认的shell就是bash。Bash是GNU

Project的shell。GNU Project是自由软件基金会(Free Software Foundation)的一

部分。它对Linux下的许多编程工具负责。Bash(Bourne Again Shell)是自由软件基金会发布的Bourne shell的兼容程序。它包含了其他有些shell的许多良好的特性,功能非常的全面。很多Linux版本都供bash。

2)bash的大致原理

bash处理自己的脚本时,先找到需要处理的命令名称,进而在当前用户的默

认命令目录中找到对应的命令,这些默认目录一般是/usr/bin、/bin或/sbin。在执行这些命令时,先使用进程创建系统调用fork(),在使用exex()来执行这些命令。

2.系统调用

系统调用是操作系统为程序员提供的接口服务。使用系统调用,程序员可以更充分的利用计算机资源,使编写的程序更加灵活,功能更加强大。程序员在对系统充分了解的情况下甚至可以订做系统调用,实现那些非专业程序员所难以实现的功能。

四.实验步骤

1.控制台命令接口实验指导

1)查看bash版本

在shell提示符下输入:

$echo $BASH_VERSION

显示如下结果:

2)编写bash脚本:统计/my目录下c语言文件的个数

通过bash脚本,可以有多种方式实现这个功能,而使用函数是其中个一个选择。在使用函数之前,必须先定义函数。

(1)进入自己的工作目录,用vi编写名为count的文件

cd /home/student #在home/student目录下编程

vi count

下面是脚本程序:

#! /bin/bash

function count

{

echo –n " Number of matches for $1: " #接收程序的第一个参数

ls $1|wc –l #对子程序的第一个参数所在的目录进行操作}

(2)执行

将count文件复制到当前目录下,然后在当前目录下建立文件夹my:

mkdir my

3)cd my

vi 1.c #在my目录下建立几个c文件,以便用来进行测试

...

cd ...

chmod +x count

count ./my/*.c

2.系统调用实验指导

1)编程调用一个系统调用fork()

在应用程序中调用系统调用fork()非常简单,下面的程序可以很清楚的显示出有fork()系统调用生成了子进程,而产生的分叉作用:

# include

int main()

{

int iUid;

iUid=fork();

if(iUid==0)

for(;;) { printf("This is parent.\n");

sleep(1);

}

if(iUid>0)

for(;;) {

printf("This is child.\n");

sleep(1);

}

if(iUid<0) printf("Can not use system call.\n");

return 0;

}

下面是可能得到的一种结果:

this is child.

this is parent.

this is child.

this is parent.

this is parent.

this is child.

this is child.

this is parent.

this is parent.

this is child.

this is child.

this is parent.

this is parent.

this is child.

执行结果:

五.实验结果分析:

1.学会了基本的文件操作以及函数执行,验证了结果;

2.父进程与子进程交替执行系统调用,由于完成系统调用后都会睡眠,所以其他

进程可以执行,得到上述结果。

六.实验总结:

本次实验通过内核编译的方式来了解操作系统的具体调用方式。在此过程中主要是熟悉Linux系统的几种终端命令上。通过此次操作系统实验,我对Linux 操作系统内核有了初步的了解。

相关文档
最新文档