【wince6.0導航主題】

電腦雜談  發布時間:2020-01-28 03:04:36  來源:網絡整理

wince6.0播放器_gvtube播放問題_為什么電腦播放視頻很卡

WINCE5.0和WINCE6.0的存儲與平臺架構

1.WINCE5.0

1.1WINCE5.0的內存架構

因為WINCE是32位的嵌入式操作系統,所以WINCE的虛擬尋址能力可達4GB(為什呢,2^32=4GB),但是WINCE5.0和XP操作系統的每個進程獨享4GB虛擬地址空間不同,WINCE5.0中所有的進程共享一個4GB的虛擬地址空間。這4GB的虛擬地址空間被分為兩個2GB的區域,其中低地址的哪2GB區域(0x00000000~0x7FFFFFFF)是用戶虛擬空間,這塊虛擬空間由應用程序的共用,也就是說應用程序申請的顯存都會從低2GB虛擬內存空間分配的;而高2GB區域(0x80000000~0xFFFFFFFF)是操作系統的內核虛擬空間wince6.0播放器,供WINCE操作系統本身使用。

我們了解WINCE5.0的進程數量最多只能達到32個,而且每個進程只能享受32MB的虛擬空間(這個32MB的空間也叫一個slot),這33個進程(32+1,這個1就是指slot0,因為slot0用于映射當前在處理器上執行的輪詢所在的進程)占用的虛擬空間0x00000000~0x41FFFFFF(slot0~slot32),slot33~slot63對應的虛擬地址空間是0x42000000~0x7FFFFFFF,這塊虛擬地址空間是由所有的進程共享的,如果每個進程獨享的32MB虛擬地址空間不夠用,那么進程可以在這個范圍申請虛擬地址空間,這個范圍包含對象存儲和存儲映射文件(.map文件,每個進程都有自己的map文件)。此范圍的最后一個slot(slot63)從0x7E000000~0x7FFFFFFF用來儲存純資源DLL。如果某個DLL里面只有資源信息(比如按鈕、位圖、對話框及字符串表燈),這個DLL就會被加載至這個空間內。

從0x80000000開始是WINCE內核使用的虛擬內存空間,其中0x80000000~0x9FFFFFFF(512MB)這段用來靜態所有的物理地址,也就是說WINCE會把所有的物理存儲1:1地址映射至這段虛擬內存上,這也就是WINCE最大支持的物理內存是512MB的由來。0xA0000000~0xBFFFFFFF(512MB)這段虛擬地址會重復映射所有的物理地址,這段對物理內存的映射與0x80000000這段最大的不同是從0x80000000開始的一段虛擬內存(何宗鍵老師這里寫得是物理內存)是有緩沖的,而從0xA0000000開始的一段是沒有緩沖的。通常,緩沖可以減少系統的I/O效率(why,有待進一步理解),但是針對一些OAL或者bootloader或者驅動來說,使用緩沖有可能會造成災難性的后果,因為緩沖有可能會更改我們對設備的寫操作順序,因此在驅動程序中即使直接訪問設備的I/O或寄存器,那么一般使用0xA0000000這段內存地址。

gvtube播放問題_為什么電腦播放視頻很卡_wince6.0播放器

物理內存被映射到內核空間以后,WINCE內核如果要訪問某個物理內存地址,就只應該把該物理地址加上0x80000000或者0xC0000000就可以了,這樣簡便的方法只能由WINCE內核使用,通常的應用程序是能夠享受這些方便的。

0xC2000000~0xC3FFFFFF是slot97,此slot97是WINCE5.0的核心進程

NK.EXE,可見實現WINCE5.0操作系統的一些主要用途的NK.EXE本身的地址空間還是在跟想法中的,0xE0000000~0xFFFFFFFF這段最高的地址是內核使用的地址空間,對于不同的處理器體系結構,這里保存著不同的內容,通常會存放一些供虛擬內存用的頁表和中斷向量表等內核使用的數據結構。

從上圖我們就slot0來看看一個進程中虛擬地址空間的使用狀況。一個進程的32MB虛擬地址空間中,最低的64KB地址(0x000000~0x00010000)是用來捕獲野指針的,通常是空指針NULL的,如果某個指針訪問了超過64KB的內存區域,那么WINCE就可以捕捉到這個錯誤,但是這種并不能捕獲代碼中所有的野指針。

64KB之上是進程的代碼、數據或者堆和棧,進程申請虛擬內存是從低地址向高地址增長的。從每位32MB虛擬地址空間最高地址開始,存放的是進程讀取的ROMDLL的讀寫數據或者RAMDLL的數據(ROMDLL的代碼對所有的進程來說可以共享一個拷貝,放在slot1中,但針對DLL的數據,就不得不為每個進程設立單獨的拷貝),DLL代碼跟數據的下降是從高地址向低地址增長的,如果這兩個高低增長相遇,那么就表示進程尚未耗盡了它的虛擬地址空間,就算此時有可也有多余的物理內存,但是能夠使用它了,因為進程的虛擬地址空間即將用完了。

我們知道虛擬內存的申請是以64KB為界限的,這對進程加載DLL有相當重要的妨礙,這也就意味著每個DLL的都應大約占用64KB虛擬地址空間,從理論上來說每個進程只能加載512個DLL。要記住所有的ROMXIPDLL都會被映射到進程的虛擬地址空間中wince6.0播放器,因為進程有也許訪問任何一個XIPDLL。通常一個沒有圖形界面的WINCE操作系統就會包括有100個左右這種的DLL,一個含有圖形界面的正常WINCE包含的此類DLL更多,因此這個難題需要導致重視??梢圆捎靡恍┓绞綔p少虛擬內存耗盡,例如把幾個不到64KB的小DLL合并作為一個大的DLL。

1.2WINCE5.0的系統架構

wince6.0播放器_為什么電腦播放視頻很卡_gvtube播放問題

2.WINCE6.0

2.1WINCE6.0的內存架構

⑴WINCE6.0支持最大32000個進程。

⑵每個進程獨自占用2G虛擬地址空間。

⑶統一/一元化的內核(unifiedkernel),把關鍵性的OS部分移至內核空間。

為什么電腦播放視頻很卡_gvtube播放問題_wince6.0播放器

***和WINCE5.0類似,2G的用戶空間被分為兩個別。

***最低64KB,被系統用來捕獲野指針。

***低1GB的地址空間用來讀取進程的代碼、數據、堆、棧等

***0x40000000~0x5FFFFFFF(512MB),這段虛擬內存空間用于讀取所有的客戶進行的DLL代碼跟數據。

***0x60000000~0x6FFFFFFF(256MB)這段存儲分配給內存映射文件MMF(memorymappedfiles)。

***0x70000000~0x7FEFFFFF這段存儲是內核程序跟用戶進程間的共享堆,實現內核程序跟用戶進程間通信(無需通過API),此區域用戶程序可讀,但OS能寫。

***0x7FF00000~0x7FFFFFFF這段存儲不可訪問,作為客戶跟核心間的緩存。

gvtube播放問題_為什么電腦播放視頻很卡_wince6.0播放器

***低1GB是靜態虛擬地址。

***0xC0000000~0xC7FFFFFF(128MB)用于內核加載的XIPDLLs。

***0xC8000000~0xCFFFFFFFF(128MB)是文件系統的對象存儲區。

***0xD000000~0xDFFFFFF(512MB)是內核方式的程序執行區。

***0xF000000~0xFFFFFFFF用于捕獲系統讀取,包含核心數據頁。

WINCE6.0系統被劃分為usermode(用戶體系)和kernelmode(內核方式)兩個“層”,CoreDLL同時發生在兩個層中,驅動程序也移到了內核中,以前的.exe基本上都變成了.dll

3.WINCE5.0和WINCE6.0的OALdesign


本文來自電腦雜談,轉載請注明本文網址:
http://www.gefhbj.live/a/bofangqi/article-138522-1.html

    相關閱讀
    發表評論  請自覺遵守互聯網相關的政策法規,嚴禁發布、暴力、反動的言論

    • 宋元公佐
      宋元公佐

      如果是包裝漏氣了

    熱點圖片
    拼命載入中...
    少林宝藏100在线客服 彩金捕鱼季免费下载 内蒙古快3今天预测号码推荐 云南11选5开奖视频 辽宁35选7第123期开奖结果 上海投资理财平台 皇冠比分99814=皇冠C盘 天津快乐十分玩法秘籍 河内5分彩选择 日本sm影片 济南按摩 价格 福建快3和值 德甲历届射手榜 浙江福彩12选5开奖 微乐麻将怀疑开挂怎么查 广东闲来麻将 北京快乐8开奖时间