欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Windows CE指南.ppt

    • 资源ID:90952044       资源大小:2.37MB        全文页数:218页
    • 资源格式: PPT        下载积分:50金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要50金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Windows CE指南.ppt

    Windows CE 指南Windows CE 简介n Windows CE 特性n 与桌面版OS 比较n 与其他嵌入式OS 比较WinCE 能做什么:手机WinCE 能做什么:PDA便携式多媒体设备WinCE 能作什么:汽车电子BMWCitronClarion Co.Ltd.DaimlerChryslerFiatSubaruHondaHyundaiMitsubishiToyotaWinCE 能做什么:其它n 工业控制n 机顶盒n 医疗设备n 银行ATM 系统n 放映机和大屏幕显示器n VoIP 设备n Windows CE 发展历史n 1996 年发布WindowsCE 1.0n Windows CE.NET 4.x 被广泛应用n 最新版 Windows CE 6.0 7.0Windows CE 特点与桌面版本比较:硬件平台桌面版 Windowsn Only runs on x86 architectureWindows CEn ARM/Xscalen MIPS n PowerPC n Sparcn x86 Windows CE 特性n Windows CE 支持在多种不同的CPU 硬件平台上运行与桌面版本比较:镜像大小桌面 Windowsn Windows 3.x:2-5MBn Windows 98:400MBn Windows XP:1.5GBn 越来越大Win7、Win8n 不能定制Windows CEn 最小:200KBn 网络部分大约 800KBn GWES,Shell and Apps 大约 4MB n Internet Explorer 大约 3MBWindows CE 特性n 组件化n 200 多个可选组件n 快速方便地针对特定应用系统定制OS与桌面版比较:实时性桌面 Windowsn 不具有实时性Windows CEn 线程优先级256 级n 中断嵌套n 每个线程都有独立的时钟嘀嗒n 处理优先级反转 Windows CE 特性:n Windows CE 支持实时性与桌面版比较:电源管理桌面 Windowsn 电源管理实现差Windows CEn 电池供电/AC 供电n 各设备的电源使用状况n 关闭不必要的设备Windows CE 特性:n Windows CE 提供电源管理器,用来管理设备供电系统,增加电能的使用效率n Windows CE 能够减少设备的能量损耗,在系统复位、开启、休眠和挂起状态,维持和保护RAM 上的文件系统与桌面版比较:编程接口桌面Windowsn ASCII/UNICODEn 丰富的 APIn 强有力的硬件平台Windows CEn 只支持UNICODEn 部分Win32 API,MFC 等n 有限的硬件资源Windows CE 特性:n Windows CE 只支持 UNICODEn CHAR-TCHAR/WCHARn strlen-wcslenn 部分API 功能受限n 运行Windows CE 的系统通常资源受限与桌面版比较:共享源代码桌面 Windowsn 商业软件,源代码是微软的一级机密Windows CEn 开放CE 6.0 的核心源代码用户可以对它进行修改Windows CE 特性:n 源代码共享n 用户可以在“%_WINCEROOT%private”文件夹中找到公开的源代码与其它嵌入式 OS 比较:多媒体支持其它嵌入式OS:n 对音视频支持有限n 没有商业的网站浏览器Windows CEn 友好的用户界面n Windows Media Player 9,支持mp3,wav,avi,wmvn Internet Explorer 6&Pocket IEWindows CE 特性:n 友好的用户界面n 强大的多媒体支持n 与桌面版 windows 相兼容n Pocket Word,Excel,PowerPoint,adobe readern Pocket MSN messengern Pocket IE,Windows Media Playern SQL Server CE editionn ACD Seen 与其它的嵌入式OS 比较:编程接口Other EOS:n 不同的编程接口n 常用的 C/C+&j2meWindows CEn Win32 APIn MFC,ATL,STLn COM,ActiveXn.NET Compact Frameworkn Java VMn EVB,EVCWindows CE 特性:n 对于Windows 程序员来说容易上手n 支持多种编程语言与其它的嵌入式OS 比较:镜像大小和实时性其它嵌入式OS:n RTLinux,C/OS-II 支持硬实时n Vxworks 最小:8kn C/OS-II 最小:2kWindows CEn 非硬实时系统n 对于一些特殊的应用镜像可能过大Windows CE 优点:n 丰富的可选组件和功能n 定制方便n 易使用n 与桌面版windows 编程接口类似n 具有丰富的微软及第三方应用支持Windows CE 系统结构和功能Windows CE 的结构概述n 系统架构n NK.EXEn FILESYS.EXEn DEVICE.EXEn GWES.EXEn SERVICES.EXEn Thread Migration微内核n 微内核是一个小型的操作系统核心,它为模块化扩展提供基础。n 微内核的基本原理:只有最基本的操作系统功能才能放在内核中。不是最基本的服务和应用程序在微内核之上构造,并在用户模式下执行。微内核单体内核操作系统(UNIX)微内核结构(Windows CE)微内核结构用一个水平分层的结构代替了传统的纵向分层的结构。在微内核外部的操作系统部件被当作服务器进程实现,它们可以通过微内核传递信息来实现相互之间的交互。Windows CE 系统架构n Windows CE 属于比较典型的微内核操作系统。n 在内核中仅仅实现进程、线程、调度及内存管理等最基本的模块,而把图形系统、文件系统及设备驱动程序等等都作为单独的用户进程来实现。Windows CE 系统架构NK.EXEn NK.LIB+OAL.LIB=NK.EXEn 微软提供了预先编译的 NK.LIB 库文件,它的代码与CPU 指令体系结构相关而与具体的外设无关。n OAL.LIB 是OEM 层中的OAL 代码编译后的输出。n 提供:n 处理器调度内存管理n 进程创建加载n 系统内的通信机制n 中断处理n 为其他部分提供核心调用例程NK.EXE OALRAM ROM/FLASHTimer INTCCPUGWES.EXEn 图形窗口事件系统(GWES)n 管理所有的图形界面处理以及用户输入n 桌面的 USER32+GDI32 作为一个单独的进程DEVICE.EXEn 设备管理器n 负责加载、卸载和管理所有不被GWES.EXE 管理的驱动程序。n 大多数功能都放在了devmgr.dll 中。n 提供所有的与驱动相关的函数实现n 在启动的时候通过注册表加载驱动程序Services.EXEn 所有服务的宿主进程n 与Device.exe 分开,负责加载系统服务的进程(FTP,TELNET,HTTP)n 用户可以添加服务n 提供API 管理服务FILESYS.EXEn 文件系统和所有与文件相关的API 都是通过FileSys.exe 进程来管理的。n 有三个组件:n 对象存储n 存储管理器n ROM 文件系统进程和线程与调度n 进程n 线程n 调度进程概述n 进程(process)定义:是一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。它是系统进行资源分配和调度的一个独立单位。n 进程通常由三部分组成:程序、数据集合、进程控制块PCB(Process Control Block)n 进程特点:n 动态性n 独立性n 并发行n 结构化进程概述n 进程与程序的联系:程序是构成进程的组成部分之一。一个进程的运行目标是执行它对应的程序。n 进程与程序的区别:n 程序是静态的,进程是动态的。n 进程有创建、执行及撤销而消亡的生命周期,程序只是一个文件,存在于某种介质上。n 一个程序可对应多个进程,但是一个进程只能对应一个程序。Windows CE 进程n Windows CE(5.0)最多只支持32 个进程同时运行。每个进程占据32MB 的虚拟地址空间,也被称为一个Slot。n 在系统启动的时候,默认会启动四个进程,NK.EXE,FILESYS.EXE,GWES.EXE 及DEVICE.EXE。Windows CE 进程n Windows CE 的进程也不支持环境变量(Environment Variable)和当前目录。n 如果没有明确指明可执行文件的路径,那么Windows CE 会按照如下的顺序搜索:n 首先查找“Windows”目录n 查找根目录(“”)n OEM 所指定的搜索目录(“HKEY_LOCAL_MACHINELoaderSystemPath”)n 例如:如果MyApp.exe 的同一目录中存在MyFile.txt,那么下面的代码都是不正确的。_wfopen(L”%WINDOWS%MyFile.txt,L”w”);_wfopen(L”MyFile.txt”,L”w”);Windows CE 进程一种解决方案 TCHAR szBufMAX_PATH;DWORD dwPathLen;/得到当前程序可执行文件的完整路径 dwPathLen=GetModuleFileName(NULL,szBuf,MAX_PATH);if(!dwPathLen)return-1;/除去文件名 while(szBuf-dwPathLen!=);szBufdwPathLen+1=NULL;/拼接文件 _tcscat(szBuf,TEXT(“MyFile.txt”);/如果当前文件位于/Temp,则此时szBuf 的内容为”/Temp/MyFile.txt”Windows CE 进程n 创建进程的API 如下:BOOL CreateProcess(LPCWSTR lpApplicationName,/可执行文件的路径和名字,不能为NULL LPWSTR lpCommandLine,/传递启动参数(必须为Unicode 字符串)LPSECURITY_ATTRIBUTES lpProcessAttributes,/不支持,设置为NULL LPSECURITY_ATTRIBUTES lpThreadAttributes,/不支持,设置为NULL BOOL bInheritHandles,/不支持,设置为FALSE DWORD dwCreationFlags,/进程加载后的初始状态 PVOID lpEnvironment,/不支持,设置为NULL LPCWSTR lpCurrentDirectory,/不支持,设置为NULL LPSTARTUPINFOW lpStartupInfo,/不支持,设置为NULL LPPROCESS_INFORMATION lpProcessInformation,/返回的进程相关的信息);/整个函数返回值为BOOL 型,当成功创建进程后,返回值为真(TRUE),否则返回假(FALSE).Windows CE 进程n 终止进程n 最好是由WinMain()或者其他主函数返回n 调用ExitThread()函数使进程的主线程退出从而终止进程n 直接调用ExitProcess()函数n 在当前进程终止另一个进程可以使用TerminateProcess()线程概述n 线程(Thread)定义:有时称轻量级进程,进程中的一个运行实体,是一个CPU 调度单位。n 线程特点:n 是进程的一个实体,可作为系统独立调度和分派的基本单位。n 不拥有系统资源(只拥有从属进程的全部资源,资源是分配给进程)n 一个进程中的多个线程可并发执行。(进程可创建线程执行同一程序的不同部分)n 系统开销小、切换快。(进程的多个线程都在进程的地址空间活动)线程概述n 线程和进程的关系是:n 线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。n 线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。Windows CE 线程n 线程是Windows CE 中最小的可执行单元。Windows CE 的调度系统只识别和调度线程。n 一个进程可拥有的线程数理论上是没有限制的,只与当前可用的内存有关。n 线程的上下文:线程占用的内存以及其他资源(如:处理器的寄存器、自己独立的栈等),这些资源构成了线程的上下文。n 线程可运行在:n 核心态:线程可访问操作系统所有的资源(可访问核心态的2GB 虚拟地址空间)。一般来说,操作系统线程和中断服务例程运行在核心态。n 用户态:应用程序和设备驱动程序的中断服务线程运行在用户态。Windows CE 线程n 创建线程的API 如下:HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpsa,/不支持,设为NULL DWORD cbStack,/线程栈的大小,通常被设置为NULL,使用默认值 LPTHREAD_START_ROUTINE lpStartAddr,/指向线程的执行函数的指针 LPVOID lpvThreadParam,/向线程中传递一个参数 DWORD fdwCreate,/控制线程创建的附加参数 LPDWORD lpIDThread/返回新创建线程的ID);如果线程创建成功,那么函数返回新创建线程的句柄;否则函数返回NULL。Windows CE 线程n 结束线程n 最好是从线程的执行函数返回n 在线程中调用ExitThread()函数可以使线程结束执行n 在当前线程中终止另一个线程调用TerminateThread()函数Windows CE 调度n Windows CE 是一个抢占式多任务(Preemptive Multitasks)操作系统。调度程序使用基于优先级的时间片算法对线程进行调度。n Windows CE 中每个线程都有一个优先级,Windows CE 调度系统根据线程的优先级进行调度。n Windows CE 将线程分为256 个优先级。0 表示优先级最高,255 表示优先级最低。096-优先级高于驱动程序的实时程序使用248255-基于Windows CE 的驱动程序153247-优先级低于驱动程序的实时程序使用248255-非实时的普通应用程序线程优先级分布图(例)Priority Component0-19 Open Real Time Above Drivers20 Graphics Vertical Retrace99 Power management Resume Thread100-108 USB OHCI UHCI,Serial109-129 IRSIR1,NDIS,Touch130 KITL131 VMini132 CxPort145 PS2 Keyboard148 IRComm150 TAPI248 Power Management249 WaveDev,Mouse,PnP,Power250 WaveAPI251 Normal252-255 Open-ApplicationsWindows CE 调度n 获取和设置线程的优先级n GetThreadPriority 当前线程的优先级n SetThreadPriority 改变当前线程的优先级(248255)n CeGetThreadPriority 得到当前线程的优先级n CeSetThreadPriority 改变当前线程的优先级Windows CE 调度n 时间片大小(Quantum):在线程获得处理器后,会执行特定的一段时间,然后重新调度,这段时间称做时间片大小。n 默认的时间片是 100 毫秒,OEM 可以在OAL 中重新设置n 获得时间片大小的APIDWORD CeGetThreadQuantum(HANDLE hThread);此函数以线程的句柄为参数,返回值是一个32位无符号整数,代表线程的时间片大小。Windows CE 调度n 线程的状态n 运行(Running)线程正在处理器上执行。n 就绪(Ready)线程可以执行,但是此刻没有占用处理器。如果就绪的线程被调度程序选中,则占用处理器就进入运行状态。n 挂起(Suspended)创建线程时指定了CREATE_SUSPENDED 参数或者调用SuspendThread()函数都可导致线程挂起。n 睡眠(Sleeping)调用Sleep 函数可使线程进入睡眠状态,处于睡眠状态的线程不能占有处理器。当睡眠时间结束后,线程转入就绪态。n 阻塞(Blocked)如果线程申请的共享资源暂时无法获得,那么线程就进入阻塞状态,处于阻塞状态的线程不能占有处理器。n 终止(Terminated)线程运行结束。Windows CE 调度n 线程的状态转换图就绪终止阻塞睡眠运行挂起运行结束 运行结束睡眠结束 睡眠结束得到 得到资源 资源Resume ResumeSuspend Suspend得到 得到CPU CPU上下文 上下文切换 切换Sleep(n)Sleep(n)Windows CE 调度n 线程A 拥有最高的优先级,他会一直执行直到结束或阻塞n 线程B 和C 使用时间片轮转算法(Round-Robin,RR)运行l 线程的调度Windows CE 调度n Windows CE 调度系统的特点n 具有高优先级的进程如果处于就绪状态,则总是会被调度系统选中执行n 如果系统中存在多个优先级相同的就绪进程,这些进程以时间片轮转算法调度n 如果线程的时间片大小被设置为0,那么它会一直占用处理器运行,直到线程结束或者进入阻塞、挂起及睡眠状态Windows CE 调度n 优先级反转(Priority Inversion):系统中有一些资源是由多个线程共享的,如果具有高优先级的线程申请的资源正在被低优先级线程占用,那么此时高优先级别的线程就阻塞在低优先级的线程上,反而使具有中优先级的线程先于高优先级的线程执行,这就是所谓的优先级反转。Windows CE 调度n Windows CE 中解决优先级反转的方法单级方法:在这种方法中,操作系统只会激活导致高优先级线程阻塞的一个低优先级线程上台执行,直到释放共享资源。优先级反转n Avoid priority inversion by keeping all threads waiting for same resource at the same priorityThread 3High PriorityMedium PriorityLow PriorityThread 3Resource Owner:Thread 2Thread 1Thread 1PriorityInversionPreemptPreemptBlockedPriorityRestoredThread 3Example:Thread 1 blocked waiting for resource owned by Thread 3,causing Priority InversionThread 3BlockedThread 1Thread 2 BlockedThread APIn 线程创建n CreateThread 创建一个普通优先级的线程n 线程优先级n GetThreadPriority 当前线程的优先级n SetThreadPriority 改变当前线程的优先级(251)n CeGetThreadPriority 得到当前线程的优先级n CeSetThreadPriority 改变当前线程的优先级n 线程睡眠n Sleep(0)放弃剩余的时间片n Sleep(n)睡指定的毫秒n Sleep(INFINITE)使当前线程一直睡眠n SleepTillTick 睡到下一个时钟嘀嗒n SuspendThread 增加线程的挂起计数n ResumeThread 减少线程的挂起计数同步对象n 线程n 需要同步对象在某些时候进行同步操作。n 同步对象状态n 未通知(Non-signaled)n 通知(Signaled)n 同步对象类型n Mutexn Semaphoren Eventn Critical Section同步对象n 等待函数n DWORD WaitForSingleObject(HANDLE hHandle,/同步对象的句柄 DWORD dwMilliseconds/等待的ms 数);n DWORD WaitForMultipleObjects(DWORD nCount,/lpHandles 中的同步对象个数CONST HANDLE*lpHandles,/同步对象句柄的数组BOOL fWaitALL,/是否等该lpHandles 中所有的内核对象DWORD dwMilliseconds/等待的ms 数);同步对象(Mutex)n 概览n 同一时刻只有一个线程可以拥有Mutex 对象n 全局名称的Mutex 可以跨进程使用。n 在没有线程拥有它时处于通知状态n 被线程拥有的时候处于非通知状态n 函数n 创建一个Mutex 同步对象HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes,/不支持,设置为NULL BOOL bInitialOwner,/是否为创建该Mutex 的线程所拥有 LPCTSTR lpName/可选,该Mutex 的名字);n 释放对Mutex 的占用BOOL ReleaseMutex(HANDLE hMutex/Mutex 的句柄);同步对象(Mutex)n 实例使用Mutex 对象对共享的全局变量i 进行访问HANDLE hMutex;INT i=0;/创建Mutex 对象和线程VOID Init()hMutex=CreateMutex(NULL,FALSE,NULL);CreateThread(NULL,NULL,ThreadProc1,NULL,NULL,NULL);CreateThread(NULL,NULL,ThreadProc2,NULL,NULL,NULL)DWORD WINAPI THreadProc1(LPVOID lpParameter)WaitForSingleObject(hMutex,INFINITE);/获得Mutex 对象 i+;/访问共享资源 ReleaseMutex(hMutex);/释放同步对象 return 0;DWORD WINAPI THreadProc2(LPVOID lpParameter)WaitForSingleObject(hMutex,INFINITE);/获得Mutex 对象 i-;/访问共享资源 ReleaseMutex(hMutex);/释放同步对象 return 0;同步对象(Semaphore)n 概览n 限制占有共享资源的数量(如果一个Semaphore 带有记数n,这表示同时最多可以有n 个线程占有该Semaphore)n 全局名称的Semaphores 可以跨进程使用。n 引用计数大于零时处于通知状态n 引用计数小于等于0 时处于非通知状态n 函数n 创建一个Semaphore 对象HANDLE WINAPI CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,/不支持,设为NULL LONG lInitialCount,/初始计数 LONG lMaximumCount,/最大支持的线程数LPCTSTR lpName/可选,Semaphore 的名字);n 释放SemaphoreBOOL ReleaseSemaphore(HANDLE hSemaphore,/要释放的Semaphore 句柄LONG lReleaseCount,/释放的引用个数LPLONG lpPreviousCount/返回释放前的Semaphore 计数);同步对象(Event)n 概览n 全局名称的Event 可以跨进程使用。n 事件发生时处于通知状态n 事件未发生时处于非通知状态n 函数n 创建Event 同步对象HANDLE WINAPI CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,/不支持,设为NULL BOOL bManualReset,/是否需要人工重置 BOOL bInitialState,/初始状态,TRUE 为通知状态 LPCTSTR lpName/可选,Event 的名字);n 把Event 同步对象设置为通知状态BOOL SetEvent(HANDLE hEvent/Event 的句柄);n 把Event 同步对象设置为未通知状态BOOL ResetEvent(HANDLE hEvent/Event 的句柄););同步对象(Event)n 实例使用Event 对象对共享的全局变量i 进行访问HANDLE hEvent;INT i=0;/创建一个自动重置,初始状态为通知的Event 对象。创建线程VOID Init()hEvent=CreateEvent(NULL,FALSE,TRUE,NULL);CreateThread(NULL,NULL,ThreadProc1,NULL,NULL,NULL);CreateThread(NULL,NULL,ThreadProc2,NULL,NULL,NULL);DWORD WINAPI ThreadProc1(LPVOID lpParameter)WaitForSingleObject(hEvent,INFINITE);/等待事件发生 i+;/访问共享资源 SetEvent(hEvent);/让事件再次发生 return 0;DWORD WINAPI ThreadProc2(LPVOID lpParameter)WaitForSingleObject(hEvent,INFINITE);/等待事件发生 i-;/访问共享资源 SetEvent(hEvent);/让事件再次发生 return 0;用户态下的同步方法 n 用户态下的同步方法n Critical Sectionn 互锁函数同步(Critical Section)n 概览n 允许多个线程共享访问同一块数据n 使用互斥访问保护数据n 其他线程会block 直到占有者放弃临界区n 每个CS 都是OS 提供的一个数据结构,只能在同一个进程内部使用,比MUTEX 要高效。n 函数n InitializeCriticalSectionn 分配 CRITICAL_SECTION 结构n EnterCriticalSectionn 调用着,在占有CS 的线程调用 LeaveCriticalSection 之前会阻塞n TryEnterCriticalSectionnEnterCriticalSection 的非阻塞版n LeaveCriticalSectionn 释放CriticalSection 的所有权n DeleteCriticalSectionn 释放InitializeCriticalSection 分配的资源同步(Critical Section)CRITICAL_SECTION cs;INT i=0;/初始化临界区 VOID Init()InitializeCriticalSection(&cs);CreateThread(NULL,NULL,ThreadProc1,NULL,NULL,NULL);CreateThread(NULL,NULL,ThreadProc2,NULL,NULL,NULL);DWORD WINAPI ThreadProc1(LPVOID lpParameter)EnterCriticalSection(&cs);/进入临界区 i+;LeaveCriticalSection(&cs);/离开临界区 return 0;DWORD WINAPI ThreadProc2(LPVOID lpParameter)EnterCriticalSection(&cs);/进入临界区 i+;LeaveCriticalSection(&cs);/离开临界区 return 0;同步(Interlocked Function)n 概览n 对多个线程对同一个变量的共享访问保护n 提供原子操作n 函数n InterlockedIncrement 对一个变量进行原子加1 操作n InterlockedDecrement-对一个变量进行原子减1 操作n InterlockedExchange 对两个变量进行交换值操作n InterlockedTestExchange 如果变量符合,则交换两个变量的值n InterlockedCompareExchange 基于比较,交换两个变量的值同步(Interlocked Function)n 实例使用互锁函数对共享的全局变量i 进行访问INT i=0;/创建线程VOID Init()CreateThread(NULL,NULL,ThreadProc1,NULL,NULL,NULL);CreateThread(NULL,NULL,ThreadProc2,NULL,NULL,NULL);DWORD WINAPI ThreadProc1(LPVOID lpParameter)InterlockedIncrement(&i);return 0;DWORD WINAPI ThreadProc2(LPVOID lpParameter)InterlockedDecrement(&i);return 0;进程间通信n 常用的两种方法n 文件映射n 点对点消息队列进程间通信 文件映射n 概览n 通过文件映射文件可在进程的共享虚拟地址空间内保留一个地址空间的区域,同时将文件所在的物理内存映射到此区域。n 在Windows CE 中,内存映射文件总是会被映射到4GB 虚拟地址空间的0 x4200 00000 x7FFF FFFF 的进程共享区域。n 函数n CreateFileForMapping 创建一个文件,用于内存映射n CreateFileMapping 创建内存映射文件对象n MapViewOfFile 把内存映射文件映射到进程共享地址空间n UnmapViewOfFile 删除内存映射文件进程间通信PTP 消息队列n 概览n 消息队列通常是一个先进先出的队列结构,当一个进程把消息写入队列,需要此消息的其他进程,就可从队列中取得消息。n 消息队列还可用来进行同步。n 消息是没有优先级的,对于同一个队列,所有的消息都严格按照先进先出的方式进出。n Windows CE 中的消息队列是基于点对点操作的,它不能用来进行广播。n 函数n CreateMsgQueue 创建或打开一个消息队列n OpenMsgQueue 对一个现存的消息队列打开一个句柄n CloseMsgQueue 关闭一个打开的消息队列n ReadMsgQueue 从消息队列中读一个消息n WriteMsgQueue 向消息队列写一条消息n GetMsgQueueInfo 返回有关一个消息队列的信息内存管理Windows CE 采用层次化的结构Physical Memory*Storage DeviceVirtual MemoryLogical Memory(Heap,stack)C Runtime(mallc,new)Application内存结构n 物理内存n 在内部或外部总线上可访问的实际的RAM/ROMn 虚拟内存n 通过内存管理单元MMU 把虚拟地址映射到物理地址n 允许代码在需要的时候再换入概述n 虚拟内存模型n 静态映射的虚拟内存n 进程模型n 进程内存n 进程n 堆n 栈虚拟内存模型n 虚拟内存n 一个 32-bit(4 Gigabyte)虚拟内存地址空间n 提供了被保护物理内存的有效使用n 虚拟地址n 内存管理单元(MMU)“拥有”物理内存n MMU 将虚拟地址转换为物理地址n 一个有效的虚拟地址必须被映射到一个物理地址n 虚拟地址的静态和动态映射n 物理地址n 在上电时,在MMU 有效之前只被CPU 使用虚拟内存模式n 特权模式n 在内核模式和用户模式间的虚拟内存splitn 所有的进程共享同一个平板式虚拟内存地址空间 n 通过MMU 内核模式管理用户模式进程保护n 内核空间n 只被特权访问的内核模式代码使用(Kmode)n 大多数是静态虚拟地址映射(不会有页内错误)n 用户空间n 每32MB 由64 个slots 组成n 大多数是动态虚拟地址映射虚拟内存模式Kernel SpaceUserSpaceKernel Addresses:KPAGE,Trap Area,OthersSlot 97:NK.EXEUnusedStatically Mapped Virtual Addresses:Un-CachedStatically Mapped Virtual Addresses:CachedSlot 0 Current ProcessSlot 1 XIP DLL codeSlots 2-32-ProcessesSlots 33-63Object Store and Memory-Mapped FilesFFFF FFFFE000 0000C400 0000C200 0000C000 0000A000 00008000 00007FFF FFFF4200 00000400 00000200 00000000 0000Total 4 GB VirtualSpace2 GB2 GBKernel Space User SpaceUnused静态映射虚拟地址2 GBUser512 MBUncached512 MBCached32 MB FlashPhysical Memory Virtual Memory04000000820000008000 0000A000 0000C000 00000000000064 MB RAM0000 000064 MB RAM32 MB Flash64 MB RAMFFFF FFFFAddressTranslation32 MB FlashKernel SpaceUserSpaceProcess Modeln 虚拟地址 Slotsn 每个slot 是32 MB(225 bytes)虚拟地址空间n Slot 空间被进程,DLLs,和虚拟分配共享n 在进程slot 间快速进行上下文切换(交换页表)n 当前线程执行在slot 0 上n 管理粒度n 虚拟地址空间以64KB 的粒度被分割n 物理地址以4KB 的粒度被页进行管理n 分配规则n DLL 分配从高地址开始向下增长n 进程分配从低地址开始向上增长Lesson:Process MemorySlot 30Slot 31Slot 32.01FF FFFF0001 00000000 000032 MB Process SpaceCurrent ProcessXIP ROM DLLsnk.exefilesys.exeshell.exedevice.exegwes.exeC400 0000C200 0000Free Virtual SpaceSlot 63.Resource DLLsSlot 2Slot 3Slot 4Slot 5Slot 1Slot 00A00 00003E00 00003C00 00004000 00004200 00000000 00000400 00000200 00000600 00000800 00000C00 0000.Slot 978000 00007E00 0000堆n 用法n 以字节为粒度来分配内存n 独立于处理器(隐藏了内存分页)n 自动的分

    注意事项

    本文(Windows CE指南.ppt)为本站会员(涵***)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开