2013-10-12 69 views
0

我建立我自己的虛擬文件系統C.如何實現defragmantation樣的方法在文件系統

現在我想實現某種defragmantation方法,它查找差距和關閉它們。

所以,如果文件1的大小爲10和位置X和文件2的大小爲20和位置的Z,我想讓它變得移動到位置Y.

現在我的想法是把文件的大小2 ,將其從文件1的大小中減去,並使用結果將文件2向左移動至與結果一樣高。

我有一個僞代碼,因爲我不能拿出一個工作液:

for (int i = 0; i < files; i++) 
    //look for inconsistencies/gaps. 

if (found gaps) 
    file 2 - file 1 = x; 
    shiftfiletotheleft x bytes; 

感謝思路和答案提前。

+0

「我如何爲我發明的虛擬文件系統實現碎片整理」在這裏超出了範圍。嘗試詢問Google如何進行碎片整理。 –

回答

0

樸素碎片是相當簡單的,假設disk[n]Ñ個塊和files是該組中的所有文件的(或更確切地說,它們佔據的塊),包括對所有剩餘塊僞文件:

i = 0 
for file in files: 
    for blocknum in file: 
    // Swap content 
    buf = disk[i] 
    disk[i] = disk[blocknum] 
    disk[blocknum] = buf 

    // Swap metadata 
    swap_block(file, blocknum, i) 
    file += i 
    changed_file = find_file_by_block(blocknum) 
    swap_block(changed_file, i, blocknum) 

    i += 1 

請注意,各種優化是可能的,並且對於良好的用戶體驗是必需的。例如,由於無論如何您都需要通過塊號查找文件,因此您可以通過始終選取當前正在檢查的塊所屬的文件來防止對已經過整理的文件系統進行重新排序。此外,如果您正在交換的文件爲空,則您可以通過實際上不復制內容來簡化交換,並且如果blocknumi完全相同,則完全跳過交換操作。

如何將僞代碼轉換爲C代碼完全取決於您的實現。