問題過於模糊:首先虛擬記憶體無所謂碎片,你說的碎片,是指物理記憶體碎片?還是硬碟碎片?
綜上,你的問題直接回答,虛擬記憶體無所謂是否碎片化,但其背後的物理記憶體和硬碟都存在可能的碎片化問題,尤其對硬碟而言。
問題過於模糊:首先虛擬記憶體無所謂碎片,你說的碎片,是指物理記憶體碎片?還是硬碟碎片?
虛擬記憶體一般來說是足夠大的(跨平臺不考慮段地址,僅線性地址空間已經比較大了,何況現在64位地址空間已經成為主流),而且也不涉及對於效能的影響,所以碎片化問題一般說的不是虛擬記憶體;對於物理記憶體來說,大部分使用場景並不要求連續的物理空間,因為物理地址都會經過MMU硬體晶片的處理,是否是碎片化的物理記憶體對於系統來說並沒有影響,也不會產生效能問題。但有些情況會要求申請連續的物理記憶體,這時候如果碎片化過於嚴重,會影響效能,甚至功能會無法使用,最典型的場景就是DMA傳輸,而很多驅動模組都會用到DMA,比如顯示系統的Framebuffer,FLash驅動、Camera、MMC(SDIO)驅動等等。當然,這些驅動模組很少發生連續物理記憶體無法滿足的情況,是因為它們使用的DMA對應的物理記憶體一般是在啟動時就預留好的,而這時物理記憶體還不會產生碎片化;硬碟的碎片化是碎片化最常見的指向場景,這在傳統的作業系統教程裡已經有不少說明。硬碟的碎片化對效能會有影響,但隨著物理儲存技術的不斷提升,其影響也在降低。具體來說:傳統的硬碟是機械式的,而機械式硬碟最耗時的是磁頭的物理位置調整,可以想見一個檔案的物理儲存區域被打散,訪問其檔案內容要經常調整磁頭位置會多影響效能?這也是電梯排程等演算法的需求來源。但儲存技術也在發展,越來越多的儲存是非機械硬碟,它們的讀寫訪問一般是指令方式,比如對於手機上的eMMC,是透過八根SDIO匯流排來進行讀寫操作,這時候分散的儲存區域對效能的影響就會小一些(但不是沒有,因為分散的儲存區域訪問會導致DMA傳輸過程要分為多次,而每次DMA傳輸需要消耗一定的準備時間)。綜上,你的問題直接回答,虛擬記憶體無所謂是否碎片化,但其背後的物理記憶體和硬碟都存在可能的碎片化問題,尤其對硬碟而言。