預讀:CPU發起預讀操作(現在基本分工給cache了),cache根據局部性原理將主存的子集調入,同時保存cache與主存間的索引。
CPU訪cache:CPU需要訪問主存某個地址時,先訪問cache看看有沒有對應的鏡像。
命中:主存和cache的容量差很多,cache中恰好有CPU需要的數據。
miss:cache猜錯咯,哭哭。去訪問主存把數據調入cache。(替換)
映射功能
首先分清楚這幾個東西……(大概只有我蠢
主存地址:塊號|塊內地址
CPU在訪主存的時候會根據主存地址去找相應內容。
cache地址:行號|行內地址
CPU在訪cache的時候會根據cache地址去找相應內容。
主存的內容和cache的內容
映射就是把主存地址和cache地址聯系起來
直接映射
主存的每一塊對應cache中確切的一行
i=j mod 2C
主存地址:Tag|Line|Word
原主存地址的塊號被分成了標記和行兩部分,因為cache數量遠小于主存,所以這種映射關系是cache一行對主存多塊,行部分用來區分每一塊應該映射到哪一行,標記部分則用于確認當前cache里存的是對應那么多塊中的哪一塊。
標記:
行:標識cache的確切一行
字:標識主存塊中的確切一字/字節
CPU訪cache:
首先根據行,找到cache行,然后比較主存地址中的標記和cache部分存的標記。一樣則命中
命中:使用主存地址的塊內地址,訪問該cache塊相應的字單元。
Miss:使用主存地址直接訪主存。
CPU需要訪問某個地址時,首先根據該主存地址的C字段找到cache的相應塊,然后將該塊標志字段中存放的標志與主存地址的T標志進行比較。
當一個主存塊調入 Cache中時,會同時將主存地址的T標志存入Cache塊的標記字段中。當CPU送來一個訪存地址時,首先,根據該主存地址的C字段找到Cache的相 應塊,然后將該塊標志字段中存放的標志與主存地址的T標志進行比較,若相符,說明主存的塊目前已調入該Cache塊中,則命中,于是使用主存地址的W字段
全相聯映射
主存地址:Tag|Word
CPU的訪cache地址:
當 一個主存塊調入Cache中時,會同時在一個存儲主存塊號和Cache塊號映射表的相聯存儲器中進行登記。CPU訪存時,首先,根據主存地址中的主存塊號 M在相聯存儲器中查找Cache塊號,若找到,則本次訪Cache命中,于是將對應的Cache塊號取出,并送訪Cache地址的塊號C字段;緊接著將主存地址的塊內字號W直接送Cache地址的塊內字號W字段,從而形成一個訪Cache的地址;最后根據該地址完成對Cache單元的訪問.
組相聯映射
主存地址:Tag|Set|Word
將cache分組,組間是直接映射,組內是全關聯映射。
即主存的每一塊,先找到對應的cache中確切的一組,然后對應這一組中任意的一行。
公式
命中率 H = Nc/(Nc+Nm)
主存慢于cache的倍率 r = Tm/Tc
訪問效率 e = 1/[r+(1-r)H]
平均訪問時間 Ta = (TcNc+Tm*Nm)/N = Tc/e