9.1 用户接口
1.用户接口类型
用户接口可分为以下三种类型:
(1)字符显示式联机用户接口。字符显示式联机用户接口,也称作联机命令接口,它允许用户在终端上键入命令,以取得OS的服务。用户还可以使用批命令方式,预先把一系列命令组织在一种称为批命令文件的文件中,以后在终端上键入批命令文件名,或者在图形化用户接口中双击该批命令文件,便可按该文件中各个命令出现的顺序来逐个运行它们。.
(2)图形化用户接口GUI(Graphics User Interface)。图形化用户接口可以看成是命令接口的图形化,它采用了WIMP 技术,将窗口(Window)、图标(Icon)、 菜单(Menu)、鼠标(Pointing device)和面向对象技术等集成在-起,用图标将系统的各项功能、各种应用程序和文件直观、逼真地表示出来。用户可通过窗口、图标、菜单、对话框以及鼠标和键盘,更轻松地完成对应用程序和文件的操作。
(3) 脱机用户接口。脱机用户接口是为批处理作业的用户提供的,该接口由作业控制语言JCL组成,它向用户提供了一组作业控制命令。用户用JCL把需要系统对作业进行的控制和干预事先写在作业说明书上,然后将它连同作业一起提交给系统。当系统调度到该作业运行时,由系统中的命令解释程序对作业说明书上的命令逐条地解释执行,直至遇到作业结束语句时,系统才停止该作业的运行。2.联机命令的类型
(1)系统访问类命令。这类命令包括进入系统命令login和退出系统命令logout,用在多用户系统中,其目的是用于识别用户的身份是否合法,从而保证整个系统的安全性。
(2)文件操作类命令。这类命令可供用户进行显示文件内容、复制文件副本、更改文件名、删除文件、比较文件内容、确定文件类型等操作。
(3)目录操作类命令。这类命令可供用户进行建立目录、删除目录、改变工作目录、显示目录内容等操作。
(4)磁盘操作类命令。这类命令可供用户进行磁盘格式化、拷盘、磁盘内容比较、磁盘内容备份等操作。
(5)其他命令。如输入输出重定向命令,重定向“>”符用来将其左边命令产生的标准输出,输出到其右边的文件中;重定向“<”符用来将其右边文件的内容,作为其左边命令的输入信息。管道连接命令,管道连接符“1”可用来把其左边命令的输出信息作为其右边命令的输入信息等。
9.2 联机命令接口的实现
1.键盘终端处理程序
2.命令解释程序
3.shell命令语言
9.3 系统调用
1.系统调用的基本概念
由于OS的特殊性,使应用程序不能采用一般的过程调用方式去调用OS中的过程,而必须利用一种系统调用命令去调用所需的系统过程。可见,系统调用是--种特殊的过程调用,它与一般的过程调用有下述几方面的明显差别:
(1)运行在不同的系统状态。一般的过程调用,其调用程序和被调用程序都运行在相同的状态——系统态或用户态; 而系统调用与一般调用的最大区别就在于:调用程序是运行在用户态,而被调用程序是运行在系统态。
(2)通过软中断进入。由于一般过程调用并不涉及到系统状态的转换,故可直接由调用过程转向被调用过程。但在运行系统调用时,由于调用和被调用过程是工作在不同的系统状态,因而不允许由调用过程直接转向被调用过程,通常都是通过软中断机制,先由用户态转换为系统态,经核心分析后,才能转向相应的系统调用处理子程序。
(3)返回问题。一般的过程调用在被调用过程执行完后,将直接返回到调用过程继续执行。但对系统调用,如果系统采用抢占调度方式,则在被调用过程执行完后,必须对系统中所有要求运行的进程做优先权分析。只有当调用进程仍具有最高优先权时,才返回到调用进程继续执行;否则,将引起重新调度。2.系统调用的类型
一个 OS的功能通常可通过它所提供的系统调用体现出来。尽管不同的OS所提供的系统调用无论是在数目、格式上,还是在功能上,都存在一定的差异, 但对于一般通用的OS而言,其所提供的系统调用大致上可以分为以下几类:
(1)进程控制类系统调用。这类系统调用主要用于对进程的控制,如创建和终止进程的系统调用,获得和设置进程属性的系统调用等。
(2)文件操作类系统调用。用来对文件进行操作的系统调用数量较多,其中包括创建文件、删除文件、打开文件、关闭文件、读文件、写文件、建立目录、移动文件的读/写指针、改变文件的属性等系统调用。
(3)进程通信类系统调用。这类系统调用被用来在进程间传递消息和信号,其中包括消息系统中的建立连接、接受连接、关闭连接、发送消息、接收消息等系统调用,以及共享存储区通信中的建立共享存储区、与共享存储区建立连接、读共享存储区、写共享存储区等系统调用。
(4)系统维护类系统调用。这类系统调用用来实现对系统的日常维护,其中包括设置和获得系统的当前日期和时间、获得进程和子进程所使用的CPU时间、设置文件访问和修改的时间、了解内存的使用情况和操作系统的版本号等系统调用。3.系统调用的实现
(1)系统调用指令。系统调用必须借助于CPU提供的机器指令来实现。不同的机器所提供的系统调用指令--般是不同的,如IBM个人机上的INT指令、SUN工作站上的TRAP指令、SGI工作站上的SYSCALL指令等。系统调用指令的执行,将引起特殊的中断,即软中断或陷入,从而使系统根据相应的中断向量转入相应的系统调用总控程序。
(2)系统调用号和参数的传递。在一个系统中往往设置了多条系统调用,并赋予每条系统调用一个唯一的系统调用号:而每条系统调用又允许带若千个参数。如何将系统调用号和相应的参数传递给系统,将取决于系统调用指令的格式和具体操作系统的实现。某些机器,将系统调用号和参数作为操作数直接包含在系统调用指令中:而另一-些机器, 则将系统调用号和参数存放在操作系统指定的寄存器中传递给系统;还有一些机器 则将参数存放在一张参数表中,再将指向该参数表的指针作为系统调用指令的操作数或存放在某个指定的寄存器中传递给系统。.
(3)系统调用的处理步骤。在设置了系统调用号和参数后,再执行系统调用指令便可执行系统调用,它的处理过程如下:首先,系统产生软中断(或陷入),由硬件进行现场保护,并通过中断向量转向系统调用总控程序,同时,处理机的状态将由用户态转为系统态。然后,由系统调用总控程序进行系统调用的一般性处理,并根据系统调用号和系统内部的系统调用入口表(其中的每个表目对应于一条系统调用,并给出了该系统调用自带参数的数目、系统调用处理子程序的入口地址等)转入相应的系统调用处理子程序。最后,在系统调用处理子程序执行完后,应恢复被中断进程或新进程(若重新调度)的CPU现场,再返回被中断进程或新进程,继续往下处理。
由上所述可知,系统调用的实现不仅取决于具体的操作系统,而且与机器特性密切相关,因此,一般它总是以汇编的方式来实现的。为了方便用户,许多操作系统向用户提供一个调用汇编系统调用的C库,其中将系统调用号和参数的传递以及系统调用指令等细节屏蔽起来,使得用户可像使用普通C函数那样使用系统调用。
4. POSIX标准为了保证应用程序的源代码可以在多种操作系统上移植运行,国际标准化组织ISO给出POSIX1003.1国际标准,它定义了操作系统应该为应用程序提供的接口标准。POSIX定义了许多函数,每一个兼容的操作系统都必须支持这些函数,这样,只要应用程序符合POSIX标准,便可以完全兼容支持POSIX标准的多种操作系统。但POSIX函数与实际操作系统的系统调用之间并不是一一对应的,因为POSIX并未明确规定这些函数是如何实现的,具体操作系统可以用系统调用,也可以用库函数或者其他方式实现它们。
5. Win32 API
Windows系统的主要编程环境是Win32 API,该应用程序接口定义了应用程序可以用来管理进程、线程、存储器、外部设备和文件的完整的函数集合。需要说明的是,Win32 API与系统调用不是同一个概念,- 一个API函数可能和一个Windows系统调用相对应,也可能不与任何系统调用相对应,也可能是一个API函数中调用了若千个系统调用,不同的API函数也可能封装了相同的系统调用。