第9章 操作系统接口
一、用户接口
1. 字符显示式联机用户接口
(1)命令行方式
该方式是以行为单位,输入和显示不同的命令。每行长度一般不超过256个字符,一般情况下,以回车符作 为一个命令的结束标记。通常,命令的执行采用的是间断式的串行执行方式,即后一个命令的输入一般需等到前 一个命令执行结束。
简单命令的一般形式为:
Command arg1 arg2...argn
其中Command 是命令名,又称命令动词,其余为该命令所带的执行参数,有些命令可以没有参数。
(2)批命令方式
操作系统都支持一种称为批命令的特别命令方式,允许用户预先把一系列命令组织在一种称为批命令文件的 文件中,一次建立,多次执行。使用这种方式可减少用户输入命令的次数,既节省了时间,减少了出错概率,又 方便了用户。通常批命令文件都有特殊的文件扩展名,如MS-DOS 系统的.BAT 文件。
2. 图形化联机用户接口
字符显示式用户接口要牢记各种命令的动词和参数,必须严格按规定的格式输入命令,而且不同操作系统所 提供的命令语言的词法、语法、语义及表达形式是不一样的,这样既不方便又花费时间。于是,图形化用户接口 GUI(Graphics User Interface)便应运而生。
3. 联机命令的类型
(1)系统访问类
(2)文件操作命令
①显示文件命令type。
②拷贝文件命令 copy。
③文件比较命令 comp。
④重新命名命令Rename。
⑤删除文件命令erase。
(3)目录操作命令
①建立子目录命令mkdir。
②显示目录命令dir。
③删除子目录命令rmdir。
④显示目录结构命令tree。
⑤改变当前目录命令chdir。
(4)其他命令
①输入输出重定向命令。
②管道连接。
③过滤命令。
④批命令。
二、Shell 命令语言
1. 简单命令简介
(1)简单命令的格式
简单命令的格式比较自由,包括命令名字符的个数及用于分隔命令名、选项、各参数间的空格数等,都是任 意的。一条命令可有多个选项,用于改变命令执行动作的类型。命令的格式如下:
$Command-option argument list
(2)简单命令的分类
①根据创建者分类
a. 系统提供的标准命令。
b. 用户自定义的命令。
②根据命令是否包含在 Shell内部分类
a. 内部命令。
b. 外部命令。
(3)Shell 的种类
①Bourne Shell
B Shell 比 C Shell要小和简单,执行效率却比C Shell高,但交互性方面相对较差。
②C Shell
C Shell不仅和B Shell提示符兼容,而且还提供比B Shell更多的提示符参数。
③Kom Shell
Kom Shell集合了C Shell和 B Shell的优点,并且和B Shell完全兼容。
2. 简单命令的类型
(1)进入与退出系统
① 进入系统。
②退出系统。
(2)文件操作命令
①显示文件内容命令cat。
② 复制文件副本的命令cp。
③对已有文件改名的命令mv。
④撤消文件的命令rm。
⑤确定文件类型的命令file。
(3)目录操作命令
①建立目录的命令mkdtr (简称md)。
②撤消目录的命令rmdir (简称rd)。
③改变工作目录的命令cd。
(4)系统询问命令
①访问当前日期和时间命令date。
②询问系统当前用户的命令who。
③显示当前目录路径名的命令pwd。
3. 重定向与管道命令
(1)重定向命令
Shell向用户提供了一种用于改变输入、输出设备的手段(例如输出到指定文件,而非屏幕),此即标准输入 与标准输出的重新定向。用重定向符“<”和“>”分别表示输入转向与输出转向。
(2)管道命令
进一步把重定向思想加以扩充,用符号“|”来连接两条命令,使其前一条命令的输出作为后一条命令的输 入 。
4. 通信命令
(1)信箱通信命令mail
信箱通信是作为在UNIX 的各用户之间进行非交互式通信的工具。
(2)对话通信命令write
用这条命令可以使用户与当前在系统中的其他用户直接进行联机通信。由于UNIX 系统允许一个用户同时在 几个终端上注册,故在用此命令前,要用who 命令去查看目标用户当前是否联机,或确定接收者所使用的终端 名。
(3)允许或拒绝接收消息的mesg 命令
5. 后台命令
有些命令需要执行很长的时间,UNIX 系统提供了一种机制,用户可以在这种命令后面再加上“&”号,以 告诉Shell 将该命令放在后台执行,以便用户能在前台继续键入其他命令,完成其他工作。
三、联机命令接口的实现
1. 键盘终端处理程序
(1)字符接收功能
①面向字符方式
驱动程序只接收从终端打入的字符,并且不加修改地将它传送给用户程序。这通常是一串未加工的ASCII 码。
②面向行方式
终端处理程序将所接收的字符暂存在行缓冲中,并可对行内字符进行编辑。仅在收到行结束符后,才将一行 正确的信息送命令解释程序。
(2)字符缓冲功能
①专用缓冲方式
系统为每个终端设置一个缓冲区,暂存用户键入的一批字符。这种方式较适合于单用户微机或终端很少的多 用户机。如图9-1 (a) 所示。
②公用缓冲方式
利用公用缓冲池方式可有效地提高缓冲的利用率,如图9-1 (b) 所示。
(3)回送显示
回送显示(回显)是指每当用户从键盘输入一个字符后,终端处理程序便将该字符送往屏幕显示。
(4)屏幕编辑
①删除字符键。
②删除一行键。
③插入键。
④移动光标键。
⑤屏幕上卷或下移键。
(5)特殊字符处理
①中断字符。
②停止上卷字符。
③恢复上卷字符。
2.MS-DOS 解释程序
(1)命令解释程序的作用
命令解释程序的主要作用是在屏幕上给出提示符,请用户键入命令,然后读入该命令,识别命令,再转到相 应命令处理程序的入口地址,把控制权交给该处理程序去执行,并将处理结果送屏幕上显示。若用户键入的命令 有错,而命令解释程序未能予以识别,或在执行中间出现问题时,则应显示出某一出错信息。
(2)命令解释程序的组成
①常驻部分。
② 初始化部分。
③暂存部分。
(3)命令解释程序的工作流程
命令解释程序的工作流程如图9-2所示。
图9-2 COMMAND.COM的工作流程
3.Shell 解释程序
(1)Shell 命令的特点
①一条命令行中含有多个命令。
②具有不同的分隔符。
(2)二叉树结构的命令行树
①命令表型结点
在执行时,对于“;”型结点,先递归地执行其左子树,待其左子数执行完后,再执行其右子树。
②管道文件型结点
当Shell 命令解释程序遇到管道算符“I” 时,先为之建立一个管道文件型结点。再将分隔符左面部分构成该 结点的左子树,右面部分构成右子树。
③简单命令型结点
对于简单命令,无需为它建立二叉树结构的命令行树。
(3)Linux 命令解释程序的工作流程
①读取用户由键盘输入的命令行。
②对命令进行分析。
③建立相应的子进程。
④等待子进程完成。
⑤ 对于“&”型结点,在启动其左子结点执行后,不需要等待,执行其右子树。
四、系统调用的概念和类型
1. 系统调用的基本概念
(1)系统态和用户态
①特权指令
特权指令是指在系统态运行的指令。
②非特权指令
非特权指令是在用户态运行的指令。
(2)系统调用
系统调用在本质上是应用程序请求OS 内核完成某功能时的一种过程调用,它与一般的过程调用有下述几方 面的差别:
①运行在不同的系统状态。
②状态的转换。
③返回问题。
④嵌套调用。
(3)中断机制
系统调用是通过中断机制实现的,并且一个操作系统的所有系统调用,都通过同一个中断入口来实现。
2. 系统调用的类型
(1)进程控制类系统调用
①创建和终止进程的系统调用。
②获得和设置进程属性的系统调用。
③等待某事件出现的系统调用。
(2)文件操纵类系统调用
①创建和删除文件。
②打开和关闭文件的系统调用。
③读和写文件的系统调用。
(3)进程通信类系统调用
①消息传递方式。
②共享存储区方式。
3.POSIX 标准
UNIX/Linux 系统程序、库函数、系统调用的分层关系如图9-3所示。
图9-3 UNIX/Linux 系统程序、库函数、系统调用的分层关系
五、UNIX 系统调用
1. 进程控制
(1)进程的创建和终止
①创建进程 (fork)。
②终止进程 (exit)。
(2)改变进程映像和等待
①执行一个文件(exec)。
②等待子进程结束(wait)。
(3)其他进程调用
①获得进程ID。
②获得用户ID。
③进程暂停 (pause)。
2.文件操纵
(1)文件的创建和删除
①创建文件 (creat)。
②删除文件。
在UNIX 系统中没有专门的删除文件的系统调用,故无人可对文件进行删除,只有当文件的确已无人需要时 才删除它。
(2)文件的打开和关闭
①打开文件(open)。
②关闭文件 (close)。
(3)文件的读和写
①文件的读。
②文件的写。
③读和写的前提。
仅当用户利用open 打开指定文件后,方可调用read 或 write 对文件执行读或写操作。
(4)建立与文件的连接和去连接
①连接(link)。
②去连接(unlink)。
3. 进程通信和信息保护
(1)进程通信
为了实现进程间的通信,在UNIX 系统中提供了一个用于进程间通信的软件包,简称 IPC。它由消息机制、 共享存储器机制和信号量机制三部分组成。
(2)信息维护
①设置和获得时间。
②获得进程和子进程时间(times)。
③设置文件访问和修改时间(utime)。
④获得当前UNIX 系统的名称 (uname)。
六、系统调用的实现
1. 系统调用的实现方法
(1)系统调用号和参数的设置
①系统调用号。
②参数的设置
a. 陷入指令自带方式。
b. 直接将参数送入相应的寄存器中。
c. 参数表方式。
(2)系统调用的处理步骤
①将处理机状态由用户态转为系统态,然后保存中断进程的相关信息;
②分析系统调用类型,转入相应的系统调用处理子程序;
③ 在系统调用处理子程序执行完后,应恢复被中断的或设置新进程的CPU 现场,然后返回被中断进程或新进程,继续往下执行。
2.UNIX 系统调用的实现
(1)CPU 环境保护。
(2)AP 和 FP 指针。
(3)确定系统调用号。
(4)参数传送。
(5)利用系统调用定义表转入相应的处理程序。
(6)系统调用返回前的公共处理。
3.Linux 系统调用
(1)系统调用组成
①内核函数。
②接口函数。
(2)工作流程
①取系统调用号,检验合法性;
②执行int 80h产生中断;
③进行地址空间的转换,以及堆栈的切换,进入内核态;
④进行中断处理,根据系统调用号定位内核函数地址;
⑤根据通用寄存器内容,从用户栈中取入口参数;
⑥核心函数执行,把结果返回应用程序。