999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

DMA傳輸與Cache一致性分析

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

曹彥榮 張銳

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

關鍵詞 DMA;Cache;數據一致性

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

1 概述

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

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

2 Cache工作原理

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

圖1 Cache的基本結構

2.1 Cache存儲體

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

2.2 地址映射變換機構

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

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

2.3 替換機構

當Cache內容已滿,無法接受來自主存塊的信息時,就由Cache內的替換機構按一定的替換算法來確定應從Cache內移出哪個塊返回主存,而把新的主存塊調入Cache。常用的替換算法有RAND、FIFO、LFU、LRU和OPT等。

2.4 Cache的讀寫操作

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

圖2 Cache讀操作過程

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

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

寫回法,數據每次只是暫時寫入Cache中,并用標志標明,直到該塊被替換出Cache時,才寫入主存,優勢是速度快。

2.5 Cache的改進

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

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

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

3 DMA傳輸Cache一致性問題

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

在沒有DMA傳輸的系統中,只有CPU修改內存數據,采用寫直達法或寫回法使得CPU讀寫時Cache對于程序員是透明的,數據始終一致。但是加入DMA控制器之后情況就變得復雜了,如圖3所示,假設DMA控制器將IO設備中的數據傳送至內存,這時內存中變量A已經更新,但Cache中變量A的值不變。將來的某個時刻,CPU要訪問變量A,明明A的值已經更新,卻命中Cache獲取了舊值,發生了數據不一致現象。endprint

圖3 Cache一致性問題

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

1)采用按字傳輸。在內存和外設之間傳輸數據時,不用DMA方式,采取按字傳輸,典型的做法就是調用memcpy()函數。配置好Cache模式(寫直達法或寫回法),Cache對程序員來說是透明的,所有訪問也是安全的。該方案屬于PIO方式,缺點是,首先,傳輸的效率不如DMA方式快;其次,整個傳輸過程需要CPU全程參與,CPU無法執行其它任務,對系統性能有很大影響。

2)關閉數據Cache。關閉系統的數據Cache,只使能指令Cache,這也是一種很有效的做法。CPU在讀寫數據時,都直接從內存讀取或直接寫入內存,數據不一致的現象自然也就消除了。由此帶來的缺點也顯而易見,CPU執行指令的速度和訪存速度嚴重不匹配,導致系統性能很差勁。

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

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

4 安全的DMA傳輸設計

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

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

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

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

2)通過文件系統的配置修改,使得內存中數據緩沖頁的起始地址按照8字節地址對齊。

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

圖4 安全的DMA傳輸

參考文獻

[1]鄭緯民,湯志忠.計算機系統結構(第二版)[M].北京:清華大學出版社,1998.

[2]張晨曦,等.計算機體系結構[M].北京:高等教育出版社,2000.

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

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

作者簡介

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

圖3 Cache一致性問題

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

1)采用按字傳輸。在內存和外設之間傳輸數據時,不用DMA方式,采取按字傳輸,典型的做法就是調用memcpy()函數。配置好Cache模式(寫直達法或寫回法),Cache對程序員來說是透明的,所有訪問也是安全的。該方案屬于PIO方式,缺點是,首先,傳輸的效率不如DMA方式快;其次,整個傳輸過程需要CPU全程參與,CPU無法執行其它任務,對系統性能有很大影響。

2)關閉數據Cache。關閉系統的數據Cache,只使能指令Cache,這也是一種很有效的做法。CPU在讀寫數據時,都直接從內存讀取或直接寫入內存,數據不一致的現象自然也就消除了。由此帶來的缺點也顯而易見,CPU執行指令的速度和訪存速度嚴重不匹配,導致系統性能很差勁。

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

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

4 安全的DMA傳輸設計

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

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

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

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

2)通過文件系統的配置修改,使得內存中數據緩沖頁的起始地址按照8字節地址對齊。

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

圖4 安全的DMA傳輸

參考文獻

[1]鄭緯民,湯志忠.計算機系統結構(第二版)[M].北京:清華大學出版社,1998.

[2]張晨曦,等.計算機體系結構[M].北京:高等教育出版社,2000.

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

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

作者簡介

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

圖3 Cache一致性問題

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

1)采用按字傳輸。在內存和外設之間傳輸數據時,不用DMA方式,采取按字傳輸,典型的做法就是調用memcpy()函數。配置好Cache模式(寫直達法或寫回法),Cache對程序員來說是透明的,所有訪問也是安全的。該方案屬于PIO方式,缺點是,首先,傳輸的效率不如DMA方式快;其次,整個傳輸過程需要CPU全程參與,CPU無法執行其它任務,對系統性能有很大影響。

2)關閉數據Cache。關閉系統的數據Cache,只使能指令Cache,這也是一種很有效的做法。CPU在讀寫數據時,都直接從內存讀取或直接寫入內存,數據不一致的現象自然也就消除了。由此帶來的缺點也顯而易見,CPU執行指令的速度和訪存速度嚴重不匹配,導致系統性能很差勁。

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

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

4 安全的DMA傳輸設計

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

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

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

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

2)通過文件系統的配置修改,使得內存中數據緩沖頁的起始地址按照8字節地址對齊。

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

圖4 安全的DMA傳輸

參考文獻

[1]鄭緯民,湯志忠.計算機系統結構(第二版)[M].北京:清華大學出版社,1998.

[2]張晨曦,等.計算機體系結構[M].北京:高等教育出版社,2000.

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

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

作者簡介

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

主站蜘蛛池模板: 婷婷激情五月网| 特级毛片8级毛片免费观看| 黄片在线永久| 欧美视频在线观看第一页| 91久久夜色精品国产网站| 色婷婷成人| 亚洲第一香蕉视频| 日日摸夜夜爽无码| 99热免费在线| 免费一级全黄少妇性色生活片| 日韩久久精品无码aV| 国产91丝袜在线播放动漫| 丰满人妻被猛烈进入无码| 黄色网页在线播放| 欧美一级视频免费| 国产在线精品美女观看| 久久精品娱乐亚洲领先| 中国成人在线视频| 亚洲无码免费黄色网址| 亚洲最大看欧美片网站地址| 国内精品视频在线| 成人字幕网视频在线观看| 日本欧美一二三区色视频| 国产一区亚洲一区| 午夜a级毛片| 国产精品毛片一区视频播| 天堂av高清一区二区三区| 亚洲成综合人影院在院播放| 成人午夜视频网站| 亚洲成人精品在线| 日本AⅤ精品一区二区三区日| 先锋资源久久| 免费一级毛片在线播放傲雪网| 亚洲欧美日韩中文字幕在线| 婷婷激情五月网| 国产在线欧美| 日韩欧美国产成人| 亚洲天堂区| 国产本道久久一区二区三区| 欧美一级在线| 区国产精品搜索视频| 高清无码不卡视频| 99re精彩视频| 亚洲天堂精品在线| 成年片色大黄全免费网站久久| 欧美成人a∨视频免费观看| 日本高清免费不卡视频| 国产精品专区第一页在线观看| 在线欧美日韩国产| 99久久精品无码专区免费| 91久久青青草原精品国产| 久久国语对白| 国产在线自在拍91精品黑人| 色婷婷在线影院| 91青青草视频| 久久亚洲精少妇毛片午夜无码 | 欧美三级日韩三级| 久久久久亚洲AV成人网站软件| 国产特级毛片| 色噜噜狠狠狠综合曰曰曰| 久久久久中文字幕精品视频| 黄色三级毛片网站| 四虎永久在线精品国产免费| 美美女高清毛片视频免费观看| 一级毛片免费不卡在线| 久久青草免费91线频观看不卡| 国产精品对白刺激| 亚洲无码高清一区二区| 国产欧美日韩精品第二区| 毛片久久网站小视频| 国产亚洲成AⅤ人片在线观看| 亚洲精品无码AV电影在线播放| 国产精品成人久久| 欧美成人综合视频| 中文字幕在线日韩91| 成人在线不卡视频| 国产精品大白天新婚身材| 国产精品视频观看裸模| 91青青视频| 91区国产福利在线观看午夜| 国产午夜人做人免费视频| 高清无码不卡视频|