青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

什么時候用memory-mapped files:

1.System use it to load and execute .exe and dll files.

2.Use memory-mapped files to access a data file on disk.

3.allow multiple processes running on the same machine to share data with each other.

------------------------------------------------------------------------------------------------------

用途一:使用mapping file executables and dlls

當調用createProcess時候,系統做了以下的事情:

1.locates CreateProcess 中指定的the .exe file,失敗則return false

2.創建新的process kernel object

3.creates a private address space for new process

4.reserves a region of address space large enough to contain the .exe file.The desired location of this region is specified by the .exe file itself.by default ,base address is 0x00400000 .You can change it by create your app .exe fiel using linker’s /BASE option.

5.the systems notes that the physical storage baking the reserved region is in the .exe file on disk instread of the system’s paging file.(系統注意到,支持已保留區域的物理存儲區域是在磁盤上的.exe 文件而不是在系統頁面中)

當。exe 被mapped into the process address space,系統訪問.exe的一個區域,那里列出了.exe含有的dll,然后系統利用 LoadLibrary for each dlls。系統map dll時候,如果dll的 preferred base address 被占據或者不夠大,dllwill try to find another region of address space to reserve for the dll。如果dll 被設定了/Fixed when it build,也就是不支持重定位,那么加載失敗。

如果加載dll或者exe 失敗,彈出對話框并且釋放申請的地址空間。

after all .exe  dll mapped into the process address space, system can begin exec the .exe file starup code. the sys takes care of all paging,buffering, and caching. 例如,如果一段代碼訪問了一個并不在主存的地址,那么一個錯誤產生,系統察覺到錯誤并且自動的調入page of code from the files image into a page of RAM。

the sys maps the page of ram to the proper location in the process address and allows the thread  to continue.

當為一個app創建第二個實例時,系統只是簡單的打開另外一個memory-mapped view  of file-mapping object that identifies the exec files image and create a new process object and a new thread object.利用內存映射文件,多個實例可以共享代碼和數據。實際上,file 是分為多個section ,多個節均對齊于頁邊界。如果一個instance of the app 修改了全局變量,系統應用了copy-on-write 機制,復制修改的頁面,并更新實例的file-mapping view。當我們調試程序時同樣的事情會發生,debuger modify code,sys use cow again。

當一個進程被加載,系統檢查其所有映射文件頁,系統將所有通常用cow保護的頁面提交給存儲系統,這些頁面僅僅是被提交,當文件被訪問的時候,系統讀入相應的頁面,如果頁面沒有被修改,那么他們可以被換出,如果已經修改,系統將修改過的頁面轉入已經提交的頁面之一(這點很晦澀啊 system swaps the modified page to one of the perviously committed pages in the paging file ,怎么翻譯呢~~~~ :(   )

------------------------------------------------------------------------------------------------------

在可執行文件或者dll中共享靜態變量

------------------------------------------------------------------------------------------------------

內存映射數據文件

例子:要把一個文件所有字節倒置

如果利用file mapping 我們告訴系統使用一個虛擬空間的區域來倒置文件,然后告訴把文件的第一個字節映射到保留空間的第一個字節,然后就像處理內存中的字符串一樣處理文件即可,引文系統會幫助你完成文件緩存以及調頁等工作。

使用流程:

1.創建一個file kernel object that identifies the file on disk that you want to use as a memory –mapped file

2.創建一個file mapping kernel object 告訴系統文件的大小,以及你準備如何訪問文件

3.告訴系統map all或者部分文件到你的進程地址空間

當使用結束后要:

1告訴系統 unmap file-mapping kernel object form your process add

2cloes filemapping kernel object

3close file kernel object

---------

具體步驟

--1. 創建文件內核對象

CreateFile

失敗返回 INVALID_HANDLE_VALUE = –1 一般來說windows func 失敗return null這個比較特殊

createfile dwdesiredAccess 需要設置為 GENERIC_READ 或者 GENERIC_WRITE 

--2. 創建file-mapping 內核對象

CreatefileMapping(HANDLE,PSECURITY_ATTRIBUTES,DWORD fdwProtect,DWORD dwMaximumsizeHigh,DWORD dwMaximumSizeLow,PCTSTR pszName);

第一個參數使用createfile 返回的handle。psa一般使用默認null。當創建一個file mapping object 時候,系統并不會 馬上保留一個地址空間,然后將file映射到這個區域。但很i,當系統map時候,系統必須知道為physical storage分配什么樣的保護屬性,第三個參數指明了這些。

后面兩個參數指明file的大小,ensure  enouth physical storage is available for the file-mapping object.

high指明高32位,low指明低32位。如果想創建一個反應現在文件大小的map,均傳0.

pszName 用于與其它進程共享內存映射文件

--3.將文件數據map to process address space

使用這個函數

PVOID MapViewOfFile(HANDLE hfileMappingObject,dwDesireaccess,dwFileOffsetHigh,dwFileOffsetLow,dwNumberOfbytestomap)

文件沒必要一次全映射,一次映射一部分,這一部分成為一個view

首先通過high和low 指定開始映射的字節

其次是指定映射多大,0則映射到文件尾部。

--4.unmapping the file data from the process address space

UnmapviewOfFile(PVOID pvBaseAdddress);

參數使用mapview的返回值

如果強制write back to disk 則使用 FlushViewOfFile(PVOID pvAddress,SIZE_T dwNumberOfBytesToFlush)

第一個地址是想要開始flush的地址

--5.關閉filemapping object 以及file object

-----------------------------------------------------------------------------------

使用filemap 在進程之間共享數據

例子:

app開始時候,系統調用createfile to open .exe file onthe disk。sys call creatFileMapping to create filemapping object.然后系統調用  mapviewofffileEX (with sec_image flag to point out it is a pe file),So that the file’s image is mapped to the address of the first byte of exectuable code of this mapped view. System creates the primary thread , puts the address of the first byte of exec code of this mapped view in the thread instruction pointer,and then lets the cpu start exec the code.

If user 再啟動同一個app,sys 看到file-mapping已經存在了,系統maps a view of file a second time,this time in the context of the newly created process address space.

像所有內核對象一樣,有三種方法共享他,繼承,命名對象以及賦值handle。

···頁文件支持的內存映射文件

許多應用程序運行是產生數據需要和其他進程共享如果必須在硬盤建立文件才可以共享,那么效率很低。因此微軟提供了由system paging file 支持的 file mapping。不需要createfile ,只需要在調用createFilemapping 的時候傳進一個 INVALID_HANDLE_VALUE 作為hFile 參數即可。 映射文件大小同樣是由high 和low 參數決定的。

`````稀疏提交的內存映射文件

--看來需要把虛擬內存那章一起看看了~~~~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产精品人人做人人爱| 欧美日韩国产成人在线免费| 午夜日韩视频| 在线视频精品| 在线亚洲一区| 亚洲欧美国产视频| 午夜在线观看免费一区| 午夜一区二区三区在线观看| 午夜久久影院| 久热国产精品| 亚洲人被黑人高潮完整版| 亚洲国产精品一区制服丝袜| 亚洲国产第一页| 亚洲九九精品| 亚洲欧美一级二级三级| 久久激情视频| 欧美噜噜久久久xxx| 欧美日韩在线不卡一区| 国产精品视频午夜| 亚洲国产精品成人va在线观看| 亚洲国产日韩在线| 亚洲线精品一区二区三区八戒| 久久成人免费电影| 亚洲激情电影在线| 亚洲综合首页| 欧美激情精品久久久六区热门| 国产精品sss| 伊人婷婷欧美激情| 亚洲欧美日韩视频二区| 久久久久久久久综合| 亚洲国产中文字幕在线观看| 亚洲欧美制服另类日韩| 欧美成人日韩| 国产一区视频在线观看免费| 亚洲精品小视频| 久久日韩精品| 亚洲日本中文字幕免费在线不卡| 中文国产成人精品| 玖玖玖免费嫩草在线影院一区| 欧美激情综合| 国产一区亚洲| 欧美一级久久久| 亚洲人体1000| 久久全国免费视频| 国产视频久久久久久久| aa级大片欧美| 欧美激情国产日韩| 久久黄金**| 国产日韩欧美黄色| 亚洲欧美日本日韩| 亚洲日韩成人| 免费观看一级特黄欧美大片| 国产视频一区免费看| 亚洲一区999| 亚洲日韩视频| 女同一区二区| 亚洲国产精品123| 欧美mv日韩mv国产网站| 欧美一区二区日韩一区二区| 国产精品欧美在线| 亚洲欧洲99久久| 宅男66日本亚洲欧美视频 | 一本色道久久综合精品竹菊 | 亚洲欧洲综合另类在线| 另类专区欧美制服同性| 欧美专区第一页| 国产一区观看| 久久精品一区四区| 欧美中文在线字幕| 黄色亚洲在线| 免费不卡在线观看| 免播放器亚洲一区| 亚洲欧洲日韩综合二区| 亚洲精品1区| 欧美午夜一区| 欧美一级精品大片| 久久成人免费网| 在线精品一区| 亚洲精品1区| 国产精品欧美日韩| 久久人人97超碰精品888| 久久国产黑丝| 亚洲欧洲日夜超级视频| 日韩一区二区久久| 国产日韩欧美a| 美女露胸一区二区三区| 欧美69wwwcom| 午夜激情久久久| 久久婷婷国产综合国色天香| 亚洲精品护士| 亚洲免费一在线| 亚洲社区在线观看| 久久精品免费播放| 影音先锋中文字幕一区| 亚洲三级免费| 国产欧美日韩另类一区| 欧美成人精精品一区二区频| 欧美另类高清视频在线| 久久久999国产| 欧美激情一区二区三区不卡| 亚洲男女毛片无遮挡| 久久国产精品一区二区| 亚洲欧洲偷拍精品| 亚洲一区二区精品在线| **欧美日韩vr在线| 亚洲在线观看免费视频| 亚洲欧洲三级| 久久福利电影| 亚洲欧美日韩国产一区二区| 久久免费少妇高潮久久精品99| 99热精品在线| 久久久久久国产精品一区| 一区二区三区免费观看| 久久久精品国产免大香伊| 亚洲制服少妇| 欧美激情麻豆| 欧美大片免费观看| 国产女人aaa级久久久级| 91久久久亚洲精品| 在线不卡免费欧美| 欧美亚洲在线视频| 亚洲女优在线| 欧美色播在线播放| 亚洲国产欧美久久| 伊人久久婷婷色综合98网| 亚洲一区二区三区涩| 在线中文字幕一区| 欧美国产精品va在线观看| 麻豆精品传媒视频| 国内在线观看一区二区三区| 国产精品99久久久久久宅男 | 欧美在线观看日本一区| 欧美激情国产精品| 欧美国产在线视频| 亚洲国产成人一区| 久久午夜视频| 欧美成人精品一区二区| 精品白丝av| 久久久久久久综合| 欧美成人精品三级在线观看 | 欧美一区二区三区视频免费| 欧美日韩在线直播| 日韩视频二区| 亚洲综合大片69999| 国产精品大片| 亚洲一区二区三区视频| 欧美一区二区免费| 国产自产高清不卡| 卡一卡二国产精品| 亚洲国产综合91精品麻豆| 亚洲欧洲日本在线| 欧美精品一区二区三区很污很色的| 亚洲国产高清aⅴ视频| 亚洲免费av观看| 国产自产精品| 亚洲欧美日韩另类| 国产精品资源在线观看| 亚洲欧美一级二级三级| 久久国产精品久久w女人spa| 国产亚洲欧美一区二区| 久久精品视频va| 亚洲国产精品va在线看黑人| 夜夜夜久久久| 国产午夜精品一区二区三区欧美 | 欧美日韩妖精视频| 中文亚洲视频在线| 久久嫩草精品久久久精品| 亚洲国产高清在线观看视频| 欧美久久九九| 欧美一区二区三区电影在线观看| 欧美aⅴ一区二区三区视频| 一区二区欧美激情| 国产视频一区免费看| 欧美成人高清视频| 亚洲欧美国内爽妇网| 欧美电影专区| 亚洲欧美日韩一区| 亚洲国产精品va在线看黑人| 国产精品不卡在线| 久久香蕉国产线看观看网| 亚洲精品看片| 麻豆av一区二区三区久久| 亚洲调教视频在线观看| 影音国产精品| 国产精品五月天| 久久综合伊人| 亚洲欧美日韩区| 亚洲毛片在线观看.| 老司机精品视频一区二区三区| 99在线精品免费视频九九视| 国产婷婷色一区二区三区在线| 欧美激情二区三区| 久久视频国产精品免费视频在线| 一区二区三区高清| 欧美国产在线观看| 久久亚洲精品伦理| 久久久91精品国产一区二区三区 | 亚洲三级免费电影| 美女诱惑黄网站一区| 久久黄色小说|