Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4649
  • 博文数量: 1
  • 博客积分: 35
  • 博客等级: 民兵
  • 技术积分: 21
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-28 22:14
文章分类
文章存档

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)四种类型。

  • 自启动(AUTOSTART)作业:AUTOSTAT作业总是与某一子系统(SUBSYSTEM)关联,实现随子系统一起启动。这一点上,类似与Windows平台中随操作系统自启动的应用程序,比如杀毒软件等等。从使用场景上看,用户可使用AUTOSTAT作业完成一些相关的初始化工作。
  • 通讯(COMMUNICATION)作业:COMMUNICATION作业的场景是两个或多个IBM i操作系统之间的通信。比如,用户可通过COMMUNICATION作业完成从一系统向另一系统的远程提交请求。
  • 交互(INTERACTIVE)作业:INTERACTIVE也称为终端作业(Workstation)。生命周期从用户注册(Sign on)开始,直到用户注销(Sign off)为止。相应的作业名就是用户登录的工作站的名字,比如DSP01
  • 批处理(BATCH)作业:相对于INTERACTIVE作业,BATCH是一种脱机处理作业。用户只需要将自己的请求提交给系统后就无须再干预,系统会将该请求暂时存放到作业队列(JOB Queue *JOBQ)中,当资源满足作业的需求时,子系统就会选择作业运行。批处理作业产生的所有输出信息都会放在打印文件中,由打印作业负责输出。

作业的生命周期

上文中,我们提到了作业的类型。下面我们结合两种常见的用户作业类型交互式作业与批处理作业,分别介绍其完整的生命周期。

对于交互式作业,通常会按以下步骤运行:

  1. 生命周期从用户登录开始;
  2. IBM i 立即运行该用户作业,如涉及数据打印,则将数据输出至输出队列(Output  Queue)中的一个脱机打印文件(Spooled File)里,等待队列中排前的打印作业完毕,开始打印文件;
  3. 生命周期以用户注销结束。当然,用户可以注销,也可以继续保持登录状态,交互作业会一直运行到其注销。

对于批处理作业,通常会按以下步骤运行:

  1. 运行CL命令SBMJOB,提交批处理作业,这是生命周期的开始;
  2. 操作系统根据某种调度策略,将作业加入到合适的作业队列。IBM i会按接收时间先后来将作业排队;
  3. 作业加入到作业队列,并不意味着立即获得运行的机会。当子系统发现这个作业所需的资源均已准备好后,才运行这个作业;
  4. 一旦作业获得运行的机会,子系统调度内存池为其分配资源,从而运行该作业。如涉及数据打印,则输出到输出队列(Output Queue)中的一个脱机打印文件(Spooled File)里;
  5. 与交互作业类似,打印作业需等到其队列中排前的作业打印完毕,才打印脱文件。 

整个生命周期如下图所示。

1.作业的生命周期

作业的命名:

前面也谈到,系统作业均已Q开头。这里主要集中在用户作业的命名上。每一个用户作业都有唯一的作业全名(Qualified Name),如000578/PIGM/DSP01。作业名由三部分组成,作业号、用户名与作业名。

作业号类似递增主键,6位数,由系统分配,如00578;用户名即为作业的创建用户,而非运行用户。需要强调的是,作业可通过swap操作,更改其运行用户,使得与当初的创建用户变得不一致。作业名稍微有点复杂,对于BATCH作业,允许用户在提交作业时,指定作业名,对于INTERACTIVE作业,作业名就是用户登录工作站的名称,如DSP01

使用CL命令WRKJOB可查看指定作业。有三种方式:

  • 可以用作业的全名,例如,WRKJOB JOB000578/PIGM/DSP01)
  • 如果不知道作业的完整名,也可只输入用户名和作业名,例如,WRKJOB JOBPIGM /DSP01)
  • 甚至可以直接用作业名,例如,WRKJOB JOBDSP01)

作业 vs线程:

简单来说,IBM i的作业与线程的关系如同其它操作系统中进程与线程的关系。线程是独立的工作单元,共享对应的作业资源。一个作业应包含至少一个线程,即初始化线程(Intialial Thread)。初始化线程在作业启动的时候创建,一旦被创建,不能被人为停止或删除。作业对应的其它线程均由初始化线程创建与派生。

2.       作业描述对象(Job Description

作业描述对象的定义

如果说作业是一个动态的概念,那么作业描述对象则相对静态的概念。作业描述(Job Description)是一种IBM i对象(类型*JOBD),包含了作业的诸多属性值:

  • 作业使用的作业队列(JOBQ
  • 输出队列(OUTQ
  • 打印机
  • 排队优先级
  • 排队优先级的最高限定值
  • 作业的库列表
  • 作业日志纪录的等级
  • 作业的运行优先级
  • 使用的内存池以及时间片长度

作业描述对象可用CL命令 创建,CHGJOBD命令修改,DSPJOBD命令查看。

作业描述对象 vs 作业
IBM i
系统上有多种作业描述对象。作业描述对象与作业形成1N的关系。每一个作业都对应一个作业描述对象。但每一个作业描述对象可以有多个作业与它相关。IBM 提供的默认作业描述是 QDFTJOBD

2.默认作业描述对象

2仅列出了QDFTJOBD中的部分信息,此外还有Routing dataRequest DataInitial 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)与之关联,优先级从191是最高级别,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,运行优先级,时间片长度,从何程序开始执行。作业运行属性是在一个类型为*CLSclass)的对象中描述的,如图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允许为每个内存池规定同时所允许存放的最多作业个数ACTLVLActivity Level),解决性能问题。

7.       输出队列(Output Queue

输出队列

输出队列(Output Queue)是一种IBM i对象(类型为*OUTQ,用于存放等待打印的数据(Spooled file)。

系统人员要经常对各种作业的打印输出(Spooled file)做清理工作,不需打印时,就应将它们删掉,以减轻系统对作业的管理负担。

8.       总结

本文介绍了IBM i工作管理和控制的相关概念,包括作业的生命周期,作业队列的调度,子系统的作业管理,存储池资源分配策略,打印输出等。图6分别从动态逻辑与静态配置的角度来阐述IBM i 工作管理和控制的结构与流程。

6.IBM i 工作管理结构图

阅读(1609) | 评论(0) | 转发(0) |
1

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~