暫存器和快取記憶體L1之間如何傳遞資料,Intel的L1和L2,L3之間的結構是怎樣的?

時間 2021-05-29 23:21:57

1樓:鐘Scherzo

最近在學這方面的東西,嘗試答一下。

1.此圖為CPU流水線的示意圖,我想知道Data Cache是指的那些硬體,是暫存器和L1嗎,如果包含L1,為什麼運算器能直接將資料放入L1,他不是只和暫存器交換資料嗎。

Data Cache指的是用來儲存計算用的數值的cache,與之同型別的是instruction cache,用來儲存程式執行的一行行命令。cache與暫存器無關,可以理解為與記憶體很像,但是速度要快的多的一種儲存空間。cache可以有很多級,L1是最快的一級,慢一些的還有L2或L3。

CPU在執行一條有關計算的命令之前,比如說做加法,首先需要把相加的兩個數從cache裡拿出來放到暫存器裡,然後通過ALU計算,計算出結果後再把結果放到另乙個暫存器裡,接著再把那個那個暫存器的裡的資料放到cache裡。運算器只能和暫存器交換資料,不能直接讀取或者寫入L1 cache。讀取和寫入cache指的是暫存器和cache之間的交換,需要專門的操作來實現(比如MIPS中是lw和sw)。

cache速度很快但是可能本身容量很小,所以如果我們需要的資料在L1 cache裡沒找到,那麼就需要往下一級的cache裡找,還沒找到,就需要跑到memory裡找。這種情況通常稱為cache miss。

2.在CPU流水線中,指令經過流水級的結果儲存在兩級之間的鎖存器中,這個鎖存器和暫存器有關係嗎

不好意思我對於中文的一些名詞不是十分熟悉,但是我想也許你指的是普通的register(暫存器),和architectural register(架構暫存器)。

對於一種指令集(比如MIPS),會指定一定數量,名稱確定的架構暫存器,所有的指令在執行資料的時候都必須使用架構暫存器裡的資料,指令的結果也必須儲存到架構暫存器中。你可以把架構暫存器理解為程式語言裡的變數,只不過在CPU中變數的數量固定,變數的名字定死,變數能儲存的資料型別也只能是一定大小的二進位制bits。

你提到的兩個流水級之間的暫存器,是普通的暫存器,簡單來說就是乙個flip flop(中文似乎翻譯成觸發器?),這個暫存器與架構暫存器完全沒有關係,只是用來在乙個時鐘週期裡保持當前的資料。

3.為什麼說Intel的L1只存位址,L2中才儲存資料,這樣有什麼好處嗎

我並沒有搜到類似的說法,而且L1只寸位址的話,L1就沒什麼用處了。不管需要什麼資料還是要跑到L2或者更低階的cache和memory裡找,那L1完全沒有起到應有的作用。

暫存器和儲存器有什麼異同?

暫存器是一種儲存器啊,這是大概念和小概念的問題,集合與子集的關係 儲存器按照到cpu距離由近到遠 訪存速度由高到低 排列分別是暫存器,快取,主存,輔存。ROM是唯讀儲存器,僅限於儲存bios一類的程式 請看william Stallings的Computer Organization and Arc...

為什麼修改esp暫存器會觸發異常?

北極 但這種做法不可取,也不可能實現。首先esp的值不僅僅儲存在esp裡,換句話說,指向棧上的東西,不僅僅是只有esp,比如ebp也是可以用來做定址的。甚至在記憶體裡,多級指標都是指向舊的記憶體區域,你不可能也沒辦法把這些記憶體裡的資料都指向新的棧空間,因為對於記憶體來說,都是乙個乙個數值,它是指標...

python 怎麼把讀取暫存器的16位無符號整數(十進位制)轉換為浮點 浮點數應該占用兩個暫存器?

阿不錯 modscan?寫了個不依賴任何庫的 def float t b b b.replace 去除空格,測試用方便 x bin eval 0x b 2 直接不能轉,加0x才認 if len x 32 簡單的補0操作 x 0 32 len x x else x x if int x 0 1 符號位...