第三讲 操作系统的作业的定义、组织和建立
【教学章节】第2章 操作系统用户接面 2.1 作业的基本概念2.2 作业的建立 【教学时数】2学时
【教学目的】掌握作业的定义,作业的组织;了解作业的输入方式、JCB的建立;掌握SPOOLING系统。
【教学重点】作业的定义,作业的输入方式。 【教学难点】作业的组织和SPOOLING系统。 【教学方法与手段】课堂讲授(多媒体形式)
【教学过程】
课堂考勤 导入新课
复习Windows2000操作系统提供给用户的图形界面接口,回顾C语言的编程过程。
讲授新课
2.1 作业的基本概念 2.1.1 作业的定义
作业是操作系统中一个常见的概念。关于什么是作业,有两个方面的解释。 一个是从用户角度看作业,另一个是从系统的角度来看作业。从用户的角度,可以从逻辑上抽象地(并非精确地)描述作业的定义,而从系统的角度,则可以定义出作业的组织形式。
一般编制一个应用程序大致要经过图2.1中所描述的几步。即由概念或构思出发经过功能设计、结构设计以及详细设计过程之后,再编制程序和进行编辑输入、编译链接和反复调试之后再形成执行代码,并被执行,然后输出执行结果和建立相应的文档等。
图2.1 一般编程过程
在图2.1中,直到编辑为止的各步都可认为是可由人工完成的(尽管也有许多支撑软件存在),但从编辑输入开始的以下各步却是在用户的要求控制下由计算机完成。
20
在一次应用业务处理过程中,从输入开始到输出结束,用户要求计算机所做的有关该次业务处理的全部工作称为一个作业。作业由不同的顺序相连的作业步组成。作业步是在一个作业的处理过程中,计算机所做的相对的工作。一般来说,每一个作业步产生下一个作业步的输入文件。
从系统的角度看,作业则是一个比程序更广的概念。它由程序、数据和作业说明书组成。系统通过作业说明书控制文件形式的程序和数据,使之执行和操作。而且,在批处理系统中,作业是抢占内存的基本单位。也就是说,批处理系统以作业为单位把程序和数据调入内存以便执行。
需要说明的是,作业的概念一般用于早期批处理系统和现在的大型机、巨型机系统中,对于广为流行的微机和工作站系统,人们一般不太使用作业的概念。
2.1.2 作业组织
如上所述,作业由三部分组成,即程序、数据和作业说明书。一个作业可以包含多个程序和多个数据集,但必须至少包含一个程序。否则将不成为作业。作业中包含的程序和数据完成用户所要求的业务处理工作。作业说明书则体现用户的控制意图。由作业说明书在系统中生成一个称为作业控制块(job control block,JCB)的表格。该表格登记该作业所要求的资源情况、预计执行时间和执行优先级等。从而,操作系统通过该表了解到作业要求,并分配资源和控制作业中程序和数据的编译、链接、装入和执行等。
作业说明书主要包含三方面内容,即作业的基本描述、作业控制描述和资源要求描述。作业基本描述包括用户名、作业名、使用的编程语言名、允许的最大处理时间等。而作业控制描述则大致包括作业在执行过程中的控制方式。资源要求描述包括要求内存大小、外设种类和台数、处理机优先级、所需处理时间、所需库函数或实用程序等。作业说明书的主要内容如图2.2 所示。
一般来说,作业说明书方式主要用在批处理系统中,且各计算机厂家都对自己的系统定义有各自的作业说明书的格式和内容。
另外,在微机系统和工作站系统中,人们常用批处理文件或shell程序方式编写作业说明书。
图2.2 作业说明书的主要内容
21
2.2 作业的建立
严格地说,在分时系统中,从系统角度来看甚至没有作业的概念。因此,这里主要介绍批处理系统的作业建立过程。
建立一个作业必须把该作业所包含的全部程序和数据输入到计算机的外部辅助存储设备上(简称为外存或辅存),而且,还要由作业注册程序在系统中为该作业申请建立起一个相应的作业控制块。作业控制块和作业之间具有一一对应关系。当一个作业的全部程序和数据输入到外存且在系统中建立了相应的作业控制块之后,就说一个作业已经建立起来了。
一个作业的建立过程包括两个子过程,一个是作业的输入,另一个是作业控制块的建立。
作业的输入指将作业的程序、数据和作业说明书从输入设备(例如键盘)输入到外存,并形成有关初始信息。必须有外部启动信号,通知系统调用相应的输入管理程序来负责控制和完成作业的输入工作。
有关作业输入管理程序的详细部分,将在设备管理和文件系统中讨论。这里需要指出的是,作业输入管理程序决定了作业的输入方式。再者,与作业输入过程的启动相似,作业输入过程的结束也必须由用户给出信号,使得相应设备发出中断信号后结束输入过程。
下面讨论作业的输入方式。 2.2.1 作业输入方式
作业输入方式可分为5种,即联机输入方式、脱机输入方式、直接耦合方式、SPOOLING(Simultaneous Peripheral Operations On-Line)系统和网络输入方式。
1. 联机输入方式
大多用在交互式系统中,用户和系统通过交互会话来输入作业。外围设备直接和主机相连接。一台主机可以连接一台或多台外围设备。在单台设备和主机相连接进行作业输入时,由于外围设备的输入输出速度远远低于CPU处理速度,有可能造成CPU资源的浪费。如果使用多台外围设备同时联机输入的话,则又成为下面将要介绍的SPOOLING系统。
2. 脱机输入方式
又称为预输入方式。脱机输入方式利用低档个人计算机作为外围处理机进行输入处理。在低档个人机上,用户通过联机方式把作业首先输入到后援存储器,例如磁盘或磁带上;然后,用户把装有输入数据的后援存储器拿到主机的高速外围设备上和主机连接,从而在较短的时间内完成作业的输入工作。
脱机输入解决了快速输入输出问题,提高了主机的资源利用率,但反过来说,这又是以牺牲低档机为代价的。而且,脱机输入需要用户进行干预或进行一定的操作,例如移动存储介质和连接后援存储器等。另外,脱机输入输出方式存在灵活性差的缺点,即遇到紧急任务需要处理时,无法直接交给主机以便优先处理。
3. 直接耦合方式
保留脱机输入方式的快速输入的优点,又没有脱机输入方式的人工干预的缺点和具有较强灵活性的输入方式是直接耦合方式。直接耦合方式把主机和外围低档机通过一个公用的大容量外存直接耦合起来,从而省去了在脱机输入中那种依靠人工
22
干预来传递后援存储器的过程。在直接耦合方式中,慢速的输入输出过程仍由外围低档机自己管理,而对公用存储器中的大量数据的高速读写则由主机完成。直接耦合方式的原理如图2.3所示。
直接耦合方式需要一个大容量的公用存储器,而且需要把多台低档机和主机、公用存储器固定连接起来。这种输入方式的成本较高,一般只适用于大型机或巨型机系统。
图2.3 直接耦合输入方式
4. SPOOLING系统
SPOOLING又可译作外围设备同时联机操作。SPOOLING系统的工作原理如图2.4所示。
在SPOOLING系统中,多台外围设备通过通道或DMA器件和主机与外存连接起来。作业的输入输出过程由主机中的操作系统控制。操作系统中的输入程序包含两个的过程,一个过程负责从外部设备把信息读入缓冲区;另一个是写过程,负责把缓冲区的信息送到外存输入井中。这里,外围设备既可以是各种终端,也可以是其他的输入设备,例如纸带输入机或读卡机等。
图2.4 SPOOLING系统
通道是一个于CPU的专管输入输出的处理机,它控制外设或外存与内存之间的信息交换。它有自己的通道指令,以驱动外设进行读写操作。不过,这些指令需要CPU执行相应的“启动通道”指令发来启动信号之后才开始执行。DMA方式相似于通道方式。与通道不同的是,在DMA方式中,信息的传送方向、信息传送的源地址和目的地址以及传送长度等都是由CPU控制而不是由DMA器件控制的。
SPOOLING系统的输入方式既不同于脱机方式,也不同于直接耦合方式。在系统
23
输入模块收到作业输入请求信号后,输入管理模块中的读过程负责将信息从输入装置读入缓冲区。当缓冲区满时,由写过程将信息从缓冲区写到外存输入井中。读过程和写过程反复循环,直到一个作业输入完毕。当读过程读到一个硬件结束标志之后,系统再次驱动写过程把最后一批信息写入外存并调用中断处理程序结束该次输入。然后,系统为该作业建立作业控制块JCB,从而使输入井中的作业进入作业等待队列,等待作业调度程序选中后进入内存。
5. 网络输入方式
网络输入方式以上述几种输入方式为基础。当用户需要把在计算机网络中某一台主机上输入的信息传送到同一网中另一台主机上进行操作或执行时,就构成了网络输入方式。因为网络输入方式涉及到不同计算机间的通信问题,且该问题的讨论已超出了本书的范围,因此,本书中不准备进一步讨论。
2.2.2 JCB的建立
在系统把作业信息输入到外存输入井之后,还要根据作业说明书内容和有关作业信息在外存中的位置等建立作业控制块JCB。JCB包含了系统对作业进行管理所必须的信息。即:作业名、作业估计执行时间、优先数、作业建立时间、作业说明书文件名、程序语言类型、内存要求、外设要求、作业状态、以及作业在外存中的存储地址等。
作业名是为了识别不同作业的需要而设立的。而作业估计执行时间、建立时间以及优先数等则是为作业调度算法提供参数。作业估计执行时间一般由用户通过作业说明书输入,而优先数则既可以由用户输入,也可以由系统根据某种原则给出。
作业说明书是控制作业执行的依据,显然,只有批处理系统需要作业说明书。程序语言类型指明该作业所需要的编译系统和有关的库函数类型等。作业状态则描述作业生存期的各个阶段。这些阶段是作业的提交、后备、执行以及完成阶段。从作业输入请求开始到建立JCB表,作业处于提交状态。在建立JCB表之后到被作业调度程序选中进入内存,作业在作业等待队列中处于后备状态。作业进入内存后到执行结束,处于执行状态。最后,作业执行结束到撤消之间,作业处于完成状态。作业进入内存处于执行状态并不意味着该作业立即占据处理机,作业处于执行状态只是表示该作业作为一道程序进入内存参与对CPU和其他资源的竞争。
对内存和外设等的要求是该作业对硬件资源的要求。用户在作业说明书中提出的资源要求称为静态申请。静态申请有一个资源利用率不高的问题, 现代操作系统较少使用静态申请方式,而大多采用在执行过程中,由有关系统调用动态申请和释放资源的方式。这种方式虽然管理较为复杂,但资源的利用率较高。
作业在外存中的地址指明作业在外存中的位置,以便系统将该作业调入内存时迅速地找到它。
从系统的角度看,JCB表的数量是一个常数,建立一个作业的过程实质上是在输入了有关信息之后申请分得和填写一张空白的JCB表的过程。由于操作系统中所允许的JCB表中项数是一常数,因此,当JCB表中各项都已分配出去时,系统无法为用户建立作业。从而,作业建立过程失败。另外,由于外存输入井的大小也是有限的。如果输入井中没有足够的空间存放该作业的话,则作业的创建仍然是失败的。只有在获得JCB表项和足够的输入井空间之后,一个作业才可能创建成功。
24
【答疑】 【本节小结】
本节主要介绍了作业的定义,作业的组织,作业的建立和作业的输入方式。对作业的JCB构成,作业的执行过程。重点要理解SPOOLING系统的输入特点。
【作业】
2.1 什么是作业? 作业步?
2.2 作业由哪几部分组成? 各有什么功能? 2.3 作业的输入方式有哪几种?各有何特点? 2.4 试述SPOOLING系统的工作原理。 2.5 作业说明书和作业控制块有何异同?
【下课】
25
第四讲 操作系统为用户提供的接口、系统调用
【教学章节】第2章 操作系统用户接面 2.3命令控制界面接口2.4 系统调用【教学时数】2学时
【教学目的】掌握作业控制、系统调用;了解用户接口的演变。理解系统调用的使用和在操作系统中的作用。
【教学重点】操作系统为用户提供的命令接口和系统调用接口。 【教学难点】脱机控制方式的分类和系统调用的分类。 【教学方法与手段】课堂讲授(多媒体形式)
【教学过程】 课堂考勤 导入新课
复习操作系统的作业的四个状态,作业的建立和输入方式。 讲授新课
2.3 命令控制界面接口
操作系统为用户提供两个接口界面。一个是系统为用户提供的各种命令接口界面。用户利用这些操作命令来组织和控制作业的执行或管理计算机系统。另一个接口是系统调用。编程人员使用系统调用来请求操作系统提供服务。操作系统的命令控制界面就是用来组织和控制作业运行的。
使用操作命令进行作业控制的主要方式有两种。脱机方式即用户将作业的执行顺序和出错处理方法一并以作业控制说明书的方式或命令文件方式提交给系统,由系统按照作业说明书或命令文件中所规定的顺序控制作业执行。执行过程中,用户无法干涉,只能等待作业正常执行结束或出错停止之后查看执行结果或出错信息,以便修改作业内容或控制过程。
脱机控制方式利用作业控制语言来编写表示用户控制意图的作业控制程序,也就是作业说明书。作业控制语言的语句就是作业控制命令。不同的批处理系统提供不同的作业控制语言。
联机控制方式不要求用户填写作业说明书,系统只为用户提供一组键盘或其他操作方式的命令。用户使用系统提供的操作命令和系统会话,交互地控制程序执行和管理计算机系统。其工作过程是,用户在系统给出的提示符下敲入特定的命令,系统在执行完该命令后向用户报告执行结果;然后,用户决定下一步的操作。如此反复,直到作业执行结束。凡是使用过DOS、Windows或UNIX系统的读者,对联机控制方式都应该是不陌生的。
与脱机控制方式相比,联机控制方式的命令种类要丰富得多。这些命令可大致分为以下几类:
(1) 环境设置。 (2) 执行权限管理。
26
(3) 系统管理。 (4) 文件管理。
(5) 编辑、编译、链接装配和执行。 (6) 通信。 (7) 资源要求。
联机控制方式大大地方便了用户。但在某些情况下,用户反复输入众多的命令也会浪费不必要的时间。因此,在现代操作系统中,大都提供批处理方式和联机控制方式。这里,批处理方式既指传统的作业控制语言编写的作业说明书方式,也指那些把不同的交互命令按一定格式组合后的命令文件方式。
近年来,命令控制界面的人机交互方式发生了性变化。无论是Windows系列,还是UNIX系列的操作系统,它们的命令控制界面都是由多窗口的按钮式图形界面组成。在这些系统中,命令已被开发成一条条能用鼠标点击而执行的简单的菜单或小巧的图标。而且,用户也可以在提示符的提示下用普通字符方式输入各种命令。可以预计,计算机系统的命令控制界面将会越来越方便和越来越拟人化。
2.4 系统调用
系统调用是操作系统提供给编程人员的唯一接口。编程人员利用系统调用,在源程序一级动态请求和释放系统资源,调用系统中已有的系统功能来完成那些与机器硬件部分相关的工作以及控制程序的执行速度等。因此,系统调用像一个黑箱子那样,对用户屏蔽了操作系统的具体动作而只提供有关的功能。事实上,命令控制界面也是在系统调用的基础上开发而成的。
系统调用大致可分为如下几类:
(1) 设备管理。该类系统调用被用来请求和释放有关设备、以及启动设备操作等。
(2) 文件管理。对文件的读、写、创建和删除等。
(3) 进程控制。进程是一个在功能上的程序的一次执行过程。进程控制的有关系统调用包括进程创建、进程执行、进程撤消、执行等待和执行优先级控制等。
(4) 进程通信。该类系统调用被用在进程之间传递消息或信号。
(5) 存储管理。包括调查作业占据内存区的大小、获取作业占据内存区的始址等。
(6) 线程管理。包括线程的创建、调度、执行、撤销等。
不同的系统提供有不同的系统调用。一般,每个系统为用户提供几十到几百条系统调用。
为了提供系统调用功能,操作系统内必须有事先编制好的实现这些功能的子程序或过程。显然,这些程序或过程是操作系统程序模块的一部分,且不能直接被用户程序调用。而且,为了保证操作系统程序不被用户程序破坏,一般操作系统都不允许用户程序访问操作系统的系统程序和数据。那么,编程人员给定了系统调用名和参数之后是怎样得到系统服务的呢? 这需要有一个类似于硬件中断处理的中断处理机构。当用户使用系统调用时,产生一条相应的指令,处理机在执行到该指令时发生相应的中断,并发出有关信号给该处理机构。该处理机构在收到了处理机发来的信号后,启动相关的处理程序去完成该系统调用所要求的功能。
在系统中为控制系统调用服务的机构称为陷阱(trap)处理机构。与此相对应,
27
把由于系统调用引起处理机中断的指令称为陷阱指令(或称访管指令)。在操作系统中,每个系统调用都对应一个事先给定的功能号,例如0,1,2,3等。在陷阱指令中必须包括对应系统调用的功能号。而且,在有些陷阱指令中,还带有传递给陷阱处理机构和内部处理程序的有关参数。
为了实现系统调用,系统设计人员还必须为实现各种系统调用功能的子程序编造入口地址表,每个入口地址都与相应的系统子程序名对应起来。然后,由陷阱处理程序把陷阱指令中所包含的功能号与该入口地址表中的有关项对应起来,从而由系统调用功能号驱动有关系统子程序执行。
由于在系统调用处理结束之后,用户程序还需利用系统调用的返回结果继续执行,因此,在进入系统调用处理之前,陷阱处理机构还需保存处理机现场。再者,在系统调用处理结束之后,陷阱处理机构还要恢复处理机现场。在操作系统中,处理机的现场一般被保护在特定的内存区或寄存器中。系统调用的处理过程如图2.5所示。
图2.5 系统调用的处理过程
有关系统调用的另一个问题是参数传递问题。不同的系统调用需要传递给系统子程序以不同的参数。而且,系统调用的执行结果也要以参数形式返回给用户程序。那么,怎样实现用户程序和系统程序之间的参数传递呢?下面介绍几种常用的实现方法。一种是由陷阱指令自带参数。一般来说,一条陷阱指令的长度总是有限的,而且,该指令还要携带一个系统调用的功能号,从而,陷阱指令只能自带极有限的几个参数进入系统内部。另一种办法是通过使用有关通用寄存器来传递参数。显然,这些寄存器应是系统程序和用户程序都能访问的。不过,由于寄存器长度也是较短的。从而无法传递较多的参数。因此,在系统调用较多的系统中,大多在内存中开辟专用堆栈区来传递参数。
另外,在系统发生访管中断或陷阱中断时,为了不让用户程序不直接访问系统程序,反映处理机硬件状态的处理机状态字PSW中的相应位要从用户执行模式转换为系统执行模式。这一转换在发生访管中断时由硬件自动实现。一般把处理机在用户程序中执行称为用户态,而把处理机在系统程序中执行称为系统态。
28
【答疑】 【本节小结】
本节介绍了操作系统的用户界面,包括命令控制界面的编程界面两部分,其中命令控制界面是基于编程界面,也就是系统调用之上开发而成的。
操作系统的命令控制界面正从早期的脱机控制方式(批处理系统)和联机控制方式(分时系统)向多窗口、菜单、按钮以及声控等图形化多媒体方式变化。命令控制界面的与进步是操作系统最显著的变化之一。
系统调用是操作系统提供给编程人员的唯一接口。编程人员通过系统调用使用操作系统内核所提供的各种功能。系统调用的执行不同于一般用户程序的执行。系统调用执行是在核心态下执行系统子程序,而用户程序则是在用户态下执行。
【作业】
2.6 操作系统为用户提供哪些接口? 它们的区别是什么?
2.7 作业控制方式有哪几种? 调查你周围的计算机的作业控制方式。
2.8 什么是系统调用? 系统调用与一般用户程序有什么区别? 与库函数和实用程序又有什么区别?
2.9 简述系统调用的实现过程。
2.10 为什么说分时系统没有作业的概念? 【下课】
29
第五讲 UNIX用户界面
【教学章节】第2章 操作系统用户接面 2.5 UNIX用户界面 【教学时数】2学时
【教学目的】了解Unix的发展历史和发展前景,Unix系统的特点,Unix系统结构,理解Shell提供的命令种类,程序语言Shell,make命令;理解有关设备管理的系统调用,有关文件系统的系统调用,有关进程控制的系统调用,有关进程通信的系统调用,有关存储管理的系统调用。
【教学重点】UNIX的基本Shell命令,文件管理的系统调用。 【教学难点】UNIX的基本Shell命令,文件管理的系统调用。 【教学方法与手段】课堂讲授(多媒体形式)
【教学过程】 课堂考勤 导入新课
操作系统的用户接口,Windows的用户接口。 讲授新课
2.5 UNIX用户界面
2.5.1 UNIX发展历史与特点
最初的UNIX操作系统是1969年由AT&T(贝尔实验室)的汤普逊(Thompson)、里奇(Ritchie)等人在PDP-7上开发成功的16位微机操作系统。它经历了从开发、发展、不断演变和获得广泛应用以致逐渐成为工作站等小型机的标准操作系统的演变过程。
UNIX系统是从美国麻省理工学院(MIT)1965 年开始进行开发的另一个分时操作系统Multics的基础上演变而来的。Multics(Multiplexed Information and Computing Service System)是MIT和贝尔实验室等为美国国防部研制的。
Multics对操作系统的发展带来了巨大的影响,特别是对UNIX 系统。UNIX系统是汤普逊和里奇等把曾在Multics的分时终端上编写的“Space Travel”游戏程序移置到PDP-7上时编写出来的。它继承了Multics的文件系统的树形结构、Shell命令语言以及面向过程的结构化设计方法和采用高级语言编写操作系统等特点。
UNIX系统正式发表在1974年美国计算机学会杂志ACM上。当时已是第5版,且已在大学里得到较多的使用和好评。不过,直到1975年发表的第6版中才引入多道技术,从而使得UNIX成为一个真正的多用户分时系统。
从1972年开始,UNIX系统已移植到PDP-11系列机上运行。到1979年,贝尔实验室又将其移植到类似于IBM 370的32位机Interdata 8/32上。从而公布了得到西部电气公司正式承认的UNIX第7版。同时,贝尔实验室于1980年又公布了为 VAX11/780机编写的操作系统UNIX32Ⅴ。
30
在UNIX32Ⅴ的基础上,1980年加里福尼亚大学伯克利分校发表了VAX-11型机用的BSD4.0和BSD4.1。
1982年,AT&T又相继公布了UNIX SystemⅢ的3.0,4.0和5.0等版本。UNIX 系统的发展走上了以AT&T 和伯克利分校二者为主开发的道路。
1983年AT&T推出了UNIX SystemⅤ和几种微处理机上的UNIX。同年,伯克利分校公布了BSD4.2版。
1984年IBM公布了IBM/PC上的UNIX。Microsoft在1985年将UNIX改造为适用于16位PC机的Xenix。
在1985年,Cray公司公布了用于超大型机的UNIX系统。1986 年,UNIX SystemⅤ发展到了修订版Res2.1和Res3.0;BSD4.2升级到BSD4.3及Sunmicro公司开发了基于BSD4.2/4.3的SUN工作站操作系统SUNOS。同年MIT在UNIX的基础上,开发出了近年来已成为工作站图形界面标准的Xwindow系统。
在上述背景下,美国IEEE组织成立了POSIX委员会专门从事UNIX 的标准化工作。POSIX委员会完成了UNIX系统标准化,并按其定义重新实现UNIX。标准UNIX意味着一个可以运行UNIX应用软件的平台,它为用户提供一个标准的用户界面,而不在于系统内部如何实现。
后来,UNIX System Ⅴ Res4.0版以及BSD4.3版等统一了用户界面的UNIX操作系统相继推出,使UNIX系统的开发工作进入了一个新的阶段。
值得一提的是,卡耐基·梅隆大学在UNIX系统的基础上,引入面向对象的设计思想,于90年代初开发成功了具有多线程、微内核和分布式计算环境等先进思想的面向对象操作系统Mache。该系统的开发成功对以UNIX操作系统为基础的商用操作系统,例如Solaris等系统的开发带来了巨大的影响。
另外,随着网络计算机的不断发展,网络计算(通信协议、安全管理、网络连接软件等)软件被不断地插入操作系统内核。DOS系统由于无法处理网络计算问题而被淘汰之后,Windows系列由于其强大的商业运作背景和网络计算能力使得它们几乎占据了绝大部分PC机市场。在这种形势下,一个新的基于UNIX的网络操作系统Linux被开发了出来。Linux系统与UNIX系统在用户界面上完全兼容,另外,它向用户开放源代码程序,从而便于用户根据自己的需要进行修改。因此,Linux系统一经推出,就得到了广大用户和计算机厂商的青睐,迅速地形成了一个与Windows系列操作系统相抗衡的自由软件联盟。目前,已有许多计算机厂商宣布支持Linux操作系统。
2.5.2 UNIX系统的特点
UNIX在不长的时间内获得了巨大的成功,这与它在设计上的特点是分不开的。 (1) UNIX系统是一个可供多用户同时操作的会话式分时操作系统。 (2) UNIX 系统向用户提供了两种用户友好的界面或接口。这两种界面是程序一级的界面——系统调用,和操作一级的界面——命令。对于程序一级的界面系统调用来说,UNIX系统提供可直接用来编程的高级语言调用形式。而对于操作一级的界面命令来说,UNIX系统提供一个非内核的Shell解释程序。Shell不仅可用于终端和系统进行交互、执行命令和输出结果的界面,而且具有控制变量和可以用来编写程序。
(3) UNIX系统具有一个可装卸的分层树型结构文件系统。该文件系统具有使用
31
方便和搜索简单等特点。
(4) UNIX系统把所有外部设备都当作文件,并分别赋予它们对应的文件名。从而,用户可以像使用文件那样使用任一设备而不必了解该设备的内部特性,这既简化了系统设计又方便了用户使用。
(5) UNIX系统核心程序的绝大部分源代码和系统上的支持软件都用C语言编写。且UNIX系统是一个开放式系统。所谓开放,即UNIX具有统一的用户接口,使得UNIX用户的应用程序可在不同的执行环境下运行。
2.5.3 UNIX系统结构
UNIX系统结构可分为三层。即最内层的UNIX操作系统核心,它包括文件控制系统和进程控制系统两大部分。这两部分的实现因厂家和版本而异。最外层是用户程序,包括许多应用软件。中间层则是Shell命令解释层、实用程序、库函数等。该层中的Shell解释程序是用户和UNIX 操作系统的操作界面。UNIX的系统结构如图2.6所示。
本书主要介绍UNIX SystemⅤ的内核部分。这是因为作为面向OA的UNIX操作系统,UNIX SystemⅤ既没有它的后续版本那么庞大和复杂,又比UNIX第六版在通信、内存管理等方面有了较大的改善和更能说明本书所讲述的操作系统的基本原理。
图2.6 UNIX系统结构 2.5.4 UNIX的命令控制界面
Shell是UNIX系统为用户提供的键盘命令解释程序的集合。Shell 向用户提供300个以上的命令。
基本类包括:
(1) 系统访问命令,例如login,logout等。
(2) 编辑和文件管理命令,例如vi,emacs,cp,rm和ls等。 (3) 编译、链接命令,例如cc,link等。
(4) 维护、管理命令,例如adduser,chown等。 (5) 调试命令,例如dbx等。
(6) 记帐、日期等的命令,例如date等。 (7) 网络通信用命令,例如mailx等。 特殊类命令包括:
32
(1) 后台命令“&”。
后台命令不要求系统马上执行。例如 cc pgm.c&
要求系统在空闲时编译程序pgm.c。 (2) 文件名生成符号“*”和“?”
其中“*”和从该字符开始的文件名的字符串匹配,而“?”则和该字符位所对应的一个字符匹配。例如,a*.c代表所有以字母a打头的.c文件,而a?.c则只代表以字母a打头、且文件名长为2个字符的.c文件。
(3) 输入输出重定向符号“<”、“>”和“>>”
在UNIX系统中,进程在对文件进行操作时,要用到文件描述符。在通过进程执行一个命令时,系统自动地将键盘输入定义为标识符为0 的文件且称为标准输入。另外,系统终端显示器定义为文件标识符为1的标准输出,把输出到终端显示器的错误信息定义为文件描述符为2的标准错误信息输出。
在执行某个命令时,如果要改变输入输出文件,则使用输入输出重定向符号“>”、“<”和“>>”。其中,a>b表示把文件a的内容输出到文件b,a>b 则表示把文件a 的内容顺序追加到文件b的后面。例如,ls>a 表示把当前目录下的文件名信息输出到文件a中。如果文件a不存在,则系统自动创建文件a。
(4) 管道命令“|”
在其他操作系统中,如果有多个程序顺序对一个数据集进行操作的话,一般都是采用中间文件方式,即把上一个程序的处理结果输出到中间文件之后,再把该中间文件作为下一个程序的输入使用。事实上,由于设置中间文件以及对中间文件的输入输出都要用到一系列命令,从而既加强系统负担又增加了用户难度。UNIX Shell则不然.除了上面(3)中所述的文件输入输出重新定向法之外,还有一种称为管道的不通过中间文件的数据直接输入方法,即一个命令的执行结果存放在系统缓冲区内直接作为下一个命令的输入。管道命令的使用格式是:
命令1| 命令 2|命令3 ...
(5) 滤波器功能 UNIX Shell具有对数据进行选取和加工的滤波功能,其中几个比较主要的命令是:
grep——从指定文件中搜索特定的字符串或包含特定字符串的行等。 sort——对文件内的各行或词组按某种规定的方式分类。 tail——表示文件末尾的指定数行。 使用UNIX Shell的滤波功能,用户可以方便地对大规模数据集进行分类和查找,并能大大简化不必要的输入输出工作。
另外,UNIX系统的Shell命令还允许用户使用Shell程序语言,把UNIX命令编制成程序后批处理执行。
2.5.5 UNIX的编程界面
UNIX系统的另一个用户接口是程序员用的编程接口,即系统调用。UNIX系统的
33
系统调用以标准实用子程序形式提供给用户在编程中使用,从而减少用户程序设计和编程难度,节省用户的程序设计和编程时间。
系统调用的主要目的是使得用户可以使用操作系统提供的有关设备管理、输入输出系统、文件系统和进程控制、通信以及存储管理等方面的功能,而不必了解系统程序的内部结构和有关硬件细节,从而起到减轻用户负担和保护系统以及提高资源利用率的作用。
因此,UNIX系统的系统调用大致可分为如下几类:
1. 有关设备管理的系统调用
用户使用这些系统调用对有关设备进行读写和控制等。例如系统调用ioctl 为所有设备的专用命令提供一个一般的、万能的入口点,它允许一个进程预置与一个设备相联系的硬件选择项和与一个驱动程序相联系的软件选择项,从而使设备和相应的驱动程序连接起来。另外,系统调用read,write可用来对指定设备进行读写,系统调用open和close可用来打开和关闭某一指定设备。
2. 有关文件系统的系统调用
有关文件系统的系统调用是用户经常使用而且种类较多的一类。它包括文件的打开(open)、关闭(close)、读(read)写(write)、创建(creat)和删除(unlink) 等调用,还包括文件的执行(execl)、控制(fnctl)、加锁解锁(flock)、文件状态的获取(stat)和安装文件系统(mount)等。较常用的有文件的打开、创建、读写和关闭等。下面是一个使用有关文件系统的系统调用进行文件合并的例子。
main(argc,argv) int argc;
char *argv[]; {
int fd1,fd2,fd3,n;
char buf[512],ch=′\n′;
fd1=open (argv[1],0);\ \ \ /*打开argv[1]对应的文件,返回标识符fd1*/
fd2=open (argv[2],0);/*打开argv[2]对应的文件,返回标识符fd2*/ fd2=creat (argv[3],04);/*创建argv[3]对应的文件,返回标识符fd3*/ while ((n=read(fd1,buf,512))>0)/*从fd1中读n<=512字节入buf*/ write(fd3,buf,n);/*将buf中n字节写入fd3*/ write(fd3,&ch,1);/*将换行符号写入fd3*/
while ((n=read(fd2,buf,512))>0)/*从fd2中读n<=512字节*/ write(fd3,buf,n);/*将buf中的字节写入fd3*/ close(fd1); close(fd2); close(fd3); }
3. 有关进程控制的系统调用
34
关于进程控制的系统调用有创建进程的调用fork()、阻塞当前执行进程自己的系统调用wait()、进程自我终止用的exit()、获得进程标识符用的getpid()、父进程标识获取调用getppid()、进程优先级获取用的getpriority()、改变进程优先数用的nice()、发送和接收信号用的kill()和signal()、暂停当前进程的执行过程的pause()以及管道通信调用pipe()等。
进程创建调用fork()使用格式是n=fork();该系统调用的返回值可以是0或大于0的整数或等于-1。n=0时表示系统将执行子进程的有关程序段,n>0 时表示系统将执行父进程的程序段,而n=-1则表示子进程未创建成功。无论n=0或是n>0,父进程的程序段和子进程的程序段都将得到执行,只是二者执行的时间和顺序上有差别。
下面一个使用系统调用fork的例子。 main() { int i; while ((i=fork())==-1);/* 若创建失败,则反复创建 */ printf(″i=%d\n″,i);/* 打印进程标识符 */ if (i) printf(″It is a parent process!\n″);/* i>0,在父进程中 */
else printf(″It is a child process!\n″);/* i=0,在子进程中 */ }
该程序的执行结果将是打印进程标识符之后,再接连打印表示父进程和子进程动作的两行字符串It is a parent process!和It is a child process!。
系统调用wait()的返回值是等待子进程的进程标识符。wait()的功能是阻塞父进程,等待子进程完成后使得父进程继续工作。
进程终止调用exit()终止调用进程本身,并释放所占用的所有资源。
发送信号的系统调用kill()具有两个参数,一个是接收信号的进程标识pid ,另一个是所要发送的信号sig。pid和sig二者均为整型值。而且,后面的章节中将会讲到,sig只能取0~19之间的一个整数值。接收信号的系统调用sig()也具有两个参数。其中一个是接收的来自于其他进程的信号sig,另一个则在接收到信号sig之后去完成的指定功能名func。其中,func()是一用户定义的函数。
例如在有些情况下,用到下列语句: signal(SIGINT,SIG\--IGN);表示当前执行进程在收到键盘中断信号(按Del键)之后,不做任何指定的工作,即忽略按Del键对当前执行进程的影响。
管道通信用的系统调用pipe(fd)为同一家族的进程之间传递数据建立一条管道。其中参数是一个包含2个单元的整型数组,fd[0]代表管道的读端而fd[1] 代表管道的写端。管道被创建之后一般和系统调用read()和write()联合使用。
除系统调用外在进程控制中还经常用到两个实用程序,一个是sleep(n),执行该实用程序使得当前执行进程睡眠n秒钟。另一个是用于进程互斥的实用程序lockf(fd,mode,size),其功能是将指定文件fd 的指定区域进行加锁或解锁,以解决临界资源文件的竞争问题。
35
4. 有关进程通信的系统调用
进程通信用的系统调用主要包括套接字(socket)的建立、链接、控制和删除;以及进程间通信用的消息队列、共用存储区以及有关同步机制的建立、链接、控制和删除等有关系统调用。
5. 关于存储管理的系统调用
这些系统调用包括获取内存现有空间大小、检查内存中现有进程以及对内存区的保护和改变堆栈大小等功能。
6. 管理用系统调用
例如,设置和读取日期和时间,取用户和主机等的标识符等系统调用。 在最初的UNIX SystemⅤ中,共有70多条系统调用。显然,一个系统提供的系统调用越多,功能就越强,用户使用起来也就更加方便灵活。
UNIX的系统调用由一条访管指令——陷阱或陷阱指令实现。该指令是一条机器硬指令,其操作数部分对应于系统调用的编号。另外,在系统中有一张系统调用入口表,用来指示各系统调用处理程序的入口地址,从而,只要把系统调用的编号与系统调用入口表中处理程序入口地址对应起来,系统就能够在用户调用系统调用之后,通过访管指令而找到并执行有关的处理程序以完成系统调用的功能,有关UNIX SystemⅤ的系统调用处理,将在第9章中进一步讲述。
【答疑】 【本节小结】
本节介绍了UNIX系统的用户界面,常用的UNIX命令和系统调用。要掌握常用的UNIX命令,为后续实验做好准备。
【作业】
2.11 试述UNIX的主要特点。
2.12 UNIX操作系统为用户提供哪些接口? 试举例说明。 2.13 在你周围装有UNIX系统的计算机上,练习使用后台命令、管道命令等Shell
的基本命令。
【下课】
36
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务