查看: 1576|回复: 0
打印 上一主题 下一主题

Windows ce的体系结构和功能

[复制链接]
跳转到指定楼层
沙发
发表于 2015-3-20 23:20:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

[url=]Windows[/url] ce的体系结构和功能

                             Windows ce体系结构图

操作系统层操作系统的基本功能被放在多个独立的进程(exe)里面实现。在运行的时候,这些进程大致有如下几个:
l         内核NK.EXE
l         图形系统GWES.EXE
l         对象存储FILESYS.EXE
l         设备[url=]管理[/url]系统DEVICE.EXE
l         服务SERVICES.EXE

系统调用与CoreDLL.DLLCoreDLL.DLL不是一个单独的进程,它是一个会被所有用户进程都加载的动态链接库。所有的应用程序都不能直接与操作系统或硬件打交道,如果用户程序希望访问windows ce所提供的服务,那么只能通过CoreDLL.DLL进行。

Windows ce的系统调用

ü         应用程序进行系统调用时,它直接调用的是CoreDLL.DLL中的一个(Wrapper)函数,此包装函数为真正的系统调用准备所需要的参数。CoreDLL.DLL会被Windows CE的所有进程加载,因此这一步其实只是进程内部的函数调用。
ü         CoreDLL.DLL会发起一个异常,也可叫做[url=]软件[/url]中断。在不同的CPU体系结构上,异常的实现原理也不一样。总之,异常的作用是把执行权重新由应用程序还给操作系统。
ü         操作系统内核会捕捉所有的异常,当操作系统捕获到此异常时,也就重新获得CPU。在Windows CE上,NK.EXE会处理这个软件中断,这样进行系统调用的应用程序进程就挂起了,挂靠就转入了NK.EXE。
ü         接下来,NK.EXE根据系统调用的不同,找到具体实现该系统调用的进程(这些进程在Windows CE上也被叫做PSL,全称是Protected [url=]Server[/url] Library)。此进程可能是NK.EXE,也可能不是。如果不是NK.EXE,那么执行就再次跳转,把执行转到具体实现系统调用的进程去执行。
ü         实现这个系统调用的进程得到执行的机会。
ü         系统调用结束,应用程序可以从对CoreDLL.DLL的调用处返回,然后继续执行。
要注意的是CoreDLL.DLL中有些函数并不是系统调用的包装函数,例如字符串处理函数,当应用程序调用这类函数时,就不会发生自陷和进程执行的跳转。

由上CreateWindow()的调用可以看出,windows ce中的每次系统调用都会导致多个进程之间频繁切换,而且系统调用所涉及的数据也需要在多个进程之间迁移,这样势必会使整个系统的效率降低。其实,在系统调用的整个过程中,并没有发生真正的线程上下文切换。Windows ce内核负责把[url=]api[/url]调用转到实现该api的PSL进程。PSL进程会把进行系统调用的执行线程从一个进程迁移到下一个进程。比如说,上个例子中,虽然CreateWindow系统调用会在应用程序、NK.EXE和GWES.EXE中来回切换,但是在3个进程中招待的纯种是同一个线程。而所谓的“切换”只是把执行进程的虚拟地址空间映射到了Slot 0。Windows ce内核负责把应用程序中的用户态线程改变访问权限,然后把它迁移到系统进程中,在整个系统调用过程中,这个线程在3个进程中使用同一个栈和同一些寄存器。当这个线程离开PSL进程的时候,windows ce内核再把它的特殊访问权限移除。
内核NK.EXE系统运行时,windows ce的内核表现为NK.EXE进程。NK.EXE是所有windows ce的系统中都存在的核心进程,它表现了win32 API核心中进程创建加载、纯种高度、中断处理和内在管理等核心功能。
NK.EXE由NK.LIB与OAL.LIB组成。NK.LIB是由[url=]微软[/url]提供的,它的[url=]代码[/url]与CPU指令体系结构相关而与具体的外设无关,此种设计可使OAL尽可能小OAL.LIB是OEM层中的OAL代码编译后的输出。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表