專利名稱:用于tod-時(shí)鐘導(dǎo)引的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明主要涉及計(jì)算機(jī)系統(tǒng)中的時(shí)序信號,特別涉及用于調(diào)整計(jì)算機(jī)系統(tǒng)中的白天時(shí)間(TOD)時(shí)鐘以求增強(qiáng)時(shí)序精度的系統(tǒng)和方法。
背景技術(shù):
為了提供計(jì)算機(jī)系統(tǒng)中的系統(tǒng)完整性和數(shù)據(jù)恢復(fù),主機(jī)服務(wù)器設(shè)備使用了通用時(shí)間戳的概念,比如可從受讓人國際商業(yè)機(jī)器公司獲得的zSerieseServer。每當(dāng)更新數(shù)據(jù)庫記錄時(shí),也創(chuàng)建恢復(fù)記錄。該恢復(fù)記錄包括在數(shù)據(jù)庫記錄被鎖定時(shí)而獲得的時(shí)間戳。只要使用時(shí)間戳依次對來自用于所有線程的所有恢復(fù)記錄數(shù)據(jù)集的恢復(fù)記錄進(jìn)行分類,恢復(fù)記錄中的剩余信息就足以恢復(fù)數(shù)據(jù)庫記錄。這要求系統(tǒng)聯(lián)合體(sysplex)中的所有TOD時(shí)鐘必須具有相同時(shí)間。
以往,時(shí)序網(wǎng)絡(luò)中的TOD時(shí)鐘的同步是借助了外部時(shí)鐘盒,9037系統(tǒng)聯(lián)合體定時(shí)器。9037時(shí)序網(wǎng)絡(luò)中的每個(gè)中央處理聯(lián)合體(CPC)將它的TOD時(shí)鐘步進(jìn)到來自9037的信號。由9037廣播的步進(jìn)信號要求從9037到每個(gè)CPC的專用點(diǎn)對點(diǎn)鏈路(稱為外部時(shí)間基準(zhǔn)(ETR)鏈路)。步進(jìn)信號在ETR鏈路上的準(zhǔn)確傳送在邏輯和物理信號層要求不同于任何其他通信協(xié)議的專用協(xié)議。為了同步在邏輯上分隔的機(jī)器邏輯分區(qū)而實(shí)施ETR偏移值的代表性系統(tǒng)在共有的美國專利第6,209,106中有所描述。
當(dāng)前的時(shí)鐘同步解決方案解決了以略有不同的速率來進(jìn)行步進(jìn)的時(shí)鐘(通常分開相當(dāng)大的距離)的同步(每個(gè)時(shí)鐘具有本地振蕩器)。用于時(shí)鐘同步的這些解決方案要求兩部分動(dòng)作1)檢測時(shí)鐘之間的差異(或誤差);以及2)根據(jù)該誤差對振蕩器頻率或步進(jìn)速率進(jìn)行調(diào)整。
對于實(shí)施不包括步進(jìn)信號的時(shí)序解決方案的系統(tǒng),即時(shí)序信息是借助于具有時(shí)間戳和其他時(shí)序信息的消息來傳送的,每個(gè)CPC必須通過計(jì)算偏移和采取動(dòng)作調(diào)整TOD時(shí)鐘來將它的TOD時(shí)鐘保持為與其余的其他CPC的TOD時(shí)鐘步調(diào)一致。這類似于由NTP(網(wǎng)絡(luò)時(shí)序協(xié)議)執(zhí)行的動(dòng)作,其差異在于NTP通常是在時(shí)間戳能夠由控制程序來生成的軟件層中實(shí)施。然而,eServer zSeries體系結(jié)構(gòu)對于TOD時(shí)鐘具有很嚴(yán)格的要求;它能夠被任何問題程序查看,所有時(shí)間戳必須不同,時(shí)間戳必須決不表現(xiàn)為向后步進(jìn),而且時(shí)間戳必須表現(xiàn)為增加,即使當(dāng)被在CPC中的不同CPU上運(yùn)行的程序查看時(shí)。為了對新的時(shí)序解決方案所要求的TOD時(shí)鐘進(jìn)行調(diào)整,TOD時(shí)鐘的步進(jìn)速率必須通過很精細(xì)的調(diào)整來加速或減緩,而且這些調(diào)整必須同時(shí)被CPC中的所有CPU觀測。這一點(diǎn)是關(guān)鍵的,因?yàn)槿缦率聦?shí)到達(dá)TOD時(shí)鐘最右比特的步進(jìn)脈沖之間的時(shí)間可以與CPU之間的高速緩存到高速緩存的傳送時(shí)間相比。因此,通過可能的最小值來改變正如一個(gè)CPU所查看的TOD可能造成TOD時(shí)鐘不再滿足對于正如CPC中的其它CPU所查看的TOD時(shí)鐘的體系結(jié)構(gòu)要求。
替選解決方案是調(diào)整對TOD步進(jìn)脈沖進(jìn)行驅(qū)動(dòng)的物理振蕩器的速率。然而,對此有若干問題1)此解決方案不能翻新到較舊的機(jī)器;2)沒有技術(shù)可用來提供所要求的準(zhǔn)確度(例如優(yōu)于每百萬分之(ppm)2);3)測試這樣的電路很難;4)它未解決協(xié)同不連續(xù)(在誤差之后重新同步時(shí)鐘)的問題;以及5)它未提供對除z/OS和TPF(交易處理設(shè)施)之外的平臺(tái)的良好接口。
因此將非常希望提供一種用于在包括多個(gè)CPC的緊密耦合共享存儲(chǔ)多處理環(huán)境中調(diào)整TOD時(shí)鐘的系統(tǒng)和方法,其中所有物理時(shí)鐘已經(jīng)借助于公共振蕩器步進(jìn)脈沖來同步。
發(fā)明內(nèi)容
本發(fā)明的目的是為具有緊密耦合的共享存儲(chǔ)多處理環(huán)境(CPC)的主機(jī)服務(wù)器體系結(jié)構(gòu)提供新穎的白天時(shí)間(TOD)時(shí)鐘導(dǎo)引方法和裝置,其中所有物理時(shí)鐘借助于公共振蕩器步進(jìn)脈沖來進(jìn)行同步。
根據(jù)本發(fā)明,TOD時(shí)鐘導(dǎo)引提供了用以改變TOD的明顯步進(jìn)速率而不改變使物理時(shí)鐘步進(jìn)的物理硬件振蕩器的手段。這是借助于具有內(nèi)容的TOD偏移寄存器來實(shí)現(xiàn)的,將這些內(nèi)容相加到物理時(shí)鐘以產(chǎn)生邏輯TOD時(shí)鐘值。優(yōu)選地,TOD時(shí)鐘的調(diào)整借助于硬件共享存儲(chǔ)器中的共享位置來數(shù)字地執(zhí)行。
因此,根據(jù)本發(fā)明,提供了一種用于為計(jì)算機(jī)系統(tǒng)導(dǎo)引白天時(shí)間(TOD)時(shí)鐘的系統(tǒng)、方法和計(jì)算機(jī)程序,該計(jì)算機(jī)系統(tǒng)具有用于為執(zhí)行操作提供時(shí)基的物理時(shí)鐘,將該物理時(shí)鐘步進(jìn)到公共振蕩器。該方法包括計(jì)算TOD時(shí)鐘偏移值(d)以將其相加到物理時(shí)鐘值(Tr)來獲得邏輯TOD時(shí)鐘值(Tb),其中TOD時(shí)鐘值是可調(diào)整的并且無需調(diào)整振蕩器的步進(jìn)速率。
總導(dǎo)引速率由兩個(gè)分量構(gòu)成細(xì)導(dǎo)引速率和粗導(dǎo)引速率。細(xì)導(dǎo)引速率用來校正本地振蕩器中在相對長的時(shí)間段穩(wěn)定的不準(zhǔn)確。該值將通常小于本地振蕩器的指定容差(通常為±2.0ppm)。粗導(dǎo)引速率用作為對于所有其他效果的動(dòng)態(tài)校正,它是用以將時(shí)間同步于外部時(shí)間源以及同步于時(shí)序網(wǎng)絡(luò)中的其他時(shí)鐘的主導(dǎo)力量。
該新穎的裝置和方法使用了所構(gòu)造的數(shù)學(xué)公式,使得時(shí)鐘“滴答”決不丟失,即使將特定CPU延遲了延長的時(shí)間段。提供了接口用以允許甚至在第二執(zhí)行層的問題程序來確定和考慮TOD時(shí)鐘導(dǎo)引的甚至最細(xì)微的細(xì)節(jié)。這些程序能夠獲得準(zhǔn)確到百萬分之零點(diǎn)幾的時(shí)序信息,即使例如正在以百萬分之40對TOD時(shí)鐘進(jìn)行引導(dǎo)。
作為對此的引申,本發(fā)明的裝置和方法1)提供了將所有物理時(shí)鐘步進(jìn)到公共振蕩器而且進(jìn)行了同步;2)提供了用以指示出現(xiàn)TOD偏移更新事件的由硬件生成的信號。在一個(gè)示例實(shí)施例中,這可以通過來自每個(gè)CPU中物理時(shí)鐘的比特位置的“進(jìn)位”來觸發(fā);3)將當(dāng)前的導(dǎo)引參數(shù)傳達(dá)到所有CPU。這優(yōu)選地通過共享存儲(chǔ)器來實(shí)現(xiàn),該共享存儲(chǔ)器能夠進(jìn)行互鎖地更新以改變導(dǎo)引參數(shù)并且能夠由所有處理器進(jìn)行只讀訪問以最小化開銷;以及4)它實(shí)施了數(shù)學(xué)公式用以計(jì)算數(shù)字值,以便更新該偏移并將其應(yīng)用于精確的時(shí)間時(shí)刻。該數(shù)學(xué)公式使得,即使CPU長時(shí)間進(jìn)入休眠也保證不丟失值。
根據(jù)與附圖相組合的如下具體描述,本發(fā)明的目的、特征和優(yōu)點(diǎn)對于本領(lǐng)域技術(shù)人員將變得明顯,在附圖中圖1是描繪了本發(fā)明實(shí)施于其中的系統(tǒng)10的圖;圖2描繪了根據(jù)本發(fā)明一個(gè)實(shí)施例的TOD時(shí)鐘操作的概況;圖3提供了根據(jù)本發(fā)明一個(gè)實(shí)施例而實(shí)施的TOD時(shí)鐘導(dǎo)引寄存器的總結(jié);圖4圖示了代表在本發(fā)明中實(shí)施的硬件寄存器的符號,其子集在圖1中示出;以及圖5圖示了用以更新TOD偏移寄存器的實(shí)施細(xì)節(jié)。
具體實(shí)施例方式
本發(fā)明致力于一種用于主機(jī)服務(wù)器體系結(jié)構(gòu)的白天時(shí)間(TOD)時(shí)鐘導(dǎo)引方法和裝置,該主機(jī)服務(wù)器體系結(jié)構(gòu)具有緊密耦合共享存儲(chǔ)多處理環(huán)境(CPC),其中所有物理時(shí)鐘已經(jīng)借助于公共振蕩器步進(jìn)脈沖進(jìn)行了同步。
圖1是描繪了本發(fā)明實(shí)施于其中的系統(tǒng)10的圖。該系統(tǒng)包括,如圖1示出的,zSerieseServer,這里稱為中央處理聯(lián)合體(CPC),其具有標(biāo)記為CPU_0、CPU_1、...、CPU N的多個(gè)CPU。該CPC具有主時(shí)鐘15,而且每個(gè)CPU具有從物理時(shí)鐘20a、20b、...、20n。借助于本領(lǐng)域中公知的手段將從物理時(shí)鐘設(shè)置為與主時(shí)鐘相同的值。主時(shí)鐘15和所有從物理時(shí)鐘20a、20b、...、20n通過由振蕩器18生成的相同的步進(jìn)信號(標(biāo)記為“s”)來進(jìn)行步進(jìn)。在一個(gè)說明性實(shí)施例中,除從物理時(shí)鐘(標(biāo)記為“Tr”)之外,每個(gè)CPU也具有偏移寄存器(標(biāo)記為“d”)、基本機(jī)器邏輯TOD時(shí)鐘(標(biāo)記為“Tb”)、指令地址寄存器(標(biāo)記為“IA”)和16個(gè)通用寄存器(標(biāo)記為GR0-GR15)。如圖所示,CPU_0、CPU_1、...、CPU_N中的每一個(gè)共享公共存儲(chǔ)設(shè)備25,該設(shè)備包括可為程序所用的主存儲(chǔ)區(qū)26以及硬件存儲(chǔ)區(qū)27,后者是分出的小部分以便在“覆蓋之下”用于子通道信息、CPU到CPU通信、加密緩沖器隊(duì)列、測量信息等。
眾所周知,CPC適用于允許在單個(gè)CPC內(nèi)建立多個(gè)系統(tǒng)圖像的邏輯分區(qū)。邏輯分區(qū)(LPAR)結(jié)構(gòu)28如圖1中所示,代表了每個(gè)系統(tǒng)圖像,該系統(tǒng)圖像能操作為就好像它是分離的計(jì)算機(jī)系統(tǒng)一樣,而且能夠被獨(dú)立地重置、加載有(對于每個(gè)邏輯分區(qū)而言不同的)操作系統(tǒng)、以及使用不同的I/O設(shè)備以不同的軟件程序來操作。另外,每個(gè)分區(qū)具有它自身的邏輯分區(qū)時(shí)鐘“Tp”,正如參照圖2更詳細(xì)地描述的。圖1中所示的每個(gè)LPAR結(jié)構(gòu)通過狀態(tài)描述來邏輯地代表,該狀態(tài)描述包括用以指明寄存器(PSW、GR、FPR等)、要使用的存儲(chǔ)區(qū)和LPAR攔截控制的所有信息。隨著僅LPAR的系統(tǒng)的出現(xiàn),硬件存儲(chǔ)區(qū)27是用于LPAR系統(tǒng)管理程序(hypervisor)的共享存儲(chǔ)部分。此外,圖1的系統(tǒng)中示出了導(dǎo)引控制29,該導(dǎo)引控制包括“TOD時(shí)鐘導(dǎo)引寄存器”用于存儲(chǔ)時(shí)鐘導(dǎo)引值,包括但不限于舊片斷(episode)開始時(shí)間(old.s)、舊片斷基礎(chǔ)偏移(old.b)、舊片斷細(xì)導(dǎo)引(old.f)、舊片斷粗導(dǎo)引(old.g)、新片斷開始時(shí)間(new.s)、新片斷基礎(chǔ)偏移(new.g)、新片斷細(xì)導(dǎo)引(new.f)和新片斷粗導(dǎo)引(new.g)。這些時(shí)鐘導(dǎo)引寄存器值將結(jié)合圖2在此詳細(xì)地進(jìn)一步加以描述。
根據(jù)本發(fā)明,TOD-時(shí)鐘導(dǎo)引提供了用以改變TOD時(shí)鐘Tb的明顯步進(jìn)速率而不改變對物理時(shí)鐘Tr進(jìn)行步進(jìn)的物理硬件振蕩器的手段。這借助于TOD-偏移寄存器d來實(shí)現(xiàn),將該寄存器d相加到物理時(shí)鐘Tr以產(chǎn)生邏輯TOD時(shí)鐘值。
TOD偏移寄存器d名義上包括比特,即比特0-95,這些比特通過與稱為當(dāng)前總導(dǎo)引速率“r”的32比特帶符號值相加而每微秒地進(jìn)行更新,該帶符號值與TOD偏移寄存器的比特64-95對準(zhǔn)。來自TOD偏移寄存器比特位置0的進(jìn)位(如果有的話)在此加法中被忽略。在具有更高或更低分辨率的機(jī)型中,該加法是以這樣的頻率而且利用適當(dāng)?shù)貙?zhǔn)的r時(shí)來執(zhí)行的,該頻率使得改變TOD偏移寄存器的速率與就好像每微秒地將r相加到比特64-95那樣相同。
應(yīng)當(dāng)理解,對于一些服務(wù)器(CPC)體系結(jié)構(gòu),TOD偏移寄存器d可以少于64比特,而且使用數(shù)學(xué)公式來定期地進(jìn)行更新。該數(shù)學(xué)公式產(chǎn)生等效于名義速率的結(jié)果,而且被設(shè)計(jì)為使得更新決不丟失即使在長時(shí)間段中止機(jī)器操作的情況下。在正常操作中,足夠頻繁地執(zhí)行該更新,以使得如程序所觀測的效果與均勻的步進(jìn)速率沒有區(qū)別。
正如這里將更詳細(xì)地所述,TOD時(shí)鐘導(dǎo)引包括半特許指令執(zhí)行時(shí)序設(shè)施功能(PTFF),該半特許指令包括功能代碼和參數(shù)塊的規(guī)范。TOD時(shí)鐘導(dǎo)引還包括解釋性執(zhí)行控制,“時(shí)序設(shè)施執(zhí)行控制”,該解釋性執(zhí)行控制在用于邏輯分區(qū)的結(jié)構(gòu)中包括控制比特。此比特當(dāng)在第一層狀態(tài)描述中為一時(shí),允許該邏輯分區(qū)中的管理程序執(zhí)行四個(gè)PTFF控制功能中的三個(gè)控制功能而無需攔截。
如上所述,TOD時(shí)鐘導(dǎo)引允許時(shí)序設(shè)施控制程序調(diào)整TOD時(shí)鐘的明顯步進(jìn)速率。該步進(jìn)速率能夠被調(diào)整達(dá)到約±百萬分之(ppm)122,精度達(dá)到244分之一(約每天4.9納秒)。該步進(jìn)速率能夠以非破壞方式來改變;也就是,應(yīng)用程序可以在該改變進(jìn)行時(shí)運(yùn)行于該配置中,對于程序有幾乎不可察覺的效果。
總導(dǎo)引速率由兩個(gè)分量構(gòu)成細(xì)導(dǎo)引速率和粗導(dǎo)引速率。細(xì)導(dǎo)引速率用來校正本地振蕩器中在相對長的時(shí)間段穩(wěn)定的不準(zhǔn)確。該值將通常少于本地振蕩器的指定容差(通常為±2.0ppm),其改變將很少地發(fā)生(數(shù)量級為每天一次至每周一次),而且改變將是小的(通常小于±0.2ppm)。
粗導(dǎo)引速率用作為對于所有其他效果的動(dòng)態(tài)校正,它是用以將時(shí)間同步于外部時(shí)間源以及同步于時(shí)序網(wǎng)絡(luò)中的其他時(shí)鐘的主導(dǎo)力量。其值將通常地頻繁改變(數(shù)量級為每秒一次至每分鐘一次);而且其值在范圍上可以達(dá)到多于±10ppm。
盡管細(xì)導(dǎo)引速率和粗導(dǎo)引速率由時(shí)序設(shè)施控制程序用于不同的目的,但是這些分量在時(shí)鐘調(diào)整算法中是可交換地被處理的。將32比特細(xì)導(dǎo)引速率(f)相加到32比特粗導(dǎo)引速率(g)以形成32比特當(dāng)前總導(dǎo)引速率(r);來自比特位置0的進(jìn)位(如果有的話)在此加法中被忽略。TOD時(shí)鐘導(dǎo)引包括由時(shí)序設(shè)施控制程序發(fā)出的四個(gè)控制功能1)設(shè)置細(xì)導(dǎo)引速率;2)設(shè)置粗導(dǎo)引速率;3)調(diào)整TOD偏移;以及4)設(shè)置TOD偏移。設(shè)置細(xì)導(dǎo)引速率和設(shè)置粗導(dǎo)引速率的功能分別對細(xì)導(dǎo)引速率寄存器和粗導(dǎo)引速率寄存器進(jìn)行操作,而且在不造成邏輯TOD時(shí)鐘的任何不連續(xù)性的情況下即可發(fā)出。這些功能僅可對時(shí)序設(shè)施控制程序可用;然而,可以由在具有特殊授權(quán)的邏輯分區(qū)中運(yùn)行的測試程序使用。
當(dāng)操作于基本機(jī)器層時(shí),設(shè)置TOD偏移和調(diào)整TOD偏移的功能允許將邏輯TOD時(shí)鐘Tb設(shè)置到任一任意值,但是具有不連續(xù)性。這些功能旨在僅由時(shí)序設(shè)施控制程序使用于初始化、測試以及極端誤差的情形中。當(dāng)操作于邏輯分區(qū)和虛擬機(jī)器層時(shí),設(shè)置TOD偏移的功能在管理狀態(tài)中發(fā)出時(shí)造成攔截,而且用以將狀態(tài)描述中的TOD時(shí)點(diǎn)差異設(shè)置為請求值的該功能可以由系統(tǒng)管理程序模擬。對于具有特殊授權(quán)的在邏輯分區(qū)中運(yùn)行的程序,設(shè)置TOD偏移和調(diào)整TOD偏移的功能以不同的寄存器為目標(biāo)。設(shè)置TOD偏移的功能由系統(tǒng)管理程序模擬,而且如上所述對TOD時(shí)點(diǎn)差異進(jìn)行操作。調(diào)整TOD偏移的功能在TOD偏移寄存器上操作,并且由該機(jī)器執(zhí)行而無攔截。
TOD時(shí)鐘導(dǎo)引也包括若干查詢功能,這些查詢功能不僅可由時(shí)序設(shè)施控制程序使用,而且還可由問題程序使用以便確定TOD時(shí)鐘的質(zhì)量。
圖2描繪了包括導(dǎo)引的TOD時(shí)鐘操作的概況。TOD時(shí)鐘導(dǎo)引借助于三個(gè)值來實(shí)現(xiàn)開始時(shí)間(s)、基礎(chǔ)偏移(b)和導(dǎo)引速率(r)。這三個(gè)值用來計(jì)算TOD偏移(d),將該TOD偏移相加到物理時(shí)鐘(Tr)以形成基本機(jī)器TOD時(shí)鐘(Tb)。開始時(shí)間(s)和基礎(chǔ)偏移(b)是64比特?zé)o符號二進(jìn)制整數(shù),而且被視為與TOD時(shí)鐘的比特0-63對準(zhǔn)。根據(jù)本發(fā)明的一個(gè)實(shí)施例,導(dǎo)引速率是32比特帶符號二進(jìn)制定點(diǎn)值而且被視為通過因子2-44來縮放。如下公式示出了從物理時(shí)鐘(Tr)、當(dāng)前開始時(shí)間(s)、當(dāng)前基礎(chǔ)偏移(b)和當(dāng)前總導(dǎo)引速率(r)導(dǎo)出TOD偏移(d)和基本機(jī)器TOD時(shí)鐘(Tb)d=b+(Tr-s)·r·2-44Tb=Tr+d如圖2中所示,還將導(dǎo)引應(yīng)用到邏輯分區(qū)TOD時(shí)鐘(Tp)和虛擬機(jī)器TOD時(shí)鐘(Tv)。
在操作中,定期地更新TOD偏移(d),而不是連續(xù)地計(jì)算。這里稱為TOD偏移更新事件的此更新是通過來自物理時(shí)鐘的比特位置的進(jìn)位來觸發(fā)的。該比特位置依賴于機(jī)型,但是被選擇為使得對于正常的導(dǎo)引速率,通過相繼的TOD偏移更新事件來為TOD偏移(d)計(jì)算的值之間的差異小于TOD時(shí)鐘的分辨率。
三個(gè)值s、b和r定義了能夠不確定地被應(yīng)用的線性導(dǎo)引調(diào)整。在這些值在未改變的情況下被應(yīng)用的持續(xù)時(shí)間稱為片斷。每當(dāng)時(shí)序設(shè)施控制程序請求對導(dǎo)引速率的變化時(shí),該機(jī)器就安排新的片斷在未來時(shí)間生效。為了提供平滑的過渡,該機(jī)器將用于新片斷的開始時(shí)間安排在下一TOD偏移更新事件處,而且計(jì)算新的基礎(chǔ)偏移,使得在新值生效的瞬間在TOD偏移值中將沒有不連續(xù)性。
該機(jī)器將新值置入稱為新片斷開始時(shí)間(new.s)、新片斷基礎(chǔ)偏移(new.b)、新片斷細(xì)導(dǎo)引速率(new.f)和新片斷粗導(dǎo)引速率(new.g)的專用寄存器中,而且這四個(gè)寄存器的先前內(nèi)容是通過將它們分別置入稱為舊片斷開始時(shí)間(old.s)、舊片斷基礎(chǔ)偏移(old.b)、舊片斷細(xì)導(dǎo)引速率(old.f)和舊片斷粗導(dǎo)引速率(old.g)的寄存器中來保持的。該機(jī)器繼續(xù)使用用于舊片斷的值,直至物理時(shí)鐘達(dá)到新片斷開始時(shí)間(new.s),然后自動(dòng)地切換到使用用于新片斷的值。在任何特定時(shí)間瞬間使用的寄存器稱為當(dāng)前開始時(shí)間(s)、當(dāng)前基礎(chǔ)偏移(b)和當(dāng)前總導(dǎo)引速率(r)。這些統(tǒng)稱為當(dāng)前片斷寄存器。
圖3總結(jié)了TOD時(shí)鐘導(dǎo)引寄存器及其對應(yīng)的比特值。所有TOD時(shí)鐘導(dǎo)引寄存器的內(nèi)容通過開機(jī)重置來初始化到零。
當(dāng)前開始時(shí)間(s)
當(dāng)機(jī)器在舊片斷中操作時(shí),從舊片斷開始時(shí)間(old.s)獲得當(dāng)前開始時(shí)間;而當(dāng)在新片斷中時(shí),則從新片斷開始時(shí)間(new.s)獲得它。當(dāng)前開始時(shí)間(s)是64比特?zé)o符號二進(jìn)制整數(shù)而且被視為與TOD時(shí)鐘的比特0-63對準(zhǔn)。在導(dǎo)引調(diào)整的計(jì)算中,從物理時(shí)鐘的值(Tr)減去當(dāng)前開始時(shí)間(s)以形成64比特?zé)o符號差(Tr-s)。來自比特位置0的借位(或進(jìn)位)在此減法中被忽略。
當(dāng)前基本偏移(b)當(dāng)機(jī)器在舊片斷中操作時(shí),從舊片斷基礎(chǔ)偏移(old.b)獲得當(dāng)前基礎(chǔ)偏移;而當(dāng)在新片斷中時(shí)則從新片斷基礎(chǔ)偏移(new.b)獲得它。當(dāng)前基礎(chǔ)偏移(b)是64比特?zé)o符號二進(jìn)制整數(shù)而且被視為與TOD時(shí)鐘的比特0-63對準(zhǔn)。
當(dāng)前導(dǎo)引速率(f,g,r)當(dāng)機(jī)器在舊片斷中操作時(shí),分別從舊片斷細(xì)導(dǎo)引速率(old.f)和粗導(dǎo)引速率(old.g)獲得當(dāng)前細(xì)導(dǎo)引速率(f)和當(dāng)前粗導(dǎo)引速率(g);當(dāng)在新片斷中時(shí),則分別從新片斷細(xì)導(dǎo)引速率(new.f)和粗導(dǎo)引速率(new.g)獲得它們。從當(dāng)前細(xì)導(dǎo)引速率(f)和當(dāng)前粗導(dǎo)引速率(g)之和獲得當(dāng)前總導(dǎo)引速率(r)。來自比特位置0的進(jìn)位,如果有的話,則在此加法中被忽略。根據(jù)本發(fā)明的一個(gè)實(shí)施例,當(dāng)前總導(dǎo)引速率(r)是32比特帶符號定點(diǎn)值而且被視為通過因子2-44來縮放。處理為32比特二進(jìn)制無符號數(shù)的(r)的絕對值與64比特?zé)o符號差(Tr-s)相乘以形成96比特?zé)o符號二進(jìn)制乘積,將該乘積向右移44比特位置以形成52比特的中間結(jié)果。十二個(gè)零然后被附加到左側(cè)以形成64比特調(diào)整值。如果r為零,則當(dāng)前基礎(chǔ)偏移直接用作TOD偏移而且乘法是不必要的。如果r為正,則將調(diào)整值相加到當(dāng)前基礎(chǔ)偏移(b)以形成TOD偏移(d);如果r為負(fù),則從當(dāng)前基礎(chǔ)偏移(b)減去調(diào)整值以形成TOD偏移(d)。在此加法(或減法)期間出現(xiàn)的進(jìn)位(或借位)被忽略。當(dāng)r為負(fù)時(shí),則每當(dāng)TOD偏移更新事件在單個(gè)片斷中出現(xiàn)時(shí),則在計(jì)算當(dāng)前TOD偏移(d)之后,該機(jī)器通過延遲足夠久以保證邏輯TOD時(shí)鐘如程序所查看的那樣好像是向前步進(jìn)來提供互鎖。
應(yīng)當(dāng)理解,導(dǎo)引速率的比特0和31分別代表導(dǎo)引速率-2-13和2-44。因此,百萬分之±122(每天10.5秒)的導(dǎo)引速率可以被指定具有每天4.9納秒的精度。
TOD偏移(d)TOD偏移是與TOD時(shí)鐘的比特0-63對準(zhǔn)的64比特值。將處理為64比特?zé)o符號二進(jìn)制值的TOD偏移的內(nèi)容相加到物理時(shí)鐘以獲得基本機(jī)器TOD時(shí)鐘。來自比特位置0的進(jìn)位,如果有的話,則在此加法中被忽略。依賴于機(jī)型,與超出TOD時(shí)鐘分辨率的比特對應(yīng)的TOD偏移的最右比特可以不被實(shí)施而且處理為零。
執(zhí)行時(shí)序設(shè)施功能該系統(tǒng)實(shí)施了由通用寄存器中的功能代碼指定的若干時(shí)序設(shè)施功能。條件代碼設(shè)置為指示功能結(jié)果,即指示已經(jīng)執(zhí)行了所請求的功能或者所請求的功能不可用。另一通用寄存器包含在存儲(chǔ)器中的參數(shù)塊的地址。實(shí)施兩類執(zhí)行時(shí)序設(shè)施功能(PTFF)功能1)PTFF查詢功能將信息放置在參數(shù)塊中;以及2)PTFF控制功能使用從參數(shù)塊獲得的信息。通用寄存器的某些比特位置,例如比特位置57-63包含功能代碼。圖4示出了所分配的功能代碼。另一通用寄存器包含在存儲(chǔ)器中的參數(shù)塊的最左字節(jié)的邏輯地址。用于執(zhí)行時(shí)序設(shè)施功能的功能代碼提供如下
現(xiàn)在提供偽代碼子例程的說明性例子,這些子例程指示了用來實(shí)施本發(fā)明的功能。出于簡潔的目的,將它們描述為子例程,而且用以指示調(diào)用它們的那些功能的公共部分。依賴于實(shí)施而不是通用子例程,該代碼能夠在要求該功能的每個(gè)例程中被復(fù)制。
在子例程的描述中,參照圖4,該示了用于根據(jù)所發(fā)明來實(shí)施的硬件寄存器的符號,其子集在圖1中示出。在圖4中,下標(biāo)字母r、b、p和v分別代表實(shí)際(real)、基本機(jī)器、邏輯分區(qū)和虛擬機(jī)器。邏輯TOD時(shí)鐘寄存器Tb不直接在硬件中提供,而是對其進(jìn)行模擬,正如這里描述的偽代碼例程中所述的。時(shí)鐘比較器寄存器CCb被維護(hù)于硬件存儲(chǔ)區(qū)中而且使用CCr來模擬,正如這里描述的偽代碼例程中所述的。由CPU計(jì)時(shí)器CTr和CTb實(shí)施相同的寄存器,然而為了與圖4所示兩列中的其他條目相一致而被指示為兩個(gè)符號。TOD時(shí)鐘同步控制寄存器Yb(基本機(jī)器TOD時(shí)鐘同步控制)對時(shí)鐘進(jìn)行控制,正如由發(fā)出設(shè)置時(shí)鐘(SCK)指令的程序所觀測的那樣。因此,Yb在LPAR系統(tǒng)管理程序發(fā)出SCK時(shí)適用。
下面是在描述這里所述偽代碼例程中使用的其他符號的總結(jié)。
比特選擇。例如,Tr
指示了使用物理時(shí)鐘的比特0-41;abs(r)r的絕對值。
||并置。例如,將Tv
||pa6指示了虛擬機(jī)器TOD時(shí)鐘的58比特與6比特處理器地址并值以形成64比特值;0b111 3個(gè)一比特的字段;0b1111 4個(gè)一比特的字段;dTOD偏移寄存器(實(shí)施于每個(gè)CPU中);op2 SCK、STCK、STCKE、SCKC、STCKC、SPT或STPT的第二操作數(shù);pa6 6比特處理器地址pax 包含處理器地址的40比特非零字段pr 基本機(jī)器TOD可編程寄存器的16比特右半部r指示當(dāng)前總導(dǎo)引速率的32比特帶符號二進(jìn)制整數(shù)SDB 導(dǎo)引接口數(shù)據(jù)塊。SDB的內(nèi)容包括old.s、old.b、old.f、old.g、new.s、new.b、new.f和new.g;t1 64比特時(shí)間戳,包括偽代碼例程開始時(shí)物理時(shí)鐘的高階比特(0:41或0:51);t2 64比特時(shí)間戳,包括偽代碼例程結(jié)束時(shí)物理時(shí)鐘的高階比特(0:41或0:51)(如果t2>t1,則偽代碼循環(huán),因?yàn)檫@指示了例程沒有按時(shí)完成);tcs 客戶邏輯時(shí)鐘將開始時(shí)的系統(tǒng)管理程序邏輯時(shí)間;v41 在比特位置41具有一的64比特值;因此在TOD時(shí)鐘格式中代表來自比特位置42的進(jìn)位值的時(shí)間;以及z(n)n個(gè)零比特的字段;例如z(8)是8比特零字段。
PTFF-QAF(查詢可用功能)PTFF-QAF(查詢可用功能)功能提供了指示其他功能的可用性的手段。PTFF-QAF的偽代碼描述提供如下pb.w1←0b1111||z(28)pb.w2←z(32)pb.w3←0b1111||z(28)pb.w4←z(32)PTFF-QTO(查詢TOD偏移)用于該功能的參數(shù)塊返回以下值,包括64比特物理時(shí)鐘值(pb.Tu),該值是最近期TOD偏移更新事件的物理時(shí)鐘的值。返回的64比特TOD偏移值(pb.d)指示TOD偏移的值(d)。返回的64比特邏輯TOD偏移值(pb.dl)指示了當(dāng)前值,將該值相加到Tr(物理時(shí)鐘)以獲得Tc(用于當(dāng)前CPU執(zhí)行層的邏輯TOD時(shí)鐘);以及返回的64比特TOD時(shí)點(diǎn)差值(pb.ed)是用于當(dāng)前CPU執(zhí)行層的TOD時(shí)點(diǎn)差。PTFF-QTO的偽代碼描述提供如下LoopQT1Gall ccepdl←dced←z(64)If sie>0 Thendl←(dl+sd1.ed)
ed←sd1.edEndIfIf sie>1 Thendl←(dl+sd2.ed)
ed←sd2.edEndIfpb.Tu←t1pb.d←dcpb.dl←dlpb.ed←edt2←Tr
||z(22)If t2>t1 Goto LoopQT1
PTFF-QSI(查詢導(dǎo)引信息)用于該功能的參數(shù)塊返回以下的值,包括64比特物理時(shí)鐘值(pb.Tu)是最近期TOD偏移更新事件的物理時(shí)鐘值。剩余字段是舊片斷和新片斷寄存器的值。PTFF-QSI的偽代碼描述提供如下LoopQS1t1←Tr
||z(22)pb.Tu←t1pb.old.s←SDB.old.spb.old.b ←SDB.old.bpb.old.f←SDB.old.fpb.old.g←SDB.old.gpb.new.s←SDB.new.spb.new.b←SDB.new.bpb.new.f←SDB.new.fpb.new.g←SDB.new.gt2←Tr
||z(22)If t2>t1 Goto LoopQS1PTFF-QPT(查詢物理時(shí)鐘)用于該功能的參數(shù)塊返回以下的值,包括64比特物理時(shí)鐘值(pb.Tr),該值是物理時(shí)鐘的當(dāng)前值。PTFF-QPT的偽代碼描述提供如下pb.Tr←Tr
PTFF-ATO(調(diào)整TOD偏移)用于該功能的參數(shù)塊提供64比特值(pb.a),該值被處理為無符號二進(jìn)制值,而且相加到下一片斷的基礎(chǔ)偏移。來自比特位置0的進(jìn)位,如果有的話,則在此加法中被忽略。如果下一片斷已經(jīng)被安排而且尚未變?yōu)榛顒?dòng)的,則pb.a和new.b之和取代new.b,而且不采取其他動(dòng)作。如果下一片斷尚未被安排,則將新片斷寄存器保存于舊片斷寄存器中而且安排新的片斷。新片斷開始時(shí)間(new.s)被設(shè)置為物理時(shí)鐘將在下一TOD偏移更新事件時(shí)具有的值,而新片斷基礎(chǔ)偏移(new.b)被設(shè)置為pb.a與TOD偏移將在相同瞬間時(shí)具有的值之和,該值是使用當(dāng)前導(dǎo)引參數(shù)來計(jì)算的。
如果安排了新的片斷,新片斷細(xì)導(dǎo)引和粗導(dǎo)引速率與當(dāng)前值相同,則此功能不改變導(dǎo)引速率。調(diào)整TOD偏移功能的執(zhí)行被互鎖,使得TOD偏移寄存器的全部內(nèi)容好像是并發(fā)地和同時(shí)地進(jìn)行更新,正如配置中所有CPU所觀測的那樣。然而,配置中的CPU對邏輯TOD時(shí)鐘的訪問并不是人為地延遲的;因此,大的無符號調(diào)整值的加法可能具有負(fù)變化的效果,而且可能造成邏輯TOD時(shí)鐘好像是向后步進(jìn)。PTFF-ATO的偽代碼描述提供如下LoopATLock SDBCall cnepSDB.new.b ←(SDB.new.b+pb.a)
Unlock SDBPTFF-STO(設(shè)置TOD偏移)用于該功能的參數(shù)塊提供了取代TOD偏移的64比特值(pb.d)。當(dāng)在基本機(jī)器層發(fā)出時(shí),如果下一片斷已經(jīng)被安排而且尚未變成活動(dòng)的,則pb.d取代new.b而且不采取其他動(dòng)作。如果下一片斷尚未被安排,則將新片斷寄存器保存于舊片斷寄存器中而且安排新的片斷。新片斷開始時(shí)間(new.s)被設(shè)置為物理時(shí)鐘將在下一TOD偏移更新事件時(shí)具有的值,而新片斷基礎(chǔ)偏移(new.b)設(shè)置為pb.d的值。如果安排新的片斷,新片斷細(xì)導(dǎo)引和粗導(dǎo)引速率與當(dāng)前值相同,則此功能不改變導(dǎo)引速率。當(dāng)在邏輯分區(qū)或虛擬機(jī)器層發(fā)出時(shí),該功能由系統(tǒng)管理程序模擬而且對用于當(dāng)前CPU執(zhí)行層的TOD時(shí)點(diǎn)差(分別是Dp或Dv)進(jìn)行操作;不安排新的片斷并且該改變立即生效。設(shè)置TOD偏移功能的執(zhí)行被互鎖,使得TOD偏移寄存器的全部內(nèi)容好像是并發(fā)地和同時(shí)地進(jìn)行更新,正如配置中所有CPU所觀測的那樣。然而,配置中的CPU對邏輯TOD時(shí)鐘的訪問并不是人為地延遲的;因此,由較小的值取代TOD偏移可能造成邏輯TOD時(shí)鐘好像是向后步進(jìn)。PTFF-STO的偽代碼描述提供如下LoopSTLock SDB
Call cnepSDB.new.b←pb.dUnlock SDBPTFF-SFS(設(shè)置細(xì)導(dǎo)引速率)用于該功能的參數(shù)塊提供了變?yōu)橛糜谙乱黄瑪嗟募?xì)導(dǎo)引速率的32比特值(pb.f)。如果下一片斷已經(jīng)被安排而且尚未變成活動(dòng)的,則由pb.f取代new.f而且不采取其他動(dòng)作。如果下一片斷尚未被安排,則將新片斷寄存器保存于舊片斷寄存器中而且安排新的片斷。新片斷開始時(shí)間(new.s)被設(shè)置為物理時(shí)鐘將在下一TOD偏移更新事件時(shí)具有的值,而新片斷基本偏移(new.b)被設(shè)置為TOD偏移將在相同瞬間時(shí)具有的值,該值是使用當(dāng)前導(dǎo)引參數(shù)來計(jì)算的。新片斷細(xì)導(dǎo)引速率(new.f)被設(shè)置為pb.f,而新片斷粗導(dǎo)引速率與當(dāng)前值相同。當(dāng)新的片斷生效時(shí),配置中的CPU對邏輯TOD時(shí)鐘的訪問被互鎖,以保證邏輯TOD時(shí)鐘好像是正在唯一和單調(diào)地增加,正如所有程序所觀測的那樣。PTFF-SFS的偽代碼描述提供如下LoopSFLock SDBCall cnepSDB.new.f←pb.fUnlock SDBPTFF-SGS(設(shè)置粗導(dǎo)引速率)用于該功能的參數(shù)塊提供了變?yōu)橛糜谙乱黄瑪嗟拇謱?dǎo)引速率的32比特值(pb.g)。如果下一片斷已經(jīng)被安排而且尚未變成活動(dòng)的,則由pb.g取代new.g而且不采取其他動(dòng)作。
如果下一片斷已經(jīng)被安排,則將新片斷寄存器保存于舊片斷寄存器中而且安排新的片斷。新片斷開始時(shí)間(new.s)被設(shè)置為物理時(shí)鐘將在下一TOD偏移更新事件時(shí)具有的值,而新片斷基礎(chǔ)偏移(new.b)被設(shè)置為TOD偏移將在相同瞬間時(shí)具有的值,該值是使用當(dāng)前導(dǎo)引參數(shù)來計(jì)算的。新片斷粗導(dǎo)引速率(new.g)被設(shè)置為pb.g,而新片斷細(xì)導(dǎo)引速率與當(dāng)前值相同。當(dāng)新的片斷生效時(shí),配置中的CPU對邏輯TOD時(shí)鐘的訪問被互鎖,以保證邏輯TOD時(shí)鐘好像是正如所有程序所觀測的那樣唯一和單調(diào)地增加。PTFF-SGS的偽代碼描述提供如下LoopSGLock SDBCall cnepSDB.new.g←pb.gUnlock SDBTOD-時(shí)鐘導(dǎo)引根據(jù)本發(fā)明的一個(gè)實(shí)施例,導(dǎo)引參數(shù)必須使用互鎖機(jī)制來更新,該互鎖機(jī)制不要求只讀操作的寫訪問。這是特別為TOD偏移更新事件而實(shí)施的。此事件周期性地在每個(gè)CPU上同時(shí)出現(xiàn),例如每1204微秒,而且如果每個(gè)CPU試圖鎖定信息則該開銷將是禁止的。
概念上講,當(dāng)前總導(dǎo)引速率(r)的比特0:31每微秒一次地被相加到TOD偏移(d)擴(kuò)展的比特64:95中(也就是,每當(dāng)進(jìn)位從物理時(shí)鐘的比特位置52出現(xiàn)到比特位置51處時(shí))。該體系結(jié)構(gòu)允許一種實(shí)施,用以在對于該加法的恰當(dāng)對準(zhǔn)時(shí)通過使用來自物理時(shí)鐘不同位置的進(jìn)位來不那么頻繁地執(zhí)行此更新,只要所得效果實(shí)質(zhì)上相同。具體來說,該體系結(jié)構(gòu)要求比特位置依賴于機(jī)型,但是將其選擇為使得對于正常的導(dǎo)引速率,通過相繼的TOD偏移更新事件來為TOD偏移(d)計(jì)算的值之間的差異小于TOD時(shí)鐘的分辨率。
例如,如果TOD時(shí)鐘分辨率處于比特位置57,而且TOD偏移更新事件通過進(jìn)入比特位置41中的進(jìn)位來觸發(fā),則滿足該體系結(jié)構(gòu)的要求,只要正常的導(dǎo)引速率小于16ppm。如果將振蕩器指定為±2ppm,則正常的導(dǎo)引速率應(yīng)當(dāng)比16ppm小得多。在此例中,假設(shè)使用來自物理時(shí)鐘的比特42的進(jìn)位,不過此進(jìn)位輸出比特位置可依賴于實(shí)施而配置。定期地將進(jìn)位從物理時(shí)鐘的比特位置42傳播到比特位置41,例如每1024微秒,或者近似為每毫秒。大約在出現(xiàn)此進(jìn)位時(shí)實(shí)施對導(dǎo)引參數(shù)的更新。
用以計(jì)算當(dāng)前片斷參數(shù)(ccep)的偽代碼子例程此例程由用于TOD偏移更新事件的偽代碼以及查詢TOD偏移功能所調(diào)用。該子例程計(jì)算和返回最近期TOD偏移更新事件的時(shí)間(t1)和對于時(shí)間t1的偏移(dc)。該子例程也返回當(dāng)前片斷寄存器當(dāng)前開始時(shí)間(s)、當(dāng)前基礎(chǔ)偏移(b)、當(dāng)前細(xì)導(dǎo)引速率(f)、當(dāng)前粗導(dǎo)引速率(g)和當(dāng)前總導(dǎo)引速率(r)。
LoopC1t1←Tr
||z(22)If t1<SDB.new.s Thens←SDB.old.sb←SDB.old.bf←SDB.old.fg←SDB.old.gElses←SDB.new.sb←SDB.new.bf←SDB.new.fg←SDB.new.gEndIfr←(f+g)
If r≠0Thenu←(t1-s)
w←z(12)||u
||z(10)m←abs(r)
p←(w·m)
q←p
EndIfIf r>0Thendc←(b+q)
EndIfIf r=0Thendc←bEndIfIf r<0Thendc←(b-q)
EndIfExit Sub用以計(jì)算新片斷參數(shù)(cnep)的偽代碼子例程此子例程由用于所有四個(gè)PTFF控制功能的偽代碼所調(diào)用調(diào)整TOD偏移、設(shè)置TOD偏移、設(shè)置細(xì)導(dǎo)引速率和設(shè)置粗導(dǎo)引速率。該子例程檢查新的片斷是否是活動(dòng)的。如果當(dāng)前時(shí)間小于新片斷開始時(shí)間(new.s),則新的片斷尚未活動(dòng)(當(dāng)前片斷是舊的片斷),并且不需要采取其他動(dòng)作。如果當(dāng)前時(shí)間大于或等于new.s,則新的片斷是活動(dòng)的(當(dāng)前片斷是新的片斷),將當(dāng)前片斷字段(new.s、new.b、new.f和new.g)置于舊片斷字段中,而且為新的開始時(shí)間(new.s)和新的基礎(chǔ)偏移(new.b)計(jì)算新值。該子例程使用值v41,該值是在比特位置41為一的64比特值;因此在TOD時(shí)鐘格式中代表來自比特位置42的進(jìn)位的時(shí)間值。
t1←Tr
||z(22)If t1<SDB.new.s ThenExit SubEndIfr←(SDB.old.f+SDB.old.g)
s←(t1+v41)
SDB.old.s←SDB.new.sSDB.old.b←SDB.new.bSDB.old.f←SDB.new.fSDB.old.g←SDB.new.gSDB.new.s←sIf r≠0 Thenu←(SDB.new.s-SDB.old.s)
w←z(12)||u
||z(10)m←abs(r)
p←(w·m)
q←p
EndIfIf r>0ThenSDB.new.b←(SDB.old.b+q)
EndIfIf r=0ThenSDB.new.b←SDB.old.bEndIfIf r<0ThenSDB.new.b←(SDB.old.b-q)
EndIfExit Sub用于基本機(jī)器時(shí)鐘比較器更新(bmccu)的偽代碼子例程
此例程由用于TOD偏移更新事件、基本機(jī)器設(shè)置時(shí)鐘比較器和基本機(jī)器時(shí)鐘比較器中斷動(dòng)作的偽代碼所調(diào)用。該例程調(diào)整物理時(shí)鐘比較器以補(bǔ)償物理時(shí)鐘和基本機(jī)器TOD時(shí)鐘的不同速率。該例程也防止了當(dāng)前總導(dǎo)引速率(r)為負(fù)的情況。在此情況下,物理時(shí)鐘正在運(yùn)行得比邏輯TOD時(shí)鐘快,而且物理時(shí)鐘比較器中斷將提早出現(xiàn)。該例程通過將基本機(jī)器TOD時(shí)鐘值(Tb)與基本機(jī)器時(shí)鐘比較器(CCb)做比較來對此進(jìn)行檢查。如果Tb>CCb,則應(yīng)當(dāng)采取基本機(jī)器時(shí)鐘比較器中斷,這是通過將物理時(shí)鐘比較器設(shè)置為零來實(shí)現(xiàn)的。如果Tb≤CCb而且(Tb-d)≤(CCb-d),則不存在卷繞(wrap)而且重新計(jì)算物理時(shí)鐘比較器值(CCr)。如果Tb≤CCb而且(Tb-d)>(CCb-d),則存在卷繞。將物理時(shí)鐘比較器值(CCr)設(shè)置為全一(在偽代碼描述中描繪為-1)。這產(chǎn)生曝露(exposure),因?yàn)閷Q不采取時(shí)鐘比較器中斷,即使在未來某一時(shí)間基本機(jī)器TOD時(shí)鐘將大于基本機(jī)器時(shí)鐘比較器。
Tq←Tr
Tb←(Tq+d)
CCq←(CCb-d)
If Tb>CCb ThenCCr←0ElseIf Tq>CCq ThenCC←(-1)ElseCCr←CCqEndIfExit Sub用于TOD偏移更新事件的偽代碼圖5圖示了用以更新TOD偏移寄存器的實(shí)施細(xì)節(jié)。在示例性實(shí)施中,每當(dāng)進(jìn)位從物理時(shí)鐘的比特位置42傳播到比特位置41時(shí),在使用任何邏輯TOD時(shí)鐘之前,TOD偏移寄存器必須根據(jù)硬件存儲(chǔ)區(qū)中的導(dǎo)引參數(shù)來進(jìn)行更新?,F(xiàn)在提供偽代碼表示,該表示指示了在配置中的每個(gè)CPU上用來更新該CPU中的TOD偏移寄存器所采取的動(dòng)作。
LoopD1Call ccepd←dcCall bmccuIf sie>0 ThenLoopD2t3←Tr
||z(6)Tp←(t3+d+sd1.ed)
t4←Tr
||z(6)Ift4>t3 Goto LoopD2EndIfIf sie>1 ThenLoopD3t5←Tp
||z(6)Tv←(t5+sd2.ed)
t6←Tp
||z(6)Ift6>t5 Goto LoopD3EndIfLoopD4w1←Tr[42:57]wr←(-r)
Ifw1≤wr Goto LoopD4t2←Tr
||z(22)If t2>t1 Goto LoopD1用于基本機(jī)器時(shí)鐘比較器中斷的偽代碼此例程是剛好在采取基本機(jī)器時(shí)鐘比較器中斷之前執(zhí)行的。該例程防止了當(dāng)前總導(dǎo)引速率(r)為負(fù)的情況。在此情況下,物理時(shí)鐘正在運(yùn)行得比邏輯TOD時(shí)鐘快,而且物理時(shí)鐘比較器中斷可能提早出現(xiàn)。如果中斷尚未到期,則調(diào)用用于基本機(jī)器時(shí)鐘比較器更新的子例程。
Tb←(Tr+d)
If Tb>CCb ThenTake InterruptionElseCall bmccuEndIf用于時(shí)序指令的偽代碼提供如下偽代碼,該偽代碼代表了用于處理如下時(shí)序指令的代碼存儲(chǔ)時(shí)鐘(STCK)、存儲(chǔ)擴(kuò)展時(shí)鐘(STCKE)、設(shè)置時(shí)鐘(SCK)、設(shè)置時(shí)鐘比較器(SCKC)、設(shè)置CPU定時(shí)器(SPT)、存儲(chǔ)時(shí)鐘比較器(STCKC)和存儲(chǔ)CPU定時(shí)器(STPTP)。
SIE Entry(sie=0 to sie=1)LoopSE1t1←Tr
||z(6)Tp←(t1+sd1.ed+d)
||z(6)t2←Tr
||z(6)If(t2>t1)Goto LoopSE1CCp←sd1.ccCTp←sd1.ctSIE Entry(sie=1 to sie=2)LoopSE2t1←Tp
||z(6)Tv←(t1+sd2.ed)
||z(6)t2←Tr
||z(6)If(t2>t1)Goto LoopSE2
CCv←sd2.ccCTv←sd2.ctSIE Exit(sie=2 to sie=1)sd2.cc←CCvsd2.ct←CTvSIE Exit(sie=1 to sie=0)sd1.cc←CCpsd1.ct←CTpTOD時(shí)鐘同步正如CPU本身所見的,TOD時(shí)鐘的導(dǎo)引一定不能在TOD時(shí)鐘引入可觀測的不連續(xù)性;特別地,該時(shí)鐘一定不能好像是向后步進(jìn),或者甚至是在行中兩次產(chǎn)生相同值。為了保證邏輯TOD時(shí)鐘好像是單調(diào)地增加,在施加負(fù)的增量之后,CPU必須延遲對TOD時(shí)鐘進(jìn)行使用至少該增量的數(shù)量,正如這里將在下面詳細(xì)說明的那樣。
更具難度的要求涉及CPU之間的交互。所有CPU必須幾乎同時(shí)地開始使用時(shí)鐘偏移的任何改變,無論該改變是正或負(fù)。這些例子示出僅一個(gè)時(shí)鐘滴答的差異如果未在相同時(shí)刻進(jìn)行施加就足以被問題程序檢測到。
示為情況0的正常操作被用來定義稱為最佳情況CPU到CPU時(shí)鐘傳送時(shí)間的值。然后,針對未在所有CPU處在相同時(shí)刻識別新值的實(shí)施,對于分別引入最小的可能正增量或負(fù)增量,示出了情況1和情況2。這些例子顯示,正改變和負(fù)改變實(shí)質(zhì)上造成了相同的問題,而且唯一的實(shí)際解決方案是在所有CPU上同時(shí)識別該更新。該更新的同步是通過要求每個(gè)CPU在嚴(yán)格相同的時(shí)間時(shí)刻開始使用新值來解決的。此時(shí)刻稱為TOD偏移更新事件,而且其在從物理時(shí)鐘的特定比特位置出現(xiàn)進(jìn)位時(shí)被觸發(fā)。該體系結(jié)構(gòu)指定了所選比特位置依賴于機(jī)型。在一個(gè)實(shí)施例中,使用了從物理時(shí)鐘的比特位置42到比特位置41的進(jìn)位。
對于單個(gè)CPU的TOD偏移寄存器的負(fù)改變下表圖示了TOD偏移寄存器的負(fù)改變的例子。
每行提供了物理時(shí)鐘、TOD偏移寄存器和邏輯TOD時(shí)鐘的比特42-57的瞬象(snapshot)。每當(dāng)物理時(shí)鐘在特定的比特位置(比如比特57)滴答時(shí)攝取瞬象。
在表中提供的此說明性例子中,未示出的當(dāng)前總導(dǎo)引速率假設(shè)為具有最大負(fù)值;也就是,比特位置0中為一,其后全零。第一行(滴答編號0)示出了在從比特42發(fā)生進(jìn)位之前最后的滴答處的物理時(shí)鐘。此進(jìn)位將在TOD偏移寄存器中引入新值,這使得邏輯TOD時(shí)鐘好像是向后步進(jìn)。為了避免這對于程序是可觀測的,該機(jī)器決不提供任何邏輯TOD時(shí)鐘值,直至滴答編號9之后。在該示例中,用于TOD偏移寄存器的新值在攝取對于滴答編號1的瞬象之時(shí)就已經(jīng)被應(yīng)用。在實(shí)際的實(shí)施中,用以更新TOD偏移寄存器的動(dòng)作可能相當(dāng)可觀地占用比這更多的時(shí)間。表中提供的示例示出如果此更新占用少于125納秒(在優(yōu)選實(shí)施例中約為167個(gè)CPU周期),則該機(jī)器必須延遲使用該時(shí)鐘,直至這么多的時(shí)間已經(jīng)逝去。
用于多個(gè)CPU的TOD時(shí)鐘同步不失一般性地,能夠?qū)⑺卸鄠€(gè)CPU TOD時(shí)鐘同步失敗簡化為如下單個(gè)情況
CPUiCPUjSTCK AFetch A(新值)STCK BA>B例如在具有60個(gè)PCU的機(jī)器上,TOD時(shí)鐘值的比特58-63由CPU編號取代;因此,TOD時(shí)鐘的比特57是最右的步進(jìn)比特。TOD時(shí)鐘的比特57每15.625納秒進(jìn)行遞增,這僅略微小于最佳情況高速緩存到高速緩存?zhèn)魉蜁r(shí)間(例如22-24個(gè)機(jī)器周期)。最臨界的情況是當(dāng)?shù)谝籆PU比第二CPU具有更大的CPU編號時(shí)。為了在示例中示出這一點(diǎn),用于CPUi和CPUj的CPU編號分別選擇為55和33(八進(jìn)制)。在下表中,示出TOD時(shí)鐘的比特58-60以指示時(shí)間推移,即使這些比特不是物理時(shí)鐘的一部分。
情況0-無偏移改變-無失敗表1示出了對于當(dāng)偏移未改變時(shí)的情況的TOD時(shí)鐘正確操作。
表1第一CPU上STCK存儲(chǔ)部分的執(zhí)行時(shí)間、加上從第一CPU到第二CPU的最佳情況CPU到CPU高速緩存到高速緩存?zhèn)魉蜁r(shí)間、加上第二CPU上LG和STCK訪問時(shí)鐘部分的執(zhí)行時(shí)間之和稱為最佳情況CPU到CPU時(shí)鐘傳送時(shí)間。為了保證對于情況0的正確操作,最佳情況CPU到CPU時(shí)鐘傳送時(shí)間必須至少為15.625納秒。如果有必要,這可以通過人為地延遲每個(gè)CPU上的STCK執(zhí)行時(shí)間來實(shí)現(xiàn)。在將來硬件中將可能要求的可選方案將是實(shí)現(xiàn)物理時(shí)鐘的比特58-63,而且該機(jī)器延遲CPU上的STCK執(zhí)行,直至物理時(shí)鐘的比特58-63與用于此CPU的CPU編號相匹配。
情況1-負(fù)的偏移改變-失敗表2示出了當(dāng)該偏移減少15.625納秒(對于優(yōu)選實(shí)施例的負(fù)導(dǎo)引速率而言可能的最小改變)而且未在兩個(gè)CPU上同時(shí)識別此改變時(shí)的TOD時(shí)鐘同步失敗(由于該體系結(jié)構(gòu)要求所有CPU在相同時(shí)刻開始使用新值,所以僅當(dāng)未遵循該體系結(jié)構(gòu)時(shí)才出現(xiàn)此失敗)。在此示例中,當(dāng)CPU33已經(jīng)開始使用新值而CPU55仍使用舊值時(shí)出現(xiàn)失敗(注意作為使用新值的一部分,CPU33已經(jīng)延遲足夠久以保證如CPU33本身所觀察的邏輯時(shí)鐘不會(huì)好像是向后步進(jìn)的)。
表2為了針對情況1正確地操作,最佳情況CPU到CPU時(shí)鐘傳送時(shí)間必須至少為15.625納秒加上該改變的絕對數(shù)量,而且這通常將不是優(yōu)選實(shí)施例的情況。此示例示出如果開始使用新值的兩個(gè)CPU之間的時(shí)間大于最佳情況CPU到CPU時(shí)鐘傳送時(shí)間就可能出現(xiàn)失敗。由于使用舊值的CPU尚未意識到該改變,所以使用新值的CPU將不得不延遲每次STCK的執(zhí)行,直至所有CPU已經(jīng)更新到新的偏移;除非這是已知的固定持續(xù)時(shí)間,否則這將可能證明是不切實(shí)際的。
情況2-正的偏移改變-失敗表3示出了當(dāng)該偏移增加15.625納秒(對于優(yōu)選實(shí)施例的正導(dǎo)引速率而言可能的最小改變)而且未在兩個(gè)CPU上同時(shí)識別此改變時(shí)的TOD時(shí)鐘同步失敗。(由于該體系結(jié)構(gòu)要求所有CPU在相同時(shí)刻開始使用新值,所以僅當(dāng)未遵循該體系結(jié)構(gòu)時(shí)才出現(xiàn)此失敗。)在此例中,當(dāng)CPU55已經(jīng)開始使用新值而CPU33仍使用舊值時(shí)出現(xiàn)失敗。
表3為了針對情況2正確地操作,最佳情況CPU到CPU時(shí)鐘傳送時(shí)間必須至少為15.625納秒加上該改變的絕對數(shù)量,而且這通常將不是優(yōu)選實(shí)施例的情況。此示例示出如果開始使用新值的兩個(gè)CPU之間的時(shí)間大于最佳情況CPU到CPU時(shí)鐘傳送時(shí)間就可能出現(xiàn)失敗。由于使用舊值的CPU尚未意識到該改變,所以使用新值的CPU將不得不延遲每次STCK的執(zhí)行,直至所有CPU已經(jīng)更新到新的偏移;除非這是已知的固定持續(xù)時(shí)間,否則這將可能證明是不切實(shí)際的。
已經(jīng)參照根據(jù)本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品圖描述了本發(fā)明。將理解到,每個(gè)圖能夠由計(jì)算機(jī)程序指令實(shí)施??梢詫⑦@些計(jì)算機(jī)程序指令提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理器或其他可編程數(shù)據(jù)處理裝置的處理器以產(chǎn)生一種機(jī)器,使得經(jīng)由該計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置的處理器來執(zhí)行的這些指令創(chuàng)建用于實(shí)施這里指出的功能的裝置。
這些計(jì)算機(jī)程序指令也可以存儲(chǔ)于計(jì)算機(jī)可讀存儲(chǔ)器中,該計(jì)算機(jī)可讀存儲(chǔ)器能夠指引計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置以特定的方式來工作,使得計(jì)算機(jī)可讀存儲(chǔ)器中存儲(chǔ)的指令產(chǎn)生包括有用于實(shí)施這里指出的功能的指令裝置在內(nèi)的制造品。
計(jì)算機(jī)程序指令也可以被加載到計(jì)算機(jī)可讀或其他可編程數(shù)據(jù)處理裝置上,以促使一系列操作步驟得以在該計(jì)算機(jī)或其他可編程裝置上執(zhí)行以便產(chǎn)生計(jì)算機(jī)實(shí)施的過程,使得在該計(jì)算機(jī)或其他可編程裝置上執(zhí)行的指令提供用于實(shí)施這里指明的功能的步驟。
盡管明顯的是,這里公開的本發(fā)明被很好地考慮用來實(shí)現(xiàn)上述目的,但是將理解到,可以由本領(lǐng)域的技術(shù)人員構(gòu)思許多改進(jìn)和實(shí)施例,并且旨在所附權(quán)利要求涵蓋如落入本發(fā)明的真正精神和范圍之內(nèi)的所有這樣的改進(jìn)和實(shí)施例。
權(quán)利要求
1.一種用于計(jì)算機(jī)系統(tǒng)的白天時(shí)間(TOD)時(shí)鐘導(dǎo)引裝置,該計(jì)算機(jī)系統(tǒng)具有為執(zhí)行操作而提供時(shí)基的物理時(shí)鐘,該物理時(shí)鐘步進(jìn)到公共振蕩器,所述裝置包括用于計(jì)算TOD時(shí)鐘偏移值(d)的裝置,該TOD時(shí)鐘偏移值(d)將被相加到物理時(shí)鐘值(Tr)來獲得邏輯TOD時(shí)鐘值(Tb),所述邏輯TOD時(shí)鐘值是可調(diào)整的而無需調(diào)整所述振蕩器的步進(jìn)速率。
2.如權(quán)利要求1所述的TOD時(shí)鐘導(dǎo)引裝置,其中所述TOD時(shí)鐘偏移值(d)計(jì)算如下d=b+(Tr-s)×r,其中(b)是與(Tr)的比特對準(zhǔn)的基礎(chǔ)偏移值,(s)是與(Tr)的比特對準(zhǔn)的當(dāng)前開始時(shí)間值,以及(r)是當(dāng)前導(dǎo)引速率值,所述s、b和r值定義TOD時(shí)鐘導(dǎo)引調(diào)整值。
3.如權(quán)利要求2所述的TOD時(shí)鐘導(dǎo)引裝置,其中所述當(dāng)前導(dǎo)引速率值r通過約為2-44的因子來縮放。
4.如權(quán)利要求2所述的TOD時(shí)鐘導(dǎo)引裝置,包括用于保持所述當(dāng)前d、s、b和r值的TOD時(shí)鐘導(dǎo)引寄存器。
5.如權(quán)利要求4所述的TOD時(shí)鐘導(dǎo)引裝置,其中所述計(jì)算機(jī)系統(tǒng)包括多個(gè)處理單元,每個(gè)處理單元具有步進(jìn)到所述公共振蕩器而且進(jìn)行了同步的關(guān)聯(lián)物理時(shí)鐘,每個(gè)處理單元包括用于保持所述TOD時(shí)鐘偏移值(d)的TOD時(shí)鐘偏移寄存器,其中每個(gè)處理單元計(jì)算邏輯TOD時(shí)鐘值。
6.如權(quán)利要求4所述的TOD時(shí)鐘導(dǎo)引裝置,其中所述當(dāng)前導(dǎo)引速率值r包括細(xì)導(dǎo)引速率值(f)和粗導(dǎo)引速率值(g),其中r=(f)+(g),所述TOD時(shí)鐘導(dǎo)引寄存器用于保持所述g和r值,所述細(xì)導(dǎo)引速率值被建立以用來校正所述振蕩器中的不準(zhǔn)確,所述粗導(dǎo)引速率值被建立用來響應(yīng)于其他事件動(dòng)態(tài)地校正所述導(dǎo)引速率。
7.如權(quán)利要求6所述的TOD時(shí)鐘導(dǎo)引裝置,還包括用于發(fā)出控制指令的控制裝置,該控制指令用于請求對于所述導(dǎo)引速率r的改變,所述控制功能輸入與TOD時(shí)鐘導(dǎo)引寄存器對應(yīng)的新s、b、f和g值。
8.如權(quán)利要求7所述的TOD時(shí)鐘導(dǎo)引裝置,其中所述控制裝置還發(fā)出查詢指令,該查詢指令用于從對應(yīng)的TOD時(shí)鐘導(dǎo)引寄存器獲得所述s、b、f和g值的值。
9.如權(quán)利要求5所述的TOD時(shí)鐘導(dǎo)引裝置,其中還包括支持更新同步的裝置,其中每個(gè)處理單元計(jì)算邏輯TOD時(shí)鐘值,每個(gè)處理單元同時(shí)地開始使用新邏輯TOD時(shí)鐘值。
10.如權(quán)利要求5所述的TOD時(shí)鐘導(dǎo)引裝置,其中導(dǎo)引速率使得能夠在負(fù)方向上進(jìn)行所述邏輯TOD時(shí)鐘的導(dǎo)引,所述TOD時(shí)鐘導(dǎo)引裝置還包括如下裝置,該裝置用于在對TOD偏移寄存器施加負(fù)改變之后為處理單元對新邏輯TOD時(shí)鐘值的使用進(jìn)行延遲,由此該邏輯TOD時(shí)鐘值的改變單調(diào)地增加,所述裝置使得CPU必須延遲對該TOD時(shí)鐘進(jìn)行使用至少所述負(fù)改變的數(shù)量。
11.一種為計(jì)算機(jī)系統(tǒng)導(dǎo)引白天時(shí)間(TOD)時(shí)鐘的方法,該計(jì)算機(jī)系統(tǒng)具有為執(zhí)行操作而提供時(shí)基的物理時(shí)鐘,該物理時(shí)鐘步進(jìn)到公共振蕩器,所述方法包括步驟計(jì)算TOD時(shí)鐘偏移值(d),該TOD時(shí)鐘偏移值將被相加到物理時(shí)鐘值(Tr)來獲得邏輯TOD時(shí)鐘值(Tb),所述邏輯TOD時(shí)鐘值是可調(diào)整的而無需調(diào)整所述振蕩器的步進(jìn)速率。
12.如權(quán)利要求11所述的方法,其中所述TOD時(shí)鐘偏移值(d)計(jì)算如下d=b+(Tr-s)×r,其中(b)是與(Tr)的比特對準(zhǔn)的基礎(chǔ)偏移值,(s)是與(Tr)的比特對準(zhǔn)的當(dāng)前開始時(shí)間值,以及(r)是當(dāng)前導(dǎo)引速率值,所述s、b和r值定義TOD時(shí)鐘導(dǎo)引調(diào)整值。
13.如權(quán)利要求12所述的方法,其中所述當(dāng)前導(dǎo)引速率值r通過約為2-44的因子來縮放。
14.如權(quán)利要求12所述的方法,還包括提供用于保持所述當(dāng)前d、s、b和r值的TOD時(shí)鐘導(dǎo)引寄存器。
15.如權(quán)利要求14所述的方法,其中所述計(jì)算機(jī)系統(tǒng)包括多個(gè)處理單元,每個(gè)處理單元具有步進(jìn)到所述公共振蕩器而且進(jìn)行了同步的關(guān)聯(lián)物理時(shí)鐘,其中每個(gè)處理單元包括用于保持所述TOD時(shí)鐘偏移值(d)和計(jì)算邏輯TOD時(shí)鐘值的TOD時(shí)鐘偏移寄存器。
16.如權(quán)利要求14所述的方法,其中所述當(dāng)前導(dǎo)引速率值r包括細(xì)導(dǎo)引速率值(f)和粗導(dǎo)引速率值(g),其中r=(f)+(g),所述TOD時(shí)鐘導(dǎo)引寄存器用于保持所述g和r值,所述細(xì)導(dǎo)引速率值被建立以用來校正所述振蕩器中的不準(zhǔn)確,所述粗導(dǎo)引速率值被建立用來響應(yīng)于其他事件動(dòng)態(tài)地校正所述導(dǎo)引速率。
17.如權(quán)利要求16所述的方法,還包括發(fā)出控制指令,該控制指令用于請求對于所述導(dǎo)引速率r的改變,所述控制功能輸入與TOD時(shí)鐘導(dǎo)引寄存器對應(yīng)的新s、b、f和g值。
18.如權(quán)利要求17所述的方法,還包括發(fā)出查詢指令,該查詢指令用于從對應(yīng)的TOD時(shí)鐘導(dǎo)引寄存器獲得所述s、b、f和g值的值。
19.如權(quán)利要求15所述的方法,還包括支持更新同步,其中每個(gè)處理單元計(jì)算邏輯TOD時(shí)鐘值,每個(gè)處理單元同時(shí)地開始使用新邏輯TOD時(shí)鐘值。
20.如權(quán)利要求15所述的方法,其中導(dǎo)引速率使得能夠在負(fù)方向上進(jìn)行所述邏輯TOD時(shí)鐘的導(dǎo)引,所述方法還包括在對TOD偏移寄存器施加負(fù)改變之后為處理單元對新邏輯TOD時(shí)鐘值的使用進(jìn)行延遲,由此該邏輯TOD時(shí)鐘值的改變單調(diào)地增加,所述裝置使得CPU必須延遲對該TOD時(shí)鐘進(jìn)行使用至少所述負(fù)改變的數(shù)量。
全文摘要
一種為計(jì)算機(jī)系統(tǒng)導(dǎo)引白天時(shí)間(TOD)時(shí)鐘的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)系統(tǒng)具有為執(zhí)行操作而提供時(shí)基的物理時(shí)鐘,該物理時(shí)鐘步進(jìn)到公共振蕩器。該方法包括步驟計(jì)算TOD時(shí)鐘偏移值(d)以將其相加到物理時(shí)鐘值(Tr)來獲得邏輯TOD時(shí)鐘值(Tb),其中邏輯TOD時(shí)鐘值是可調(diào)整的并且無需調(diào)整振蕩器的步進(jìn)速率。
文檔編號H04J3/06GK1928769SQ200610092290
公開日2007年3月14日 申請日期2006年6月16日 優(yōu)先權(quán)日2005年9月9日
發(fā)明者老羅納德·M·史密斯, 馬克·S·法雷爾, 埃伯哈德·恩格勒, 克勞斯·邁斯納 申請人:國際商業(yè)機(jī)器公司