Windows ce的体系结构和功能

简介:                              Windows ce体系结构图   操作系统层 操作系统的基本功能被放在多个独立的进程(exe)里面实现。

                             Windows ce体系结构图

 

操作系统层

操作系统的基本功能被放在多个独立的进程(exe)里面实现。在运行的时候,这些进程大致有如下几个:

l         内核NK.EXE

l         图形系统GWES.EXE

l         对象存储FILESYS.EXE

l         设备管理系统DEVICE.EXE

l         服务SERVICES.EXE

 

系统调用与CoreDLL.DLL

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

Windows ce的系统调用

ü         应用程序进行系统调用时,它直接调用的是CoreDLL.DLL中的一个(Wrapper)函数,此包装函数为真正的系统调用准备所需要的参数。CoreDLL.DLL会被Windows CE的所有进程加载,因此这一步其实只是进程内部的函数调用。

ü         CoreDLL.DLL会发起一个异常,也可叫做软件中断。在不同的CPU体系结构上,异常的实现原理也不一样。总之,异常的作用是把执行权重新由应用程序还给操作系统。

ü         操作系统内核会捕捉所有的异常,当操作系统捕获到此异常时,也就重新获得CPU。在Windows CE上,NK.EXE会处理这个软件中断,这样进行系统调用的应用程序进程就挂起了,挂靠就转入了NK.EXE。

ü         接下来,NK.EXE根据系统调用的不同,找到具体实现该系统调用的进程(这些进程在Windows CE上也被叫做PSL,全称是Protected Server Library)。此进程可能是NK.EXE,也可能不是。如果不是NK.EXE,那么执行就再次跳转,把执行转到具体实现系统调用的进程去执行。

ü         实现这个系统调用的进程得到执行的机会。

ü         系统调用结束,应用程序可以从对CoreDLL.DLL的调用处返回,然后继续执行。

要注意的是CoreDLL.DLL中有些函数并不是系统调用的包装函数,例如字符串处理函数,当应用程序调用这类函数时,就不会发生自陷和进程执行的跳转。

由上CreateWindow()的调用可以看出,windows ce中的每次系统调用都会导致多个进程之间频繁切换,而且系统调用所涉及的数据也需要在多个进程之间迁移,这样势必会使整个系统的效率降低。其实,在系统调用的整个过程中,并没有发生真正的线程上下文切换。Windows ce内核负责把api调用转到实现该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是由微软提供的,它的代码与CPU指令体系结构相关而与具体的外设无关,此种设计可使OAL尽可能小OAL.LIB是OEM层中的OAL代码编译后的输出。


目录
相关文章
|
3月前
|
存储 算法 C++
【Qt应用开发】复刻经典:基于Qt实现Windows风格计算器(加减乘除、删除、归零功能全解析)
在Qt中,"栈"的概念主要体现在两个层面:一是程序设计中的数据结构——栈(Stack),二是用户界面管理中的QStackedWidget控件。下面我将分别简要介绍这两个方面:
128 4
|
23天前
|
Linux Android开发 iOS开发
Windows平台RTSP|RTMP播放器如何实现实时录像功能
Windows平台RTSP、RTMP播放器实时录像接口设计,实际上,除了Windows平台,我们Linux、Android、iOS平台也是一样的设计,单纯的录像模块,如果做的全面,也不是一两个接口可以搞定的
|
2月前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
43 0
|
2月前
|
API C# Shell
WPF与Windows Shell完美融合:深入解析文件系统操作技巧——从基本文件管理到高级Shell功能调用,全面掌握WPF中的文件处理艺术
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的关键组件,用于构建 Windows 桌面应用程序。WPF 提供了丰富的功能来创建美观且功能强大的用户界面。本文通过问题解答的形式,探讨了如何在 WPF 应用中集成 Windows Shell 功能,并通过具体示例代码展示了文件系统的操作方法,包括列出目录下的所有文件、创建和删除文件、移动和复制文件以及打开文件夹或文件等。
55 0
|
2月前
|
C# Windows 监控
WPF应用跨界成长秘籍:深度揭秘如何与Windows服务完美交互,扩展功能无界限!
【8月更文挑战第31天】WPF(Windows Presentation Foundation)是 .NET 框架下的图形界面技术,具有丰富的界面设计和灵活的客户端功能。在某些场景下,WPF 应用需与 Windows 服务交互以实现后台任务处理、系统监控等功能。本文探讨了两者交互的方法,并通过示例代码展示了如何扩展 WPF 应用的功能。首先介绍了 Windows 服务的基础知识,然后阐述了创建 Windows 服务、设计通信接口及 WPF 客户端调用服务的具体步骤。通过合理的交互设计,WPF 应用可获得更强的后台处理能力和系统级操作权限,提升应用的整体性能。
83 0
|
2月前
|
Kubernetes Cloud Native 开发者
探索云原生技术:Kubernetes入门与实践探索Windows操作系统的隐藏功能
【8月更文挑战第31天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性、效率和可靠性的关键。本文将带你了解云原生的核心组件之一——Kubernetes(K8s),通过浅显易懂的语言和实际代码示例,引导你步入这一强大工具的世界。无论你是初学者还是有经验的开发者,本篇都将为你打开一扇通向高效资源管理与自动化部署的大门。
|
2月前
|
编解码 开发工具 C#
[大牛直播SDK]Windows平台RTMP直播推送模块功能设计
大牛直播SDK采用全自研框架,具备高度可扩展性与自适应算法,显著降低延迟并提高采集编码效率。SDK以模块化设计,支持RTMP推流及多种音视频编码格式(如AAC、SPEEX、H.264、H.265),并能与播放器SDK组合实现丰富功能,包括流媒体转发、内置RTSP服务等。提供了详尽的参数配置选项,支持多摄像头、屏幕采集与水印叠加,并兼容Windows 7及以上操作系统。该SDK以C++/C#双接口形式提供,集成简便,同时包含调试与发布版本库,便于开发者快速上手。此外,支持断网重连、实时预览及多种编码前后的数据对接需求。
|
4月前
|
人工智能 安全 数据库
Windows的新Recall功能:隐私和安全的噩梦?
Windows的新Recall功能:隐私和安全的噩梦?
|
3月前
|
C# 开发者 Windows
4款.NET开源、功能强大的Windows桌面工具箱
4款.NET开源、功能强大的Windows桌面工具箱
|
4月前
|
网络架构 Windows
windows电脑开机自动启动FRP客户端CMD代码,增加延时15秒功能
经常使用FRP客户端的都知道,FRP客户端启动时需要电脑有网络,否则会自动退出。我们的电脑在启动时,受路由器网络的影响,很多时间并不能第一时间建立起网络来,所以很容易受到网络影响,让FRP客户端自动启动发生故障。而这里的解决办法就是增加一段代码,可以延时15秒再执行。