- 1、本文档共45页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Session 2: Testing Windows CE .NET Alan Page, Microsoft 概述 系统架构 NK.EXE FILESYS.EXE DEVICE.EXE GWES.EXE SERVICES.EXE Thread Migration Windows CE 系统架构 NK.EXE NK.LIB + OAL.LIB = NK.EXE 内核是硬件体系结构无关但是是处理器相关的 OAL越小越好 微软提供了预先编译的 NK.LIB 库文件 NK.lib的大多数代码都是公开的 通过高级代码共享,可以得到更多代码 提供: 内存管理 调度管理 系统调用转发 实现了一些基本的Win32函数 Protected Server Libraries (PSL) 实现API的系统函数 把操作系统的功能放在多个进程的机制 PSL Calls run through the Kernel (NK.EXE) 不对最终用户开放 你不能创建一个PSL GWES.EXE 图形窗口事件系统 (GWES) 管理所有的图形界面处理以及用户输入 桌面的 USER32 + GDI32 作为一个单独的进程 DEVICE.EXE 设备管理器 电池驱动已经被从GWES中拿走了 大多数功能都放在了devmgr.dll中。 提供所有的与驱动相关的函数实现 在启动的时候通过注册表加载驱动程序 Services.EXE 所有服务的宿主进程 与Device.exe分开 FTP, TELNET, HTTPD (Web), UPnP, SMB, 其它… 用户可以添加服务 提供命令行工具来启动、关闭服务 提供API管理服务 文件系统 所有与文件系统相关的函数都在 FileSys.exe中实现 单根 “\”, 没有像“C:\”一样的盘符 有三个组件: 对象存储 存储管理器 ROM 文件系统 文件系统概述 目标存储 被 FileSys.exe管理的一个堆 包括: Registry Database RAM文件系统 RAM 文件系统通常位于根目录 Ex : “\myfile.txt” 存在于RAM中 ROM 文件系统 被映射成“\Windows” 目录 “\Windows” 目录中所有的文件都是只读的 通常是nk.bin或nk.nb0中的文件 存储管理 负责: Storage device driver Partition device driver File System device driver File System filter 线程迁移 概述 进程 线程 虚拟内存 Windows CE 内核特征 多进程 可以支持最多32个进程 多线程 支持256个线程优先级 Fibers 只能被应用程序手工调度的执行单元 同步对象 Critical Sections, Mutexes, Semaphores, Events, Message Queues 内存模型 Virtual memory, Code sections Paged, No backing store for Data sections 进程 静态上下文,线程的容器 进程不被执行,线程被执行 系统中同时最多只能有32个进程: 对大多数嵌入式系统来说都已经足够。推荐用多线程而不是多进程 迎合一些体系结构的支持 Windows CE 使用与 Windows XP一样的加载/卸载模型 (与其它桌面Window一样) 支持命令行程序 但是与桌面Win32 API不一样 调用 CreateProcess() 启动进程 线程 Win32的执行的单元 按照优先级调度 高优先级的线程会抢占低优先级的线程 同样的优先级使用Round-Robin算法 默认的时间片是 100毫秒,OEM可以在OAL中重新设置 线程调度 线程A拥有最高的优先级,他会一直执行直到结束或阻塞 线程B和C使用Round-Robin算法运行 在round-robin 每个线程都运行一个固定的时间,叫做时间片 优先级数字越小,优先级越高 线程优先级分布图(例) 优先级反转 Avoid priority inversion by keeping all threads waiting for same resource at the same priority Thread API 线程创建 CreateThread – 创建一个普通优先级的线程 线程优先级 GetThreadPriority – 当前线程的优先级 SetThreadPriority – 改变当前线程的优先级 (251) CeGetThreadPriority – 得到实时线程的优先级 CeSetThreadPriority – 改变实时线程的优先级 线程睡眠 S
文档评论(0)