數據存儲產業服務平臺

如何用CICS存儲保護規避存儲重復占位段

大型機存儲重復占位段可使數據、CICS區域遭到破壞,或可能造成計劃外的初始化程序加載。CICS特別容易受到重復占位段破壞,因為它的結構分配程序和系統內存在一個地址空間,有效地繞過z/OS保護鎖,為了解決這個問題,IBM引入了三個功能,包括存儲保護,在本文中將解釋什么是存儲保護,以及如何用它規避存儲重復占位段。

大型機存儲保護

借助存儲保護,CICS通過將系統和用戶數據放入不同的鎖來使用z/OS存儲鎖保護,這種方法允許CICS系統把對讀編碼,并寫入用戶和系統存儲,相反,應用程序可以讀,但不能更新CICS存儲,即使可以隨意控制用戶存儲,因此,正確實現的應用程序重復占位段系統存儲會產生一個保護異常(0C4),而不會讓CICS當掉。

你可以通過將系統初始化參數STGPORT設為YES為某個區域開啟存儲保護,這個參數不是動態的,CICS必須返回開關狀態。

激活存儲保護時,一些事務和程序屬性變得非常重要,例如,對某個事務,TASKDATAKEY屬性指定CICS使用哪一個鎖保護該事務,包括EXEC Interface Block事務工作區。

程序屬性EXECKEY告訴CICS當它進入程序時使用哪一個存儲鎖。

存儲保護和上面的資源屬性使事情變得更復雜,例如,一個有TASKDATAKEY的CICS事務不能調用有EXECKEY的USER程序,因為程序不能寫任務存儲,幸虧CICS可以感知到,并殺掉事務。

注意:如果STGPORT被設為NO,TASKDATAKEY和EXECKEY都將無效。

應用程序變化

設置CICS參數是最容易的部分,更大的挑戰是找出并修復不能與大型機存儲保護功能一起工作的應用程序。

修改CICS數據區域的程序將不再受存儲保護的控制,一個好的源掃描工具和一串CICS數據區域將幫助你快速找到它們。

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

程序可以調用操作系統服務進行內存管理,資源序列化或事件同步,這些服務可能在一個不正確的鎖中使用存儲,有些系統級代碼總是需要操作系統服務,大多數調用應該調整,以便使用CICS的應用程序編程接口(API)。

需要注意的是,這些很可能是匯編程序,面向高級語言的運行時庫通常是很智能的,當它們知道它們處于在線環境中時,它們可以調用CICS服務。

但是,對大多數其它程序而言,適宜采用暴力方法,這就需要打開存儲保護,運行一個應用程序,獲得dump數據,修復代碼再次嘗試,雖然這會撼動一些較突出的問題,但真正的存儲違反行為可能不會出現,除非進行壓力測試。

存儲保護的實現和局限性

商家可能會采用多個策略實現存儲保護,一個選擇可能是在開發和測試階段早期中斷保護,程序員然后促進模塊和代碼質量的提高,測試移動到開啟了存儲保 護的區域,捕捉余下的錯誤,理想情況下,存儲保護應該被關閉,假設所有重復占位段在開發期間全部被消除,但是,生產環境將產生程序員從來都沒想過的錯誤, 大多數系統程序員希望給生產區域提供一些保護措施。

還需要注意的是,大型機存儲保護不會捕捉到所有重復占位段,一個運行在用戶鎖中的事務可能會覆蓋其它事務的用戶鎖存儲,此外,程序可能覆蓋它自己或其它應用程序的代碼。

為了修復這個缺點,CICS引入了兩個額外的大型機存儲保護功能:

重新載入程序,進入類似于z/OS鏈路包區域的只讀存儲,需要注意的是,這并沒有聽起來那么簡單,某些程序可能會引起問題,因為它們修改了自己或靜態存儲區域,根據程序行為的不同,重載程序進行保護模式可能比實施存儲保護更困難。

事務隔離將分配給任務的存儲分解為子空間,模仿z/OS地址空間,確保每個任務有它自己的子空間,并保證它們不能寫其它任務的子空間,但是,事務隔離會引起大量的CPU開銷,CICS必須管理子空間開關,這又會引起額外的內存開銷,因為子空間有存儲邊界,需要分段。

未經允許不得轉載:存儲在線-存儲專業媒體 » 如何用CICS存儲保護規避存儲重復占位段
精品国产午夜肉伦伦影院,双性老师灌满浓jing上课h,天天做天天爱夜夜爽,攵女乱h边做边走