訪問文件的操作主要是指讀文件和寫文件,下文簡單說明內核中幾種常見的訪問文件的方式。
普通模式
讀寫系統調用的默認方式。以讀系統調用為例,默認情況下讀函數以阻塞的形式訪問數據,並且使用了內核的頁高速緩存機制。而寫函數則直接將修改後的數據寫入頁高速緩存就返回。此時O_SYNC和O_DIRECT兩個標志均被置0。
同步模式
同步模式主要是指進程將阻塞到數據請求完成為止,但是讀操作默認情況下即為阻塞方式,因此該模式主要針對寫函數,此時O_SYNC標志被置1,寫函數並不是將頁高速緩存中的數據修改後就立馬返回,而是直到相應數據被寫入磁盤後才返回。
直接I/O模式
該模式下的讀寫操作並不會使用內核中的頁高速緩存機制,而是在用戶地址空間和磁盤之間直接進行數據傳送。此時O_DIRECT標志被置1。
異步模式
異步模式需要使用特定的系統調用來完成,比如aio_read和aio_write。異步模式是指進程在發出數據請求後並不需要以阻塞的方式等待數據,而是立即返回繼續執行其他操作,數據的請求工作在後台自動完成。
內存映射模式
內存映射方式和傳統意義上的讀寫系統調用不同,它將磁盤上的文件映射到進程用戶空間的一塊虛擬內存中,這樣對該文件的操作就可以轉化為對內存的操作。通過mmap()就可以實現內存映射。