關 閉

新聞中心

EEPW首頁 > 工控自動化 > 設計應用 > 事務存儲結構的實現(xiàn)

事務存儲結構的實現(xiàn)

作者: 時間:2012-06-04 來源:網(wǎng)絡 收藏

(2) 讀00地址(十六進制地址)中的數(shù)據(jù)到寄存器r1中,00地址對應數(shù)據(jù)塊的讀(R)標志位置1表示此數(shù)據(jù)被讀。

本文引用地址:http://butianyuan.cn/article/202295.htm

(3) 將寄存器r2中數(shù)據(jù)(這里假設為56)存入c0地址中,由于c0地址中存在原始數(shù)據(jù)34,將c0地址和該原始數(shù)據(jù)一起根據(jù)LogBase中的日志入口地址存入日志中,并將LogPtr指針后移,指向用于存放下個數(shù)據(jù)的地址位,同時將c0地址對應塊的寫(W)標志位置1,代表一次寫操作的完成,其他的狀態(tài)不變。

(4) 讀取40地址中數(shù)據(jù)到寄存器r3中,然后r3中數(shù)據(jù)加1,并將執(zhí)行后的r3數(shù)據(jù)存回40地址中,該操作對40地址對應塊執(zhí)行了一次讀操作和一次寫操作,將讀(R)和寫(W)標志位置1,然后將原始40地址對應塊中數(shù)據(jù)存入日志中,存入LogPtr指向的地址中,同時將LogPtr指針后移。

(5) 事務提交后狀態(tài)——將與本事務相關的各個數(shù)據(jù)塊對應讀寫標志位清0,將LogPtr置位到LogBase,TMcount置0。(本例僅針對單事務執(zhí)行,如果是嵌套事務的執(zhí)行,LogTM結構會更加復雜,具體支持嵌套事務的LogTM實現(xiàn),請參考[2])

(6) 事務回滾后狀態(tài)——事務在執(zhí)行或提交過程中如果出錯需要回滾,則將日志中記錄的原始數(shù)據(jù)按照地址映射關系重新加載到對應cache數(shù)據(jù)塊中,同時將各個塊對應讀寫標志位清0,LogPtr重置并且TMcount置0。

1.jpg

圖 4 事務版本管理過程——成功提交和回滾

2.2 沖突管理(Contention Management)

LogTM采用積極的沖突管理模式,而沖突管理中的一個重要概念目錄,就是在內存中開辟的一片用來記錄共享數(shù)據(jù)索引和相關狀態(tài)信息的區(qū)域,也稱為目錄表。此沖突管理以目錄為橋梁,通過目錄的分析和消息轉發(fā)機制來完成多處理機間的沖突檢測。具體的實現(xiàn)步驟概括起來為:①請求操作的處理機發(fā)出一致性請求到目錄;②目錄響應請求并可能將請求轉發(fā)到其他一個或多個處理機上;③每個響應請求的處理機檢查自身狀態(tài)看是否發(fā)生沖突;④每個響應請求的處理機給出應答信號,包括沖突應答(nack)和非沖突應答(ack);⑤發(fā)出請求的處理機解決沖突。

事務發(fā)生沖突后的替換行為須依據(jù)目錄中有效的MOESI狀態(tài)(MOESI 狀態(tài):Modified(M),Owned(O), Exclusive(E),Shared(S) or Invalidate(I))而定。

下面結合圖5中的沖突檢測實例對沖突管理的具體行為進行說明。

1.jpg

圖 5 LogTM沖突檢測實例

(1)事務開始——處理機P開始執(zhí)行事務,TMcount增1;此時僅目錄中存放的cache塊信息有效。

(2)處理機P向目錄請求數(shù)據(jù)信息——步驟①:P在自身的cache中找不到某數(shù)據(jù),馬上發(fā)送獨占請求(GETX)到目錄。步驟②:目錄收到請求后根據(jù)相應數(shù)據(jù)的索引找到“老”版本數(shù)據(jù)傳給處理機P,當“老”版本數(shù)據(jù)達到P時,P將此數(shù)據(jù)更為“新”版本數(shù)據(jù)同時將本機此數(shù)據(jù)塊對應讀/寫標志位置1。步驟③:P接受數(shù)據(jù)完畢后,發(fā)送應答信號給目錄表示已經(jīng)成功接受數(shù)據(jù)。與此同時目錄中的狀態(tài)信息為M@P(Modified by P),表示此數(shù)據(jù)正在被處理機P更改。

(3)檢測到事務沖突——步驟①:處理機Q發(fā)出請求某共享數(shù)據(jù)的信號(GETS)給目錄。步驟②:由于目錄中此數(shù)據(jù)的狀態(tài)為M@P,目錄則根據(jù)請求轉發(fā)給處理機P。步驟③:P接受到請求后檢查自己的狀態(tài),由于P中相應數(shù)據(jù)塊的寫標志位已置,表明P正在修改此數(shù)據(jù),不能滿足Q的請求,發(fā)生沖突。這時處理機P直接發(fā)送沖突信號給Q,當Q接受到?jīng)_突信號后進行沖突處理。步驟④:處理機Q同時將沖突信號發(fā)送給目錄,表明此次請求失敗。

(4)事務溢出的處理——處理機P通知目錄要將修改后的數(shù)據(jù)存到內存中(目前,內存中存在的是對應數(shù)據(jù)修改前的“臟”數(shù)據(jù))。步驟①:P發(fā)出PUTX請求給目錄。步驟②:目錄認可后發(fā)送應答信號給P,通知P可以發(fā)送。步驟③:P接收到此信號后將數(shù)據(jù)寫回內存(WB_XACT)同時將溢出位置1(表明此數(shù)據(jù)已經(jīng)不在cache中)。這樣在寫回操作完成后,P中相關數(shù)據(jù)塊信息已置為無效,但是目錄中仍然保持著原先P持有數(shù)據(jù)時的狀態(tài),內存中對應區(qū)域已為修改后的“干凈”數(shù)據(jù),目錄中該數(shù)據(jù)相應的狀態(tài)也由“老”變成了“新”,表明內存中此數(shù)據(jù)已為更新后的數(shù)據(jù)。

(5)溢出數(shù)據(jù)的事務沖突檢測——步驟①:處理機Q重新發(fā)出請求數(shù)據(jù)信號給目錄,由于目錄中的狀態(tài)還沒有改變。步驟②:目錄根據(jù)當前狀態(tài)再次將請求轉發(fā)給處理機P,而此時Q請求的數(shù)據(jù)塊已經(jīng)寫回內存中去了,并不在P的cache中,P收到請求信號后檢查到自身的溢出位已經(jīng)置位,它認為此數(shù)據(jù)可能由于某種原因不在cache中,但是仍然與它相關。比如:由于此數(shù)據(jù)塊大小大于cache規(guī)定塊大小而不能放下,但仍需操作。步驟③:P發(fā)出沖突信號(NACK)給Q,但是這個沖突并不是真正意義上的沖突,而是P假設的沖突。步驟④:Q收到?jīng)_突信號后處理沖突同時發(fā)送信號給目錄,表明此次請求再次失敗。

(6)目錄中數(shù)據(jù)狀態(tài)的懶惰(Lazy)更新——處理機P提交事務后將TMcount減1,將對應cache塊的讀/寫標志位和溢出標志位清零,但此時目錄中的狀態(tài)仍然為M@P。步驟①:此時一旦處理機Q重新發(fā)出請求此數(shù)據(jù)信號。步驟②:該信號會再一次通過目錄轉發(fā)給處理機P,但此時P的溢出位已經(jīng)被清空。步驟③:P通過發(fā)送清除信息(CLEAN)給目錄通知目錄不必再轉發(fā)請求信息,目錄中的數(shù)據(jù)信息有效可以直接發(fā)送給請求的處理機Q。步驟④:目錄根據(jù)索引關系找到相關數(shù)據(jù)發(fā)送給處理機Q。步驟⑤:Q收到數(shù)據(jù)后進行處理同時將應答信號發(fā)送給目錄,表明請求成功同時將目錄對應數(shù)據(jù)項狀態(tài)置E@Q,表示此時處理機Q獨占此數(shù)據(jù)資源。



關鍵詞: 存儲結構

評論


技術專區(qū)

關閉