暫存器的一個笨問題





oxy
2003-09-17, 11:55 AM
如果啊 兩個程式同時讀取同一個暫存器的adress
那這樣那邊的相關動作是怎麼處理啊?

有仲裁器這種機制嗎?




xbug
2003-09-17, 12:29 PM
不會有兩個程式"同時"讀取同一個暫存器這種情況發生

oxy
2003-09-17, 01:21 PM
為什麼不可能啊?

他如果不可能 一定有原因 我就是想知道緣由

麻煩告知一下

感謝

timas
2003-09-17, 01:28 PM
那你就想看看 有沒有"一定會"的狀況

TSUBASA
2003-09-17, 01:38 PM
每一道指令的執行有3個步驟~~fetch、decode、execute(只是大略分類~)
所以一個單位時間內只能有一道指令被 "execute" ~~
也就是說當CPU執行一道指令時~~可能有其他指令被fetch或是decode
但是只會有一道指令是進入execute的階段~~
如此一來必定不會在同一時間內有2道指令會存取同一個register
如果還要深入的話多去看看跟pipeline相關的文章或書籍吧~~

oxy
2003-09-17, 02:47 PM
對唷~ ~ ~
我在ARM有看到相關的東西
但是沒想到這一點~ ~ ~

我一直繞著register的概念在跑 忘了這一點 感恩啊!!

xbug
2003-09-17, 03:38 PM
以task來說, 一個cpu在同一時間點只能執行一個task,
所謂的 multitasking (多工)對cpu來說它只是每個task執行一段很短的
時間之後就切換到另一個task中去執行,因為cpu處理速度很快, 讓使用
者感覺就像是多個 task 在同時執行一樣, 實際上不會有多個task同時執
行的情況出現, 自然也不會有多個 task 存取同個暫存器的事發生。

以pipeline來說,一個時間點只會有一條指令在 execute 狀態。

以SuperScalar(超純量, 多pipeline架構)來說,一個時間點可能會有多
條指令在 execute 狀態, 這就產生了資料相依性的問題, Pentium 是採用
In Order (依序)方式解決, Pentium3 多了一個非循序執行的超純量架構....
其它.. 忘了 :>