从UNIX到IBM主机系统的程序移植探讨((2)
2014-09-04 01:51
导读:3.4 交互系统的区别 UNIX下用户登录并在Shell环境下执行Shell会话,可以通过发送远程登录rlogin命令或者远程登录telnet命令连接系统,一个用户可以同时打开
3.4 交互系统的区别
UNIX下用户登录并在Shell环境下执行Shell会话,可以通过发送远程登录rlogin命令或者远程登录telnet命令连接系统,一个用户可以同时打开多个用户会话。在主机环境下,用户通过TSO/E和它的菜单驱动接口ISPF登录系统,一个用户一次只能有一个活动的会话。
在UNIX系统中,用户可以通过后缀Shell命令观察处理进程和线程,可通过Kill命令结束一个任务。在主机环境中,用户通过作业处理子系统提供的SDSF查看他们提交作业的执行情况,并可以终止作业任务的执行。
4 移植实例
下面以一个实际项目实例来阐述一套移植过程中要考虑的具体问题。项目以一个在UNIX平台上实际应用的后台结息系统为移植对象,考虑系统处理的各种运行机制和平台差异,最终将整个系统移植到Z/OS下。
原系统的操作系统为AIX5.0,数据库为INFORMIX 10X,开发语言为C语言,移植后的操作系统为Z/OS 1.5,数据库为DB2版本8,开发语言为C语言。
4.1 针对多进程考虑
在原系统中有一个主控程序设计,主控程序是一个主调度程序,主要负责控制并发的进程数量及状态,系统支持的并发数量由主控程序的参数设置,通常设置为30。主控程序控制的每一个并发进程代表一个部门结息流程。假设一次性有1000个部门运行结息过程,主控程序负责调度,它轮寻所有进程,当一个进程结束时启动下一个进程,直到所有部门完成。
在Z/OS上没有进程的概念,针对这种后台批处理的结息方式,我们通过作业的方式实现,方案是为每个部门的结息准备一个JCL作业。所谓JCL(Job Control Language)是作业控制语言,通过它写一段作业脚本提交给系统,可以让系统执行相应的程序或进行相关的工作。为每个部门结息准备一个JCL作业,再准备一个主JCL作业,这个主JCL的任务就是去提交所有部门的JCL作业。
(科教范文网http://fw.nseac.com) 把结息过程定义为作业的好处是,在Z/OS里控制作业的并发数量以及作业调度的任务都可以由系统里的作业处理子系统JES2自动完成。在JES2里,有多个被称为Initiator的地址空间,每个Initiator都相当于UNIX下的一个守护进程,专门处理提交的作业。
Z/OS中的Intiator是一个自动调度和处理提交的多个作业的地址空间,它主要负责处理如下任务:
(1) 确保同时运行的各项作业不会产生数据集使用上的冲突;
(2) 为作业分配必要的硬件设备,如磁带等;
(3) 从库中找到每个作业需要调用的可执行程序;
(4) 当一个作业运行完毕之后,在作业队列中清除该作业并要求处理下一个作业。
每个Initiator在同一时刻可以处理一个作业,而多个Intiator可以并发处理多个作业,各个Initiator并发处理各个作业都是在保证不出现死锁的前提下进行的。Initiator的数量可以在系统中设置,这样一来就自动实现了并发数的控制。比如我希望将并发数控制为50,我们在系统中设置50个Initiator,然后提交主JCL作业,主JCL作业再一次性提交1000个部门的作业,这些作业由JES自动调度给50个Initiator,并实现负载的均衡。
4.2 Makefile的替代
在UNIX平台上,通常会在准备好源代码之后使用make工具进行编译,在执行make之前,需要一个命名为Makefile的特殊文件来告诉make需要做什么,该怎么做。通常make工具主要被用来进行工程编译和程序链接。
当使用make工具进行编译时,以下几种文件在执行make时将会被编译或重新编译:
(1) 所有的源文件没有被编译过,则对各个C源文件进行编译并进行链接,生成最后的可执行程序;
(2) 每一个在上次执行make之后修改过的C源代码文件在本次执行make时将会被重新编译;
(3) 头文件在上一次执行make之后被修改,则所有包含此头文件的C源文件在本次执行make时将会被重新编译。