Windows操作系统环境下可调速高精度定时器的实现方法技术方案

技术编号:15570900 阅读:51 留言:0更新日期:2017-06-10 04:11
本发明专利技术公开了一种Windows操作系统环境下可调速定时器的实现方法,包括:选APIC定时器,提供用户态接口;用户态接口封装:将调速功能和时间相关函数接口封装为动态链接库,供Windows操作系统中的应用程序使用;应用程序加载动态链接库,实现用户态接口的调用;调用用户态接口,将调整后的APIC定时器周期传入内核;将调整后的APIC定时器周期赋值给初始计数寄存器,实现APIC定时器的周期调整。本发明专利技术完成对定时器时间间隔的动态调整,改变定时器时间间隔与真实系统时间跨度之间的比例关系,实现定时器的可调速功能,解决现有定时器速率单一的问题,满足Windows程序在不同环境下的应用需求。

Realization method of adjustable speed timer in Windows operating system environment

The invention discloses a Windows operating system environment implementation method, including: speed timer can choose APIC timer, provide the user interface state; user interface package: speed control function and time correlation function interface encapsulation to dynamic link library for application in Windows operating system; the application loaded dynamic link library the user interface, call; call user interface, the adjusted APIC timer cycle into the kernel; APIC cycle timer assignment after adjustment to the initial count register, realize the adjustment cycle timer APIC. The invention realizes dynamic adjustment of the timer interval timer, change between time interval and real system time span ratio, the timer can control function, solves the problems of the existing single rate timer, meet the application requirements of Windows program in different environments.

【技术实现步骤摘要】

本专利技术涉及Windows操作系统的中断处理、高精度定时以及系统软件开发
更具体地说,本专利技术涉及一种利用APIC(AdvancedProgrammableInterruptController)定时器在Windows操作系统环境下实现高精度可调速的定时器的方法。
技术介绍
Windows操作系统为用户提供了三类定时器:WM_TIMER消息定时器、多媒体时钟定时器和高精度时钟定时器。1)WM_TIMER定时器:WM_TIMER定时器是Windows最基础的定时器,通过SetTimer()进行创建和设定间隔,进而采用KillTimer()进行销毁。WM_TIMER创建后将定时为指定线程发送WM_TIMER消息,并加入消息队列等待处理。WM_TIMER定时器消息是一种低优先级消息,只有当没有更高优先级的消息在线程消息队列中时,WM_TIMER消息才会被投递。同时WM_TIMER定时器精度很低,平均值大约在15ms左右,不具有高精度特性。2)多媒体时钟定时器:多媒体时钟定时器可以为应用程序提供精度为毫秒的定时事件。使用timeSetEvent()函数注册用回调函数,并可以通过调用timeKillEvent()函数关闭定时器。多媒体时钟定时器最高能够实现最高1ms精度定时,多媒体时钟无法满足高于1ms的定时需求.3)高精度时钟定时器:当系统中存在高精度性能计数器(High-ResolutionPerformanceCounter)时,应用程序能够采用QueryPerformanceCounter函数实现纳秒级精度的定时。QueryPerformanceCounter内部采用循环制,监测CPU高精度性能计数器的变化,因此该定时器的使用会占用大量CPU资源。此外,虽然Windows系统所提供的上述三类定时器能够满足特定定时精度的需要,但无法动态调整定时器时间间隔与真实系统时间跨度之间的比例关系,即没有提供动态调整定时器速率的功能。
技术实现思路
本专利技术的一个目的是解决上述至少一个问题或缺陷,并提供后面将说明的至少一个优点。本专利技术还有一个目的是提供一种Windows操作系统环境下可调速定时器的实现方法,其通过Windows驱动的方式,利用APIC定时器设备,产生百微秒级的时钟信号,实现了最高精度为100微秒的高精度定时器;通过在运行时修改APIC定时器中初始计数寄存器(initialcountregister)中的数值,完成对定时器时间间隔的动态调整,改变定时器时间间隔与真实系统时间跨度之间的比例关系,实现定时器的可调速功能,解决现有的Windows系统定时器不可调速的问题,解决系统定时器功能固定、速率单一的问题,满足Windows程序在不同环境下的应用需求。为了实现根据本专利技术的这些目的和其它优点,提供了一种Windows操作系统环境下可调速定时器的实现方法,包括以下步骤:步骤一、用户态接口提供:选用APIC定时器,提供一组用户态接口;步骤二、用户态接口封装:将调速功能和时间相关函数接口封装为动态链接库,供Windows操作系统中的应用程序使用;步骤三、动态链接库加载:应用程序加载所述动态链接库,实现所述用户态接口的调用;步骤四、新周期值传入内核:应用程序通过调用所述动态链接库中的用户态接口,将调整后的APIC定时器周期以DeviceIoControl或者共享内存的方式传入内核;步骤五、APIC定时器周期更改:将所述步骤四调整后的APIC定时器周期赋值给初始计数寄存器,实现APIC定时器的周期调整,其中,初始计数寄存器进行了设置,具体设置包括:初始计数寄存器设定公式:计数值=APIC定时器周期×CPU外频×时间单位/1000,往地址0xFEE00380写入计数值,设置初始计数寄存器。优选的是,调速功能包括:时间速率控制、定时器时间冻结和解冻功能,时间速率控制实现步骤包括:往地址0xFEE00380中写入利用初始计数寄存器设定公式计算所得计数值即可实现1倍速;往0xFEE00380中写入0.1×计数值即可实现10倍速,往0xFEE00380中写入10×计数值即可实现0.1倍速;定时器时间冻结实现步骤包括:保存地址0xFEE00380中数据并往地址0xFEE00380写入0,设置初始计数寄存器为0;解冻功能实现步骤包括:往地址0xFEE00380写入冻结时保存的数值。优选的是,所述步骤二中,时间相关函数实现授时功能和任务睡眠功能,授时功能实现步骤包括:通过CreateFile函数加载驱动,通过DeviceIoControl函数或者共享内存获取调度器中的系统时间,返回获取的系统时间;任务睡眠功能实现步骤包括:获取当前线程ThreadId作为后续挂起、唤醒操作的操作对象,计算任务释放时间,将当前任务线程控制块TCB插入让渡队列Yield_List中,其中,任务释放时间=定时器系统时间+睡眠时间。优选的是,APIC定时器进行了相关设置,具体设置包括:LocalAPIC含有4个用于产生时钟中断的寄存器:分频寄存器、初始计数寄存器、当前计数寄存器与本地向量表寄存器,分频寄存器用来表示当前系统时间基准和系统总线的倍数关系,将往地址0xFEE003E0写入0xB,将分频寄存器设置为1;APIC定时器的计数模式设置:通过本地向量表寄存器设置为单次模式或者周期模式,此处设置为周期模式,在周期模式下,当前计数寄存器自动从初始计数寄存器载入计数值,然后以总线频率开始递减,当计数达到0时,触发本地向量表寄存器中存储的中断向量并根据中断向量从中断向量表中调用中断处理函数,然后再次载入初始计数寄存器中数值,往地址0xFEE00320写入0x300e2,使其指向对应中断处理函数并设置为周期模式。优选的是,APIC定时器具有高精度特性,其高精度特性通过以下步骤实现:设置APIC定时器:设置初始计数寄存器、分频寄存器和本地向量表寄存器,使其能产生微秒级的时钟信号供调度器使用;内核态函数接口封装:借助于系统服务描述符表,利用已知的Windows接口特征码,搜索系统内存指令,获取调度器所需的函数地址,并根据系统函数原型,利用内联汇编进行调用,供调度器使用;实现调度器:利用上一步所封装的内核态函数接口,完成调度器的编写,在调度器内维护定时器时间和任务队列。优选的是,调度器内维护定时器时间和任务队列中,所述调度器实现的具体步骤包括:通过用户态接口将需要周期性唤醒的任务的线程控制块TCB插入让渡队列Yield_List并计算任务唤醒时间;系统时间增加APIC周期时间;遍历让渡队列Yield_List,一旦发现存在任务就通过挂起函数地址挂起该任务,并将该任务线程控制块TCB插入等待队列Waiting_List;遍历等待队列Waiting_List检查是否有任务已经到达唤醒时间,如果到达释放时间,就将该任务线程控制块TCB从等待队列Waiting_List中删除并插入就绪队列Ready_List;遍历就绪队列Ready_List检查是否有任务需要唤醒,一旦队列中存在任务,就通过恢复函数地址将该任务唤醒。优选的是,挂起函数地址为NtSuspendThread函数地址,恢复函数地址为NtResumeThread函数地址。优选的是,所述调度器通过APIC本文档来自技高网
...
<a href="http://www.xjishu.com/zhuanli/55/201611155005.html" title="Windows操作系统环境下可调速高精度定时器的实现方法原文来自X技术">Windows操作系统环境下可调速高精度定时器的实现方法</a>

【技术保护点】
一种Windows操作系统环境下可调速定时器的实现方法,包括以下步骤:步骤一、用户态接口提供:选用APIC定时器,提供一组用户态接口;步骤二、用户态接口封装:将调速功能和时间相关函数接口封装为动态链接库,供Windows操作系统中的应用程序使用;步骤三、动态链接库加载:应用程序加载所述动态链接库,实现所述用户态接口的调用;步骤四、新周期值传入内核:应用程序通过调用所述动态链接库中的用户态接口,将调整后的APIC定时器周期以DeviceIoControl或者共享内存的方式传入内核;步骤五、APIC定时器周期更改:将所述步骤四调整后的APIC定时器周期赋值给初始计数寄存器,实现APIC定时器的周期调整,其中,初始计数寄存器进行了设置,具体设置包括:初始计数寄存器设定公式:计数值=APIC定时器周期×CPU外频×时间单位/1000,往地址0xFEE00380写入计数值,设置初始计数寄存器。

【技术特征摘要】
1.一种Windows操作系统环境下可调速定时器的实现方法,包括以下步骤:步骤一、用户态接口提供:选用APIC定时器,提供一组用户态接口;步骤二、用户态接口封装:将调速功能和时间相关函数接口封装为动态链接库,供Windows操作系统中的应用程序使用;步骤三、动态链接库加载:应用程序加载所述动态链接库,实现所述用户态接口的调用;步骤四、新周期值传入内核:应用程序通过调用所述动态链接库中的用户态接口,将调整后的APIC定时器周期以DeviceIoControl或者共享内存的方式传入内核;步骤五、APIC定时器周期更改:将所述步骤四调整后的APIC定时器周期赋值给初始计数寄存器,实现APIC定时器的周期调整,其中,初始计数寄存器进行了设置,具体设置包括:初始计数寄存器设定公式:计数值=APIC定时器周期×CPU外频×时间单位/1000,往地址0xFEE00380写入计数值,设置初始计数寄存器。2.如权利要求1所述的Windows操作系统环境下可调速定时器的实现方法,其中,调速功能包括:时间速率控制、定时器时间冻结和解冻功能,时间速率控制实现步骤包括:往地址0xFEE00380中写入利用初始计数寄存器设定公式计算所得计数值即可实现1倍速;往0xFEE00380中写入0.1×计数值即可实现10倍速,往0xFEE00380中写入10×计数值即可实现0.1倍速;定时器时间冻结实现步骤包括:保存地址0xFEE00380中数据并往地址0xFEE00380写入0,设置初始计数寄存器为0;解冻功能实现步骤包括:往地址0xFEE00380写入冻结时保存的数值。3.如权利要求1所述的Windows操作系统环境下可调速定时器的实现方法,其中,所述步骤二中,时间相关函数实现授时功能和任务睡眠功能,授时功能实现步骤包括:通过CreateFile函数加载驱动,通过DeviceIoControl函数或者共享内存获取调度器中的系统时间,返回获取的系统时间;任务睡眠功能实现步骤包括:获取当前线程ThreadId作为后续挂起、唤醒操作的操作对象,计算任务释放时间,将当前任务线程控制块TCB插入让渡队列Yield_List中,其中,任务释放时间=定时器系统时间+睡眠时间。4.如权利要求1所述的Windows操作系统环境下可调速定时器的实现方法,其中,APIC定时器进行了相关设置,具体设置包括:LocalAPIC含有4个用于产生时钟中断的寄存器:分频寄存器、初始计数寄存器、当前计数寄存器与本地向量表寄存器,分频寄存...

【专利技术属性】
技术研发人员:杜承烈王延钊陈进朝蒋泽军彭寒
申请(专利权)人:西北工业大学
类型:发明
国别省市:陕西;61

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1