2011-07-23 23 views
0

的問題如下: -從磁盤在一個讀離散集合頁轉到

我有擁有龐大的大小(比如一兆兆字節)磁盤上的某個文件,現在我想讀說ñ從最小磁盤讀取次數(或者說我想最小化從磁盤讀取這N個頁面所花費的時間,通過最小化磁盤中的旋轉和查找延遲)從磁盤上的此文件讀取頁面(離散的並且不連續的,具有巨大的分佈) 。理想的情況是,我開始從一個頁面讀取數據,並且在磁盤旋轉結束之前完成所有讀取操作。頁面位置的差異是巨大的,所以我不能簡單地發出一個從第一頁開始到最後一頁的讀命令,覆蓋所有N頁。這將佔用大量的內存來存儲。 (額外 - 我正在通過一些材料,碰到一個數據庫中的「list prefetching」機制。我通讀了它,發現這樣的實現可以解決我的問題。)

有人可以幫我解決這個問題在C語言中?提前致謝!

+1

爲了避免未來的尷尬,「謹慎」是指當你不想讓你的妻子發現; 「離散」是指當您談論不同的不連接部分時。 – unpythonic

回答

1

你將需要像Page replacement algorithm ...與預取...你沒有告訴我們你將如何操作頁面,多久你會需要他們在內存等。但我想你會當內存已滿並且您需要釋放內存中的某些頁面時,必須解決這種情況。看看提及的算法(LRU,MRU等)。這是操作系統用於交換的。

你也可以考慮使用操作系統的內存映射文件 - 他們已經實現了頁面替換算法,但現在不需要預取。 (很好取決於操作系統,我想linux會比這個主題中的Windows更先進)。您可以通過這種方式節省大量工作,但可能不會針對您的情況進行優化。

關於磁盤訪問的優化...嘗試讀一些理論操作系統如何做到這一點...看看磁盤調度算法,如SCANC-SCAN,例如。 at this link

+0

是的我在頁面將要進入的緩衝池中使用時鐘替換算法。但是,如何將謹慎的頁面讀入它們,從而最大限度地減少磁盤訪問? – swanar

+0

OS也解決了這個問題(理論上) - 當有多個磁盤讀取請求時,它應該對它們進行排序以獲得最佳的磁盤讀取順序。但是這也取決於磁盤讀取可以延遲多長時間以等待其他請求。 – TMS

+1

嘗試閱讀一些理論,操作系統如何做...查看磁盤調度算法,如SCAN或C-SCAN,例如。在這裏:http://ecs.victoria.ac.nz/twiki/pub/Courses/COMP305_2009T1/LectureSchedule/18.FileSystems.pdf&ei=JDkrToqWNojKsgaxoMjWCw&usg=AFQjCNE1Y_oW7xsaNKf6n7Skz3a2E-SIPA – TMS