前言:本站為你精心整理了從UNI到IBM主機(jī)系統(tǒng)程序移植范文,希望能為你的創(chuàng)作提供參考價(jià)值,我們的客服老師可以幫助你提供個(gè)性化的參考范文,歡迎咨詢。
摘要:本文介紹了UNIX平臺(tái)與IBM主機(jī)系統(tǒng)平臺(tái)之間的差異,并對(duì)跨平臺(tái)移植過(guò)程中應(yīng)考慮的主要問(wèn)題和解決方法進(jìn)行了探討。
關(guān)鍵詞:IBM主機(jī)系統(tǒng);移植;作業(yè)控制語(yǔ)言;初始化器
1引言
IBM主機(jī)系統(tǒng),又稱IBM大型機(jī),是20世紀(jì)60年展起來(lái)的計(jì)算機(jī)系統(tǒng),在全世界各大國(guó)家中肩負(fù)著銀行、保險(xiǎn)、證券、通訊等行業(yè)的數(shù)據(jù)與信息處理工作,因?yàn)槠洫?dú)具的高安全性、高穩(wěn)定性和強(qiáng)大的數(shù)據(jù)處理能力,迄今無(wú)可替代。
近幾年來(lái),主機(jī)系統(tǒng)的前景不斷看好。從1994年起,IBM開始對(duì)大型機(jī)進(jìn)行深入的技術(shù)改造,采用了新的CMOS技術(shù),極大地縮小了大型機(jī)的系統(tǒng)體積,降低了能耗和散熱成本,提高了性能價(jià)格比。另一方面,分布式計(jì)算開始變得龐雜起來(lái),許多公司的管理費(fèi)用激增,而且由于數(shù)據(jù)分散,在數(shù)據(jù)的互訪和集中管理方面,安全和準(zhǔn)確性都不夠高,許多企業(yè)開始轉(zhuǎn)向使用大型機(jī)。大型機(jī)在總體擁有成本上已經(jīng)比分布計(jì)算廉價(jià),制造業(yè)、保險(xiǎn)、航空、運(yùn)輸及大型零售企業(yè)的大量事務(wù)處理對(duì)大型機(jī)的要求越來(lái)越高,這是大型機(jī)重新被人們認(rèn)可的原因之一。
2分布式與大型機(jī)
分布式計(jì)算在短期內(nèi)給企業(yè)帶來(lái)了高效,但隨著時(shí)間的延續(xù),企業(yè)系統(tǒng)擴(kuò)大,數(shù)據(jù)分散存放在上百臺(tái)服務(wù)器上,數(shù)據(jù)的查詢成為問(wèn)題,數(shù)據(jù)的互訪和對(duì)大量數(shù)據(jù)的開采利用變得困難起來(lái),一個(gè)新的趨勢(shì)——再集中開始出現(xiàn)。如何將分布處理和集中計(jì)算結(jié)合起來(lái),成為許多企業(yè)考慮的問(wèn)題。大型機(jī)的系統(tǒng)完整性和大存儲(chǔ)量的優(yōu)勢(shì)顯示出來(lái),開始承擔(dān)用戶再集中需求的任務(wù)。
在總體擁有成本上,隨著時(shí)間的推移,小型機(jī)系統(tǒng)漸漸顯現(xiàn)出極高的使用成本?;蛟S人們?cè)谑褂靡荒闡NIX后,會(huì)說(shuō)UNIX性價(jià)比高,但隨著業(yè)務(wù)的增加,系統(tǒng)變得分散龐雜起來(lái),維護(hù)費(fèi)用增加。大型機(jī)挺過(guò)了關(guān)鍵的10年暗淡期,終于峰回路轉(zhuǎn)。因此,越來(lái)越多的企業(yè)開始關(guān)注IBM主機(jī)系統(tǒng),將自己的系統(tǒng)移植到主機(jī)系統(tǒng)上來(lái)。
3移植平臺(tái)間的差異
3.1主機(jī)操作系統(tǒng)Z/OS與UNIX
目前IBM主機(jī)的主流操作系統(tǒng)Z/OS是使用最廣泛的基于64位Z體系結(jié)構(gòu)大型機(jī)操作系統(tǒng),它給在大型機(jī)上的應(yīng)用程序員提供了穩(wěn)定、安全和可持續(xù)運(yùn)行的環(huán)境。
從本質(zhì)上來(lái)說(shuō),UNIX是一個(gè)計(jì)算密集型的操作系統(tǒng),CPU利用率較高,更適用于需要大量計(jì)算的環(huán)境;而主機(jī)操作系統(tǒng)Z/OS依賴于其強(qiáng)大的硬件后盾,除了強(qiáng)大的計(jì)算能力之外,更突出的是它強(qiáng)大的I/O處理能力,依托硬件上的FICON、ESCON等光纖通道,可同時(shí)應(yīng)對(duì)大規(guī)模的并發(fā)用戶,因此它是一個(gè)I/O密集型的操作系統(tǒng)。兩種系統(tǒng)在很多內(nèi)容上有著不同但又類似之處。
3.2進(jìn)程與地址空間
在UNIX下,一個(gè)程序的執(zhí)行通常稱為一個(gè)進(jìn)程,操作系統(tǒng)為每個(gè)進(jìn)程分配一定的CPU、內(nèi)存資源,使其運(yùn)行,進(jìn)程與進(jìn)程之間可以通過(guò)信號(hào)量機(jī)制協(xié)同工作實(shí)現(xiàn)并發(fā);而在Z/OS下沒(méi)有進(jìn)程的概念,與之對(duì)應(yīng)的是地址空間(AddressSpace)的概念,任何用戶的登錄、程序的執(zhí)行、作業(yè)的提交,系統(tǒng)都會(huì)為其生成一個(gè)地址空間。地址空間之間在批處理方式下一般沒(méi)有通信,而通過(guò)聯(lián)機(jī)交易處理方式實(shí)現(xiàn)程序間通信。
在UNIX下通常會(huì)有守護(hù)進(jìn)程(daemon)的概念,在主機(jī)環(huán)境中通常是一個(gè)長(zhǎng)時(shí)間運(yùn)行的作業(yè)的提交,可以從控制臺(tái)為這個(gè)守護(hù)作業(yè)提供輸入輸出對(duì)象處理。
3.3文件的組織與編輯方式
從文件和數(shù)據(jù)格式上來(lái)說(shuō),UNIX系統(tǒng)是樹狀的目錄結(jié)構(gòu),數(shù)據(jù)的組織以文件夾與文件的方式保存、管理;而在主機(jī)上,數(shù)據(jù)都保存在數(shù)據(jù)集里,數(shù)據(jù)集分順序數(shù)據(jù)集、分區(qū)數(shù)據(jù)集與VSAM數(shù)據(jù)集,其組織方式?jīng)]有多層樹狀結(jié)構(gòu),分區(qū)數(shù)據(jù)集下可包含稱為member的順序數(shù)據(jù)集,順序數(shù)據(jù)集或VSAM數(shù)據(jù)集存儲(chǔ)實(shí)際的數(shù)據(jù)。
數(shù)據(jù)的格式在UNIX下是面向字節(jié),而在Z/OS下是面向記錄的。數(shù)據(jù)的編輯在UNIX下通常是用VI;而在Z/OS下用的是ISPF編輯器。
3.4交互系統(tǒng)的區(qū)別
UNIX下用戶登錄并在Shell環(huán)境下執(zhí)行Shell會(huì)話,可以通過(guò)發(fā)送遠(yuǎn)程登錄rlogin命令或者遠(yuǎn)程登錄telnet命令連接系統(tǒng),一個(gè)用戶可以同時(shí)打開多個(gè)用戶會(huì)話。在主機(jī)環(huán)境下,用戶通過(guò)TSO/E和它的菜單驅(qū)動(dòng)接口ISPF登錄系統(tǒng),一個(gè)用戶一次只能有一個(gè)活動(dòng)的會(huì)話。
在UNIX系統(tǒng)中,用戶可以通過(guò)后綴Shell命令觀察處理進(jìn)程和線程,可通過(guò)Kill命令結(jié)束一個(gè)任務(wù)。在主機(jī)環(huán)境中,用戶通過(guò)作業(yè)處理子系統(tǒng)提供的SDSF查看他們提交作業(yè)的執(zhí)行情況,并可以終止作業(yè)任務(wù)的執(zhí)行。
4移植實(shí)例
下面以一個(gè)實(shí)際項(xiàng)目實(shí)例來(lái)闡述一套移植過(guò)程中要考慮的具體問(wèn)題。項(xiàng)目以一個(gè)在UNIX平臺(tái)上實(shí)際應(yīng)用的后臺(tái)結(jié)息系統(tǒng)為移植對(duì)象,考慮系統(tǒng)處理的各種運(yùn)行機(jī)制和平臺(tái)差異,最終將整個(gè)系統(tǒng)移植到Z/OS下。
原系統(tǒng)的操作系統(tǒng)為AIX5.0,數(shù)據(jù)庫(kù)為INFORMIX10X,開發(fā)語(yǔ)言為C語(yǔ)言,移植后的操作系統(tǒng)為Z/OS1.5,數(shù)據(jù)庫(kù)為DB2版本8,開發(fā)語(yǔ)言為C語(yǔ)言。
4.1針對(duì)多進(jìn)程考慮
在原系統(tǒng)中有一個(gè)主控程序設(shè)計(jì),主控程序是一個(gè)主調(diào)度程序,主要負(fù)責(zé)控制并發(fā)的進(jìn)程數(shù)量及狀態(tài),系統(tǒng)支持的并發(fā)數(shù)量由主控程序的參數(shù)設(shè)置,通常設(shè)置為30。主控程序控制的每一個(gè)并發(fā)進(jìn)程代表一個(gè)部門結(jié)息流程。假設(shè)一次性有1000個(gè)部門運(yùn)行結(jié)息過(guò)程,主控程序負(fù)責(zé)調(diào)度,它輪尋所有進(jìn)程,當(dāng)一個(gè)進(jìn)程結(jié)束時(shí)啟動(dòng)下一個(gè)進(jìn)程,直到所有部門完成。
在Z/OS上沒(méi)有進(jìn)程的概念,針對(duì)這種后臺(tái)批處理的結(jié)息方式,我們通過(guò)作業(yè)的方式實(shí)現(xiàn),方案是為每個(gè)部門的結(jié)息準(zhǔn)備一個(gè)JCL作業(yè)。所謂JCL(JobControlLanguage)是作業(yè)控制語(yǔ)言,通過(guò)它寫一段作業(yè)腳本提交給系統(tǒng),可以讓系統(tǒng)執(zhí)行相應(yīng)的程序或進(jìn)行相關(guān)的工作。為每個(gè)部門結(jié)息準(zhǔn)備一個(gè)JCL作業(yè),再準(zhǔn)備一個(gè)主JCL作業(yè),這個(gè)主JCL的任務(wù)就是去提交所有部門的JCL作業(yè)。
把結(jié)息過(guò)程定義為作業(yè)的好處是,在Z/OS里控制作業(yè)的并發(fā)數(shù)量以及作業(yè)調(diào)度的任務(wù)都可以由系統(tǒng)里的作業(yè)處理子系統(tǒng)JES2自動(dòng)完成。在JES2里,有多個(gè)被稱為Initiator的地址空間,每個(gè)Initiator都相當(dāng)于UNIX下的一個(gè)守護(hù)進(jìn)程,專門處理提交的作業(yè)。
Z/OS中的Intiator是一個(gè)自動(dòng)調(diào)度和處理提交的多個(gè)作業(yè)的地址空間,它主要負(fù)責(zé)處理如下任務(wù):
(1)確保同時(shí)運(yùn)行的各項(xiàng)作業(yè)不會(huì)產(chǎn)生數(shù)據(jù)集使用上的沖突;
(2)為作業(yè)分配必要的硬件設(shè)備,如磁帶等;
(3)從庫(kù)中找到每個(gè)作業(yè)需要調(diào)用的可執(zhí)行程序;
(4)當(dāng)一個(gè)作業(yè)運(yùn)行完畢之后,在作業(yè)隊(duì)列中清除該作業(yè)并要求處理下一個(gè)作業(yè)。
每個(gè)Initiator在同一時(shí)刻可以處理一個(gè)作業(yè),而多個(gè)Intiator可以并發(fā)處理多個(gè)作業(yè),各個(gè)Initiator并發(fā)處理各個(gè)作業(yè)都是在保證不出現(xiàn)死鎖的前提下進(jìn)行的。Initiator的數(shù)量可以在系統(tǒng)中設(shè)置,這樣一來(lái)就自動(dòng)實(shí)現(xiàn)了并發(fā)數(shù)的控制。比如我希望將并發(fā)數(shù)控制為50,我們?cè)谙到y(tǒng)中設(shè)置50個(gè)Initiator,然后提交主JCL作業(yè),主JCL作業(yè)再一次性提交1000個(gè)部門的作業(yè),這些作業(yè)由JES自動(dòng)調(diào)度給50個(gè)Initiator,并實(shí)現(xiàn)負(fù)載的均衡。
4.2Makefile的替代
在UNIX平臺(tái)上,通常會(huì)在準(zhǔn)備好源代碼之后使用make工具進(jìn)行編譯,在執(zhí)行make之前,需要一個(gè)命名為Makefile的特殊文件來(lái)告訴make需要做什么,該怎么做。通常make工具主要被用來(lái)進(jìn)行工程編譯和程序鏈接。
當(dāng)使用make工具進(jìn)行編譯時(shí),以下幾種文件在執(zhí)行make時(shí)將會(huì)被編譯或重新編譯:
(1)所有的源文件沒(méi)有被編譯過(guò),則對(duì)各個(gè)C源文件進(jìn)行編譯并進(jìn)行鏈接,生成最后的可執(zhí)行程序;
(2)每一個(gè)在上次執(zhí)行make之后修改過(guò)的C源代碼文件在本次執(zhí)行make時(shí)將會(huì)被重新編譯;
(3)頭文件在上一次執(zhí)行make之后被修改,則所有包含此頭文件的C源文件在本次執(zhí)行make時(shí)將會(huì)被重新編譯。
Makefile文件是一個(gè)非常有效的文件,而在Z/OS平臺(tái)中,沒(méi)有類似的文件可用,通常的編譯都是通過(guò)使用一個(gè)JCL作業(yè)去調(diào)用系統(tǒng)相關(guān)的針對(duì)編程語(yǔ)言的編譯器去執(zhí)行。
考慮到Makefile文件的對(duì)應(yīng)參數(shù)、編譯流程、依賴關(guān)系與JCL作業(yè)有很多相似點(diǎn),我們的方案是還是使用JCL作業(yè)去編譯程序,但將相關(guān)的源程序?qū)懺谕粋€(gè)JCL作業(yè)中。在Z/OS環(huán)境下一個(gè)JCL作業(yè)可以有多個(gè)作業(yè)步,每個(gè)作業(yè)步可以指定進(jìn)行不同的操作或調(diào)用不同的程序,一個(gè)作業(yè)最多可以有255個(gè)作業(yè)步。因此,我們可以將相關(guān)聯(lián)的源程序或者頭文件放到同一個(gè)作業(yè)的不同作業(yè)步中,用于編譯、鏈接,當(dāng)有程序做了修改需要重新編譯鏈接時(shí),還是提交同一個(gè)編譯作業(yè)就可完成。
4.3信號(hào)量機(jī)制的考慮
在實(shí)際結(jié)息流程中,通常每個(gè)進(jìn)程都需要從數(shù)據(jù)庫(kù)表里申請(qǐng)一個(gè)唯一的編號(hào)作為結(jié)息流程的流水號(hào),最終保存到數(shù)據(jù)庫(kù)。流水號(hào)是一個(gè)遞增數(shù)列,無(wú)論進(jìn)程執(zhí)行是否成功,此流水號(hào)都必須唯一且不可讓其他進(jìn)程使用,即使進(jìn)程執(zhí)行失敗,此流水號(hào)也必須作廢而不可給后續(xù)進(jìn)程使用。
在UNIX平臺(tái)下,允許進(jìn)程間通信,信號(hào)量機(jī)制就是用來(lái)解決進(jìn)程同步與互斥問(wèn)題的。通過(guò)P、V操作,保證并發(fā)進(jìn)程互斥地訪問(wèn)數(shù)據(jù)庫(kù)里的流水號(hào)資源。
而在Z/OS平臺(tái)下,特別針對(duì)后臺(tái)批處理方式下,用戶的程序之間,作業(yè)與作業(yè)之間一般不允許相互通信,資源的互斥使用是通過(guò)Initiator調(diào)度實(shí)現(xiàn)的。
考慮到進(jìn)程使用的流水號(hào)最終需要保存到數(shù)據(jù)庫(kù),而且流水號(hào)要求是遞增數(shù)列,我們針對(duì)DB2數(shù)據(jù)庫(kù)直接操作,DB2里面有個(gè)SequenceObject,它是一個(gè)遞增數(shù)列,其遞增幅度與初始值都可以在建立的時(shí)候設(shè)定。我們可以針對(duì)不同類型的流水號(hào)建立一個(gè)或多個(gè)SequenceObject,之后在任何需要用到流水號(hào)的地方,通過(guò)調(diào)用SequenceObject的nextvalue取其當(dāng)前值的下一個(gè)值,這樣不管多少進(jìn)程并發(fā),在同一時(shí)刻其nextvalue永遠(yuǎn)不可能重復(fù),保證流水號(hào)的唯一性。
4.4程序的準(zhǔn)備
移植初期首先需要將程序與數(shù)據(jù)導(dǎo)入到Z/OS環(huán)境下。
程序的導(dǎo)入可以通過(guò)FTP上傳或3270終端直接上傳的方式。首先需要在主機(jī)上針對(duì)不同屬性的文件建立不同屬性的數(shù)據(jù)集。由于主機(jī)上不是樹狀文件系統(tǒng)結(jié)構(gòu),所以要建立幾個(gè)分區(qū)數(shù)據(jù)集,將相關(guān)文件保存成為相關(guān)數(shù)據(jù)集的member。如源文件可以建立一個(gè)數(shù)據(jù)集,名為userid.SRC,庫(kù)文件可以建立為userid.LIB等,數(shù)據(jù)集的大小根據(jù)實(shí)際情況指定,我們的項(xiàng)目考慮可擴(kuò)展性,建立的每個(gè)分區(qū)數(shù)據(jù)集以M為分配單位,初次分配量為300,再次分配量為100,目錄空間大小為100。
將文件保存成文本格式上傳,如果上傳后都成了順序數(shù)據(jù)集,可以寫一個(gè)簡(jiǎn)單的JCL,使用IEBGENER將其拷貝到分區(qū)數(shù)據(jù)集里。
4.5數(shù)據(jù)的導(dǎo)入
對(duì)于數(shù)據(jù)庫(kù)的導(dǎo)出導(dǎo)入,我們的方案是先將數(shù)據(jù)庫(kù)創(chuàng)建腳本導(dǎo)入到數(shù)據(jù)集,使用主機(jī)上的SPUFI運(yùn)行腳本創(chuàng)建好數(shù)據(jù)庫(kù)、表空間和相關(guān)表、索引等。將原Infomix數(shù)據(jù)庫(kù)的數(shù)據(jù)以文本方式導(dǎo)出,再導(dǎo)入到主機(jī),最后導(dǎo)入到數(shù)據(jù)庫(kù)。
在DB2里,數(shù)據(jù)庫(kù)的導(dǎo)入有Import和Load兩種方法。Import以SQL為基礎(chǔ),會(huì)寫日志,可以對(duì)視圖操作,表上定義的各種約束都將被檢查,可以在目標(biāo)表不存在的情況下通過(guò)ixf格式的文件創(chuàng)建表,不能在Import過(guò)程中搜集統(tǒng)計(jì)信息。Import成功后表就可以使用。
Load操作屬于偏底層的操作,不寫日志,不可以對(duì)視圖操作,除了唯一性約束之外的各種約束都不在Load過(guò)程中被檢查,不可以在目標(biāo)表不存在的情況下創(chuàng)建表,可以在Load過(guò)程中搜集統(tǒng)計(jì)信息。Load過(guò)程成功后也有可能將表空間置于pending等的特殊狀態(tài),管理相對(duì)比較復(fù)雜。
總的來(lái)說(shuō),由于Load操作底層,因此速度很快,適合用于大量數(shù)據(jù)的導(dǎo)入;Import速度慢但管理簡(jiǎn)單,適用于少量數(shù)據(jù)導(dǎo)入。
由于我們的數(shù)據(jù)量非常大,因此選擇使用Load導(dǎo)入數(shù)據(jù)。我們將導(dǎo)出的數(shù)據(jù)保存到主機(jī)的數(shù)據(jù)集里,通過(guò)寫一個(gè)Load作業(yè),從相關(guān)數(shù)據(jù)集導(dǎo)入需要的數(shù)據(jù)。在Load過(guò)程中,可能會(huì)因?yàn)閰?shù)或數(shù)據(jù)出錯(cuò)導(dǎo)致表空間置于reorganizepending狀態(tài),或者將某個(gè)表的Index置于rebuildpending狀態(tài),這時(shí)只需要將相應(yīng)的表空間做一個(gè)REORG或者對(duì)相應(yīng)的Index做一個(gè)rebuild就可以解決。
5總結(jié)
在決定對(duì)一套應(yīng)用軟件進(jìn)行移植前,首先要明確移植的目的,選用適當(dāng)?shù)钠脚_(tái)和語(yǔ)言,然后充分地分析移植前后軟件運(yùn)行環(huán)境的異同,決定要采取的技術(shù)和需要進(jìn)行的結(jié)構(gòu)調(diào)整,這樣就可以系統(tǒng)而有序地完成大中型軟件的移植工作,并可有效地提高軟件質(zhì)量,延長(zhǎng)軟件生命期。通過(guò)幾個(gè)月的實(shí)踐,我們的方案在可行性上得到了驗(yàn)證,作為實(shí)際的應(yīng)用,還有很多地方有待我們進(jìn)一步探討。
Abstract:ThispaperfirstintroducesthemaindifferencesbetweenUINXandIBMMainframeplatforms,andthendiscussesthemainproblemsandthesolutionsontheprogrammigrationfromUNIXtoIBMMainframe.
Keywords:IBMMainframe;migration;JobControlLanguage;Initiator