西安交通大学实验报告
操作系统实验报告
岳凡 2130505141 计算机36班
操作系统实验
实验一:用户接口实验 实验目的
1) 理解面向操作命令的接口Shell。 2) 学会简单的shell编码。 3) 理解操作系统调用的运行机制。 4) 掌握创建系统调用的方法。
操作系统给用户提供了命令接口和程序接口(系统调用)两种操作方式。用户接口实验也因此而分为两大部分。首先要熟悉Linux的基本操作命令,并在此基础上学会简单的shell编程方法。然后通过想Linux内核添加一个自己设计的系统调用,来理解系统调用的实现方法和运行机制。在本次实验中,最具有吸引力的地方是:通过内核编译,将一组源代码变成操作系统的内核,并由此重新引导系统,这对我们初步了解操作系统的生成过程极为有利。
实验内容
1) 控制台命令接口实验
该实验是通过“几种操作系统的控制台命令”、“终端处理程序”、“命令解释程序”和“Linux操作系统的bash”来让实验者理解面向操作命令的接口shell和进行简单的shell编程。
? 查看bash版本。 在 shell 提示符下输入: $echo $BASH_VERSION 我们的版本是4.3.42(1)-release
(2)建立 bash 脚本,输出 Hello word
在编辑器中输入以下内容 #!/bin/bash echo Hello World!
执行脚本使用指令: $./script
? 编写bash脚本,统计/my目录下c语言文件的个数
通过 bash 脚本,可以有多种方式实现这个功能,而使用函数是其中个一个选择。在使用函数之前,必须先定义函数。进入自己的工作目录,编写名为 count 的文件脚本程序: #! /bin/bash function count { echo
–n \
#接收程序的第一个参数
ls $1|wc –l }
#对子程序的第一个参数所在的目录进行操作
将 count 文件复制到当前目录下,然后在当前目录下建立文件夹,在 my 目录下建立几个 c 文件,以便用来进行测试 2) 系统调用实验
该实验是通过实验者对“Linux操作系统的系统调用机制”的进一步了解来理解操作系统调用的运行机制;同时通过“自己创建一个系统调用mycall()”和“编程调用自己创建的系统调用”进一步掌握创建和调用系统调用的方法。 ? 编程调用一个系统调用fork(),观察结果。
在应用程序中调用系统调用fork()非常简单,下面的程序可以很清楚的显示出有fork()系统调用生成了子进程,而产生的分叉作用:
# include
int main() {
int iUid; iUid=fork(); if(iUid==0)
for(;;) { printf(\
sleep(1);
} if(iUid>0) }
if(iUid<0) printf(\return 0;
for(;;) {
printf(\sleep(1);
}
程序运行结果:
? 编程调用创建的系统调用foo(),观察结果。 在内核源码中添加如下代码: asmlinkage int sys_foo(int x) { printf(“%d\\n”,x); }
编程调用创建的系统调用 foo(),观察结果。 #include
#include
int I,J; I=100; J=0; J=foo(I);
printf(\printf(\}
重新编译内核,编译成功后的内核版本如下:
? 自己创建一个系统调用mycall(),实现功能:显示字符串到屏幕上。 在内核源码中添加如下代码: #include
//printk(\ return(i*10); }
测试新的System_call CODE: vi test.c
? 编程调用自己创建的系统调用。