• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      DMA傳輸與Cache一致性分析

      2014-07-24 15:41:34曹彥榮張銳
      新媒體研究 2014年8期

      曹彥榮 張銳

      摘 要 介紹了Cache技術(shù)的基本原理,分析了DMA傳輸過程中存在Cache一致性問題,并介紹了幾種解決Cache一致性問題方法,同時在實際應(yīng)用中實現(xiàn)了安全的DMA傳輸設(shè)計。

      關(guān)鍵詞 DMA;Cache;數(shù)據(jù)一致性

      中圖分類號:TP3 文獻標(biāo)識碼:A 文章編號:1671-7597(2014)08-0039-02

      1 概述

      在設(shè)計用于存儲嵌入式系統(tǒng)的程序和數(shù)據(jù)的存儲器時,常面臨一個很難的選擇,既希望有便宜而快速的存儲器,但編譯的存儲器速度一般較慢,而快速的存儲器一般不便宜。高速緩沖存儲器Cache最早由Wilkes于1951年構(gòu)想出來,為了彌合處理器與存儲器之間速度差距而提出的。在計算機系統(tǒng)中,CPU執(zhí)行所需的指令和數(shù)據(jù)都是保存在內(nèi)存中的,但是CPU執(zhí)行指令的速度要明顯高于訪問內(nèi)存的速度。為了彌補主存速度的不足,在CPU和主存之間設(shè)置一個高速、小容量的緩沖存貯器(Cache),構(gòu)成Cache—主存存貯層次。使之從CPU來看,速度接近于Cache的,容量卻是主存的,CPU盡量不直接訪問主存,只與高速Cache交換信息。

      由于CPU訪存具有相對的局部性,即CPU從主存取指令或取數(shù)據(jù),在一定時間內(nèi),只是對主存局部地址區(qū)域的訪問,因此將部分內(nèi)存塊預(yù)先暫存在Cache中,等到CPU需要訪問時,大多時候直接訪問Cache即可取得指令和數(shù)據(jù),這樣就可以很好的解決CPU執(zhí)行速度和訪存速度的沖突。

      2 Cache工作原理

      Cache的基本結(jié)構(gòu)如圖1所示,主要由Cache存儲體、地址映射變換機構(gòu)、替換機構(gòu)幾大模塊組成。

      圖1 Cache的基本結(jié)構(gòu)

      2.1 Cache存儲體

      Cache存儲體以塊(或行)為單位與主存交換信息,為加速Cache與主存之間的調(diào)動,主存大多采用多體結(jié)構(gòu),且Cache訪存的優(yōu)先級最高。Cache存儲體中的數(shù)據(jù)實際上是主存的一個副本。

      2.2 地址映射變換機構(gòu)

      它將CPU送來的主存地址轉(zhuǎn)換為Cache地址。由于主存和Cache的塊大小相同,塊內(nèi)地址都是相對于塊的起始地址的偏移量,因此地址變換主要是主存的塊號。地址映射方法有很多,典型的方式有:全相聯(lián)映射、直接映射、組相聯(lián)映射和段相聯(lián)映射等。

      如果轉(zhuǎn)換后的Cache塊已與CPU欲訪問的主存塊建立了對應(yīng)關(guān)系,即已命中,則CPU可直接訪問Cache存儲體。如果轉(zhuǎn)換后的Cache塊與CPU欲訪問的主存塊未建立對應(yīng)關(guān)系,即不命中。此刻CPU在訪問主存時,不僅將該字從主存取出,同時將它所在的主存塊一并調(diào)入Cache,供CPU使用。將主存塊調(diào)入Cache存儲體時,如果Cache已被裝滿,就得采用替換策略。

      2.3 替換機構(gòu)

      當(dāng)Cache內(nèi)容已滿,無法接受來自主存塊的信息時,就由Cache內(nèi)的替換機構(gòu)按一定的替換算法來確定應(yīng)從Cache內(nèi)移出哪個塊返回主存,而把新的主存塊調(diào)入Cache。常用的替換算法有RAND、FIFO、LFU、LRU和OPT等。

      2.4 Cache的讀寫操作

      Cache讀操作過程比較簡單,流程如圖2所示。

      圖2 Cache讀操作過程

      Cache寫操作比較復(fù)雜,因為對Cache塊內(nèi)寫入的信息,必須與被映射的主存塊內(nèi)的信息完全一致。當(dāng)程序運行過程中需對某個單元進行寫操作時,會出現(xiàn)Cache一致性問題,即可能存在Cache中的數(shù)據(jù)和內(nèi)存中的數(shù)據(jù)不一致的現(xiàn)象。一般的解決方法有兩種:寫直達法和寫回法。

      寫直達法,每次向Cache寫入時,同時也向主存寫入。這樣會增加訪存次數(shù),但作為CPU的讀寫操作,Cache和內(nèi)存數(shù)據(jù)是一致的。

      寫回法,數(shù)據(jù)每次只是暫時寫入Cache中,并用標(biāo)志標(biāo)明,直到該塊被替換出Cache時,才寫入主存,優(yōu)勢是速度快。

      2.5 Cache的改進

      Cache剛出現(xiàn)時,典型系統(tǒng)只有一個緩存,但為了進一步提高CPU讀寫效率,提出了分立Cache和多級Cache。

      多級Cache,指CPU和內(nèi)存之間設(shè)置不止一級的Cache。Cache的目的是,為了給出逼近最快存儲器的速度,同時以較便宜的半導(dǎo)體存儲器的價格提供一個大的存儲器容量。多級Cache也就進一步加速了存儲器訪問速度。

      分立Cache,指將指令和數(shù)據(jù)分開,分別存在指令Cache和數(shù)據(jù)Cache中。主要基于兩點考慮:一是指令和數(shù)據(jù)的特性不一樣,指令一般只需讀取,不需對其進行寫操作,而數(shù)據(jù)要進行讀和寫操作;二是為了指令執(zhí)行的控制,將指令和數(shù)據(jù)分開更易于實現(xiàn)超前控制或指令流水線控制。

      3 DMA傳輸Cache一致性問題

      DMA傳輸方式是一種高效的數(shù)據(jù)傳送方式,它采用專門的硬件(DMA控制器)來控制數(shù)據(jù)傳送,數(shù)據(jù)在外部設(shè)備(包括IO設(shè)備、硬盤等)和主存儲器之間、或者主存儲器與主存儲器之間直接進行傳送,無需經(jīng)過CPU,并且也不需要CPU的干預(yù)。這樣,外設(shè)通過DMA控制器可以直接訪問主存儲器,與此同時,CPU可以繼續(xù)執(zhí)行程序,從存儲器中讀取指令或讀寫數(shù)據(jù)。除了CPU寫操作時會遇到Cache數(shù)據(jù)和內(nèi)存數(shù)據(jù)不一致的情況,DMA傳輸同樣也帶來Cache數(shù)據(jù)和內(nèi)存數(shù)據(jù)不一致的問題。

      在沒有DMA傳輸?shù)南到y(tǒng)中,只有CPU修改內(nèi)存數(shù)據(jù),采用寫直達法或?qū)懟胤ㄊ沟肅PU讀寫時Cache對于程序員是透明的,數(shù)據(jù)始終一致。但是加入DMA控制器之后情況就變得復(fù)雜了,如圖3所示,假設(shè)DMA控制器將IO設(shè)備中的數(shù)據(jù)傳送至內(nèi)存,這時內(nèi)存中變量A已經(jīng)更新,但Cache中變量A的值不變。將來的某個時刻,CPU要訪問變量A,明明A的值已經(jīng)更新,卻命中Cache獲取了舊值,發(fā)生了數(shù)據(jù)不一致現(xiàn)象。endprint

      圖3 Cache一致性問題

      解決數(shù)據(jù)傳輸時的Cache一致性主要有以下幾個方法。

      1)采用按字傳輸。在內(nèi)存和外設(shè)之間傳輸數(shù)據(jù)時,不用DMA方式,采取按字傳輸,典型的做法就是調(diào)用memcpy()函數(shù)。配置好Cache模式(寫直達法或?qū)懟胤ǎ珻ache對程序員來說是透明的,所有訪問也是安全的。該方案屬于PIO方式,缺點是,首先,傳輸?shù)男什蝗鏒MA方式快;其次,整個傳輸過程需要CPU全程參與,CPU無法執(zhí)行其它任務(wù),對系統(tǒng)性能有很大影響。

      2)關(guān)閉數(shù)據(jù)Cache。關(guān)閉系統(tǒng)的數(shù)據(jù)Cache,只使能指令Cache,這也是一種很有效的做法。CPU在讀寫數(shù)據(jù)時,都直接從內(nèi)存讀取或直接寫入內(nèi)存,數(shù)據(jù)不一致的現(xiàn)象自然也就消除了。由此帶來的缺點也顯而易見,CPU執(zhí)行指令的速度和訪存速度嚴重不匹配,導(dǎo)致系統(tǒng)性能很差勁。

      3)不可Cache內(nèi)存的DMA傳輸。在操作系統(tǒng)啟動時,會將內(nèi)存配置成可Cache內(nèi)存和不可Cache內(nèi)存兩種。前者可以映射到Cache中,后者不可以。CPU每次讀寫不可Cache內(nèi)存時,都會發(fā)生Cache不命中,進而直接訪問內(nèi)存,當(dāng)然這塊內(nèi)存也無法在Cache中形成副本。對于不可Cache內(nèi)存,在DMA傳輸前后不會出現(xiàn)Cache一致性問題,因此不可Cache內(nèi)存也被稱為Cache-safe內(nèi)存。VxWorks操作系統(tǒng)中可以使用cacheDmaMalloc()函數(shù)來分配不可Cache內(nèi)存。

      4)可Cache內(nèi)存的DMA傳輸。使用可Cache內(nèi)存進行DMA傳輸之前,如果源地址是內(nèi)存地址,先調(diào)用cacheFlush()函數(shù)將Cache中的數(shù)據(jù)刷新到內(nèi)存中,保證DMA傳輸?shù)氖荂ache中的新值,而不是內(nèi)存中的舊值。DMA傳輸完畢之后,如果目的地址是內(nèi)存地址,需要調(diào)用cacheInvalidate()函數(shù)將Cache中的數(shù)據(jù)置為無效,保證將來CPU訪問數(shù)據(jù)時,獲取的是內(nèi)存中的新值,而不是Cache中的舊值。

      4 安全的DMA傳輸設(shè)計

      在CPU與外設(shè)通過PCI總線互聯(lián)的某存儲器模塊上,需要進行DMA傳輸設(shè)計,方法1和2的總體性能都不高,不宜采用。因為系統(tǒng)發(fā)起讀寫請求時,極可能使用不可Cache內(nèi)存作為數(shù)據(jù)緩沖區(qū),無法采用方法3,所以只能采用方法4。

      對于Cache操作是以塊(Cache行)為單位的,盡管操作系統(tǒng)中提供了刷新Cache和Cache無效的程序,但還是存在邊界問題和對齊問題。如PowerPC處理器以32字節(jié)為一個Cache行,調(diào)用cacheFlush()和cacheInvalidate()函數(shù)只能保證按Cache行對齊時的數(shù)據(jù)一致性,與現(xiàn)實情況還有一定的差異。

      安全的DMA傳輸通過以下幾個方面來保證。

      1)DMA控制器要求進行DMA傳輸?shù)脑吹刂?、目的地址和傳送長度都必須按8字節(jié)對齊。所以硬件設(shè)計上,PCI(PCIe設(shè)備兼容PCI)空間的數(shù)據(jù)緩沖區(qū)起始地址按8字節(jié)對齊,同時設(shè)備支持8字節(jié)對齊的Burst訪問。

      2)通過文件系統(tǒng)的配置修改,使得內(nèi)存中數(shù)據(jù)緩沖頁的起始地址按照8字節(jié)地址對齊。

      3)在啟動DMA傳送前和結(jié)束DMA傳送后,對于內(nèi)存數(shù)據(jù)緩沖頁中32字節(jié)對齊部分調(diào)用cacheFlush()刷新或者調(diào)用cacheInvalidate()無效,并且對內(nèi)存數(shù)據(jù)緩沖頁前后非32字節(jié)對齊處做Cache一致性的保護處理,如圖4所示。

      圖4 安全的DMA傳輸

      參考文獻

      [1]鄭緯民,湯志忠.計算機系統(tǒng)結(jié)構(gòu)(第二版)[M].北京:清華大學(xué)出版社,1998.

      [2]張晨曦,等.計算機體系結(jié)構(gòu)[M].北京:高等教育出版社,2000.

      [3]武楊.高速緩沖存儲器Cache設(shè)計的關(guān)鍵技術(shù)分析[J].中國科技信息,2006(7).

      [4]胡彧,柴華.Cache一致性機制及其相關(guān)研究[J].科技情報開發(fā)與經(jīng)濟,2008(17).

      作者簡介

      曹彥榮(1983-),男,山西臨汾人,工程師,本科,研究方向:計算機硬件設(shè)計。endprint

      圖3 Cache一致性問題

      解決數(shù)據(jù)傳輸時的Cache一致性主要有以下幾個方法。

      1)采用按字傳輸。在內(nèi)存和外設(shè)之間傳輸數(shù)據(jù)時,不用DMA方式,采取按字傳輸,典型的做法就是調(diào)用memcpy()函數(shù)。配置好Cache模式(寫直達法或?qū)懟胤ǎ?,Cache對程序員來說是透明的,所有訪問也是安全的。該方案屬于PIO方式,缺點是,首先,傳輸?shù)男什蝗鏒MA方式快;其次,整個傳輸過程需要CPU全程參與,CPU無法執(zhí)行其它任務(wù),對系統(tǒng)性能有很大影響。

      2)關(guān)閉數(shù)據(jù)Cache。關(guān)閉系統(tǒng)的數(shù)據(jù)Cache,只使能指令Cache,這也是一種很有效的做法。CPU在讀寫數(shù)據(jù)時,都直接從內(nèi)存讀取或直接寫入內(nèi)存,數(shù)據(jù)不一致的現(xiàn)象自然也就消除了。由此帶來的缺點也顯而易見,CPU執(zhí)行指令的速度和訪存速度嚴重不匹配,導(dǎo)致系統(tǒng)性能很差勁。

      3)不可Cache內(nèi)存的DMA傳輸。在操作系統(tǒng)啟動時,會將內(nèi)存配置成可Cache內(nèi)存和不可Cache內(nèi)存兩種。前者可以映射到Cache中,后者不可以。CPU每次讀寫不可Cache內(nèi)存時,都會發(fā)生Cache不命中,進而直接訪問內(nèi)存,當(dāng)然這塊內(nèi)存也無法在Cache中形成副本。對于不可Cache內(nèi)存,在DMA傳輸前后不會出現(xiàn)Cache一致性問題,因此不可Cache內(nèi)存也被稱為Cache-safe內(nèi)存。VxWorks操作系統(tǒng)中可以使用cacheDmaMalloc()函數(shù)來分配不可Cache內(nèi)存。

      4)可Cache內(nèi)存的DMA傳輸。使用可Cache內(nèi)存進行DMA傳輸之前,如果源地址是內(nèi)存地址,先調(diào)用cacheFlush()函數(shù)將Cache中的數(shù)據(jù)刷新到內(nèi)存中,保證DMA傳輸?shù)氖荂ache中的新值,而不是內(nèi)存中的舊值。DMA傳輸完畢之后,如果目的地址是內(nèi)存地址,需要調(diào)用cacheInvalidate()函數(shù)將Cache中的數(shù)據(jù)置為無效,保證將來CPU訪問數(shù)據(jù)時,獲取的是內(nèi)存中的新值,而不是Cache中的舊值。

      4 安全的DMA傳輸設(shè)計

      在CPU與外設(shè)通過PCI總線互聯(lián)的某存儲器模塊上,需要進行DMA傳輸設(shè)計,方法1和2的總體性能都不高,不宜采用。因為系統(tǒng)發(fā)起讀寫請求時,極可能使用不可Cache內(nèi)存作為數(shù)據(jù)緩沖區(qū),無法采用方法3,所以只能采用方法4。

      對于Cache操作是以塊(Cache行)為單位的,盡管操作系統(tǒng)中提供了刷新Cache和Cache無效的程序,但還是存在邊界問題和對齊問題。如PowerPC處理器以32字節(jié)為一個Cache行,調(diào)用cacheFlush()和cacheInvalidate()函數(shù)只能保證按Cache行對齊時的數(shù)據(jù)一致性,與現(xiàn)實情況還有一定的差異。

      安全的DMA傳輸通過以下幾個方面來保證。

      1)DMA控制器要求進行DMA傳輸?shù)脑吹刂?、目的地址和傳送長度都必須按8字節(jié)對齊。所以硬件設(shè)計上,PCI(PCIe設(shè)備兼容PCI)空間的數(shù)據(jù)緩沖區(qū)起始地址按8字節(jié)對齊,同時設(shè)備支持8字節(jié)對齊的Burst訪問。

      2)通過文件系統(tǒng)的配置修改,使得內(nèi)存中數(shù)據(jù)緩沖頁的起始地址按照8字節(jié)地址對齊。

      3)在啟動DMA傳送前和結(jié)束DMA傳送后,對于內(nèi)存數(shù)據(jù)緩沖頁中32字節(jié)對齊部分調(diào)用cacheFlush()刷新或者調(diào)用cacheInvalidate()無效,并且對內(nèi)存數(shù)據(jù)緩沖頁前后非32字節(jié)對齊處做Cache一致性的保護處理,如圖4所示。

      圖4 安全的DMA傳輸

      參考文獻

      [1]鄭緯民,湯志忠.計算機系統(tǒng)結(jié)構(gòu)(第二版)[M].北京:清華大學(xué)出版社,1998.

      [2]張晨曦,等.計算機體系結(jié)構(gòu)[M].北京:高等教育出版社,2000.

      [3]武楊.高速緩沖存儲器Cache設(shè)計的關(guān)鍵技術(shù)分析[J].中國科技信息,2006(7).

      [4]胡彧,柴華.Cache一致性機制及其相關(guān)研究[J].科技情報開發(fā)與經(jīng)濟,2008(17).

      作者簡介

      曹彥榮(1983-),男,山西臨汾人,工程師,本科,研究方向:計算機硬件設(shè)計。endprint

      圖3 Cache一致性問題

      解決數(shù)據(jù)傳輸時的Cache一致性主要有以下幾個方法。

      1)采用按字傳輸。在內(nèi)存和外設(shè)之間傳輸數(shù)據(jù)時,不用DMA方式,采取按字傳輸,典型的做法就是調(diào)用memcpy()函數(shù)。配置好Cache模式(寫直達法或?qū)懟胤ǎ珻ache對程序員來說是透明的,所有訪問也是安全的。該方案屬于PIO方式,缺點是,首先,傳輸?shù)男什蝗鏒MA方式快;其次,整個傳輸過程需要CPU全程參與,CPU無法執(zhí)行其它任務(wù),對系統(tǒng)性能有很大影響。

      2)關(guān)閉數(shù)據(jù)Cache。關(guān)閉系統(tǒng)的數(shù)據(jù)Cache,只使能指令Cache,這也是一種很有效的做法。CPU在讀寫數(shù)據(jù)時,都直接從內(nèi)存讀取或直接寫入內(nèi)存,數(shù)據(jù)不一致的現(xiàn)象自然也就消除了。由此帶來的缺點也顯而易見,CPU執(zhí)行指令的速度和訪存速度嚴重不匹配,導(dǎo)致系統(tǒng)性能很差勁。

      3)不可Cache內(nèi)存的DMA傳輸。在操作系統(tǒng)啟動時,會將內(nèi)存配置成可Cache內(nèi)存和不可Cache內(nèi)存兩種。前者可以映射到Cache中,后者不可以。CPU每次讀寫不可Cache內(nèi)存時,都會發(fā)生Cache不命中,進而直接訪問內(nèi)存,當(dāng)然這塊內(nèi)存也無法在Cache中形成副本。對于不可Cache內(nèi)存,在DMA傳輸前后不會出現(xiàn)Cache一致性問題,因此不可Cache內(nèi)存也被稱為Cache-safe內(nèi)存。VxWorks操作系統(tǒng)中可以使用cacheDmaMalloc()函數(shù)來分配不可Cache內(nèi)存。

      4)可Cache內(nèi)存的DMA傳輸。使用可Cache內(nèi)存進行DMA傳輸之前,如果源地址是內(nèi)存地址,先調(diào)用cacheFlush()函數(shù)將Cache中的數(shù)據(jù)刷新到內(nèi)存中,保證DMA傳輸?shù)氖荂ache中的新值,而不是內(nèi)存中的舊值。DMA傳輸完畢之后,如果目的地址是內(nèi)存地址,需要調(diào)用cacheInvalidate()函數(shù)將Cache中的數(shù)據(jù)置為無效,保證將來CPU訪問數(shù)據(jù)時,獲取的是內(nèi)存中的新值,而不是Cache中的舊值。

      4 安全的DMA傳輸設(shè)計

      在CPU與外設(shè)通過PCI總線互聯(lián)的某存儲器模塊上,需要進行DMA傳輸設(shè)計,方法1和2的總體性能都不高,不宜采用。因為系統(tǒng)發(fā)起讀寫請求時,極可能使用不可Cache內(nèi)存作為數(shù)據(jù)緩沖區(qū),無法采用方法3,所以只能采用方法4。

      對于Cache操作是以塊(Cache行)為單位的,盡管操作系統(tǒng)中提供了刷新Cache和Cache無效的程序,但還是存在邊界問題和對齊問題。如PowerPC處理器以32字節(jié)為一個Cache行,調(diào)用cacheFlush()和cacheInvalidate()函數(shù)只能保證按Cache行對齊時的數(shù)據(jù)一致性,與現(xiàn)實情況還有一定的差異。

      安全的DMA傳輸通過以下幾個方面來保證。

      1)DMA控制器要求進行DMA傳輸?shù)脑吹刂?、目的地址和傳送長度都必須按8字節(jié)對齊。所以硬件設(shè)計上,PCI(PCIe設(shè)備兼容PCI)空間的數(shù)據(jù)緩沖區(qū)起始地址按8字節(jié)對齊,同時設(shè)備支持8字節(jié)對齊的Burst訪問。

      2)通過文件系統(tǒng)的配置修改,使得內(nèi)存中數(shù)據(jù)緩沖頁的起始地址按照8字節(jié)地址對齊。

      3)在啟動DMA傳送前和結(jié)束DMA傳送后,對于內(nèi)存數(shù)據(jù)緩沖頁中32字節(jié)對齊部分調(diào)用cacheFlush()刷新或者調(diào)用cacheInvalidate()無效,并且對內(nèi)存數(shù)據(jù)緩沖頁前后非32字節(jié)對齊處做Cache一致性的保護處理,如圖4所示。

      圖4 安全的DMA傳輸

      參考文獻

      [1]鄭緯民,湯志忠.計算機系統(tǒng)結(jié)構(gòu)(第二版)[M].北京:清華大學(xué)出版社,1998.

      [2]張晨曦,等.計算機體系結(jié)構(gòu)[M].北京:高等教育出版社,2000.

      [3]武楊.高速緩沖存儲器Cache設(shè)計的關(guān)鍵技術(shù)分析[J].中國科技信息,2006(7).

      [4]胡彧,柴華.Cache一致性機制及其相關(guān)研究[J].科技情報開發(fā)與經(jīng)濟,2008(17).

      作者簡介

      曹彥榮(1983-),男,山西臨汾人,工程師,本科,研究方向:計算機硬件設(shè)計。endprint

      富锦市| 铁岭市| 千阳县| 得荣县| 图木舒克市| 北辰区| 济宁市| 梧州市| 隆尧县| 邓州市| 石林| 海晏县| 甘洛县| 凤冈县| 丰原市| 潞西市| 尼玛县| 喜德县| 建昌县| 吴桥县| 清苑县| 斗六市| 堆龙德庆县| 西畴县| 万源市| 岳阳县| 江永县| 兴义市| 涡阳县| 固阳县| 马尔康县| 邹平县| 霍邱县| 邵东县| 利辛县| 绥宁县| 广河县| 永登县| 肇东市| 海南省| 泗水县|