西安交通大学操作系统课内实验报告.docxVIP

  • 19
  • 0
  • 约8.61千字
  • 约 19页
  • 2018-12-21 发布于浙江
  • 举报

西安交通大学操作系统课内实验报告.docx

西安交通大学实验报告 操作系统实验报告 岳凡 2130505141 计算机36班 操作系统实验 实验一:用户接口实验 实验目的 理解面向操作命令的接口Shell。 学会简单的shell编码。 理解操作系统调用的运行机制。 掌握创建系统调用的方法。 操作系统给用户提供了命令接口和程序接口(系统调用)两种操作方式。用户接口实验也因此而分为两大部分。首先要熟悉Linux的基本操作命令,并在此基础上学会简单的shell编程方法。然后通过想Linux内核添加一个自己设计的系统调用,来理解系统调用的实现方法和运行机制。在本次实验中,最具有吸引力的地方是:通过内核编译,将一组源代码变成操作系统的内核,并由此重新引导系统,这对我们初步了解操作系统的生成过程极为有利。 实验内容 控制台命令接口实验 该实验是通过“几种操作系统的控制台命令”、“终端处理程序”、“命令解释程序”和“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 Number of matches for $1: #接收程序的第一个参数 ls $1|wc –l #对子程序的第一个参数所在的目录进行操作 } 将 count 文件复制到当前目录下,然后在当前目录下建立文件夹,在 my 目录下建立几个 c 文件,以便用来进行测试 系统调用实验 该实验是通过实验者对“Linux操作系统的系统调用机制”的进一步了解来理解操作系统调用的运行机制;同时通过“自己创建一个系统调用mycall()”和“编程调用自己创建的系统调用”进一步掌握创建和调用系统调用的方法。 编程调用一个系统调用fork(),观察结果。 在应用程序中调用系统调用fork()非常简单,下面的程序可以很清楚的显示出有fork()系统调用生成了子进程,而产生的分叉作用: # include stdio.h int main() { int iUid; iUid=fork(); if(iUid==0) for(;;) { printf(This is child process.\n); sleep(1); } if(iUid0) for(;;) { printf(This is parent process.\n); sleep(1); } if(iUid0) printf(Can not use system call.\n); return 0; } 程序运行结果: 编程调用创建的系统调用foo(),观察结果。 在内核源码中添加如下代码: asmlinkage int sys_foo(int x) { printf(“%d\n”,x); } 编程调用创建的系统调用 foo(),观察结果。 #include stdio.h #include linux/unistd.h _syscall1(char*,foo,int,ret) main() { int I,J; I=100; J=0; J=foo(I); printf(This is the result of new kernel\n); printf(%d,j); } 重新编译内核,编译成功后的内核版本如下: 自己创建一个系统调用mycall(),实现功能:显示字符串到屏幕上。 在内核源码中添加如下代码: #includelinux/linkage.h asmlinkage long sys_newcall(int i) { //printk(this is a system call made by yourself\n); return(i*10); } 测试新的System_call CODE: vi test.c 编程调用自己创建的系统调用。 测试:CODE:./test 实验体会: 通过本次实验,我们

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档