幾種訪問檔案的方式。

2021-09-25 22:02:26 字數 1881 閱讀 4394

我們知道,讀取和寫入檔案i/o操作都呼叫作業系統提供的介面,因為磁碟裝置是由作業系統管理的,應用程式要訪問物理裝置只能通過系統呼叫的方式來工作。讀和寫分別對應read()和write()兩個系統呼叫。而只要是系統呼叫就可能存在核心空間位址和使用者空間位址切換的問題,這是作業系統為了保護系統本身的執行安全,而將核心程式執行使用的記憶體空間和使用者程式執行的記憶體空間進行隔離造成的。但是這樣雖然保證了核心程式執行的安全性,但是也必然存在資料可能需要從核心空間向使用者空間複製的問題。

如果遇到非常耗時的操作,如磁碟i/o,資料從磁碟複製到核心空間,然後又從核心空間複製到使用者空間,將會非常快取。這時作業系統為了加速i/o訪問,在核心空間使用快取機制,也就是將從磁碟讀取的檔案按照一定的組織方式進行快取,如果使用者程式訪問的是同一段磁碟位址的空間資料,那麼作業系統將從核心快取中直接取出返回給使用者程式,這樣可以減少i/o的響應時間。

標準訪問檔案的方式就是當應用程式呼叫read()介面時,作業系統檢查在核心的告訴快取中有沒有需要的資料,如果已經快取了,那麼就直接從快取中返回,如果沒有,則從磁碟中讀取,然後快取在作業系統的快取中。

寫入的方式是,使用者的應用程式呼叫write()介面將資料從使用者位址空間複製到核心位址空間的快取中。這時對使用者程式來說寫操作就已經完成,之於什麼時候再寫到磁碟中由作業系統決定,除非顯式的呼叫了sync同步命令。

標準訪問檔案的方式如下圖所示。

所謂的直接i/o的方式就是應用程式直接訪問磁碟資料,而不經過作業系統核心資料快取區,這樣做的目的就是減少一次從核心緩衝區到使用者程式快取的資料複製。這種訪問檔案的方式通常是在對資料的快取管理由應用程式實現的資料庫管理系統中。如在資料庫管理系統中,系統明確的知道應該快取哪些資料,應該失效哪些資料,還可以對一些熱點資料做預載入,提前將熱點資料載入到記憶體,可以加速資料的訪問效率。在這些情況下,如果是由作業系統進行快取,則很難做到,因為作業系統並不知道哪些是熱點資料,哪些資料可能只會訪問一次就不會再訪問,作業系統只是簡單的快取在最近一次從磁碟讀取的資料。

但是直接i/o也有負面影響,如果訪問的資料不在應用程式快取中,那麼每次資料都會直接從磁碟進行載入,這種直接載入會非常緩慢。通常直接i/o與非同步i/o結合使用,會得到比較好的效能。

直接i/o的方式如下圖所示。

同步訪問檔案的方式比較容易理解,就是資料的讀取和寫入都是同步操作的,他與標準訪問檔案的方式不同的是,只有當資料被成功寫到磁碟時才返回給應用程式成功的標誌。

這種訪問檔案的方式效能比較差,只有在一些對資料安全性要求比較高的場景中才會使用,而且通常這種操作方式的硬體都是定製的。

同步訪問檔案的方式如下圖所示。

非同步訪問檔案的方式就是當訪問資料的執行緒發出請求之後,執行緒會接著去處理其他事情,而不是阻塞等待,當請求的資料返回後繼續處理下面的操作。這種訪問檔案的方式可以明顯的提高應用程式的效率,但是不會改變訪問檔案的效率。

非同步訪問檔案的方式如下圖所示。

記憶體對映的方式是指作業系統將記憶體中的某一塊區域與磁碟中的檔案關聯起來,當要求訪問記憶體中的一段資料時,轉換為訪問檔案的某一段資料。這種方式的目的同樣是減少資料從核心空間快取到使用者空間快取的資料複製操作,因為這兩個空間的資料是共享的。

記憶體對映的方式如下圖所示。

磁碟I O中幾種訪問檔案的方式

我們知道,讀取和寫入檔案i o操作都呼叫作業系統提供的介面,因為磁碟裝置是由作業系統管理的,應用程式要訪問物理裝置只能通過作業系統呼叫的方式工作。讀和寫對應read 和write 兩個系統呼叫。下面是幾種訪問檔案的方式 當應用程式呼叫read 介面時,作業系統檢查在核心的快取記憶體中有沒有需要的資料...

osgearth訪問幾種資料的幾種方式

原文章 osgearth訪問資料分類方式可以分為使用earth檔案載入和通過程式載入。1.earth檔案方式比較簡單方便 只要掌握一定的格式就能訪問各種資料,下面就給出乙個例子 訪問網上的arcgis server 資料的例子 tile 100 0 0.jpegata image false 9非常...

C 訪問Oracle的幾種方式

net c 程式設計過程中,使用到了以下三種免安裝的oracle訪問元件,能夠不安裝oracle客戶端,通過這些元件訪問oracle資料庫 1 oracle data provider for net,managed driver oracle官方的託管資料庫訪問元件,單dll,oracle.man...