2011年(1)
分类: 系统运维
2011-11-29 12:14:00
IBM i工作管理(Work Management)的主要功能是负责处理用户提交给操作系统的请求。而作业(Job)作为一种环境(environment),配合操作系统中完成用户的工作。比如,在一个作业中,可通过输入命令、选择菜单、调用程序等方式,要求系统处理用户的请求。从这个意义上讲,作业管理是整个IBM i工作管理的核心,而围绕作业管理派生出许多IBM i独有的概念,比如作业队列,子系统,内存池,输出队列等。本文的目的是将上述这些作业管理相关的概念进行系统性的阐述,目标读者为IBM i的初级用户。
1. 作业(Job)
作业的定义
作业是IBM i对工作进行管理的基本单位,也是系统分配资源的基本单位。从这个意义上说,IBM i的作业等价于其它操作系统的进程。笼统地讲,IBM i的作业可分为系统作业(作业名一般以Q字母打头)和用户作业。
作业的类型
系统作业,顾名思义,由操作系统控制。唯一的一个例外是,只有脱机打印文件()作业可被系统操作员控制。SPOOLING作业的生命周期是与打印机程序对应的。一个打印作业随着打印机程序开始而开始,直到打印机程序结束而结束。
用户作业,不言而喻,由用户控制。从功能上分,又可以细分为自启动(AUTOSTART)、通讯(COMMUNICATION)、交互(INTERACTIVE)和批处理(BATCH)四种类型。
作业的生命周期
上文中,我们提到了作业的类型。下面我们结合两种常见的用户作业类型交互式作业与批处理作业,分别介绍其完整的生命周期。
对于交互式作业,通常会按以下步骤运行:
对于批处理作业,通常会按以下步骤运行:
整个生命周期如下图所示。
图1.作业的生命周期
作业的命名:
前面也谈到,系统作业均已Q开头。这里主要集中在用户作业的命名上。每一个用户作业都有唯一的作业全名(Qualified Name),如000578/PIGM/DSP01。作业名由三部分组成,作业号、用户名与作业名。
作业号类似递增主键,6位数,由系统分配,如00578;用户名即为作业的创建用户,而非运行用户。需要强调的是,作业可通过swap操作,更改其运行用户,使得与当初的创建用户变得不一致。作业名稍微有点复杂,对于BATCH作业,允许用户在提交作业时,指定作业名,对于INTERACTIVE作业,作业名就是用户登录工作站的名称,如DSP01。
使用CL命令WRKJOB可查看指定作业。有三种方式:
作业 vs线程:
简单来说,IBM i的作业与线程的关系如同其它操作系统中进程与线程的关系。线程是独立的工作单元,共享对应的作业资源。一个作业应包含至少一个线程,即初始化线程(Intialial Thread)。初始化线程在作业启动的时候创建,一旦被创建,不能被人为停止或删除。作业对应的其它线程均由初始化线程创建与派生。
2. 作业描述对象(Job Description)
作业描述对象的定义
如果说作业是一个动态的概念,那么作业描述对象则相对静态的概念。作业描述(Job Description)是一种IBM i对象(类型*JOBD),包含了作业的诸多属性值:
作业描述对象可用CL命令 创建,CHGJOBD命令修改,DSPJOBD命令查看。
作业描述对象 vs 作业
IBM i系统上有多种作业描述对象。作业描述对象与作业形成1:N的关系。每一个作业都对应一个作业描述对象。但每一个作业描述对象可以有多个作业与它相关。IBM 提供的默认作业描述是 QDFTJOBD。
图2.默认作业描述对象
图2仅列出了QDFTJOBD中的部分信息,此外还有Routing data,Request Data,Initial Library List等。
上图中的Job Date属性值为*SYSVAL,表示参照系统值QDATE。类似地,Output Queue属性值为*USRPRF,表示参照该JOBD用户的Output Queue定义。
3. 作业队列对象(Job Queue)
作业队列的定义
作业队列(Job Queue)是一种IBM i对象(类型为*JOBQ)。系统中存在多个作业队列,每一个作业队列包含一组等待处理的批处理作业。
队列是IBM i的一大特色。IBM i有很多类型的队列。对普通用户与系统操作人员来说,最常用到的队列有:消息队列(Message Queue *MSGQ)、作业队列(JOB Queue *JOBQ)、输出队列(Output Queue *OUTQ)。对IBM i 应用开发人员,他们还需了解程序通信用的数据队列(Data Queue),作业消息队列(Job Message Queue)等。其中,消息队列用于存放等待处理的消息,作业队列用于存放等待子系统进行处理的作业,输出队列则用于存放等待打印的数据(Spooled file)。
作业队列 vs 作业
作业队列中的每一个作业都有一个优先级(job queue priority)与之关联,优先级从1到9,1是最高级别,9是最低级别。系统在处理作业时,按优先级由高到低的顺序进行处理,若优先级相同,在依照先进先出的原则。
4. 子系统(Subsystem)
子系统的定义
子系统是IBM i的又一大特色。为满足用户的各种需求,IBM i 支持多种类型的作业。不同种类的作业对系统资源的要求不同,比如,交互式作业要求较快的响应时间,批处理作业可能要求较多的CPU时间等。为了更合理、有效地使用系统资源,系统(System)被划分成若干个子系统(Subsystem),所有的作业在子系统的监控下运行。因此,可以认为子系统是专门为了运行某一类作业而配置的环境。
子系统 vs 作业
所有类型的作业在其开始时,根据某种策略,都被指派给一个合适的子系统。并在子系统的监控下运行,直到运行结束并且没有打印输出,或运行结果已在打印机上输出完毕,该作业才会真正结束。可以用WRKSBS命令查看当前运行的子系统。
子系统 vs 作业队列
一个子系统可管理多个作业队列。在作业队列中等待处理的作业何时会被子系统选中,则取决于子系统定义的最大并发作业数MAXJOBS,作业队列中最多允许在子系统中运行的最大并发作业数MAXACT,作业的状态(Status)及作业的优先级Priority及作业队列在子系统中的顺序号(Sequential Number SEQNBR)。
5. 子系统描述对象(Subsystem Description)
子系统描述对象的定义
与作业相同,子系统本身并不是对象,但子系统描述(Subsystem Description)是一种对象(*SBSD)。子系统描述定义了子系统中拥有的存储器资源,在子系统中运行的作业类型以及最大作业数等特征。与作业不同,每一个子系统描述仅对应一个子系统,因此,可以用子系统描述对象的名字来区分不同的子系统。
子系统描述对象 vs 作业
子系统描述中含有子系统可以管理的最大并发作业个数;内存池的个数及大小;作业的来源;作业的运行属性等。而作业的运行属性又包括如作业分配的内存池ID,运行优先级,时间片长度,从何程序开始执行。作业运行属性是在一个类型为*CLS(class)的对象中描述的,如图3所示。
图3.Class信息
图4.Routing Entries
子系统描述中定义了许多叫Routing Entry的项,每个Routing Entry指向一个Class。每个作业可以在自己的作业描述(*JOBD)中设置一个称为Routing data的参数值,来确定使用子系统描述中的某个Routing Entry,从而获得该作业的运行属性。
系统在安装时,已经创建了一些子系统描述,如负责交互式作业的子系统QINTER,负责批处理作业的子系统QBATCH,负责打印作业的子系统QSPL等。
内存池
IBM i 通过内存池(Storage pool)管理内存。内存池是对内存的一个逻辑动态的划分,在子系统描述中定义它们的个数和大小。当启动一个子系统时,系统根据子系统描述中定义的内存池为其分配相应的内存。每个子系统最多可以定义10个内存池,如图5所示。
图5. 子系统与内存池
6. 内存池(Memory Pool)
内存池的定义
IBM i将整个存储资源切分成大小相同的小对象,成为内存池。内存池是逻辑的概念。内存池有两种类型:共享池(Shared pool)和私有池(Private pool)。共享池允许若干个子系统共用,私有池只允许一个子系统转用。典型的共享池有*MACHINE、*BASE、*INTERACT和*SPOOL。
一般地,*MACHINE供系统作业使用;*INTERACT供交互式作业使用;*SPOOL用于打印作业;*BASE用于各种类型的作业,以批处理作业为主。
内存分配策略
IPL时,系统会根据系统值QMCHPOOL为*MACHINE分配内存,并将其余内存全部分配给*BASE。当一个子系统启动时,系统就要从*BASE池中为子系统分配所需内存;当一个子系统结束时,该子系统占用的内存就被回收到*BASE池中。
值得注意的是,*BASE池不能为空,有一个系统值QBASPOOL定义了*BASE池的最小尺寸。当*BASE尺寸达到这个值后,系统就不会为新启动的子系统再分配内存空间。
每个作业只能在一个内存池中运行。作业发生缺页时,换页也只能在同一池中进行,不会出现不同类型的作业发生内存冲突的现象,从而使系统对作业的管理做到有序、简单。
IBM i的这种内存池管理策略可能会出现各内存池之间忙闲不均的情况。因此,IBM i允许为每个内存池规定同时所允许存放的最多作业个数ACTLVL(Activity Level),解决性能问题。
7. 输出队列(Output Queue)
输出队列
输出队列(Output Queue)是一种IBM i对象(类型为*OUTQ,用于存放等待打印的数据(Spooled file)。
系统人员要经常对各种作业的打印输出(Spooled file)做清理工作,不需打印时,就应将它们删掉,以减轻系统对作业的管理负担。
8. 总结
本文介绍了IBM i工作管理和控制的相关概念,包括作业的生命周期,作业队列的调度,子系统的作业管理,存储池资源分配策略,打印输出等。图6分别从动态逻辑与静态配置的角度来阐述IBM i 工作管理和控制的结构与流程。
图6.IBM i 工作管理结构图