1樓:企業管理學習
這個只能自己弄, 建議自己寫乙個函式, 思路:讀取一次你申請的版dma記憶體,並計算它的md5, 下次權當你需要判斷記憶體是否改變的時候再次讀取記憶體並獲取md5 如果兩次md5不一樣的時候,那麼,記憶體一定是被修改了
對於沒有cache一致性的cpu,dma 訪問記憶體的時候又應該做哪些操作
2樓:匿名使用者
cache原理
cpu快取(cache memory)是位於cpu與記憶體之間的臨時儲存器,它的容量比記憶體小的多但是交換速度卻比記憶體要快得多。快取的出現主要是為了解決cpu運算速度與記憶體 讀寫速度不匹配的矛盾,因為cpu運算速度要比記憶體讀寫速度快很多,這樣會使cpu花費很長時間等待資料到來或把資料寫入記憶體。在快取中的資料是記憶體中的 一小部分,但這一小部分是短時間內cpu即將訪問的,當cpu呼叫大量資料時,就可避開記憶體直接從快取中呼叫,從而加快讀取速度。
只要cache的空間與主存空間在一定範圍內保持適當比例的對映關係,cache的命中率還是相當高的。一般規定cache與記憶體的空間比為4:1000,即128kb cache可對映32mb記憶體;256kb cache可對映64mb記憶體。
在這種情況下。命中率都在90%以上。至於沒有命中的資料,cpu只好直接從記憶體獲取。
獲取的同時,也把它拷進cache。
cache一致性問題
由於快取存在於cpu與記憶體中間,所以任何外設對記憶體的修改並不能保證cache中也得到同樣的更新,同樣處理器對快取中內容的修改也不能保證記憶體中的資料 得到更新。這種快取中資料與記憶體中資料的不同步和不一致現象將可能導致使用dma 傳輸資料時 或 處理器執行自修改**時產生錯誤。
cache的一致性就是直cache中的資料,與對應的記憶體中的資料是一致的。
cache的基本結構
cache通常由相聯儲存器實現。相聯儲存器的每乙個儲存塊都具有額外的儲存資訊,稱為標籤(tag)。當訪問相聯儲存器時,將位址和每乙個標籤同時進行比較,從而對標籤相同的儲存塊進行訪問。
cache的3種基本結構如下:
全相聯cache
在全相聯cache中,儲存的塊與塊之間。以及儲存順序或儲存的儲存器位址之間沒有直接的關係。程式可以訪問很多的子程式、堆疊和段,而它們是位於主儲存器的不同部位上。
因此。cache儲存著很多互不相關的資料塊。
cache必須對每個塊和塊自身的位址加以儲存。當請求資料時,cache控制器要把請求位址同所有位址加以比較進行確認。
這種cache結構的主要優點是。
它能夠在給定的時間內去儲存主存器中的不同的塊,命中率高;缺點是每一次請求資料同cache中的位址進行比較需要相當的時間,速度較慢。
直接映像cache
直接映像cache不同於全相聯cache。位址僅需比較一次。
在直接映像cache中。由於每個主儲存器的塊在cache中僅存在乙個位置,因而把位址的比較次數減少為一次。其做法是,為cache中的每個塊位置分配乙個索引字段,用tag欄位區分存放在cache位置上的不同的塊。
單路直接映像把主儲存器分成若干頁。主儲存器的每一頁與cache儲存器的大小相同。匹配的主儲存器的偏移量可以直接映像為cache偏移量。
cache的tag儲存器(偏移量)儲存著主儲存器的頁位址(頁號)。
以上可以看出。直接映像cache優於全相聯cache,能進行快速查詢,其缺點是當主儲存器的組之間做頻繁呼叫時,cache控制器必須做多次轉換。
組相聯cache
組相聯cache是介於全相聯cache和直接映像cache之間的一種結構。這種型別的cache使用了幾組直接映像的塊。對於某乙個給定的索引號,可以允許有幾個塊位置。
因而可以增加命中率和系統效率。
cache與dram訪問的一致性
在cpu與主存之間增加了cache之後,便存在資料在cpu和cache及主存之間如何訪問的問題。讀寫各有2種方式。
貫穿讀出式(look through)
該方式將cache隔在cpu與主存之間,cpu對主存的所有資料請求都首先送到cache,由cache自行在自身查詢。如果命中。 則切斷cpu對主存的請求,並將資料送出;不命中。
則將資料請求傳給主存。
該方法的優點是降低了cpu對主存的請求次數,缺點是延遲了cpu對主存的訪問時間。
旁路讀出式(look aside)
在這種方式中,cpu發出資料請求時,並不是單通道地穿過cache。而是向cache和主存同時發出請求。由於cache速度更快,如果命中,則cache在將資料回送給cpu的同時,還來得及中斷cpu對主存的請求;不命中。
則cache不做任何動作。由cpu直接訪問主存。它的優點是沒有時間延遲,缺點是每次cpu對主存的訪問都存在,這樣。
就佔用了一部分匯流排時間。
寫穿式(write through)
任一從cpu發出的寫訊號送到cache的同時,也寫入主存,以保證主存的資料能同步地更新。它的優點是操作簡單,但由於主存的慢速,降低了系統的寫速度並佔用了匯流排的時間。
回寫式(copy back)
為了克服貫穿式中每次資料寫入時都要訪問主存。從而導致系統寫速度降低並佔用匯流排時間的弊病,儘量減少對主存的訪問次數,又有了回寫式。
它是這樣工作的:資料一般只寫到cache,這樣有可能出現cache中的資料得到更新而主存中的資料不變(資料陳舊)的情況。但此時可在cache 中設一標誌位址及資料陳舊的資訊。
只有當cache中的資料被再次更改時。才將原更新的資料寫入主存相應的單元中,然後再接受再次更新的資料。這樣保證了cache和主存中的資料不致產生衝突。
cache與dma的一致性問題
在進行dma 操作時,如果沒有對cache 進行適當的操作,將可能產生以下兩種錯誤:
1.dma 從外設讀取資料到供處理器使用。dma 將外部資料直接傳到記憶體中,但cache 中仍然保留的是舊資料,這樣處理器在訪問資料時直接訪問快取將得到錯誤的資料。
2.dma 向外設寫入由處理器提供的資料。處理器在處理資料時資料會先存放到cache 中,此時cache 中的資料有可能還沒來得及寫回到記憶體中的資料。
如果這時dma 直接從記憶體中取出資料傳送到外設,外設將可能得到錯誤的資料。
為了正確進行dma 傳輸,必須進行必要的cache 操作。 cache 操作主要分為 invalidate (作廢) 和writeback (寫回) ,有時也將兩著放在一起使用。
dma如果使用cache,那麼一定要考慮cache的一致性。解決dma導致的一致性的方法最簡單的就是禁止dma目標位址範圍內的cache功能。但是這樣就會犧牲效能。
因此在dma是否使用cache的問題上,可以根據dma緩衝區期望保留的的時間長短來決策。dam的對映就分為:一致性dma對映和流式dma對映。
一致性dma對映申請的快取區能夠使用cache,並且保持cache一致性。一致性對映具有很長的生命週期,在這段時間內佔用的對映暫存器,即使不使用也不會釋放。生命週期為該驅動的生命週期。
流式dma對映實現比較複雜。只知道種方式的生命週期比較短,而且禁用cache。一些硬體對流式對映有優化。建立流式dma對映,需要告訴核心資料的流動方向。
1. dma 從外設讀取資料到供處理器使用時,可先進性invalidate 操作。這樣將迫使處理器在讀取cache中的資料時,先從記憶體中讀取資料到快取,保證快取和記憶體中資料的一致性。
2.dma 向外設寫入由處理器提供的資料時,可先進性writeback 操作。這樣可以dma傳輸資料之前先將快取中的資料寫回到記憶體中。
如果不清楚dma 操作的方向,也可先同時進行invalidate 和writeback 操作。操作的結果等同於invalidate 和 writeback 操作效果的和。
wince 作業系統也有一套cache 操作介面:
void oemcacherangeflush( lpvoidpaddr, dword dwlength, dword dwflags );
linux中dma申請空間的疑問
3樓:
多次 kmalloc 是肯定抄不行的,dma 內存在物理上bai要連續.
可以du使用 get_free_pages, 然後使用dma_map_single, dma_map_pages, dma_map_sg將之前分配的記憶體zhi空間映dao射, 但也不會太大。
dma 記憶體不光是申請就可以的,因為傳輸時不經cpu, 所以要對 cache 進行 clean 或 invalidate 操作,上面的方式就不保證 cache 的一致性。
使用 dma_alloc_coherent 申請的保證一致性.
不管那種方式,申請過大記憶體都存在失敗的可能性,不建議一次申請很大記憶體,申請的小點,加大傳輸次數。
盆載鐵樹怎麼分公?怎樣給鐵樹分株啊
鐵樹雌雄開花時間不同 鐵樹雄花的花開時間在每年的6 8月份,花瓣呈散狀,花瓣方向向外舒展。鐵樹雌花的開花時間則是在每年的10 11月份,雌花花瓣則是略微向內收斂。怎樣給鐵樹分株啊?鐵樹分株時把小鐵樹葉剪了能成活,剪除葉片後的小鐵樹等到明年春季會從頂端發芽重新長出新葉片,種植後的小鐵樹澆透水後要等到盆...
怎樣給小孩起名,出生在16時45分的翟
瞿琉怡或者瞿柳怡 父姓,琉同 劉 是同音,意為留住母親劉氏,怡是比較高雅的字,適合女孩取名,又是在十一月出生的,怡 同 一 歆 淇十年寒窗莫問津,九曲寒腸蕩膽心。八斗才識為師授,七尺男郎鴻志尋。六道五府同窗情,四海三江摯友親。兩極離坎巽兌艮,易經八卦震乾坤只有名字才是伴隨 親的一生。起名字應該考慮周...
球形的磁鐵怎麼分南北極,怎樣給球形磁鐵劃分南北極?
它的磁極決定與充磁的那一刻!球形磁體並非磁單極體,對於球形磁體,我們仍然可以找到南極和北極,舉個例子,地球,就是球形磁體了。磁單極體就是跟電子分正負電子一樣分為南極和北極的磁體,磁場線只是進入或者穿出,而淨剩餘量不能為零。近代量子力學預言磁單極的存在,迄今未找到有效的證據,而且一旦找到,經典電磁學理...