<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>https://wiki.taigi.ima.org.tw/w/index.php?action=history&amp;feed=atom&amp;title=Dragon%E5%8D%94%E8%AD%B0</id>
	<title>Dragon協議 - 修訂紀錄</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.taigi.ima.org.tw/w/index.php?action=history&amp;feed=atom&amp;title=Dragon%E5%8D%94%E8%AD%B0"/>
	<link rel="alternate" type="text/html" href="https://wiki.taigi.ima.org.tw/w/index.php?title=Dragon%E5%8D%94%E8%AD%B0&amp;action=history"/>
	<updated>2026-04-03T20:08:06Z</updated>
	<subtitle>本 wiki 上此頁面的修訂紀錄</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.taigi.ima.org.tw/w/index.php?title=Dragon%E5%8D%94%E8%AD%B0&amp;diff=384276&amp;oldid=prev</id>
		<title>TaiwanTonguesApiRobot：​從 JSON 檔案批量匯入</title>
		<link rel="alternate" type="text/html" href="https://wiki.taigi.ima.org.tw/w/index.php?title=Dragon%E5%8D%94%E8%AD%B0&amp;diff=384276&amp;oldid=prev"/>
		<updated>2025-08-22T06:34:49Z</updated>

		<summary type="html">&lt;p&gt;從 JSON 檔案批量匯入&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新頁面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Dragon 協議&amp;#039;&amp;#039;&amp;#039;是一種用佇加處理器系統的基於更新的緩存一致性協議。通過直接更新迒濟个處理器的所有緩存值來執行寫傳播。因為閣較新的協議（比如講 Dragon 協議）佇咧寫入去勻仔存塊了後由其他處理器進行濟擺讀的時會高效執行，因為更新的緩存塊誠容易佇佮所有處理器關聯的緩存中使用。&lt;br /&gt;
&lt;br /&gt;
==狀態==&lt;br /&gt;
&lt;br /&gt;
逐塊慢存角攏因為以下四項狀態之一：Exclusive-clean、Shared clean、Shared modified 和 Modify。&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exclusive-clean ( E )&amp;#039;&amp;#039;&amp;#039;：這意味提予緩儉塊首先由當做處理器提著，並且這馬無去予任何其他處理器訪問過。&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Shared clean ( Sc )&amp;#039;&amp;#039;&amp;#039;：這意味著勻存角肯定存在佇咧幾若个處理器的緩存中，並且當前處理器毋是上尾一个寫入該塊的處理器。狀態 E 和 Sc 由協議單獨維護，以防止對未來享的緩存角的讀寫操作引發匯流排事務，自按呢減慢仔執行速度。這佇單執行程序當中足捷看著的。&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Shared modified ( Sm )&amp;#039;&amp;#039;&amp;#039;：這意味對這塊存在真濟處理器的緩存內底，而且當前處理器是上尾一个修改該塊的處理器。所以，當前處理器予人號做角的所有的人。佮失效協議無仝，塊嘛無需要佇主存儲器內底是上新的，干焦需要佇咧處理器內底是上新的。做勻存塊被驅逐時，處理器負責更新主存。&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Modify（M）&amp;#039;&amp;#039;&amp;#039;：這意味著只有一个處理器擁有內存塊，並且伊已經有修改對內存內底引入的值。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
對任何予定的緩存對，予定勻仔存塊的允准狀態連同其他勻存狀態的狀態如下（照起工來寫的狀態）：&lt;br /&gt;
&lt;br /&gt;
==事務==&lt;br /&gt;
&lt;br /&gt;
有四个處理器事務和兩个匯流排事務。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;處理器讀取 ( PrRd )&amp;#039;&amp;#039;&amp;#039;：當處理器成功讀佇存在的緩存中的某一塊銀角仔的時陣，就會發生這个事務。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;處理器寫入去 ( PrWr )&amp;#039;&amp;#039;&amp;#039;：當處理器完成對囥佇咧其實勻勻仔內底的某一个勻勻仔角的成功寫入去，就會發生這个事務。這予會處理器成做上新更新緩存塊的處理器。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;處理器讀袂命中 ( PrRdMiss )&amp;#039;&amp;#039;&amp;#039;：當處理器無法度對其他的緩存中讀慢存角閣需要對內存抑是另外一个緩存中取塊的時，就會發生這个事務。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;處理器寫入去未命中 ( PrWrMiss )&amp;#039;&amp;#039;&amp;#039;：當處理器毋通對其他的勻存中寫入寬存塊的時陣，會發生這个事務，需要對內存抑是另外一个勻勻仔抾著塊紲落寫入。這再一遍使處理器是上新更新緩存塊的處理器。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;匯流排讀取（BusRd）&amp;#039;&amp;#039;&amp;#039;：當處理器請求匯流排得著緩存塊的上新值的時，會發生這个事務，無論伊來自主存儲器抑是另外一个處理器的緩存。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;攄新（Flush）&amp;#039;&amp;#039;&amp;#039;：當處理器共規个一个勻勻仔囥佇咧匯流排上時會發生這个事務。這是為著反映處理器對主存中緩存塊所做的更改。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;匯流排更新（BusUpd）&amp;#039;&amp;#039;&amp;#039;：做一个處理器修改一个緩存角，啊若其他處理器需要愈新𪜶各自的緩存角，就會發生這个事務。這是寫更新協議所獨有的。佮 Flush 操作相比，BusUpd 需要閣較短的時間，因為對慢存的寫入比對內存的寫入較緊。另外一點需要注意的是，緩存袂當更新其緩存塊的本地副本，然後請求匯流排發送匯流排更新事務。若是有影發生這款狀況，遐爾仔兩个歇睏可能會獨立換新𪜶的本地副本，然後請求匯流排。紲落𪜶會同齊看著兩个無遵循順序一致性的寫入。&lt;br /&gt;
&lt;br /&gt;
猶閣需要一條&amp;#039;&amp;#039;&amp;#039;shared line&amp;#039;&amp;#039;&amp;#039;來指示某一个緩存角佇咧幾若个緩存中敢有可用。這是必需的，因為其中一个勻仔會當趕逐家應該箍爾敢有需要的換新其他的塊。佇某一寡狀況下，shared line 對減少內存和匯流排事務，其中一塊干焦佇一个高速緩存中可用，所以無需要匯流排閣較新。這款的檢測共享的專用線路咧寫更新協議（如 Firefly 協議）中會當揣著，並是因為的 Futurebus（IEEE 標準 P 八百九十六追一）等匯流排的標準實現。&lt;br /&gt;
&lt;br /&gt;
==狀態轉換==&lt;br /&gt;
&lt;br /&gt;
===處理器發起的轉換===&lt;br /&gt;
&lt;br /&gt;
根據塊的彼當前狀態佮處理器發起的事務，慢存塊經歷以下的狀態轉換之一：&lt;br /&gt;
&lt;br /&gt;
* 當發生處理器讀袂命中 (&amp;#039;&amp;#039;&amp;#039;PrRdMiss&amp;#039;&amp;#039;&amp;#039;) 並且緩存塊未共享時間，狀態轉換做&amp;#039;&amp;#039;&amp;#039;Exclusive&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 當發生處理器讀袂命中 (&amp;#039;&amp;#039;&amp;#039;PrRdMiss&amp;#039;&amp;#039;&amp;#039;) 並且緩存塊予人共享的時陣，狀態轉換著狀態&amp;#039;&amp;#039;&amp;#039;Shared Clean&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 當發生處理器寫入去未命中 (&amp;#039;&amp;#039;&amp;#039;PrWrMiss&amp;#039;&amp;#039;&amp;#039;) 並且緩存塊予人共享的時陣，狀態轉換做&amp;#039;&amp;#039;&amp;#039;Shared Modified&amp;#039;&amp;#039;&amp;#039;並且處理器成做所有的人。&lt;br /&gt;
* 當發生處理器寫入去未命中 (&amp;#039;&amp;#039;&amp;#039;PrWrMiss&amp;#039;&amp;#039;&amp;#039;) 而且緩存塊未共享時間，狀態轉換做&amp;#039;&amp;#039;&amp;#039;Modified&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 做處理器讀取 (&amp;#039;&amp;#039;&amp;#039;PrRd&amp;#039;&amp;#039;&amp;#039;) 命中的時陣，慢存塊的狀態袂改變，共伊保留該值。這是因為伊干焦一个讀取命令，伊袂產生任何匯流排事務&lt;br /&gt;
* 若是緩存角是&amp;#039;&amp;#039;&amp;#039;Modified&amp;#039;&amp;#039;&amp;#039;狀態，並且處理器寫入去（&amp;#039;&amp;#039;&amp;#039;PrWr&amp;#039;&amp;#039;&amp;#039;）該塊，無轉換，因為彼塊無去予人共享。&lt;br /&gt;
* 做高速生存角是因為&amp;#039;&amp;#039;&amp;#039;Shared Modified&amp;#039;&amp;#039;&amp;#039;狀態的時，處理器寫入去 (&amp;#039;&amp;#039;&amp;#039;PrWr&amp;#039;&amp;#039;&amp;#039;)，猶毋過 shared line 未激活，狀態轉換做&amp;#039;&amp;#039;&amp;#039;Modified&amp;#039;&amp;#039;&amp;#039;。&lt;br /&gt;
* 若是勻勻仔存塊咧寫入去 (&amp;#039;&amp;#039;&amp;#039;PrWr&amp;#039;&amp;#039;&amp;#039;) 發生並且 shared line 予人激活的時陣&amp;#039;&amp;#039;&amp;#039;Shared Modified&amp;#039;&amp;#039;&amp;#039;狀態，則會生做匯流排更新 (&amp;#039;&amp;#039;&amp;#039;BusUpd&amp;#039;&amp;#039;&amp;#039;) 閣較新另外一个緩存角。&lt;br /&gt;
* 若是勻勻仔存塊咧寫入去 (&amp;#039;&amp;#039;&amp;#039;PrWr&amp;#039;&amp;#039;&amp;#039;) 發生並且 shared line 予人激活的時陣&amp;#039;&amp;#039;&amp;#039;Shared Clean&amp;#039;&amp;#039;&amp;#039;狀態，則會生做匯流排更新 (&amp;#039;&amp;#039;&amp;#039;BusUpd&amp;#039;&amp;#039;&amp;#039;) 以更新另外一个緩存角並且狀態更改做&amp;#039;&amp;#039;&amp;#039;Shared Modified&amp;#039;&amp;#039;&amp;#039;。&lt;br /&gt;
* 猶毋過，若是勻勻仔存塊咧寫入去 (&amp;#039;&amp;#039;&amp;#039;PrWr&amp;#039;&amp;#039;&amp;#039;) 發生的時陣佇咧&amp;#039;&amp;#039;&amp;#039;Shared&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Clean&amp;#039;&amp;#039;&amp;#039;狀態，猶毋過 shared line 未激活，愛轉換做&amp;#039;&amp;#039;&amp;#039;Modified&amp;#039;&amp;#039;&amp;#039;，而且袂生做匯流排事務。&lt;br /&gt;
* 做伙佇咧&amp;#039;&amp;#039;&amp;#039;Exclusive&amp;#039;&amp;#039;&amp;#039;狀態，並且處理器向其實寫入去（&amp;#039;&amp;#039;&amp;#039;PrWr&amp;#039;&amp;#039;&amp;#039;）時，伊會閣較改做&amp;#039;&amp;#039;&amp;#039;Modified&amp;#039;&amp;#039;&amp;#039;狀態。&lt;br /&gt;
&lt;br /&gt;
===匯流排發起的轉換===&lt;br /&gt;
&lt;br /&gt;
根據塊的當前狀態和匯流排發起的事務，慢存塊經歷以下的狀態轉換之一：&lt;br /&gt;
&lt;br /&gt;
* 若緩存塊佇咧&amp;#039;&amp;#039;&amp;#039;Modified&amp;#039;&amp;#039;&amp;#039;中，並且發出匯流排讀出 (&amp;#039;&amp;#039;&amp;#039;BusRd&amp;#039;&amp;#039;&amp;#039;)，著愛發出&amp;#039;&amp;#039;&amp;#039;Flush&amp;#039;&amp;#039;&amp;#039;以更新主內存並且狀態轉換做&amp;#039;&amp;#039;&amp;#039;Shared Modified&amp;#039;&amp;#039;&amp;#039;，因為該塊這馬佇咧幾若个慢存中。&lt;br /&gt;
* 若是緩存角是&amp;#039;&amp;#039;&amp;#039;Shared Modified&amp;#039;&amp;#039;&amp;#039;狀態，並且匯流排讀取（&amp;#039;&amp;#039;&amp;#039;BusRd&amp;#039;&amp;#039;&amp;#039;）， 著愛發出&amp;#039;&amp;#039;&amp;#039;Flush&amp;#039;&amp;#039;&amp;#039;閣較新主內存，並且狀態保持無變。&lt;br /&gt;
* 若是緩存角是&amp;#039;&amp;#039;&amp;#039;Shared Modified&amp;#039;&amp;#039;&amp;#039;狀態，而且發出匯流排更新 (&amp;#039;&amp;#039;&amp;#039;BusUpd&amp;#039;&amp;#039;&amp;#039;) 事務，愛轉換做&amp;#039;&amp;#039;&amp;#039;Shared Clean&amp;#039;&amp;#039;&amp;#039;，所有緩存攏會更新。&lt;br /&gt;
* 若是緩存角是&amp;#039;&amp;#039;&amp;#039;Shared Clean&amp;#039;&amp;#039;&amp;#039;狀態，而且伊接收著匯流排讀 (&amp;#039;&amp;#039;&amp;#039;BusRd&amp;#039;&amp;#039;&amp;#039;) 抑是匯流排更新 (&amp;#039;&amp;#039;&amp;#039;BusUpd&amp;#039;&amp;#039;&amp;#039;)，伊會繼續保持伊的狀態，因為值猶原是共享的。猶毋過，佇咧更新的狀況之下，伊會更新緩存塊中的值。&lt;br /&gt;
* 若是緩存角是&amp;#039;&amp;#039;&amp;#039;Exclusive&amp;#039;&amp;#039;&amp;#039;狀態並且匯流排讀有值 (&amp;#039;&amp;#039;&amp;#039;BusRd&amp;#039;&amp;#039;&amp;#039;)，則狀態會轉換做 Shared Clean，因為該塊毋是干焦囥佇一个勻仔內底&lt;br /&gt;
&lt;br /&gt;
==底層設計選擇==&lt;br /&gt;
&lt;br /&gt;
===消除共享修改狀態（Sm）===&lt;br /&gt;
&lt;br /&gt;
緩存角和 Sm 狀態的處理器負責佇咧緩存角予人替換時更新內存。毋過若準逐當咧發生匯流排更新事務的時就更新主存儲器，則無需要單獨的 Sm 和 Sc 狀態，並且協議會當提供單位共享狀態。猶毋過，這會致使閣較濟內存事務，這可能會降低系統速度，尤其是做真濟个處理器寫入仝一个緩存角的時陣。&lt;br /&gt;
&lt;br /&gt;
===放送換 Sc 塊===&lt;br /&gt;
&lt;br /&gt;
該協議允准佇無任何匯流排活動的情形下靜靜替換 Sc 狀態的緩存塊。若進行廣播以予其他的勻勻仔知影當咧替換 Sc 塊，則𪜶會使試看 shared line 並無其他共享者的情況下徙到狀態 E。有一个是狀態 E 塊塊的好處是，若講該塊小可仔予人寫入去，伊會進入 M 狀態，而且無需要生做匯流排更新事務。所以，以放送 Sc 塊的替換做代價，咱會當避免匯流排閣較新事務。而且因為廣播咧替換毋是時間關鍵，若無需要緩存來隨處理來替換，則無缺點。另外一方面，若是緩存袂隨處理更新，則可能致使無爽快閣較新。佇這个情形下，三態更新協議（如 Firefly 協議）可能有性能優勢。&lt;br /&gt;
&lt;br /&gt;
==比較==&lt;br /&gt;
&lt;br /&gt;
===Dragon vs 寫無效協議===&lt;br /&gt;
&lt;br /&gt;
寫無效協議是另外一套緩存一致性協議，一旦一个緩存角被修改，其他緩存中相仝塊的其他敢袂予人更新，是無效的。寫入去無效協議佇咧對仝一勻仔存塊有真濟後續寫入的情形下閣較有效，因為無效發生一改，並且避免其他處理器的進一步回流排事務。猶毋過，佇咧對一塊進行寫入了後對仝一塊進行濟過讀的情況下，寫入去更新協議閣較有效。因為阮咧寫入去了後會更新其他的存在，因為按呢𪜶會當隨訪問數據。佇這个情形下。寫無效協議是足不利的，因為逐改佇咧另外一个勻存中修改一个勻仔角的時陣，賰的緩存需要會拄著一致性未命中，而且啟動匯流排事務以讀新值。比並之下，寫入去更新協議有時會使塊的值保持更新的時間超過必要的時間，這將致使其他類型的無命中（即衝突和容量無命中）的增加。&lt;br /&gt;
&lt;br /&gt;
===Dragon vs Firefly 協議===&lt;br /&gt;
&lt;br /&gt;
佇咧 Firefly 的狀況之下，修改塊的緩存到緩存傳輸也會同時寫回主內存。猶毋過，因為佮高速轉來做伙比，嘿主存儲器的訪問愛慢幾个數量級，所以需要增加執行回寫做單獨匯流排操作的複雜性。佇任何情形下，伊攏會致使性能下降。佇咧 Dragon 協議的情況下完全避免這个問題，因為共享塊根本袂寫轉來到。毋過，這是以增加一个狀態（Shared-modified）為代價的。&lt;br /&gt;
&lt;br /&gt;
==參考==&lt;br /&gt;
&lt;br /&gt;
==參見==&lt;br /&gt;
&lt;br /&gt;
* 緊取一致性&lt;br /&gt;
* 火金蛄協議&lt;br /&gt;
* MESI 協議&lt;br /&gt;
* MOSI 協議&lt;br /&gt;
* MOESI 協議&lt;br /&gt;
* MESIF 協議&lt;br /&gt;
&lt;br /&gt;
[[分類: 待校正]]&lt;/div&gt;</summary>
		<author><name>TaiwanTonguesApiRobot</name></author>
	</entry>
</feed>