习题10
10.1何谓操作系统与用户的接口?有哪几种类型?其主要的功能是什么?
操作系统与用户接口的目标就是提供一个友好的用户访问操作系统的接口,使得用户能将自己的要求告诉操作系统,同时也要构造一个反向接口使系统能够利用该接口告知用户目前的工作情况。
一般,操作系统为用户提供两种接口:一类用于程序一级的编程接口,供用户程序和系统程序调用操作系统的服务和功能,由一组系统调用(system call)和高级语言库函数组成。
另一类是用于作业(或功能)控制一级,供用户组织和控制自己的作业运行,其中又分为脱机用户和联机用户两种不同的接口。
前者对应命令或脚本(脱机);后者体现为交互式联机命令行、菜单式或GUI图形用户接口(联机)。
10.2命令文件是什么?它完成什么功能?如何组织命令文件?
把所需执行的一系列命令组装成文件,然后用文件名作为命令名执行所需命令序列,从而自动控制作业的运行,例如,MS-DOS操作系统中的批处理(扩展名为BA T),用户可预先把一系列命令组织在BA T文件中,一次建立,多次执行。
例如:
echo on
file 25
buffers 20
remark 设置有关文件与缓冲区
copy a:\data\*.exe d:\fox\data > null
edit main.prg
foxplus
echo off
有的操作系统还支持在命令文件使用循环、分支、转移、判别等语法结构,可以写出带形式参数的批命令文件,甚至允许嵌套形式调用其他命令文件。
当带形式参数的批命令文件执行时,可用不同的实际参数去替换,因而,此类批命令文件便可以执行不同的命令序列,大大增强了命令接口的处理能力。
例如,UNIX和Linux的Shell不但是一种交互型命令解释程序,也是一种命令级程序设计语言解释系统,它允许用户使用Shell简单命令、位置参数和控制流语句编制带形式参数的批命令文件,称作Shell文件或Shell过程,Shell可以自动解释和执行该文件或过程中的命令。
命令文件方式实现了联机状态下的批处理操作,对一些重复运行的作业非常有用。
10.3试说明命令解释程序的主要功能。
命令解释程序是操作系统最重要的系统程序,其主要功能是读人作业控制卡或接收用户输入的命令行,作出相应的解释并执行该命令提出的对作业的处理要求。
命令解释程序通常会保存一张命令名字(动词)表,其中记录着所有操作命令及其处理程序的人口地址或相关信息。
当一个新的批作业被启动,或新的联机用户登录进系统时,系统就自动地执行命令解释程序(详见第2章有关作业控制部分的讨论)。
10.4什么是系统调用?它的主要功能是什么?请举例说明Linux系统调用的使用。
系统调用是操作系统提供给用户编程的惟一接口,即用户在程序中调用操作系统所提供的相关功能,动态请求和释放系统资源,完成与计算机硬件部分相关的工作以及控制程序的
执行速度等。
实际上,系统调用对用户屏蔽了操作系统的具体细节而只提供有关的功能。
通常,系统调用程序是一个低级过程,只能由汇编语言直接访问。
每个操作系统都提供几百种系统调用
利用系统调用,用户在编写程序时可以使用操作系统所提供的一些子功能如设备管理、输入/输出系统、文件系统和进程控制、通信以及存储管理等,而不必了解系统的内部结构和有关硬件细节,从而减轻用户编程的负担,在提高系统资源利用率的同时又保护了系统的安全。
进程控制类系统调用
这类系统调用主要用于对进程的控制,如创建和终止进程的系统调用、获得和设置进程属性的系统调用等。
以UNIX及Linux为例,具体有创建进程的调用fork()、阻塞当前执行进程自己的系统调用wait()、进程自我终止用的exit()、获得进程标识符用的getPid ()、父进程标识获取调用getppid()、进程优先级获取用的getpriority()、改变进程优先数用的nice()、发送和接收信号用的kill()和signal()、暂停当前进程的执行过程的pause ()以及管道通信调用pipe()等。
10.5试比较系统调用与一般的过程调用。
系统调用与库函数和实用程序又有何区别?
在操作系统中实现的系统调用是提供给用户的各种系统功能,它有些类似用户程序中一般的调用方式,改变指令流程、重复执行、改变指令流程后需要返回原处等。
但它与一般的过程调用有着本质的区别。
主要的区别如下:
(1)运行在不同的系统状态。
(2)进入方式不同,通常利用call 或jump 指令进入普通的过程调用,而进行系统调用则需要利用int或trap指令通过软中断进入。
(3)返回方式不尽相同;一般过程调用在被调用过程执行完后,返回调用过程。
而在抢占式调度的系统中,被调用过程执行完后,不一定返回到调用进程。
此外,被调用代码的位置也有所不同。
三者所处的层次不同:系统调用在最低层的内核空间,应用程序调用其下同样处于用户空间的库函数,库函数最终再调用系统调用完成特定的功能。
10.6UNIX(Linux)操作系统为用户提供哪些接口?试举例说明。
UNIX(Linux)操作系统为用户提供两种接口:一类用于程序一级的编程接口,供用户程序和系统程序调用操作系统的服务和功能,由一组系统调用(system call)和高级语言库函数组成。
如fork()等;另一类是shell命令或脚本如ls 、pwd等。
10.7UNIX(Linux)的Shell有何特点?请举例说明Shell的使用。
UNIX或Linux的Shell是系统的最外层,亦即外壳,是UNIX或Linux操作系统的用户界面。
Shell是一种联机命令语言。
它既是一种交互式命令解释程序,也是一种命令级程序设计语言解释程序。
因此,Shell作为操作系统命令语言时,用户可以通过这些命令在终端上与操作系统交互,直接控制自己的程序的运行;Shell也可以作为作业控制语言使用,像其他高级程序语言一样,具有参数传递、变量设置、字符替换、流程控制、子程序以及中断管理等功能,用户可利用多条shell命令构成一个程序文件,或shell过程。
Shell的使用详见课本本章shell部分。
10.8何谓标准输入、输出重定向?请举例说明。
一般Shell的标准输入、输出设备分别为终端的键盘和显示器。
但用户可同时指定文件或其它设备作为Shell的输入输出设备,这称为输入、输出重定向。
例如ls命令是在终端屏幕上列出当前目录内容。
而命令:
$ls >file
则是输出重定向。
这时,当前目录的内容不再列到显示器上而是送入文件file中。
如果file 文件不存在,则建立之,否则先将原文件长度截短为0。
命令:
$ls>>file
也是输出重定向,它将当前目录内容送入文件file中。
如果file文件不存在,则建立之;
若 file存在,则输出到文件file的末尾。
10.9何谓管道机制,请举例说明如何使用它?
对于两个进程之间的信息传送,UNIX系统提供了一种简单、方便的工具,即管道(pipe)。
管道实际上是连接两个用户进程的一个中间文件,一个进程负责向它写入,另一个进程负责由它读出。
系统专门为管道中的信息传送提供了自动同步,即接收进程将自动地按照发送进程发送的次序来接收信息。
除了在程序级可使用pipe系统调用外,用户还可以在作业控制级直接使用Shell的管道命令,这只要在两条命令之间加上管道符“|”即可。
例如命令:
$cat filel file2 | wc
此命令把file1,file2连接后产生的文件作为wc命令的输入,即在屏幕上显示出file1和 file2连接之后的总行数和总字数。
它相当于如下命令序列:
$cat file1 file2>file3
$wc <file3
$rm file3
10.10何谓窗口系统?它在Microsoft Windows中的地位和作用是什么?
图形用户接口(Graphics User Interface,GUI)由以下部件构成:窗口、菜单、列表框、消息框、对话框、按钮、滚动条等。
应用程序可同时打开多个窗口,各窗口相互独立。
实际上,同屏多窗口是与并发进程相对应的:一个进程可以对应一个或多个窗口;这样,窗口可动态创建、改变、撤销,人机交互的并发性好、传递信息量大。
所以图形化操作界面也称为多窗口系统,它采用的是事件驱动的控制方式,即用户通过动作来产生事件(即发送给应用程序的一个消息)来驱动程序开始工作。
作为的主流操作系统,MS Windows 都提供了GUI,可谓近年来最为流行的联机用户接口形式,极大地促进了计算机的普及和发展。
10.11举例说明Win32 API和UNIX/Linux的部分系统调用存在对应关系。
在MS Windows中,定义了一系列程序(应用程序接口Win32 API),提供操作系统服务。
API调用的种类非常多,以千计算。
虽然在Windows中不容易分辨哪些是被内核执行系统调用,哪些是用户空间的库调用。
但从功能上看,Win32 API和UNIX/Linux的部分系统调用存在粗略的对应关系,如前者的CreateProcess、WaitForSingleObject就分别与后者的fork 、waitpid相对应等等。
10.12在你周围装有UNIX系统的计算机上,练习使用后台命令、管道命令等Shell的基本命令。
(略)。