檔案對映,共享記憶體的實現

2021-06-14 08:41:02 字數 639 閱讀 8702

檔案對映:

mmap()實際上是乙個vma的建立過程,分配程序線性區來對映開啟的檔案,把對檔案的讀寫轉為對記憶體的讀寫,在頻繁移動指標讀寫檔案的時候,讀寫效率有很大的提高。

mmap()函式會呼叫特定檔案系統的mmap(),全部執行之後,線性區結構vm_area_struct的vm_file指向對映檔案的檔案物件,vm_pgoff指向對映檔案中的偏移,vm_ops指向相應的線性區方法(其中一項指定了nopage()方法,處理記憶體對映時的請求調頁會呼叫nopage()方法,從

address_space中檢索緩衝頁,不存在則分配頁讀寫檔案(讀檔案到緩衝頁或寫到緩衝頁),如果是匿名線性區,則該項為null)。索引結點和檔案物件的address_space相關項被設定。根據對映型別是私有還是共享,處理會有差異。

共享記憶體:

基於檔案對映實現,只是使用者通過特定的ipc標示符來引用,相關的vfs物件整合成shm特殊檔案系統,該檔案系統只定義了mmap()檔案操作,最終該操作會設定vm_ops線性區方法表中的nopage()指標(相對檔案對映,這裡的nopage()是不跟磁碟相關的)。多個程序的共享記憶體執行緒區都對映到相同的頁框,從而實現了資料共享。

---細節待補充---

記憶體對映檔案實現共享記憶體

記憶體對映檔案程序間共享記憶體 記憶體對映檔案的另乙個功能是在程序間共享資料,它提供了不同程序共享記憶體的乙個有效 且簡單的方法。後面的許多例子都要用到共享記憶體。共享記憶體主要是通過對映機制實現的。windows 下程序的位址空間在邏輯上是相互隔離的,但在物理上卻是重疊的。所謂的重 對映檔案物件時...

使用記憶體檔案對映實現共享記憶體

不使用ipc中的共享記憶體 shm 使用記憶體檔案對映的方式來實現共享記憶體 共享記憶體寫入者 使用檔案記憶體對映進行記憶體共享 include include include include include include include include include include using...

c 實現記憶體對映檔案共享記憶體

記憶體對映檔案是利用虛擬記憶體把檔案對映到程序的位址空間中去,在此之後程序操作檔案,就像操作程序空間裡的位址一樣了,比如使用c語言的 memcpy等記憶體操作的函式。這種方法能夠很好的應用在需要頻繁處理乙個檔案或者是乙個大檔案的場合,這種方式處理io效率比普通io效率要高 00001.using s...