2014-02-25 20 views
1

我不確定如何解決這個問題。有人可以解釋我應該採取的步驟,因爲我需要了解這個問題。從內存中取操作數的最差情況時間

考慮到地址對齊,從60納秒的週期時間和8位寬的數據總線的內存中獲取4字節操作數所需的最差時間是多少?

在此先感謝

+4

什麼平臺架構?什麼內存類型?什麼記憶頻率,如果適用? CPU緩存?其他情況? – 2014-02-25 22:44:43

+0

最壞的情況是無限的時間。最糟糕的情況是,內存控制器在發出請求後以某種方式發生災難性故障。 –

+0

您確定它是數據總線的「8位」而不是「8字節」嗎? – EOF

回答

1

假設沒有緩存或TLB未命中命中,你的「典型」最壞的一個精心設計的處理器情況下,應該有四個,單字節60ns的在讀 - > 240ns。這可能是預期的答案。

要真正回答這個問題,你需要考慮不正當的情況。

有評論指出,如果硬件出現故障可能需要無限的時間,但這是一種笑話答案。

但即使硬件沒有故障,花費的時間也會比您想象的要長。

另一位評論者指出,如果有頁面地圖,您可以通過頁面地圖(「TLB」)填充感到驚訝。 TLB未命中以重新填充頁面翻譯槽可能需要在實際數據讀取開始之前讀取通常爲幾個字節的一個或「字」(指針/保護位)。

然後考慮您的4字節值跨越虛擬頁面邊界的情況,並且至少有一個虛擬頁面已經從物理內存中移出到磁盤上的頁面文件。然後,訪問時間由查找/旋轉/讀取/調整內存映射的時間決定,所有這些都可能需要幾十毫秒(如果磁頭需要尋找長距離,則需要更多時間)。

如果兩頁都被壓入磁盤,則可能會遇到2次查找時間。如果驅動器轉速降低,則需要更多的延遲,並且必須啓動。

設計錯誤的操作系統可能會陷入頁面不存在的較低地址,然後頁面出現在第一頁,重新啓動指令,在第二頁上出現頁面不存在的錯誤,將第一頁逐出爲第二頁留出空間,第二次重新啓動違規指令,然後重複此循環。然後訪問可以永久存在,而不會發生硬件故障。我假設現代操作系統鎖定連續的虛擬頁面對以避免這種情況。 (如果考慮到指令主體可能跨越頁面邊界,並且也可能不存在於內存映射中,這會變得非常瘋狂)。

0

這個問題沒有道理。如果數據總線寬度爲8位,那麼除非您正在讀取跨越字節邊界的位域,否則地址對齊對於長度爲字節長度(1到n)的一些倍數的操作數不是問題。

相關問題