KRTS内核模式简介

本文介绍了如何通过内核模式编程提高应用程序的实时响应能力,探讨了在不同内存区域执行代码的挑战,着重介绍了DLL重定位作为推荐的解决方案,以及它在32位和64位Windows系统中的应用。
摘要由CSDN通过智能技术生成

Kernel Mode 简介

为了使用实时机制,需要使用内核模式。

我们开发 Kithara RealTime Suite 的第一个重要尝试就是内核编程。这需要在应用程序内定义所需的代码。因此,一般的开发环境即可开发内核层代码,并且不需要创建内核驱动程序。

通常,应用程序的响应时间是对抗性的,因为即使在非常高的确定优先级下,它也不能保证的响应时间(典型的变化在几十微秒,但在某些情况下可能是几毫秒)。唯一的解决方案是在内核级别上执行代码序列,以通过高优先级获得更短的延迟。

在应用程序级别进行开发工作量较小,但在内核级别执行而导致适当的实时性并不容易实现。这个问题源于应用程序代码和系统代码(操作系统和内核驱动程序)之间的区别,即所谓的“内存区域”:为了为每个(32位)应用程序提供4 GB的线性地址空间和2 GB的连续逻辑空间,使用了i386处理器及其后续处理器的分页机制,该机制将逻辑地址转换为物理地址。这个机制被称为分页。

进程切换后不同的地址是有效的

如果操作系统根据其多任务特性激活另一个进程,则应用程序特定的地址空间也将发生切换。到目前为止活动进程的代码地址将无效,直到其自己的地址切换将被使用。

以下表格显示了内存区域:

32-bit-Windows系统变量

区域含义
00000000h … 7FFFFFFFh在进程变换时,“进程地址空间”(应用程序)会发生变化
80000000h … FFFFFFFFh在内核中,静态的地址不会改变

64-bit-Windows系统变量

区域含义
00000000 00000000h … 00007FFF FFFFFFFFh在进程变换时,应用程序的地址空间会发生变化
FFFF8000 00000000h … FFFFFFFF FFFFFFFFh内核中的地址是静态的,不会在进程切换时改变

可能的解决方案

开发环境的编译器以这种方式创建代码,使其加载到为应用程序程序提供的较低的2-GByte区域中。为了在内核级别上执行代码,必须将代码重新定位到系统地址范围内。因此,存在不同的解决方案:

  • 将 DLL(动态链接库)一次性加载到系统地址空间中(DLL 的重定位)。
  • 对回调函数进行完整的“command-for-command”分析,并在地址空间中生成具有相同语义的副本(函数的重定位,仅适用于 32 位 Windows 操作系统)。

注意:“DLL 的重定位”是推荐的解决方案!

这两种可能性都提供在内核模式中,但函数的重定位仅适用于 32 位 Windows 操作系统,并且不会进一步开发!

我们建议对于所有新的开发项目,以及对于更复杂的开发项目,使用DLL 的重定位机制。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值