基于用户模式多任务下控制硬件设备的方法及其装置制造方法及图纸

技术编号:7809308 阅读:161 留言:0更新日期:2012-09-27 08:06
本发明专利技术公开了基于用户模式多任务下驱动器控制硬件设备的方法及其装置,所述方法包括:在用户模式下接收当前进程访问硬件设备的请求,请求中含有当前进程的ID;判断当前进程是否获取了访问硬件设备的互斥锁;若当前进程获取了访问硬件设备的互斥锁,判断当前进程的ID与最近一次访问硬件设备的进程的ID是否相同;若当前进程的ID与最近一次访问硬件设备的进程的ID不相同,在当前进程和最近一次访问硬件设备的进程之间进行上下文切换,使当前进程得以使用该硬件设备。通过上述方式,本发明专利技术能够在访问复杂硬件设备时,能够大幅提升用户模式下驱动器的性能,又能很好地实现在多任务环境下对硬件设备的随机安全访问。

【技术实现步骤摘要】

本专利技术涉及计算机
,特别是涉及基于用户模式多任务下驱动器控制硬件设备的方法及其装置。
技术介绍
Unix系统如Linux下的程序都可以工作在两种模式下用户模式(User Mode)以及内核模式(KerneI Mode)。用户模式一个在用户模式下运行的程序,只能受限制地访问部分系统资源,不能直接访问内核(Kernel)数据结构,不能直接与内核程序交互。 内核模式一个在内核模式下运行的程序,可以执行任何CPU指令,访问4G以32位中央处理器CPU (Central Processing Unit)为例存储空间的任意位置,也可以直接访问内核数据结构或程序。驱动器是指通过某个文件系统格式化并带有一个驱动器号的存储区域。驱动器在整个控制环节中,正好处于主控制箱(Main Controller)以及马达(Motor)的中间环节,它的主要功能是接收来自主控制箱的信号,然后将信号进行处理再转移至马达以及和马达有关的感应器,并且将马达的工作情况反馈至主控制箱。为了实现多任务下的硬件设备及数据共享,主流的Linux驱动器(Driver)都是エ作在内核模式下的,但这样会导致产生至少以下几个缺陷第一,由于驱动器做在了 Linux内核里面,难以回避通用公共许可证(GPLlicense)传染,并且必须公开自己的源代码(Source Code),这在某些商用领域是很难接受的。第二,应用程序需要频繁地出入内核模式,对ー些功能复杂的硬件设备,例如图形处理显示器频繁地出入内核,将带来巨大的系统开销,直接导致整个系统性能的下降。第三,在内核模式下的驱动器,一旦某个程序访问拥堵通常会造成整个系统运行的拥堵,即便这个程序访问拥堵只是由某一个进程(Process)的错误造成的。而在用户模式下驱动器某个程序访问拥堵通常只会导致使用它的那ー个进程拥堵,不会影响到系统及其它进程。第四,硬件设备调试很不方便,特别是对ー些需要经常访问硬件设备寄存器(Register)的情况,更是如此。现行已有的某些基于用户模式的驱动器,也只能应用在一些相对简单的硬件设备上,无法做到在多任务环境下,应用程序随机、安全地对硬件设备进行访问。
技术实现思路
本专利技术主要解决的技术问题是提供一种基于用户模式多任务下驱动器控制硬件设备的方法及其装置,能够大幅提升访问复杂硬件设备时驱动器的性能,又能很好地实现在多任务环境下对硬件设备的随机安全访问。为解决上述技术问题,本专利技术采用的一个技术方案是提供一种基于用户模式多任务下驱动器控制硬件设备的方法,包括在用户模式下接收需要访问硬件设备的进程访问该硬件设备的请求,该请求中含有所述需要访问硬件设备的进程的标识(ID);判断所述需要访问硬件设备的进程是否获取了访问该硬件设备的互斥锁;若所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁,则判断所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID是否相同;若所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID不相同,则在所述需要访问硬件设备的进程和最近一次访问该硬件设备的进程之间进行上下文切換,使得所述需要访问硬件设备的进程使用该硬件设备。其中,还包括从已保存的所述需要访问硬件设备的进程的进程镜像文件读出寄 存器和I/o状态数据或上述两者之一,并将其写入该硬件设备,该硬件设备恢复为所述需要访问硬件设备的进程的配置。其中,所述进程镜像文件是指用户模式下驱动器的进程镜像中的文件,该文件用于保存该硬件设备寄存器和I/o状态数据或上述两者之一且为每个进程所独享的数据。其中,还包括若所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁,判断所述需要访问硬件设备的线程的ID与已经获得该互斥锁的线程的ID是否相同;若与已经获得该互斥锁的线程的ID相同,则将互斥锁计数器的值加1,并且所述需要访问硬件设备的线程继续使用该硬件设备;若与已经获得该互斥锁的线程的ID不相同,则所述需要访问硬件设备的线程等待,直到获得该互斥锁。其中,还包括若所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID相同,则所述需要访问硬件设备的进程继续使用该硬件设备。其中,还包括判断所述需要访问硬件设备的进程的互斥锁计数器的值是否大于等于I;若该互斥锁计数器的值大于等于1,则表示所述需要访问硬件设备的进程已获取了访问该硬件设备的互斥锁,若该互斥锁计数器的值小于1,则表示所述需要访问硬件设备的进程没有获取访问该硬件设备的互斥锁。其中,还包括所述需要访问硬件设备的进程使用结束该硬件设备后,判断所述需要访问硬件设备的进程的互斥锁计数器的值是否小于I;若该互斥锁计数器的值小于1,则释放该互斥锁,并退出使用该硬件设备的状态,若该互斥锁计数器的值大于等于1,则将互斥锁计数器的值减I。其中,所述需要访问硬件设备的进程是通过ー个或者多个应用程序编程接ロ API来使用该硬件设备的。其中,还包括判断该请求是否属于资源独占模式请求,若为资源独占模式请求,则所述资源独占模式下的起始应用程序编程接ロ API获取访问该硬件设备的互斥锁,并且所述需要访问硬件设备的进程连续使用该硬件设备直到所述需要访问硬件设备的进程完成所有的作业;在所述需要访问硬件设备的进程完成所有的作业之后,释放该互斥锁,并退出使用该硬件设备的状态。其中,还包括注册所述需要访问硬件设备的进程的程序終止处理函数,该程序终止处理函数用于回收所述需要访问硬件设备的进程所有的数据信息并还原该硬件设备状态。其中,还包括判断所述需要访问硬件设备的进程是否正使用该硬件设备;若所述需要访问硬件设备的进程正使用该硬件设备,则释放该硬件设备;若所述需要访问硬件设备的进程没有使用该硬件设备,则判断该进程的互斥锁计数器的值是否大于等于I ;若该互斥锁计数器的值大于等于1,则释放该互斥锁,将该互斥锁计数器的值设为0,退出所述需要访问硬件设备的进程。其中,还包括对所述需要访问硬件设备的进程进行驱动器初始化。其中,还包括判断所述需要访问硬件设备的进程是否是第一个请求访问该硬件设备的进程;若是第一个请求访问该硬件设备的进程,则所述需要访问硬件设备的进程创建一个基于线程互斥访问的互斥锁以及共享镜像文件,若不是第一个请求访问该硬件设备的进程,则所述需要访问硬件设备的进程获取已经创建好的互斥锁以及共享镜像文件。 其中,所述共享镜像文件是指用户模式下驱动器的共享镜像中的文件,该文件用于保存该硬件设备寄存器和I/o状态数据或上述两者之ー且为所有进程所共享的数据。为解决上述技术问题,本专利技术采用的另ー个技术方案是提供一种基于用户模式多任务下驱动器控制硬件设备的装置,包括接收模块,用于在用户模式下接收需要访问硬件设备的进程访问该硬件设备的请求,该请求中含有所述需要访问硬件设备的进程的ID ;第一判断模块,用于判断所述需要访问硬件设备的进程是否获取了访问该硬件设备的互斥锁;第二判断模块,用于在所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁吋,则判断所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID是否相同;切換与使用模块,用于在所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID不相同时,则在所述需要访问硬件设备的进程和最近一次访问该硬件设本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于用户模式多任务下驱动器控制硬件设备的方法,其特征在于,包括 在用户模式下接收需要访问硬件设备的进程访问该硬件设备的请求,该请求中含有所述需要访问硬件设备的进程的标识(ID); 判断所述需要访问硬件设备的进程是否获取了访问该硬件设备的互斥锁; 若所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁,则判断所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID是否相同; 若所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID不相同,则在所述需要访问硬件设备的进程和最近一次访问该硬件设备的进程之间进行上下文切換,使得所述需要访问硬件设备的进程使用该硬件设备。2.根据权利要求I所述的方法,其特征在于,还包括如下步骤 从已保存的所述需要访问硬件设备的进程镜像文件读出寄存器和I/O状态数据或上述两者之一,并将其写入该硬件设备,使该硬件设备恢复为所述需要访问硬件设备的进程的配置。3.根据权利要求2所述的方法,其特征在于,所述进程镜像文件是指用户模式下驱动器的进程镜像中的文件,该文件用于保存该硬件设备寄存器和I/O状态数据或上述两者之一且为每个进程所独享的数据。4.根据权利要求I所述的方法,其特征在于,还包括 若所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁,判断所述需要访问硬件设备的线程的ID与已经获得该互斥锁的线程的ID是否相同; 若与已经获得该互斥锁的线程的ID相同,则将互斥锁计数器的值加1,所述需要访问硬件设备的线程继续使用该硬件设备;若与已经获得该互斥锁的线程的ID不相同,则所述需要访问硬件设备的线程等待,直到获得该互斥锁。5.根据权利要求I所述的方法,其特征在于若所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID相同,则所述需要访问硬件设备的进程继续使用该硬件设备。6.根据权利要求I所述的方法,其特征在于,还包括 判断所述需要访问硬件设备的进程的互斥锁计数器的值是否大于等于I ; 若该互斥锁计数器的值大于等于1,则表示所述需要访问硬件设备的进程已获取了访问该硬件设备的互斥锁,若该互斥锁计数器的值小于1,则表示所述需要访问硬件设备的进程没有获取访问该硬件设备的互斥锁。7.根据权利要求I所述的方法,其特征在于,还包括 所述需要访问硬件设备的进程结束使用该硬件设备后,判断所述需要访问硬件设备的进程的互斥锁计数器的值是否小于I; 若该互斥锁计数器的值小于1,则释放该互斥锁,并退出使用该硬件设备的状态,若该互斥锁计数器的值大于等于I,则将互斥锁计数器的值减I。8.根据权利要求I所述的方法,其特征在于,所述需要访问硬件设备的进程是通过ー个或者多个应用程序编程接ロ API来使用该硬件设备的。9.根据权利要求8所述的方法,其特征在于,还包括 判断该请求是否属于资源独占模式请求,若为资源独占模式请求,则所述资源独占模式下的起始应用程序编程接ロ API获取访问该硬件设备的互斥锁,所述需要访问硬件设备的进程连续使用该硬件设备直到所述需要访问硬件设备的进程完成所有的作业; 在所述需要访问硬件设备的进程完成所有的作业之后,释放该互斥锁,并退出使用该硬件设备的状态。10.根据权利要求I所述的方法,其特征在于,还包括注册所述需要访问硬件设备的进程的程序終止处理函数,该程序終止处理函数用于回收所述需要访问硬件设备的进程所有的数据信息并还原该硬件设备的状态。11.根据权利要求10所述的方法,其特征在于,还包括如下步骤 判断所述需要访问硬件设备的进程是否正使用该硬件设备; 若所述需要访问硬件设备的进程正使用该硬件设备,则释放该硬件设备; 若所述需要访问硬件设备的进程没有使用该硬件设备,则判断该进程的互斥锁计数器的值是否大于等于I; 若该互斥锁计数器的值大于等于1,则释放该互斥锁,将该互斥锁计数器的值设为0,退出所述需要访问硬件设备的进程。12.根据权利要求I所述的方法,其特征在于,还包括对所述需要访问硬件设备的进程进行驱动器初始化。13.根据权利要求12所述的方法,其特征在于,还包括 判断所述需要访问硬件设备的进程是否是第一个请求访问该硬件设备的进程; 若是第一个请求访问该硬件设备的进程,则所述需要访问硬件设备的进程创建ー个基于线程互斥访问的互斥锁以及共享镜像文件,若不是第一个请求访问该硬件设备的进程,则所述需要访问硬件设备的进程获取已经创建好的互斥锁以及共享镜像文件。14.根据权利要求13所述的方法,其特征在于,所述共享镜像文件是指用户模式下驱动器的共享镜像中的文件,该文件用于保存该硬件设备寄存器和I/O状态数据或上述两者之ー且为所有进程所共享的数据。15.一种基于用户模式多任务下控制硬件设备的装置,其特征在于,所述装置包括 接收模块,用于在用户模式下接收需要访问硬件设备的进程访问该硬件设备的请求,该请求中含有所述需要访问硬件设备的进...

【专利技术属性】
技术研发人员:王建孙明勇
申请(专利权)人:上海晨思电子科技有限公司晨星半导体股份有限公司
类型:发明
国别省市:

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

1