核心對象及記憶體映像檔案介紹(一)

來源:互聯網
上載者:User

在Windows中有各種核心對象,如事件、檔案、進程、訊號量、互斥量等。

一、核心對象是什嗎?

核心對象是由系統核心分配管理的一段記憶體塊,只有系統核心能夠直接存取這一段核心對象資料,而應用程式只能通過Windows提供的一系列函數按規定的方式去操作這些核心對象。我們通過調用 API函數建立核心對象(這些函數通常帶有Create首碼)。

二、核心對象如何調用

當我們調用一個函數建立核心對象的時候,該函數通常會返回一個標識該對象的控制代碼(HANDLE),把標識該核心對象的控制代碼傳遞給有關windows函數,告訴系統去操作哪一個核心對象。

三、核心對象使用介紹

核心對象屬於系統核心而不是進程,核心對象可被多個進程訪問使用,也即可在多個進程間共用。每個核心對象和介面一樣,都自身有一個引用計數值,它記錄有多少進程使用該對象,當引用計數值為零時由系統負責銷毀核心對象。在多個進程間共用核心對象有三種方法:控制代碼繼承、命名、控制代碼複製。記憶體映像檔案就是核心對象的一種。

四、Windows中的進程
在Windows中每一個進程都有自己私人的地址空間,對32位的進程來說地址空間的大小是從0x00000000 到 0xFFFFFFFF共4GB範圍。這個空間僅僅是記憶體位址的範圍,而不是電腦的實體儲存體RAM空間,因而又稱為虛擬記憶體空間。使用某段虛擬記憶體空間需要經過保留和提交兩個過程,將實體儲存體分配映像到地址空間的該段地區上。實體儲存體不應理解為RAM,實際上應理解為來自於磁碟上(通常為硬碟)的系統記憶體分頁檔案,在必要時(讀寫訪問時)其內容才會被系統寫到RAM中或從RAM中寫回來。磁碟上的這種系統記憶體分頁檔案又稱為虛擬記憶體。
五、記憶體映像檔案
幾乎每個應用程式都要和檔案打交道。比如,應用程式有時需要開啟、讀取、再關閉檔案;而有時需要開啟檔案,將資料讀到一個緩衝區再寫回到檔案中另一個位置。通常實
現起來都顯得有點繁瑣。 Windows提供了滿足這兩方面要求的最佳解決途徑:記憶體映像檔案。象使用虛擬記憶體一樣,使用記憶體映像檔案同樣需要經過保留和提交兩個過程,首先在進程記憶體空間保留一塊地區,然後提交實體儲存體給這段地區。不同的是實體儲存體來自於磁碟上的檔案,而不是系統的分頁檔案。也即將磁碟上指定的資料檔案作為虛擬記憶體,這個實現過程被稱為檔案映像,可以將檔案全部或部分映像到進程的地址空間中。檔案映像過以後,可以把檔案映像的部分當作已全部被載入記憶體一樣的去訪問它,這時又稱它為記憶體映像檔案。

六、記憶體映像檔案使用

記憶體映像檔案通常有三個方面的應用:
1. 系統使用記憶體映像檔案載入和執行.EXE和.DLL檔案。一方面節省了系統分頁檔案空間,另一方面縮短了載入應用程式開始執行所需的時間。
2. 使用記憶體映像檔案訪問磁碟上的資料檔案。繞開對檔案實行I/O操作和對檔案內容的緩衝,交由作業系統核心去完成。
3. 使用記憶體映像檔案可以實現在多個進程間彼此共用資料。Windows提供了在進程間進行資料通訊的其它多種方法。但這些方法也是通過記憶體映像檔案來實現的,所以記憶體映像檔案是實現處理序間通訊最有效率的方法。
七、 記憶體映像檔案使用步驟
要使用記憶體映像檔案,可以按以下步驟:
(1) 調用Windows API 函數CreateFile()建立或是開啟一個檔案,得到一個標識該檔案(核心對象)的控制代碼,它確定了哪一個磁碟檔案將要作為記憶體映像檔案。
(2) 將(1)中得到的檔案物件控點作為第一個參數調用Windows API 函數CreateFileMapping()建立一個檔案映像對象。通知系統該檔案的大小及對該檔案的訪問方式,同
時也得到一個標識該檔案映像對象的控制代碼。
(3) 將(2)中得到的檔案映像物件控點作為第一個參數調用Windows API 函數MapViewOfFile()通知系統映像檔案全部或部分內容到進程的某一段地址空間,並將此段空間
首地址通過該函數返回。這一步也就是使用虛擬記憶體的保留和提交過程,此後就可以利用此首地址實現對檔案內容的讀寫了。
也可以不做第一步,直接從第二步開始,但這時要用INVALID_HANDLE_VALUE為參數作為標識檔案對象的控制代碼,這時系統以其分頁檔案作為記憶體映像檔案而不用指定磁碟上的哪一個磁碟檔案。當你使用完記憶體映像檔案後,需要做以下幾步清除動作。
(1) 調用Windows API 函數UnmapViewOfFile(),通知系統釋放檔案映像對象在進程地址空間中佔用的地區。
(2) 調用Windows API 函數CloseHandle(),分別關閉檔案映像對象和檔案對象。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.