欢迎来到天天文库
浏览记录
ID:51863104
大小:292.08 KB
页数:32页
时间:2020-03-17
《操作系统课内实验指导书.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、操作系统课内实验指导书 操作系统原理课内实验指导书实验一用户接口实验准备知识为了使用户通过操作系统完成各项管理任务,操作系统必须为用户提供各种接口来实现人机交互。 经典的操作系统理论将操作系统的接口分为控制台命令和系统调用两种。 前者主要提供给计算机的操作人员对计算机进行各种控制;而后者则提供个程序员,使他们可以方便地使用计算机的各种资源。 1.控制台命令接口操作系统向用户提供一组控制台命令,用户可以通过终端输入命令的方式获得操作系统的服务,并由此来控制自己作业的运行。 一般来讲,控制台命令应该包含一组命令、终端处理程序以及命令解释程序。 1)bash的由来当登录Linux或者
2、打开一个xterm时,当前默认的shell就是bash。 Bash是GNUProject的shell。 GNUProject是自由软件基金会(FreeSoftwareFoundation)的一部分。 它对Linux下的许多编程工具负责。 Bash(BourneAgainShell)是自由软件基金会发布的Bourneshell的兼容程序。 它包含了其他有些shell的许多良好的特性,功能非常的全面。 很多Linux版本都供bash。 2)bash的大致原理bash处理自己的脚本时,先找到需要处理的命令名称,进而在当前用户的默认命令目录中找到对应的命令,这些默认目录一般是/usr
3、/bin、/bin或/sbin。 在执行这些命令时,先使用进程创建系统调用fork(),在使用exex()来执行这些命令。 3)建立bash脚本?文件可以用最熟悉的器来这个文本文件,比如文件名为script,在shell下输入$viscript#!/bin/bashEchoHelloWorld!然后保存,退出。 ?测试脚本。 使用指令$sourcescript?更改脚本属性使用指令$chmoda+xscript将脚本程序设置为可执行。 ?执行脚本使用指令$./script4)关键字参考Echo在终端上显示Bash特殊变量1~9,保存当前进程或脚本的前9个参数。 Ls列举文教案W
4、c统计数量Function定义函数2.系统调用系统调用是操作系统为程序员提供的接口服务。 使用系统调用,程序员可以更充分的利用计算机资源,使编写的程序更加灵活,功能更加强大。 程序员在对系统充分了解的情况下甚至可以订做系统调用,实现那些非专业程序员所难以实现的功能。 1)添加源代码第一个任务是编写添加到内核的源程序,即添加到内核文件中的一个函数。 该函数的名称应该是在新的系统调用名称之间前加上sys_标志。 假设新加的系统调用为foo(),功能为原值返回输入的整型数。 格式为intfoo(intiNumber),返回的值就是出入的参数。 在/usr/src/linux/ker
5、nel/sys.c文件中添加源代码,如下所示Asmlinkageintsys_foo(intx){printf(“%d”,x);}注意目录“/usr/src/linux“是linux各个版本的统称,它因系统内核的版本不同而名称不同。 例如,当前操作系统是Linux7.1器内核四Linux-2.4.2,所以在”usr/src”目录下有两个文件Linux-2.4和Linux-2.4.2,其中Linux-2.4是Linux-2.4.2的连接文件,程序员可以进入任何一个目录,它对内核的修改都是一样的。 2)连接新的系统调用添加新的系统调用之后,下一个任务是让Linux内核的其余部分知道该程
6、序的存在。 为了从已有的内核程序中增加新函数的链接,需要进行下面的操作 (1)进入目录/usr/src/linux/include/asm-i386/,打开文件unistd.h。 这个文件包含了系统调用的清单,用来给每个系统调用分配一个唯一的号码。 系统调用号的定义格式如下#define_NR_nameNNN其中,name以系统调用名称代替,而NNN是该系统调用对应的号码,应该将新的系统调用名称放到清单的最后,并给它分配已经用到的系统调用号后面的一个号码,比如#define_NR_foo222以上的系统调用号便是222。 Linux内核自身用的系统调用号已经用到了221了。 如
7、果读者还要自行增加系统调用,就必须从223开始。 (2)进入/usr/src/linux/arche/i386/kernel/,打开文件entry.S。 该文件中有类似下面的清单ENTRY(sys_call_table).longSYSMBOL_NAME(sys_ni_syscall).longSYSMBOL_NAME(sys_exitl).longSYSMBOL_NAME(sys_fork)….在该表的最后加上.l
此文档下载收益归作者所有