2014-01-29 23 views
1

我正在玩一個我寫的簡單緩存模擬器,我想知道是否可以通過Linux手動分配虛擬頁面,以便測試衝突方式。我知道這是值得懷疑的,甚至可能不是Linux設計中考慮的事情,而且顯然更容易以不同的方式測試它(只是傳遞一個地址值),但我只是認爲我會拋出這個質疑我自己的好奇心。你能在Linux中手動分配虛擬頁面嗎?

我會是這樣的:

char *p1 = (char *)SomeLiteral; 
*p1 = value1; 
dcache.writeback(p1); 

char *p2 = (char *)ADifferentLiteral; 
*p2 = value2; 
//may map to same set index and be brought to second way 
dcache.writeback(p2); 

這可能會在某些嵌入式系統工作,但它顯然Linux下將頁面錯誤。那麼,有沒有辦法爲p1和p2分配一個虛擬頁面?甚至爲程序的堆設置虛擬地址?

我很抱歉,如果這聽起來很鈍,謝謝!

+0

瞭解[mmap(2)](http://man7.org/linux/man-pages/man2/mmap.2.html)並閱讀[高級Linux編程](http://advancedlinuxprogramming.com/) ) –

+0

@BasileStarynkevitch這對他有什麼幫助?看來他想要避免頁面錯誤,而要做到這一點的方法是觸摸每個頁面,以強制將物理內存分配給虛擬頁面。 –

+0

另請參閱[madvise(2)](http://man7.org/linux/man-pages/man2/madvise.2.html)&[mlock(2)](http://man7.org/linux/ man-pages/man2/mlock.2.html) –

回答

0

如果您希望它分配物理頁面,那麼只需通過向其寫入一個值來觸摸每個頁面即可。假設你需要預先分配1024個4k頁面,然後調用malloc,然後以4k步進地址,並在每個地址寫入一個值。