如何為大型機(jī)開啟CICS存儲(chǔ)保護(hù)

責(zé)任編輯:vivian

2012-03-22 09:20:59

摘自:TechTarget中國

存儲(chǔ)重復(fù)占位段是調(diào)試時(shí)最棘手的問題之一,大型機(jī)存儲(chǔ)重復(fù)占位段可使數(shù)據(jù)、CICS區(qū)域遭到破壞,或可能造成計(jì)劃外的初始化程序加載。

存儲(chǔ)重復(fù)占位段是調(diào)試時(shí)最棘手的問題之一,大型機(jī)存儲(chǔ)重復(fù)占位段可使數(shù)據(jù)、CICS區(qū)域遭到破壞,或可能造成計(jì)劃外的初始化程序加載。CICS特別容易受到重復(fù)占位段破壞,因?yàn)樗慕Y(jié)構(gòu)分配程序和系統(tǒng)內(nèi)存在一個(gè)地址空間,有效地繞過z/OS保護(hù)鎖,為了解決這個(gè)問題,IBM引入了三個(gè)功能,包括存儲(chǔ)保護(hù),在這篇文章中,我將解釋什么是存儲(chǔ)保護(hù),以及如何用它規(guī)避存儲(chǔ)重復(fù)占位段。
大型機(jī)存儲(chǔ)保護(hù)

借助存儲(chǔ)保護(hù),CICS通過將系統(tǒng)和用戶數(shù)據(jù)放入不同的鎖來使用z/OS存儲(chǔ)鎖保護(hù),這種方法允許CICS系統(tǒng)把對讀編碼,并寫入用戶和系統(tǒng)存儲(chǔ),相反,應(yīng)用程序可以讀,但不能更新CICS存儲(chǔ),即使可以隨意控制用戶存儲(chǔ),因此,正確實(shí)現(xiàn)的應(yīng)用程序重復(fù)占位段系統(tǒng)存儲(chǔ)會(huì)產(chǎn)生一個(gè)保護(hù)異常(0C4),而不會(huì)讓CICS當(dāng)?shù)簟?/p>

你可以通過將系統(tǒng)初始化參數(shù)STGPORT設(shè)為YES為某個(gè)區(qū)域開啟存儲(chǔ)保護(hù),這個(gè)參數(shù)不是動(dòng)態(tài)的,CICS必須返回開關(guān)狀態(tài)。

激活存儲(chǔ)保護(hù)時(shí),一些事務(wù)和程序?qū)傩宰兊梅浅V匾?,對某個(gè)事務(wù),TASKDATAKEY屬性指定CICS使用哪一個(gè)鎖保護(hù)該事務(wù),包括EXEC Interface Block事務(wù)工作區(qū)。

程序?qū)傩訣XECKEY告訴CICS當(dāng)它進(jìn)入程序時(shí)使用哪一個(gè)存儲(chǔ)鎖。

存儲(chǔ)保護(hù)和上面的資源屬性使事情變得更復(fù)雜,例如,一個(gè)有TASKDATAKEY的CICS事務(wù)不能調(diào)用有EXECKEY的USER程序,因?yàn)槌绦虿荒軐懭蝿?wù)存儲(chǔ),幸虧CICS可以感知到,并殺掉事務(wù)。

注意,如果STGPORT被設(shè)為NO,TASKDATAKEY和EXECKEY都將無效。

應(yīng)用程序變化

設(shè)置CICS參數(shù)是最容易的部分,更大的挑戰(zhàn)是找出并修復(fù)不能與大型機(jī)存儲(chǔ)保護(hù)功能一起工作的應(yīng)用程序。

修改CICS數(shù)據(jù)區(qū)域的程序?qū)⒉辉偈艽鎯?chǔ)保護(hù)的控制,一個(gè)好的源掃描工具和一串CICS數(shù)據(jù)區(qū)域?qū)椭憧焖僬业剿鼈儭?/p>

一旦發(fā)現(xiàn),可以修改程序使用CICS廣泛的系統(tǒng)編程接口(SPI),如果沒有SPI命令,CICS就退出或替換可用的進(jìn)程,有些人需要確定功能是否仍然需要。

程序可以調(diào)用操作系統(tǒng)服務(wù)進(jìn)行內(nèi)存管理,資源序列化或事件同步,這些服務(wù)可能在一個(gè)不正確的鎖中使用存儲(chǔ),有些系統(tǒng)級代碼總是需要操作系統(tǒng)服務(wù),大多數(shù)調(diào)用應(yīng)該調(diào)整,以便使用CICS的應(yīng)用程序編程接口(API)。

需要注意的是,這些很可能是匯編程序,面向高級語言的運(yùn)行時(shí)庫通常是很智能的,當(dāng)它們知道它們處于在線環(huán)境中時(shí),它們可以調(diào)用CICS服務(wù)。

但是,對大多數(shù)其它程序而言,適宜采用暴力方法,這就需要打開存儲(chǔ)保護(hù),運(yùn)行一個(gè)應(yīng)用程序,獲得dump數(shù)據(jù),修復(fù)代碼再次嘗試,雖然這會(huì)撼動(dòng)一些較突出的問題,但真正的存儲(chǔ)違反行為可能不會(huì)出現(xiàn),除非進(jìn)行壓力測試。

存儲(chǔ)保護(hù)的實(shí)現(xiàn)和局限性

商家可能會(huì)采用多個(gè)策略實(shí)現(xiàn)存儲(chǔ)保護(hù),一個(gè)選擇可能是在開發(fā)和測試階段早期中斷保護(hù),程序員然后促進(jìn)模塊和代碼質(zhì)量的提高,測試移動(dòng)到開啟了存儲(chǔ)保護(hù)的區(qū)域,捕捉余下的錯(cuò)誤,理想情況下,存儲(chǔ)保護(hù)應(yīng)該被關(guān)閉,假設(shè)所有重復(fù)占位段在開發(fā)期間全部被消除,但是,生產(chǎn)環(huán)境將產(chǎn)生程序員從來都沒想過的錯(cuò)誤,大多數(shù)系統(tǒng)程序員希望給生產(chǎn)區(qū)域提供一些保護(hù)措施。

還需要注意的是,大型機(jī)存儲(chǔ)保護(hù)不會(huì)捕捉到所有重復(fù)占位段,一個(gè)運(yùn)行在用戶鎖中的事務(wù)可能會(huì)覆蓋其它事務(wù)的用戶鎖存儲(chǔ),此外,程序可能覆蓋它自己或其它應(yīng)用程序的代碼。

為了修復(fù)這個(gè)缺點(diǎn),CICS引入了兩個(gè)額外的大型機(jī)存儲(chǔ)保護(hù)功能:

重新載入程序,進(jìn)入類似于z/OS鏈路包區(qū)域的只讀存儲(chǔ),需要注意的是,這并沒有聽起來那么簡單,某些程序可能會(huì)引起問題,因?yàn)樗鼈冃薷牧俗约夯蜢o態(tài)存儲(chǔ)區(qū)域,根據(jù)程序行為的不同,重載程序進(jìn)行保護(hù)模式可能比實(shí)施存儲(chǔ)保護(hù)更困難。

事務(wù)隔離將分配給任務(wù)的存儲(chǔ)分解為子空間,模仿z/OS地址空間,確保每個(gè)任務(wù)有它自己的子空間,并保證它們不能寫其它任務(wù)的子空間,但是,事務(wù)隔離會(huì)引起大量的CPU開銷,CICS必須管理子空間開關(guān),這又會(huì)引起額外的內(nèi)存開銷,因?yàn)樽涌臻g有存儲(chǔ)邊界,需要分段。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號