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

什么時候用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>
            国产自产v一区二区三区c| 欧美中文字幕在线播放| 亚洲欧美经典视频| 亚洲午夜激情在线| 亚洲欧美日本伦理| 久久久综合激的五月天| 欧美成人免费在线| 日韩亚洲欧美中文三级| 亚洲午夜精品视频| 久久黄色网页| 欧美日韩一区二区三区高清| 国产精品美女一区二区在线观看| 国产欧美91| 在线欧美视频| 亚洲视频在线观看一区| 欧美一区影院| 亚洲高清成人| 一本大道av伊人久久综合| 午夜欧美不卡精品aaaaa| 另类亚洲自拍| 国产精品视频99| 亚洲国产精品成人va在线观看| 中国av一区| 免费成年人欧美视频| 99精品热视频| 欧美sm视频| 国产亚洲福利一区| 一区二区三欧美| 男人插女人欧美| 亚洲伊人第一页| 欧美黄色一区二区| 国内视频精品| 亚洲自拍电影| 亚洲精品1区2区| 久久精品日韩| 国产精品久久久久久久一区探花| 亚洲国产精品va| 久久人人爽人人| 午夜日韩在线| 国产精品亚洲综合天堂夜夜| 日韩视频一区| 欧美啪啪成人vr| 国产精品美女久久久久aⅴ国产馆| 欧美日韩播放| 亚洲电影免费观看高清完整版在线| 一区二区三区久久精品| 欧美高清视频一区| 久久久综合网| 国语自产精品视频在线看一大j8| 亚洲在线网站| 亚洲午夜一区二区三区| 欧美日韩精品福利| 亚洲伦理在线免费看| 欧美国产精品日韩| 久久久水蜜桃| 一区二区在线看| 蜜桃伊人久久| 久久亚洲春色中文字幕久久久| 国产一区二区三区日韩| 久久er99精品| 欧美一区二区在线| 国产一区久久| 米奇777在线欧美播放| 久久久久久夜精品精品免费| 国语自产偷拍精品视频偷| 可以看av的网站久久看| 久久久久国产精品人| 精品动漫av| 亚洲高清影视| 欧美视频不卡| 香蕉成人啪国产精品视频综合网| 午夜欧美大片免费观看| 一区二区三区在线视频免费观看| 男同欧美伦乱| 欧美日韩你懂的| 性色av一区二区三区在线观看| 亚洲欧美日韩一区在线| 国产主播在线一区| 亚洲国产精品久久久久秋霞不卡| 欧美精品久久久久a| 一区二区三区精品视频| 羞羞答答国产精品www一本| 国模私拍一区二区三区| 亚洲福利视频在线| 欧美日韩一区二区三区在线视频 | 久色成人在线| 99精品免费| 午夜视频久久久久久| 亚洲国产99| 亚洲视频999| 国语自产精品视频在线看| 亚洲国产精品va在看黑人| 国产精品日韩欧美大师| 欧美 日韩 国产精品免费观看| 欧美不卡在线| 久久精品国产精品亚洲精品| 欧美激情精品久久久久久蜜臀 | 亚洲国内在线| 国产欧美日韩专区发布| 亚洲国产成人精品久久久国产成人一区| 欧美日韩成人综合在线一区二区| 欧美福利影院| 一区在线观看| 一区二区三区高清视频在线观看| 国产综合18久久久久久| 亚洲日韩中文字幕在线播放| 国外成人性视频| 在线视频精品一区| 亚洲日韩成人| 久久久久国产精品www| 午夜精品国产精品大乳美女| 欧美成年人网| 欧美福利视频网站| 国产综合激情| 午夜精品久久久久久久久久久| 日韩一区二区精品| 久热精品在线视频| 久久女同互慰一区二区三区| 国产精品久久久久久久久久免费| 欧美激情视频在线播放 | 好吊日精品视频| 亚洲一区精品电影| 一区二区三区日韩欧美| 欧美国产日本韩| 欧美电影资源| 在线免费不卡视频| 久久精品国亚洲| 久久9热精品视频| 国产精品天天看| 亚洲影院高清在线| 欧美怡红院视频| 国产精品主播| 午夜伦理片一区| 久久久综合网| 娇妻被交换粗又大又硬视频欧美| 性欧美大战久久久久久久久| 久久福利资源站| 黄色精品一区二区| 久久国产99| 久久久久久久精| 伊人久久综合| 老司机免费视频一区二区| 欧美777四色影视在线| 亚洲国内精品在线| 欧美激情精品久久久久久蜜臀 | 麻豆成人综合网| 亚洲国产精品福利| 欧美电影在线观看| 亚洲精品美女在线观看| 一区二区三区欧美亚洲| 欧美日精品一区视频| 亚洲在线1234| 久久深夜福利| 日韩视频国产视频| 欧美午夜精品久久久久久人妖 | 亚洲免费观看| 欧美日精品一区视频| 校园春色综合网| 欧美成人精品在线| 亚洲视频一区二区在线观看| 久久国产精品久久精品国产| 国产农村妇女毛片精品久久莱园子| 在线亚洲美日韩| 久久久久久久久蜜桃| 亚洲国产老妈| 国产精品免费看片| 久久亚洲精选| 在线综合亚洲欧美在线视频| 久久精品夜夜夜夜久久| 亚洲精品视频免费观看| 国产精品成人免费| 久久精品国产第一区二区三区| 亚洲高清久久久| 欧美一区二区啪啪| 亚洲精选国产| 国精品一区二区三区| 欧美日韩国产欧美日美国产精品| 午夜视频精品| 99综合视频| 欧美激情在线狂野欧美精品| 亚洲欧美成人综合| 亚洲国产综合在线看不卡| 国产九色精品成人porny| 欧美国产高潮xxxx1819| 久久精品99国产精品日本| 亚洲美女视频在线免费观看| 免费欧美在线视频| 欧美综合国产精品久久丁香| 中文在线不卡| 亚洲精品美女91| 在线精品一区二区| 国产亚洲激情视频在线| 国产精品海角社区在线观看| 欧美超级免费视 在线| 香蕉久久夜色精品国产使用方法| 99re视频这里只有精品| 亚洲福利视频网| 欧美91大片| 欧美成人精品高清在线播放| 久久一区视频|