CN102693159A - 基于用户模式多任务下控制硬件设备的方法及其装置 - Google Patents
基于用户模式多任务下控制硬件设备的方法及其装置 Download PDFInfo
- Publication number
- CN102693159A CN102693159A CN2012101433909A CN201210143390A CN102693159A CN 102693159 A CN102693159 A CN 102693159A CN 2012101433909 A CN2012101433909 A CN 2012101433909A CN 201210143390 A CN201210143390 A CN 201210143390A CN 102693159 A CN102693159 A CN 102693159A
- Authority
- CN
- China
- Prior art keywords
- hardware device
- access
- needs
- mutex
- hardware
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/102—Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/105—Program control for peripheral devices where the programme performs an input/output emulation function
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0484—Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了基于用户模式多任务下驱动器控制硬件设备的方法及其装置,所述方法包括:在用户模式下接收当前进程访问硬件设备的请求,请求中含有当前进程的ID;判断当前进程是否获取了访问硬件设备的互斥锁;若当前进程获取了访问硬件设备的互斥锁,判断当前进程的ID与最近一次访问硬件设备的进程的ID是否相同;若当前进程的ID与最近一次访问硬件设备的进程的ID不相同,在当前进程和最近一次访问硬件设备的进程之间进行上下文切换,使当前进程得以使用该硬件设备。通过上述方式,本发明能够在访问复杂硬件设备时,能够大幅提升用户模式下驱动器的性能,又能很好地实现在多任务环境下对硬件设备的随机安全访问。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及基于用户模式多任务下驱动器控制硬件设备的方法及其装置。
背景技术
Unix系统如Linux下的程序都可以工作在两种模式下:用户模式(User Mode)以及内核模式(Kernel Mode)。
用户模式:一个在用户模式下运行的程序,只能受限制地访问部分系统资源,不能直接访问内核(Kernel)数据结构,不能直接与内核程序交互。
内核模式:一个在内核模式下运行的程序,可以执行任何CPU指令,访问4G【以32位中央处理器CPU(Central Processing Unit)为例】存储空间的任意位置,也可以直接访问内核数据结构或程序。
驱动器是指通过某个文件系统格式化并带有一个驱动器号的存储区域。驱动器在整个控制环节中,正好处于主控制箱(Main Controller)以及马达(Motor)的中间环节,它的主要功能是接收来自主控制箱的信号,然后将信号进行处理再转移至马达以及和马达有关的感应器,并且将马达的工作情况反馈至主控制箱。
为了实现多任务下的硬件设备及数据共享,主流的Linux驱动器(Driver)都是工作在内核模式下的,但这样会导致产生至少以下几个缺陷:
第一,由于驱动器做在了Linux内核里面,难以回避通用公共许可证(GPL license)传染,并且必须公开自己的源代码(Source Code),这在某些商用领域是很难接受的。
第二,应用程序需要频繁地出入内核模式,对一些功能复杂的硬件设备,例如:图形处理显示器频繁地出入内核,将带来巨大的系统开销,直接导致整个系统性能的下降。
第三,在内核模式下的驱动器,一旦某个程序访问拥堵通常会造成整个系统运行的拥堵,即便这个程序访问拥堵只是由某一个进程(Process)的错误造成的。而在用户模式下驱动器某个程序访问拥堵通常只会导致使用它的那一个进程拥堵,不会影响到系统及其它进程。
第四,硬件设备调试很不方便,特别是对一些需要经常访问硬件设备寄存器(Register)的情况,更是如此。
现行已有的某些基于用户模式的驱动器,也只能应用在一些相对简单的硬件设备上,无法做到在多任务环境下,应用程序随机、安全地对硬件设备进行访问。
发明内容
本发明主要解决的技术问题是提供一种基于用户模式多任务下驱动器控制硬件设备的方法及其装置,能够大幅提升访问复杂硬件设备时驱动器的性能,又能很好地实现在多任务环境下对硬件设备的随机安全访问。
为解决上述技术问题,本发明采用的一个技术方案是:提供一种基于用户模式多任务下驱动器控制硬件设备的方法,包括:在用户模式下接收需要访问硬件设备的进程访问该硬件设备的请求,该请求中含有所述需要访问硬件设备的进程的标识(ID);判断所述需要访问硬件设备的进程是否获取了访问该硬件设备的互斥锁;若所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁,则判断所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID是否相同;若所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID不相同,则在所述需要访问硬件设备的进程和最近一次访问该硬件设备的进程之间进行上下文切换,使得所述需要访问硬件设备的进程使用该硬件设备。
其中,还包括:从已保存的所述需要访问硬件设备的进程的进程镜像文件读出寄存器和I/O状态数据或上述两者之一,并将其写入该硬件设备,该硬件设备恢复为所述需要访问硬件设备的进程的配置。
其中,所述进程镜像文件是指用户模式下驱动器的进程镜像中的文件,该文件用于保存该硬件设备寄存器和I/O状态数据或上述两者之一且为每个进程所独享的数据。
其中,还包括:若所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁,判断所述需要访问硬件设备的线程的ID与已经获得该互斥锁的线程的ID是否相同;若与已经获得该互斥锁的线程的ID相同,则将互斥锁计数器的值加1,并且所述需要访问硬件设备的线程继续使用该硬件设备;若与已经获得该互斥锁的线程的ID不相同,则所述需要访问硬件设备的线程等待,直到获得该互斥锁。
其中,还包括:若所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID相同,则所述需要访问硬件设备的进程继续使用该硬件设备。
其中,还包括:判断所述需要访问硬件设备的进程的互斥锁计数器的值是否大于等于1;若该互斥锁计数器的值大于等于1,则表示所述需要访问硬件设备的进程已获取了访问该硬件设备的互斥锁,若该互斥锁计数器的值小于1,则表示所述需要访问硬件设备的进程没有获取访问该硬件设备的互斥锁。
其中,还包括:所述需要访问硬件设备的进程使用结束该硬件设备后,判断所述需要访问硬件设备的进程的互斥锁计数器的值是否小于1;若该互斥锁计数器的值小于1,则释放该互斥锁,并退出使用该硬件设备的状态,若该互斥锁计数器的值大于等于1,则将互斥锁计数器的值减1。
其中,所述需要访问硬件设备的进程是通过一个或者多个应用程序编程接口API来使用该硬件设备的。
其中,还包括:判断该请求是否属于资源独占模式请求,若为资源独占模式请求,则所述资源独占模式下的起始应用程序编程接口API获取访问该硬件设备的互斥锁,并且所述需要访问硬件设备的进程连续使用该硬件设备直到所述需要访问硬件设备的进程完成所有的作业;在所述需要访问硬件设备的进程完成所有的作业之后,释放该互斥锁,并退出使用该硬件设备的状态。
其中,还包括:注册所述需要访问硬件设备的进程的程序终止处理函数,该程序终止处理函数用于回收所述需要访问硬件设备的进程所有的数据信息并还原该硬件设备状态。
其中,还包括:判断所述需要访问硬件设备的进程是否正使用该硬件设备;若所述需要访问硬件设备的进程正使用该硬件设备,则释放该硬件设备;若所述需要访问硬件设备的进程没有使用该硬件设备,则判断该进程的互斥锁计数器的值是否大于等于1;若该互斥锁计数器的值大于等于1,则释放该互斥锁,将该互斥锁计数器的值设为0,退出所述需要访问硬件设备的进程。
其中,还包括:对所述需要访问硬件设备的进程进行驱动器初始化。
其中,还包括:判断所述需要访问硬件设备的进程是否是第一个请求访问该硬件设备的进程;若是第一个请求访问该硬件设备的进程,则所述需要访问硬件设备的进程创建一个基于线程互斥访问的互斥锁以及共享镜像文件,若不是第一个请求访问该硬件设备的进程,则所述需要访问硬件设备的进程获取已经创建好的互斥锁以及共享镜像文件。
其中,所述共享镜像文件是指用户模式下驱动器的共享镜像中的文件,该文件用于保存该硬件设备寄存器和I/O状态数据或上述两者之一且为所有进程所共享的数据。
为解决上述技术问题,本发明采用的另一个技术方案是:提供一种基于用户模式多任务下驱动器控制硬件设备的装置,包括:接收模块,用于在用户模式下接收需要访问硬件设备的进程访问该硬件设备的请求,该请求中含有所述需要访问硬件设备的进程的ID;第一判断模块,用于判断所述需要访问硬件设备的进程是否获取了访问该硬件设备的互斥锁;第二判断模块,用于在所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁时,则判断所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID是否相同;切换与使用模块,用于在所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID不相同时,则在所述需要访问硬件设备的进程和最近一次访问该硬件设备的进程之间进行上下文切换,所述需要访问硬件设备的进程使用该硬件设备。
其中,所述切换与使用模块具体用于从已保存的所述需要访问硬件设备的进程镜像文件读出寄存器和I/O状态数据或上述两者之一,并将其写入该硬件设备,该硬件设备恢复为所述需要访问硬件设备的进程的配置。
其中,所述进程镜像文件是指用户模式下驱动器的进程镜像中的文件,该文件用于保存该硬件设备寄存器和I/O状态数据或上述两者之一且为每个进程所独享的数据。
其中,所述装置还包括:第三判断模块,用于在所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁时,判断所述需要访问硬件设备的线程的ID与已经获得该互斥锁的线程的ID是否相同;第一执行模块,用于在与已经获得该互斥锁的线程的ID相同时,则将互斥锁计数器的值加1,并且所述需要访问硬件设备的线程继续使用该硬件设备;在与已经获得该互斥锁的线程的ID不相同时,则所述需要访问硬件设备的线程等待,直到获得该互斥锁。
其中,所述装置还包括第二执行模块,所述第二执行模块具体用于在所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID相同时,则所述需要访问硬件设备的进程继续使用该硬件设备。
其中,所述第一判断模块包括:第一判断单元,用于判断所述需要访问硬件设备的进程的互斥锁计数器的值是否大于等于1;互斥锁单元,用于在该互斥锁计数器的值大于等于1时,则表示所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁,在该互斥锁计数器的值小于1,则表示所述需要访问硬件设备的进程没有获取访问该硬件设备的互斥锁。
其中,所述装置还包括:第四判断模块,用于所述需要访问硬件设备的进程使用结束该硬件设备后,判断所述需要访问硬件设备的进程的互斥锁计数器的值是否小于1;第三执行模块,用于在该互斥锁计数器的值小于1时,则释放该互斥锁,并退出使用该硬件设备的状态,在该互斥锁计数器的值大于等于1时,则将互斥锁计数器的值减1。
其中,所述需要访问硬件设备的进程是通过一个或者多个应用程序编程接口API来使用该硬件设备的。
其中,所述装置还包括资源独占模块,所述资源独占模块包括:硬件设备独占单元,用于判断该请求是否属于资源独占模式请求,在判断为资源独占模式请求时,则所述资源独占模式下的起始应用程序编程接口API获取访问该硬件设备的互斥锁,并且所述需要访问硬件设备的进程连续使用该硬件设备直到所述需要访问硬件设备的进程完成所有的作业;硬件设备退出单元,用于在所述需要访问硬件设备的进程完成所有的作业之后,释放该互斥锁,并退出使用该硬件设备的状态。
其中,所述装置还包括程序终止处理函数模块,所述程序终止处理函数模块具体用于回收所述需要访问硬件设备的进程所有的数据信息并还原该硬件设备状态,包括:硬件设备释放单元,用于在所述需要访问硬件设备的进程正使用该硬件设备时,则释放该硬件设备;第三判断单元,用于在所述需要访问硬件设备的进程没有使用该硬件设备时,则判断该进程的互斥锁计数器的值是否大于等于1;互斥锁释放单元,用于在该互斥锁计数器的值大于等于1时,则释放该互斥锁,将该互斥锁计数器的值设为0,退出所述需要访问硬件设备的进程。
其中,所述装置还包括驱动器初始化模块,所述驱动器初始化模块包括:第四判断单元,用于判断所述需要访问硬件设备的进程是否是第一个请求访问该硬件设备的进程;驱动器初始化单元,用于在是第一个请求访问该硬件设备的进程时,则所述需要访问硬件设备的进程创建一个基于线程互斥访问的互斥锁以及共享镜像文件,在不是第一个请求访问该硬件设备的进程时,则所述需要访问硬件设备的进程获取已经创建好的互斥锁以及共享镜像文件。
其中,所述共享镜像文件是指用户模式下驱动器的共享镜像中的文件,该文件用于保存该硬件设备寄存器和I/O状态数据或上述两者之一且为所有进程所共享的数据。
本发明的有益效果是:区别于现有技术的情况,本发明采用获取互斥锁以及上下文切换的方式来实现在用户模式下对硬件设备的随机访问,即在当前需要访问硬件设备的进程获取互斥锁后,通过判断进程的ID是否相同,确定是否在当前需要访问硬件设备的进程和最近一次访问硬件设备的进程之间进行上下文切换,以便于在多任务时访问硬件设备。通过这种方式,在访问复杂硬件设备时,能够大幅提升用户模式下驱动器的性能,又能很好地实现在多任务环境下对硬件设备的随机安全访问。
附图说明
图1是本发明基于用户模式多任务下驱动器控制硬件设备的方法一实施例的流程图;
图2是本发明基于用户模式多任务下驱动器控制硬件设备的方法中上下文切换的流程图;
图3是本发明基于用户模式多任务下驱动器控制硬件设备的方法中多任务实现进入退出驱动器API的流程图;
图4是本发明基于用户模式多任务下驱动器控制硬件设备的方法中终止处理函数处理的流程图;
图5是本发明基于用户模式多任务下驱动器控制硬件设备的方法中在多任务环境下典型的流程图;
图6是本发明基于用户模式多任务下驱动器控制硬件设备的方法中在多任务环境下使用资源独占模式后的流程图;
图7是本发明基于用户模式多任务下驱动器控制硬件设备的装置的一实施例的结构示意图。
具体实施方式
下面结合附图和实施例对本发明进行详细说明。
图1是本发明基于用户模式多任务下驱动器控制硬件设备的方法第一实施例的流程图,如图1所示,包括:
步骤S101:在用户模式下接收需要访问硬件设备的进程访问该硬件设备的请求,该请求中含有所述需要访问硬件设备的进程的ID;
Linux等Unix系统下的中央处理器以两种模式运行:用户模式以及内核模式。在用户模式下,用户只能受限制地访问部分系统资源,不能直接访问内核数据结构,不能直接与内核程序交互。在内核模式下,一个程序可以执行任何CPU指令,访问4G(以32位CPU为例)存储空间的任意位置,也可以直接访问内核数据结构或程序。
在用户模式下接收需要访问硬件设备的进程访问该硬件设备的请求,比如图像处理的请求等。
一个程序至少有一个进程,一个进程至少有一个线程。任何一个进程,首先有一个主线程(即它自身),然后可能有0个或多个子线程。需要访问硬件设备的进程包括单一进程以及多进程,而单一进程包括多个线程,多进程包括多个线程。每个进程在初始化的时候,系统都会分配一个ID号,用于标识该进程。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位;线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
在步骤S101的过程中还包括:对该需要访问硬件设备的进程进行驱动器初始化,该进程进行驱动器初始化以后,驱动器即可有一个基于线程互斥访问的互斥锁以及共享镜像文件。初始化的步骤是:
(1)判断所述需要访问硬件设备的进程是否是第一个请求访问该硬件设备的进程;
需要访问硬件设备的进程是否是第一个请求访问该硬件设备的进程关系到需要访问硬件设备的进程进行驱动器初始化的具体操作是不一样的。
(2)若是第一个请求访问该硬件设备的进程,则所述需要访问硬件设备的进程创建一个基于线程互斥访问的互斥锁以及共享镜像文件,若不是第一个请求访问该硬件设备的进程,则所述需要访问硬件设备的进程获取已经创建好的互斥锁以及共享镜像文件。
第一个请求访问硬件设备的进程进行驱动器初始化时,需要创建一个基于线程互斥访问的互斥锁以及共享镜像文件,创建好基于线程互斥访问的互斥锁以及共享镜像文件后,后面请求访问硬件设备的进程只需要获取该互斥锁以及共享镜像文件即可。
共享镜像文件是指用户模式下驱动器的共享镜像中的文件,该文件用于保存该硬件设备寄存器和I/O状态数据或上述两者之一且为所有进程所共享的数据。
步骤S102:判断所述需要访问硬件设备的进程是否获取了访问该硬件设备的互斥锁(Mutex);
需要访问硬件设备的进程首先需要获得访问硬件设备的互斥锁,有了访问硬件设备的互斥锁后,才有权限访问硬件设备。
互斥是用来控制多任务对共享数据进行串行访问的同步机制。在多任务应用中,当两个或多个任务同时访问共享数据时,可能会造成数据破坏,而互斥可以使得多个任务可以串行地访问数据,从而达到保护数据的目的。
其中,判断需要访问硬件设备的进程是否获取了访问该硬件设备的互斥锁的步骤包括:
(1)判断所述需要访问硬件设备的进程的互斥锁计数器(MutexCount)的值是否大于等于1;
(2)若该互斥锁计数器的值大于等于1,则表示所述需要访问硬件设备的进程已获取了访问该硬件设备的互斥锁,若该互斥锁计数器的值小于1,则表示所述需要访问硬件设备的进程没有获取访问该硬件设备的互斥锁。
在上述步骤中,通过判断互斥锁计数器的值是否大于等于1,来判断需要访问硬件设备的进程是否获取了访问硬件设备的互斥锁。
其中,在步骤S102的判断过程中还包括如下的判断过程,具体是:
(1)若所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁,判断所述需要访问硬件设备的线程的ID与已经获得该互斥锁的线程的ID是否相同;
(2)若与已经获得该互斥锁的线程的ID相同,则将互斥锁计数器的值加1,并且所述需要访问硬件设备的线程继续使用该硬件设备;若与已经获得该互斥锁的线程的ID不相同,则所述需要访问硬件设备的线程等待,直到获得该互斥锁。
步骤S103:若所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁,则判断所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID是否相同;
若需要访问硬件设备的进程的ID与最近一次访问硬件设备的进程的ID相同,说明需要访问硬件设备的进程与最近一次访问该硬件设备的进程是同一个进程,则需要访问硬件设备的进程继续使用该硬件设备。若需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID不相同,说明需要访问硬件设备的进程与最近一次访问该硬件设备的进程不是同一个进程。
步骤S104:若所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID不相同,则在所述需要访问硬件设备的进程和最近一次访问该硬件设备的进程之间进行上下文切换,使得所述需要访问硬件设备的进程使用该硬件设备。
上下文切换是多任务调度的核心内容,也是在一个CPU上并行运行多个程序的基础。上下文切换是指在多任务系统中,CPU的控制权由当前运行任务转移到另外一个就绪任务时所发生的事件,当前运行任务转为就绪(或者挂起、删除)状态,另一个被选定的就绪任务成为当前任务。上下文切换包括保存当前任务的运行环境,恢复将要运行任务的运行环境。此处的任务即为应用程序,一个程序至少有一个进程。
需要访问硬件设备的进程与最近一次访问硬件设备的进程是同一个进程时,最近一次访问硬件设备的进程的硬件设备的状态就是需要访问硬件设备的进程的硬件设备的状态,因此不需要进程上下文切换;需要访问硬件设备的进程与最近一次访问硬件设备的进程不是同一个进程时,最近一次访问硬件设备的进程的硬件设备的状态不是需要访问硬件设备的进程的硬件设备的状态,因此需要进行上下文切换,在需要访问硬件设备的进程和最近一次访问硬件设备的进程之间需要进行上下文切换,这样需要访问硬件设备的进程才可以使用该硬件设备。
在步骤S104中,在需要访问硬件设备的进程和最近一次访问硬件设备的进程之间进行上下文切换具体为:从已保存的需要访问硬件设备的进程镜像文件读出寄存器和I/O状态数据或上述两者之一,并将其写入该硬件设备,该硬件设备恢复为需要访问硬件设备的进程的配置,因而该进程可以使用该硬件设备。
所谓进程镜像文件是指用户模式下驱动器的进程镜像中的文件,该文件用于保存该硬件设备寄存器和I/O状态数据或上述两者之一且为每个进程所独享的数据。
其中,在需要访问硬件设备的进程使用结束该硬件设备之后还包括:
(1)所述需要访问硬件设备的进程使用结束该硬件设备后,判断所述需要访问硬件设备的进程的互斥锁计数器的值是否小于1;
(2)若该互斥锁计数器的值小于1,则释放该互斥锁,并退出使用该硬件设备的状态,若该互斥锁计数器的值大于等于1,则将互斥锁计数器的值减1。
其中,所述需要访问硬件设备的进程是通过一个或者多个应用程序编程接口API(Application Programming Interface)来使用该硬件设备的。
在本发明中,首先驱动器对应用程序开发的每一个应用程序编程接口API都尽量做到功能单一,即将硬件功能模块化,应用程序要访问该功能模块,必须通过一个或几个驱动器的API来实现,例如以DriverAPI1、Driver API2、Driver API3等表示;其次,每个API都会在操作系统的互斥锁访问机制保护下,保证多任务的环境下对硬件设备的互斥访问。在单一进程(Single Process),多线程(Multi-thread)的环境下,每个线程(Thread)直接通过互斥锁保护实现安全的访问硬件设备。在多进程(Multi-Process),多线程(Multi-thread)的环境下,首先检查最近一次访问驱动器的进程是否与当前需要访问硬件设备的进程是同一个,如果最近一次访问驱动器的进程与当前需要访问硬件设备的进程是同一个,允许当前需要访问硬件设备的进程在互斥锁保护机制下获取硬件设备的访问权限,如果最近一次访问驱动器的进程与当前需要访问硬件设备的进程不是同一个进程,则当前需要访问硬件设备的进程首先获取互斥锁,拿到硬件设备的访问权限,再设置硬件设备为当前需要访问硬件设备的进程的配置,然后再继续其想要执行的硬件设备访问请求。
对数据结构分类,需要各应用程序共享的数据,存储到共享空间里面。对于每个应用独立的数据,存放在进程空间里面(存为静态变量),为每个应用程序独享。为了每个进程都能保留一份硬件“现场”,以便后面能恢复“现场”,继续自己被打断的作业,驱动器需要保存一份硬件设备寄存器的进程镜像文件,这属于每个应用程序独立的数据,存储为仅本进程可见的静态变量;为了加快驱动器的运行速度,同时使各进程共享硬件信息,驱动器还需要再维护一份寄存器的共享镜像文件,这属于各应用程序共享的数据,存储到共享空间里面,可供所有进程查看。
因此,在进行驱动器的硬件功能抽象时,把全部的硬件设备寄存器分为三类:进程独享的、进程共享的以及其他类,并在驱动器里面分别为保存为两份镜像文件:进程镜像文件及共享镜像文件。进程独享的寄存器及其他类寄存器的镜像文件定义为静态变量,存放在进程镜像文件里面,进程共享寄存器的镜像文件存放到共享镜像文件中。在写每一个寄存器值时,将值写入实际硬件设备寄存器的同时,也将值更新到对应的镜像文件里面,在读回寄存器值时,对寄存器值分类,进程独享或共享的寄存器值可分别从对应的镜像文件中读出寄存器值,对其他类寄存器值(如状态寄存器),则直接从硬件设备中重新读取值。这样相当于为每个进程创造了一份硬件镜像文件,当由进程A切到更高优先级的进程B,进程B即获得了硬件设备的访问权限,当进程B处理完自己的作业,系统再次切回进程A后,驱动器会发现出现了进程切换,现在是进程A,因此首先从该进程空间的进程镜像中读取进程A的寄存器值,将需要恢复的寄存器值重新写入硬件设备中。经此操作,硬件设备又回到当初进程A的状态中,这样进程A就可以继续其被打断的硬件作业。在整个切换过程中,所有的操作都封装在驱动器里面,因此上层应用程序感觉不到差异,就像是独享了硬件设备一样。
在本发明中,驱动器初始化时,构建两份寄存器镜像文件:进程镜像文件及共享镜像文件,进程镜像文件用于存放各进程会不同设置的寄存器值,共享镜像文件用于存放各进程设置相同或需要共享的寄存器值。以本发明应用的图形处理器为例,Blt相关的寄存器值,如:Sourceand Destination Buffer’s Address、Memory Format、Width、Height、Pitch、Color Key、External Palette Table Address等,都需要存放在进程镜像中。而某些Graphics engine设置相关的寄存器值,如:Engine Enable、EngineReset、Command Queue enable、Virtual Command Queue Size、VirtualCommand Queue Enable等都需要存放在共享镜像文件中,供每个进程共享,以避免多次、随机的、相互冲突的设置,造成死机。另外还有一些只读(Read Only)的状态寄存器,如:Engine Status、Command QueueStatus等,由于每次都是直接从硬件设备中读取寄存器值,因此这部分就不必存放在镜像文件中。
按照上面的分类,在驱动器的写寄存器函数中,将值写入真正硬件设备的同时,分别写入对应的镜像文件中。同理,在读寄存器函数中,按上面的分类,有镜像文件保存的,直接从相应的镜像文件中读取寄存器值(并不从真正的硬件设备读取),除此之外的其它寄存器值,直接从硬件设备中读取。
在需要上下文切换时,对需要恢复的寄存器值,先直接调用上面的“读寄存器函数”,由于进程独享的寄存器值会从进程镜像文件中读出来,因此也就会读出当前需要访问硬件设备的进程上一次被系统调度切走之前的最后一次硬件寄存器设置,然后再把读出来的值通过“写寄存器函数”写入硬件寄存器,也就完成了硬件设备的“恢复现场”动作,达到上下文切换的效果。图2中列出了上下文切换的整个过程的处理流程图,所述处理流程包括以下步骤:
步骤S201:在驱动器中进行上下文切换;
步骤S202:下载需要恢复的寄存器的地址、屏蔽位等数据;
步骤S203:需要读寄存器数据时,判断该数据是否属于进程镜像文件,若该数据属于进程镜像文件,进入步骤S204,若该数据不属于进程镜像文件,进入步骤S205;
步骤S204:从进程镜像文件中读取保存的寄存器值,该寄存器值即为要读取的数据,然后进入步骤S208;
步骤S205:判断该数据是否属于共享镜像文件,若该数据属于共享镜像文件,进入步骤S206,若该数据不属于共享镜像文件,进入步骤S207;
步骤S206:从共享镜像文件中读取保存的寄存器值,该寄存器值即为要读取的数据,然后进入步骤S208;
步骤S207:读取实际的硬件寄存器值;
步骤S208:写寄存器数据时,判断该数据是否属于进程镜像文件,若该数据属于进程镜像文件,进入步骤S209,若该数据不属于进程镜像文件,进入步骤S210;
步骤S209:用该数据更新进程镜像文件中保存的寄存器值,然后进入步骤S213;
步骤S210:判断该数据是否属于共享镜像文件,若该数据属于共享镜像文件,进入步骤S211,若该数据不属于共享镜像文件,进入步骤S212;
步骤S211:用该数据更新共享镜像文件中保存的寄存器值,然后进入步骤S213;
步骤S212:将该数据直接写入硬件设备的寄存器;
步骤S213:判断上下文恢复的寄存器的下载是否结束,若下载结束,进入步骤S214,若下载没有结束,进入步骤S202;
步骤S214:上下文切换结束,可以开始其它硬件设备的访问。
在本发明应用实例的驱动器设计中,第一个进行驱动器初始化的进程,先向系统申请创建一个基于线程互斥访问的互斥锁,并创建共享镜像文件相关数据结构,创建完成后,后续进程即可直接获取并使用该互斥锁及共享镜像文件。每个进程进行驱动器初始化时,驱动器会首先记录该进程的进程ID(Process ID,简称PID),在每个驱动器对外开放的API中,都会有一段定义为drv_entry的入口代码,该代码段会首先判断当前需要访问硬件设备的进程是否已经获取互斥锁,如果没有,则等待直到获取到互斥锁,然后记录下获得互斥锁的线程ID(Thread ID,简称TID),同时将标识线程请求连续占用互斥锁次数的互斥锁计数器值加1;如果已经获取,则判断当前线程ID是否与已获取了互斥锁的线程ID相同,如果相同则仅将MutexCount值加1,表示该线程要求连续占用互斥锁及硬件设备,该线程可继续通过驱动器访问硬件设备,如果线程ID与已占用互斥锁的线程ID不同,则一样需要等待直到获取到互斥锁,一旦线程获取到互斥锁,都会首先记录下获得互斥锁的线程ID,表示自己已经拿到硬件设备访问权限,同时将MutexCount值加1。接下来drv_entry代码段会继续检查上一次获取互斥锁的进程ID,是否与当前需要访问硬件设备的进程的进程ID相等,如果相等则允许其继续后面的操作,否则将先恢复硬件设备到该进程之前的状态,然后再继续后面的操作。与drv_entry相似,在每个driver API的结束部分,都会有一段drv_return定义的退出代码,该代码段在确认当前线程已获取互斥锁,且MutexCount值等于1的情况下释放互斥锁,否则将MutexCount值减1即可(不会释放互斥锁,以满足连续占用互斥锁及硬件设备的需求),随后返回。drv_entry及drv_return处理流程图,如图3所示。
步骤S301:驱动器API的入口代码Drv_entry开始启动;
步骤S302:驱动器API的入口代码Drv_entry判断当前需要访问硬件设备的进程是否已经获取互斥锁,若当前需要访问硬件设备的进程已经获取互斥锁,进入步骤S303,若当前需要访问硬件设备的进程没有获得互斥锁,进入步骤S304;
步骤S303:判断当前线程ID与已经获得互斥锁的线程ID是否相同,若当前线程ID与已经获得互斥锁的线程ID相同,进入步骤S305,若当前线程ID与已经获得互斥锁的线程ID不同,进入步骤S304;
步骤S304:等待,直到当前线程获得互斥锁,然后进入步骤S305;
步骤S305:记录已经获取互斥锁的线程ID为当前的线程ID,同时MutexCount值加1;
步骤S306:判断当前需要访问硬件设备的进程ID与最后访问驱动器的进程ID是否相同,若当前需要访问硬件设备的进程ID与最后访问驱动器的进程ID相同,进入步骤S308,若当前需要访问硬件设备的进程ID与最后访问驱动器的进程ID不同,进入步骤S307;
步骤S307:在驱动器中进行上下文切换,将最后访问驱动器的进程ID更新为当前的进程ID,然后进入步骤S308;
步骤S308:获得访问硬件设备的权限,并使用硬件设备;
步骤S309:硬件设备使用完毕,驱动器API的退出代码drv_return开始启动;
步骤S310:驱动器API的退出代码drv_return判断当前的进程ID的MutexCount值是否小于等于1,若当前的进程ID的MutexCount值小于等于1,进入步骤S311,若当前的进程ID的MutexCount值大于1,进入步骤S312;
步骤S311:驱动器API的退出代码drv_return释放互斥锁;
步骤S312:将MutexCount值减1,然后进入步骤S313;
步骤S313:驱动器API的退出代码drv_return:API退出。
本发明还提供了一种资源独占模式,在该模式下,需要访问硬件设备的进程独占硬件设备的资源。享用该资源独占模式也是需要请求的,在步骤S101的过程中,需要访问硬件设备的进程请求独占硬件设备的资源,具体包括:
(1)判断该请求是否属于资源独占模式请求,若为资源独占模式请求,则所述资源独占模式下的起始应用程序编程接口API获取访问该硬件设备的互斥锁,并且所述需要访问硬件设备的进程连续使用该硬件设备直到所述需要访问硬件设备的进程完成所有的作业;
(2)在所述需要访问硬件设备的进程完成所有的作业之后,释放该互斥锁,并退出使用该硬件设备的状态;
在本发明中,资源独占模式通过驱动器对外开放两个应用程序编程接口API:API_BeginDraw及API_EndDraw。由此,提供一个由应用程序自由获取和释放驱动器互斥锁,以达到独自占用硬件设备的目的。API_BeginDraw会通过drv_entry先行占用互斥锁,但退出时却不会调用drv_return,即不释放互斥锁,这样应用程序即可保持占用互斥锁的状态。API_EndDraw会检查如果本应用程序有执行API_BeginDraw,且已经获得互斥锁,则直接执行drv_return释放获得的互斥锁。通过以上两个应用程序编程接口API,应用程序可以通过一直持有互斥锁而阻止其它线程或进程进入驱动器使用硬件设备,也就完成了“资源独占”,应用程序对硬件设备使用完毕后,通过API_EndDraw即可退出“资源独占”模式。执行API_BeginDraw占用互斥锁以后,该线程实际上就已经获得硬件设备的独立访问权限。在该线程随后的其它驱动器应用程序编程接口API访问中,drv_entry都会发现一直是该线程占用着互斥锁,只是对该线程占用互斥锁的次数做加1操作,同理在drv_return代码段中,会发现当前线程的MutexCount值大于1,因此也只是将MutexCount值减1,不会释放互斥锁。由于此过程中,该线程一直持有互斥锁,从而可以控制硬件设备连续作业下去,其它进程或线程若向驱动器请求硬件设备的访问,都会因无法获得互斥锁而阻塞,无法进行硬件设备的访问,因此在该线程的连续硬件设备访问中,也就不会出现上下文切换,当该线程处理完所有作业,退出最后一个作业的driver API(调用一次drv_return代码段),想要释放硬件设备的时候,调用API_EndDraw即会再次执行drv_return代码段,这一次将发现MutexCount值等于1,因此将会释放互斥锁,其它进程即可接着使用硬件设备了。
另外,本发明也提供了一种异常退出保护机制,该保护机制需要注册所述需要访问硬件设备的进程的程序终止处理函数,该程序终止处理函数用于回收所述需要访问硬件设备的进程所有的数据信息并还原该硬件设备状态,该步骤具体包括:
(1)判断所述需要访问硬件设备的进程是否正使用该硬件设备;
(2)若所述需要访问硬件设备的进程正使用该硬件设备,则释放该硬件设备;
(3)若所述需要访问硬件设备的进程没有使用该硬件设备,则判断该进程的互斥锁计数器的值是否大于等于1;
(4)若该互斥锁计数器的值大于等于1,则释放该互斥锁,将该互斥锁计数器的值设为0,退出所述需要访问硬件设备的进程。
在本发明中,通过atexit注册的程序终止处理函数将收集驱动器里面关于该进程的所有软件数据结构信息和硬件设备资源,对其进行处理:复位所有驱动器内部数据为初始状态,释放该进程占用的硬件设备,如关闭尚处于开启状态的,该进程占用的Display engine等。最后检查该进程的MutexCount值,若大于0,则直接清为0,并释放其占用的所有互斥锁,随后退出。图4给出了通过atexit注册的程序终止处理函数的处理流程图。
步骤S401:程序终止处理函数Dry_atexit开始启动;
步骤S402:Dry_atexit判断当前需要访问硬件设备的进程ID是否正占用硬件设备,若当前需要访问硬件设备的进程ID正占用硬件设备,进入步骤S403,若当前需要访问硬件设备的进程ID没有占用硬件设备,进入步骤S404;
步骤S403:释放该进程占用的所有硬件设备;
步骤S404:Dry_atexit判断当前需要访问硬件设备的进程ID的MutexCount值是否大于等于1,若MutexCount值大于等于1,进入步骤S405,若MutexCount值小于1,进入步骤S406;
步骤S405:释放互斥锁,使MutexCount值等于零;
步骤S406:清除该进程相关驱动器信息后退出。
参阅图5、图6,这两个图给出了本发明基于用户模式多任务下驱动器控制硬件设备的方法的两个具体应用实例流程图。进程A为系统开机后第一个进行驱动器初始化的进程,系统启动完成后,进程A向驱动器请求完成一个对Destination Buffer填充颜色(Fill Color)的操作(需使用到的Driver API编号:2、4)。进程A完成任务前,另一进程B也向驱动器请求完成一个从Source Buffer到Destination Buffer的Bitblt操作(需使用到的Driver API编号:1、2、3),在系统调度下,两个进程交错执行。在本发明所述之驱动器的多任务架构支持下,实现对这两个应用的支持。图5为通常情况下两个进程在系统调度下平等获取硬件设备使用权限的应用实例流程图:
步骤S501:进程A进行驱动器初始化;
步骤S502:创建共享镜像文件,创建互斥锁,通过atexit注册进程A的程序终止处理函数,并记录进程A的进程ID;
此处,进程A是第一个进行驱动器初始化的进程,因此需要创建互斥锁以及共享镜像文件,同时也注册了程序终止处理函数。记录进程A的进程ID是为了后面判断进程A是否和最近一次访问硬件设备的进程是同一个进程。
步骤S503:驱动器API2启动,入口代码Drv_entry启动,等待互斥锁;
需要访问硬件设备的进程使用硬件设备是通过一个或者多个应用程序编程接口API来使用硬件设备的,入口代码Drv_entry启动,通过判断互斥锁计数器的值,来判断进程A是否获取了互斥锁。
步骤S504:取得互斥锁,设置destination buffer:地址、宽度、高度、形式等等;取得互斥锁后,即可使用硬件设备。
步骤S505:驱动器API2结束,退出代码Drv_return释放互斥锁;
驱动器API2结束,退出代码Drv_return通过互斥锁计数器的值确定操作:释放互斥锁。
在上面步骤S501-S505的过程中,进程B向驱动器请求使用硬件设备,在进程A使用的驱动器API2释放互斥锁后,此时进程B的驱动器API1以及API2获得互斥锁。
步骤S506:进程B进行驱动器初始化;
步骤S507:获取共享镜像文件,注册atexit函数,并记录进程ID;
进程B不是第一个进行驱动器初始化的程序,因此只需要获取共享镜像文件,获取互斥锁即可,同时注册程序终止处理函数。
步骤S508:驱动器API1启动,Drv_entry启动,等待互斥锁;
步骤S509:取得互斥锁,设置Source buffer:地址、宽度、高度、形式等等;
步骤S510:驱动器API1结束,退出代码Drv_return释放互斥锁;
步骤S511:驱动器API2启动,Drv_entry启动,等待互斥锁;
步骤S512:设置destination buffer:地址、宽度、高度、形式等等;
步骤S513:驱动器API2结束,Drv_return:释放互斥锁;
在上面步骤S506-S513的过程中,进程A向驱动器请求使用硬件设备,在进程B使用的API2释放互斥锁后,此时进程A的驱动器API4获得互斥锁。
步骤S514:驱动器API4启动,Drv_entry启动,等待互斥锁;
步骤S515:上下文切换,检测并恢复硬件设备的配置;
此时进程A的进程ID和最近一次访问硬件设备的进程B的进程ID不相同,表明进程A和进程B不是同一个进程,因此,需要在进程A和进程B之间进行上下文切换:从已保存的进程A的进程镜像文件读出寄存器和I/O状态数据或上述两者之一,并将其写入硬件设备,使该硬件设备恢复为进程A的配置。
步骤S516:使用硬件设备完成填充颜色的作业;
步骤S517:驱动器API4结束,Drv_return:释放互斥锁;
步骤S518:进程A退出,启动atexit终止处理函数;
进程A完成作业,使用完硬件设备,释放互斥锁,并退出。在进程A作业的过程中,若出现异常退出,atexit终止处理函数回收进程A所有的数据信息并还原该硬件设备状态,具体步骤可以参见前面所述。
在上面步骤S514-S518的过程中,进程B向驱动器请求使用硬件设备,在进程A使用的API4释放互斥锁后,此时进程B的驱动器API3获得互斥锁。
步骤S519:驱动器API3启动,Drv_entry启动,等待互斥锁;
步骤S520:上下文切换,检测并恢复硬件设备配置;
步骤S521:使用硬件设备完成Bitblt的作业;
步骤S522:驱动器API3结束,Drv_return:释放互斥锁;
步骤S523:进程B退出,启动atexit终止处理函数。
上面的应用流程是通常情况下两个进程在系统调度下平等获取硬件设备使用权限的应用实例流程,没有进程请求资源独占模式,下面以进程A请求使用资源独占模式为例,来说明优先获得硬件设备使用权限的应用实例流程图。
参见图6,图6与图5为同一应用实例,只是进程A使用了驱动器的资源独占模式,优先获得硬件设备使用权限,具体的应用实例流程步骤包括:
步骤S601:进程A进行驱动器初始化;
步骤S602:创建共享空间,创建互斥锁,注册atexit函数,并记录进程ID;
此处进程A的驱动器初始化与图5的基本一样,不同之处在于:该请求中含有资源独占模式下的起始应用程序编程接口API(以API_BeginDraw表示)以及结束应用程序编程接口API(以API_EndDraw表示),属于资源独占模式请求;所述资源独占模式下的起始应用程序编程接口API获取访问该硬件设备的互斥锁,并且所述需要访问硬件设备的进程连续使用该硬件设备直到所述需要访问硬件设备的进程完成所有的作业。
步骤S603:申请进入资源独占模式:驱动器API_BeginDraw启动,Drv_entry启动,等待互斥锁;
步骤S604:驱动器API2启动,Drv_entry启动;
步骤S605:取得互斥锁,设置destination buffer:地址、宽度、高度、形式等等;
步骤S606:驱动器API2结束,Drv_return;
在上面步骤S601-S606的过程中,进程B向驱动器请求使用硬件设备,在进程A使用的API2结束后,系统进程调度进入进程B。
步骤S607:进程B进行驱动器初始化;
步骤S608:获取共享空间,注册atexit函数,并记录进程ID;
步骤S609:驱动器API1启动,Drv_entry启动,等待互斥锁;
尽管进程B请求使用硬件设备,由于进程A在资源独占模式下,此时进程B无法获得互斥锁而阻塞,系统进程调度重新回到进程A。
步骤S610:驱动器API4启动,Drv_entry启动;
步骤S611:使用硬件设备完成填充颜色的作业;
步骤S612:驱动器API4结束,退出代码Drv_return启动;
步骤S613:退出资源独占模式:驱动器API_EndDraw启动,退出代码Drv_return释放互斥锁;
此处的步骤即为前面的步骤:在所述需要访问硬件设备的进程完成所有的作业之后,释放该互斥锁,并退出使用该硬件设备的状态。
步骤S614:进程A退出,启动atexit终止处理函数;
在进程A完成作业,使用的API4释放互斥锁后,此时向驱动器请求使用硬件设备的进程B的驱动器API1获得互斥锁。
步骤S615:设置Source buffer:地址、宽度、高度、形式等等;
步骤S616:驱动器API1结束,Drv_return:释放互斥锁;
步骤S617:驱动器API2启动,Drv_entry启动,等待互斥锁;
步骤S618:设置destination buffer:地址、宽度、高度、形式等等;
步骤S619:驱动器API2结束,Drv_return:释放互斥锁;
步骤S620:驱动器API3启动,Drv_entry启动,等待互斥锁;
步骤S621:使用硬件设备完成Bitblt的作业;
步骤S622:驱动器API3结束,Drv_return:释放互斥锁;
步骤S623:进程B退出,启动atexit终止处理函数。
上面的应用流程即为进程A在资源独占模式下的流程,尽管在进程A使用硬件设备的过程中,进程B请求使用硬件设备,但是由于进程A在资源独占模式下作业,不会释放互斥锁,进程B没法获取互斥锁,也就没法使用硬件设备,直到进程A完成所有的作业,释放互斥锁后,进程B才可以获得互斥锁,使用硬件设备。
区别于现有技术的情况,本发明采用获取互斥锁以及上下文切换的方式来实现在用户模式下对硬件设备的随机访问,即在当前需要访问硬件设备的进程获取互斥锁后,通过判断进程的ID是否相同,确定是否在当前需要访问硬件设备的进程和最近一次访问硬件设备的进程之间进行上下文切换,以便于在多任务时访问硬件设备。通过这种方式,在访问复杂硬件设备时,能够大幅提升用户模式下驱动器的性能,又能很好地实现在多任务环境下对硬件设备的随机安全访问。
另外,本发明由于将驱动器置于用户模式下,首先规避了通用公共许可证传染,不用公开源代码,方便方案供应商开发一些自己独有的应用,其次,可以明显提升多任务环境下系统性能,大大减少因频繁出入内核模式所带来的系统开销;同时为了实现上下文切换,驱动器采用将所有寄存器分类,从镜像文件中读取大部分寄存器值的办法,避免为了读取某些硬件设备队列中的寄存器设置值而需要等待很长时间的情况,这也从侧面更加提升了驱动器的性能。在本发明应用的图形处理显示平台上实测发现,比现有技术在内核模式下的驱动器提升约30%的性能;在多任务环境下,由于每个任务都有上下文恢复的保护,因此每个应用程序都感觉硬件设备是自己独享的,而且正在按自己的要求工作,完美实现多进程下硬件设备共享;通过资源独占模式,可以满足不同应用需求下对硬件设备或性能的定制化需求,使用起来方便灵活;通过注册的终止处理函数,可保证在应用程序未正常释放硬件设备或异常退出时,完成驱动器资源的回收及硬件设备状态复位等操作。
如图7所示,图7是本发明基于用户模式多任务下驱动器控制硬件设备的装置的一实施例的结构示意图,该装置包括:接收模块701、第一判断模块702、第二判断模块703以及切换与使用模块704。
接收模块701用于在用户模式下接收需要访问硬件设备的进程访问该硬件设备的请求,该请求中含有所述需要访问硬件设备的进程的ID;
第一判断模块702用于判断所述需要访问硬件设备的进程是否获取了访问该硬件设备的互斥锁;
第二判断模块703用于在所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁时,则判断所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID是否相同;
切换与使用模块704用于在所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID不相同时,则在所述需要访问硬件设备的进程和最近一次访问该硬件设备的进程之间进行上下文切换,所述需要访问硬件设备的进程使用该硬件设备。
其中,需要访问硬件设备的进程是通过一个或者多个应用程序编程接口API来使用该硬件设备的。
该装置还包括驱动器初始化模块,该驱动器初始化模块包括:第四判断单元以及驱动器初始化单元。
第四判断单元用于判断所述需要访问硬件设备的进程是否是第一个请求访问该硬件设备的进程;
驱动器初始化单元用于在是第一个请求访问该硬件设备的进程时,则所述需要访问硬件设备的进程创建一个基于线程互斥访问的互斥锁以及共享镜像文件,在不是第一个请求访问该硬件设备的进程时,则所述需要访问硬件设备的进程获取已经创建好的互斥锁以及共享镜像文件。
第一个请求访问硬件设备的进程进行驱动器初始化时,需要创建一个基于线程互斥访问的互斥锁以及共享镜像文件,创建好基于线程互斥访问的互斥锁以及共享镜像文件后,以后请求访问硬件设备的进程只需要获取该互斥锁以及共享镜像文件即可。
共享镜像文件是指用户模式下驱动器的共享镜像中的文件,该文件用于保存该硬件设备寄存器和I/O状态数据或上述两者之一且为所有进程所共享的数据。
第一判断模块702包括:第一判断单元以及互斥锁单元。
第一判断单元用于判断所述需要访问硬件设备的进程的互斥锁计数器的值是否大于等于1;
互斥锁单元用于在该互斥锁计数器的值大于等于1时,则表示所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁,在该互斥锁计数器的值小于1时,则表示所述需要访问硬件设备的进程没有获取访问该硬件设备的互斥锁。
该装置还包括:第三判断模块以及第一执行模块。
第三判断模块用于在所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁时,判断所述需要访问硬件设备的线程的ID与已经获得该互斥锁的线程的ID是否相同;
第一执行模块用于在与已经获得该互斥锁的线程的ID相同时,则将互斥锁计数器的值加1,并且所述需要访问硬件设备的线程继续使用该硬件设备;在与已经获得该互斥锁的线程的ID不相同时,则所述需要访问硬件设备的线程等待,直到获得该互斥锁。
该装置还包括第二执行模块,第二执行模块具体用于在所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID相同时,则所述需要访问硬件设备的进程继续使用该硬件设备。
切换与使用模块704具体用于从已保存的所述需要访问硬件设备的进程镜像文件读出寄存器和I/O状态数据或上述两者之一,并将其写入该硬件设备,所述硬件设备恢复为所述需要访问硬件设备的进程的配置。
进程镜像文件是指用户模式下驱动器的进程镜像中的文件,该文件用于保存该硬件设备寄存器和I/O状态数据或上述两者之一且为每个进程所独享的数据。
该装置还包括:第四判断模块以及第三执行模块。
第四判断模块用于所述需要访问硬件设备的进程使用结束该硬件设备后,判断所述需要访问硬件设备的进程的互斥锁计数器的值是否小于1;
第三执行模块用于在该互斥锁计数器的值小于1时,则释放该互斥锁,并退出使用该硬件设备的状态,在该互斥锁计数器的值大于等于1时,则将互斥锁计数器的值减1。
该装置还包括资源独占模块,资源独占模块包括:硬件设备独占单元以及硬件设备退出单元。
硬件设备独占单元用于判断该请求是否属于资源独占模式请求,在判断为资源独占模式请求时,则所述资源独占模式下的起始应用程序编程接口API获取访问该硬件设备的互斥锁,并且所述需要访问硬件设备的进程连续使用该硬件设备直到所述需要访问硬件设备的进程完成所有的作业;
硬件设备退出单元用于在所述需要访问硬件设备的进程完成所有的作业之后,释放该互斥锁,并退出使用该硬件设备的状态。
该装置还包括程序终止处理函数模块,该程序终止处理函数模块具体用于回收所述需要访问硬件设备的进程所有的数据信息并还原该硬件设备状态,包括:第二判断单元、硬件设备释放单元、第三判断单元、互斥锁释放单元以及退出单元。
第二判断单元用于判断所述需要访问硬件设备的进程是否正使用该硬件设备;
硬件设备释放单元用于在所述需要访问硬件设备的进程正使用该硬件设备时,则释放该硬件设备;
第三判断单元用于在所述需要访问硬件设备的进程没有使用该硬件设备时,则判断该进程的互斥锁计数器的值是否大于等于1;
互斥锁释放单元用于在该互斥锁计数器的值大于等于1时,则释放该互斥锁,将该互斥锁计数器的值设为0,退出所述需要访问硬件设备的进程。
本发明采用获取互斥锁以及上下文切换的方式来实现在用户模式下对硬件设备的随机访问,即在当前需要访问硬件设备的进程获取互斥锁后,判断进程的ID是否相同,确定是否在当前的进程和最近一次访问硬件设备的进程之间进行上下文切换,以便于在多任务时访问硬件设备。通过这种方式,在访问复杂硬件设备时,能够大幅提升用户模式下驱动器的性能,又能很好地实现在多任务环境下对硬件设备的随机安全访问。
需要提出说明的是,本发明由于将驱动器置于用户模式下,首先规避了通用公共许可证传染,方便方案供应商开发独有的应用,其次,提升多任务环境下系统性能,大大减少系统开销;同时驱动器将所有寄存器分类,从镜像文件中读取大部分寄存器值,避免为了读取某些硬件设备队列中的寄存器设置值而需要等待很长时间的情况,从侧面更加提升了驱动器的性能。在本发明应用的图形处理显示平台上实测发现,比现有技术在内核模式下的驱动器提升约30%的性能;资源独占模式可以满足不同应用需求下对硬件设备或性能的定制化需求;注册的终止处理函数可保证在应用程序未正常释放硬件设备或异常退出时,完成驱动器资源的回收及硬件设备状态复位等操作。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (26)
1.一种基于用户模式多任务下驱动器控制硬件设备的方法,其特征在于,包括:
在用户模式下接收需要访问硬件设备的进程访问该硬件设备的请求,该请求中含有所述需要访问硬件设备的进程的标识(ID);
判断所述需要访问硬件设备的进程是否获取了访问该硬件设备的互斥锁;
若所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁,则判断所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID是否相同;
若所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID不相同,则在所述需要访问硬件设备的进程和最近一次访问该硬件设备的进程之间进行上下文切换,使得所述需要访问硬件设备的进程使用该硬件设备。
2.根据权利要求1所述的方法,其特征在于,还包括如下步骤:
从已保存的所述需要访问硬件设备的进程镜像文件读出寄存器和I/O状态数据或上述两者之一,并将其写入该硬件设备,使该硬件设备恢复为所述需要访问硬件设备的进程的配置。
3.根据权利要求2所述的方法,其特征在于,所述进程镜像文件是指用户模式下驱动器的进程镜像中的文件,该文件用于保存该硬件设备寄存器和I/O状态数据或上述两者之一且为每个进程所独享的数据。
4.根据权利要求1所述的方法,其特征在于,还包括:
若所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁,判断所述需要访问硬件设备的线程的ID与已经获得该互斥锁的线程的ID是否相同;
若与已经获得该互斥锁的线程的ID相同,则将互斥锁计数器的值加1,所述需要访问硬件设备的线程继续使用该硬件设备;若与已经获得该互斥锁的线程的ID不相同,则所述需要访问硬件设备的线程等待,直到获得该互斥锁。
5.根据权利要求1所述的方法,其特征在于:若所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID相同,则所述需要访问硬件设备的进程继续使用该硬件设备。
6.根据权利要求1所述的方法,其特征在于,还包括:
判断所述需要访问硬件设备的进程的互斥锁计数器的值是否大于等于1;
若该互斥锁计数器的值大于等于1,则表示所述需要访问硬件设备的进程已获取了访问该硬件设备的互斥锁,若该互斥锁计数器的值小于1,则表示所述需要访问硬件设备的进程没有获取访问该硬件设备的互斥锁。
7.根据权利要求1所述的方法,其特征在于,还包括:
所述需要访问硬件设备的进程结束使用该硬件设备后,判断所述需要访问硬件设备的进程的互斥锁计数器的值是否小于1;
若该互斥锁计数器的值小于1,则释放该互斥锁,并退出使用该硬件设备的状态,若该互斥锁计数器的值大于等于1,则将互斥锁计数器的值减1。
8.根据权利要求1所述的方法,其特征在于,所述需要访问硬件设备的进程是通过一个或者多个应用程序编程接口API来使用该硬件设备的。
9.根据权利要求8所述的方法,其特征在于,还包括:
判断该请求是否属于资源独占模式请求,若为资源独占模式请求,则所述资源独占模式下的起始应用程序编程接口API获取访问该硬件设备的互斥锁,所述需要访问硬件设备的进程连续使用该硬件设备直到所述需要访问硬件设备的进程完成所有的作业;
在所述需要访问硬件设备的进程完成所有的作业之后,释放该互斥锁,并退出使用该硬件设备的状态。
10.根据权利要求1所述的方法,其特征在于,还包括:注册所述需要访问硬件设备的进程的程序终止处理函数,该程序终止处理函数用于回收所述需要访问硬件设备的进程所有的数据信息并还原该硬件设备的状态。
11.根据权利要求10所述的方法,其特征在于,还包括如下步骤:
判断所述需要访问硬件设备的进程是否正使用该硬件设备;
若所述需要访问硬件设备的进程正使用该硬件设备,则释放该硬件设备;
若所述需要访问硬件设备的进程没有使用该硬件设备,则判断该进程的互斥锁计数器的值是否大于等于1;
若该互斥锁计数器的值大于等于1,则释放该互斥锁,将该互斥锁计数器的值设为0,退出所述需要访问硬件设备的进程。
12.根据权利要求1所述的方法,其特征在于,还包括:对所述需要访问硬件设备的进程进行驱动器初始化。
13.根据权利要求12所述的方法,其特征在于,还包括:
判断所述需要访问硬件设备的进程是否是第一个请求访问该硬件设备的进程;
若是第一个请求访问该硬件设备的进程,则所述需要访问硬件设备的进程创建一个基于线程互斥访问的互斥锁以及共享镜像文件,若不是第一个请求访问该硬件设备的进程,则所述需要访问硬件设备的进程获取已经创建好的互斥锁以及共享镜像文件。
14.根据权利要求13所述的方法,其特征在于,所述共享镜像文件是指用户模式下驱动器的共享镜像中的文件,该文件用于保存该硬件设备寄存器和I/O状态数据或上述两者之一且为所有进程所共享的数据。
15.一种基于用户模式多任务下控制硬件设备的装置,其特征在于,所述装置包括:
接收模块,用于在用户模式下接收需要访问硬件设备的进程访问该硬件设备的请求,该请求中含有所述需要访问硬件设备的进程的ID;
第一判断模块,用于判断所述需要访问硬件设备的进程是否获取了访问该硬件设备的互斥锁;
第二判断模块,用于在所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁时,判断所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID是否相同;
切换与使用模块,用于在所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID不相同时,在所述需要访问硬件设备的进程和最近一次访问该硬件设备的进程之间进行上下文切换,使所述需要访问硬件设备的进程使用该硬件设备。
16.根据权利要求15所述的装置,其特征在于,所述切换与使用模块具体用于从已保存的所述需要访问硬件设备的进程镜像文件读出寄存器和I/O状态数据或上述两者之一,并将其写入该硬件设备,所述硬件设备恢复为所述需要访问硬件设备的进程的配置。
17.根据权利要求16所述的装置,其特征在于,所述进程镜像文件是指用户模式下驱动器的进程镜像中的文件,该文件用于保存该硬件设备寄存器和I/O状态数据或上述两者之一且为每个进程所独享的数据。
18.根据权利要求15所述的装置,其特征在于,所述装置还包括:
第三判断模块,用于在所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁时,判断所述需要访问硬件设备的线程的ID与已经获得该互斥锁的线程的ID是否相同;
第一执行模块,当所述需要访问硬件设备的线程的ID与已经获得该互斥锁的线程的ID相同时,其用于将互斥锁计数器的值加1,使所述需要访问硬件设备的线程继续使用该硬件设备;当所述需要访问硬件设备的线程的ID与已经获得该互斥锁的线程的ID不相同时,其使得所述需要访问硬件设备的线程执行等待,直到获得该互斥锁。
19.根据权利要求15所述的装置,其特征在于,所述装置还包括第二执行模块,所述第二执行模块具体用于在所述需要访问硬件设备的进程的ID与最近一次访问该硬件设备的进程的ID相同时,使所述需要访问硬件设备的进程继续使用该硬件设备。
20.根据权利要求15所述的装置,其特征在于,所述第一判断模块包括:
第一判断单元,用于判断所述需要访问硬件设备的进程的互斥锁计数器的值是否大于等于1;
互斥锁单元,用于在该互斥锁计数器的值大于等于1时,表示所述需要访问硬件设备的进程获取了访问该硬件设备的互斥锁,而在该互斥锁计数器的值小于1时,则表示所述需要访问硬件设备的进程没有获取访问该硬件设备的互斥锁。
21.根据权利要求15所述的装置,其特征在于,所述装置还包括:
第四判断模块,用于在所述需要访问硬件设备的进程结束使用该硬件设备后,判断所述需要访问硬件设备的进程的互斥锁计数器的值是否小于1;
第三执行模块,用于在该互斥锁计数器的值小于1时,释放该互斥锁,并退出使用该硬件设备的状态,在该互斥锁计数器的值大于等于1时,则将互斥锁计数器的值减1。
22.根据权利要求15所述的装置,其特征在于,所述需要访问硬件设备的进程是通过一个或者多个应用程序编程接口API来使用该硬件设备的。
23.根据权利要求22所述的装置,其特征在于,所述装置还包括资源独占模块,所述资源独占模块包括:
硬件设备独占单元,用于判断该请求是否属于资源独占模式请求,在判断为资源独占模式请求时,则所述资源独占模式下的起始应用程序编程接口API获取访问该硬件设备的互斥锁,所述需要访问硬件设备的进程连续使用该硬件设备直到所述需要访问硬件设备的进程完成所有的作业;
硬件设备退出单元,用于在所述需要访问硬件设备的进程完成所有的作业之后,释放该互斥锁,并退出使用该硬件设备的状态。
24.根据权利要求15所述的装置,其特征在于,所述装置还包括程序终止处理函数模块,该程序终止处理函数模块具体用于回收所述需要访问硬件设备的进程所有的数据信息并还原该硬件设备状态,包括:
第二判断单元,用于判断所述需要访问硬件设备的进程是否正使用该硬件设备;
硬件设备释放单元,用于在所述需要访问硬件设备的进程正使用该硬件设备时,释放该硬件设备;
第三判断单元,用于在所述需要访问硬件设备的进程没有使用该硬件设备时,判断该进程的互斥锁计数器的值是否大于等于1;
互斥锁释放单元,用于在该互斥锁计数器的值大于等于1时,则释放该互斥锁,将该互斥锁计数器的值设为0,退出所述需要访问硬件设备的进程。
25.根据权利要求15所述的装置,其特征在于,所述装置还包括驱动器初始化模块,所述驱动器初始化模块包括:
第四判断单元,用于判断所述需要访问硬件设备的进程是否是第一个请求访问该硬件设备的进程;
驱动器初始化单元,当第一个请求访问该硬件设备的进程时,其用于使得所述需要访问硬件设备的进程创建一个基于线程互斥访问的互斥锁以及共享镜像文件。
26.根据权利要求25所述的装置,其特征在于,所述共享镜像文件是指用户模式下驱动器的共享镜像中的文件,该文件用于保存该硬件设备寄存器和I/O状态数据或上述两者之一且为所有进程所共享的数据。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210143390.9A CN102693159B (zh) | 2012-05-09 | 2012-05-09 | 基于用户模式多任务下控制硬件设备的方法及其装置 |
TW101128447A TWI493466B (zh) | 2012-05-09 | 2012-08-07 | 控制硬體裝置的方法及其裝置 |
US13/864,456 US9329911B2 (en) | 2012-05-09 | 2013-04-17 | Driver initialization for a process in user mode |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210143390.9A CN102693159B (zh) | 2012-05-09 | 2012-05-09 | 基于用户模式多任务下控制硬件设备的方法及其装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102693159A true CN102693159A (zh) | 2012-09-26 |
CN102693159B CN102693159B (zh) | 2015-07-01 |
Family
ID=46858633
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210143390.9A Expired - Fee Related CN102693159B (zh) | 2012-05-09 | 2012-05-09 | 基于用户模式多任务下控制硬件设备的方法及其装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9329911B2 (zh) |
CN (1) | CN102693159B (zh) |
TW (1) | TWI493466B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105263053A (zh) * | 2015-10-15 | 2016-01-20 | 深圳创维数字技术有限公司 | 多业务的硬件资源调度方法、系统及数字电视 |
CN105335237A (zh) * | 2015-11-09 | 2016-02-17 | 浪潮电子信息产业股份有限公司 | 一种操作系统的死锁预防方法 |
CN105426253A (zh) * | 2015-12-18 | 2016-03-23 | 广州广电运通金融电子股份有限公司 | 一种自助设备硬件管理方法和装置 |
CN107065639A (zh) * | 2016-12-13 | 2017-08-18 | 北京光年无限科技有限公司 | 基于智能机器人的外设行为冲突控制方法和系统 |
CN107391249A (zh) * | 2017-07-31 | 2017-11-24 | 上海爱优威软件开发有限公司 | 一种多用户编码的进程调度方法及系统 |
CN109947575A (zh) * | 2019-03-21 | 2019-06-28 | 恒生电子股份有限公司 | 读写锁的加锁、释放方法及相关系统 |
CN109976672A (zh) * | 2019-03-22 | 2019-07-05 | 深信服科技股份有限公司 | 一种读写冲突优化方法、装置、电子设备及可读存储介质 |
CN111124622A (zh) * | 2019-11-22 | 2020-05-08 | 深圳震有科技股份有限公司 | 一种多线程访问临界资源的方法、存储介质及智能终端 |
CN112015525A (zh) * | 2019-05-29 | 2020-12-01 | 上海哔哩哔哩科技有限公司 | 任务进程阻塞管理方法 |
CN113535414A (zh) * | 2021-05-31 | 2021-10-22 | 宁波三星医疗电气股份有限公司 | 适用于Linux容器应用的多进程同步方法 |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109063467A (zh) * | 2013-05-27 | 2018-12-21 | 华为终端(东莞)有限公司 | 系统功能调用的方法、装置及终端 |
CN104657173B (zh) * | 2015-02-03 | 2017-12-22 | 烽火通信科技股份有限公司 | 一种升级单板软件不中断业务的处理方法 |
US10297003B2 (en) | 2015-09-21 | 2019-05-21 | Qualcomm Incorporated | Efficient saving and restoring of context information for context switches |
KR102549540B1 (ko) * | 2017-09-22 | 2023-06-29 | 삼성전자주식회사 | 스토리지 장치 및 그 동작 방법 |
US11250124B2 (en) * | 2019-09-19 | 2022-02-15 | Facebook Technologies, Llc | Artificial reality system having hardware mutex with process authentication |
CN115391066B (zh) * | 2022-08-31 | 2023-06-30 | 瀚博半导体(上海)有限公司 | 用于芯片的数据交互方法、装置和人工智能芯片 |
KR20240077035A (ko) * | 2022-11-24 | 2024-05-31 | 에스케이하이닉스 주식회사 | 외부장치-스토리지 장치 연동 방법 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1195144A (zh) * | 1997-03-27 | 1998-10-07 | 国际商业机器公司 | 框架环境中工具数据对象的锁定 |
CN1740978A (zh) * | 2004-08-23 | 2006-03-01 | 华为技术有限公司 | 实现共享内存数据库的方法及内存数据库系统 |
CN102262559A (zh) * | 2010-05-24 | 2011-11-30 | 腾讯科技(深圳)有限公司 | 一种资源共享的方法及系统 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6009476A (en) * | 1995-11-21 | 1999-12-28 | Diamond Multimedia Systems, Inc. | Device driver architecture supporting emulation environment |
US6275857B1 (en) * | 1996-10-30 | 2001-08-14 | Microsoft Corporation | System and method for freeing shared resources in a computer system |
US20040068607A1 (en) * | 2002-10-07 | 2004-04-08 | Narad Charles E. | Locking memory locations |
US7383368B2 (en) * | 2003-09-25 | 2008-06-03 | Dell Products L.P. | Method and system for autonomically adaptive mutexes by considering acquisition cost value |
US7454599B2 (en) * | 2005-09-19 | 2008-11-18 | Via Technologies, Inc. | Selecting multiple threads for substantially concurrent processing |
US7937710B1 (en) * | 2005-11-22 | 2011-05-03 | Nvidia Corporation | Context switch signaling method and system |
US9274859B2 (en) * | 2006-05-25 | 2016-03-01 | Nvidia Corporation | Multi processor and multi thread safe message queue with hardware assistance |
US8589943B2 (en) * | 2007-08-15 | 2013-11-19 | Sony Computer Entertainment Inc. | Multi-threaded processing with reduced context switching |
US7962314B2 (en) * | 2007-12-18 | 2011-06-14 | Global Foundries Inc. | Mechanism for profiling program software running on a processor |
US8752057B1 (en) * | 2008-06-30 | 2014-06-10 | Emc Corporation | Techniques for synchronizing processing of at least two code threads |
US8458368B2 (en) * | 2009-05-26 | 2013-06-04 | Oracle America, Inc. | System and method for discovering and protecting shared allocated resources in a shared virtualized I/O device |
US8312470B2 (en) * | 2009-12-22 | 2012-11-13 | International Business Machines Corporation | Recursive locking of a thread-shared resource |
US20130055284A1 (en) * | 2011-08-29 | 2013-02-28 | Cisco Technology, Inc. | Managing shared computer resources |
-
2012
- 2012-05-09 CN CN201210143390.9A patent/CN102693159B/zh not_active Expired - Fee Related
- 2012-08-07 TW TW101128447A patent/TWI493466B/zh not_active IP Right Cessation
-
2013
- 2013-04-17 US US13/864,456 patent/US9329911B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1195144A (zh) * | 1997-03-27 | 1998-10-07 | 国际商业机器公司 | 框架环境中工具数据对象的锁定 |
CN1740978A (zh) * | 2004-08-23 | 2006-03-01 | 华为技术有限公司 | 实现共享内存数据库的方法及内存数据库系统 |
CN102262559A (zh) * | 2010-05-24 | 2011-11-30 | 腾讯科技(深圳)有限公司 | 一种资源共享的方法及系统 |
Non-Patent Citations (1)
Title |
---|
SSDDFGGY: "计算机操作系统", 《百度文库》 * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105263053A (zh) * | 2015-10-15 | 2016-01-20 | 深圳创维数字技术有限公司 | 多业务的硬件资源调度方法、系统及数字电视 |
CN105263053B (zh) * | 2015-10-15 | 2019-04-30 | 深圳创维数字技术有限公司 | 多业务的硬件资源调度方法、系统及数字电视 |
CN105335237B (zh) * | 2015-11-09 | 2018-09-21 | 浪潮电子信息产业股份有限公司 | 一种操作系统的死锁预防方法 |
CN105335237A (zh) * | 2015-11-09 | 2016-02-17 | 浪潮电子信息产业股份有限公司 | 一种操作系统的死锁预防方法 |
CN105426253A (zh) * | 2015-12-18 | 2016-03-23 | 广州广电运通金融电子股份有限公司 | 一种自助设备硬件管理方法和装置 |
CN107065639A (zh) * | 2016-12-13 | 2017-08-18 | 北京光年无限科技有限公司 | 基于智能机器人的外设行为冲突控制方法和系统 |
CN107391249A (zh) * | 2017-07-31 | 2017-11-24 | 上海爱优威软件开发有限公司 | 一种多用户编码的进程调度方法及系统 |
CN109947575A (zh) * | 2019-03-21 | 2019-06-28 | 恒生电子股份有限公司 | 读写锁的加锁、释放方法及相关系统 |
CN109947575B (zh) * | 2019-03-21 | 2021-08-24 | 恒生电子股份有限公司 | 读写锁的加锁、释放方法及相关系统 |
CN109976672A (zh) * | 2019-03-22 | 2019-07-05 | 深信服科技股份有限公司 | 一种读写冲突优化方法、装置、电子设备及可读存储介质 |
CN109976672B (zh) * | 2019-03-22 | 2022-02-22 | 深信服科技股份有限公司 | 一种读写冲突优化方法、装置、电子设备及可读存储介质 |
CN112015525A (zh) * | 2019-05-29 | 2020-12-01 | 上海哔哩哔哩科技有限公司 | 任务进程阻塞管理方法 |
CN111124622A (zh) * | 2019-11-22 | 2020-05-08 | 深圳震有科技股份有限公司 | 一种多线程访问临界资源的方法、存储介质及智能终端 |
CN113535414A (zh) * | 2021-05-31 | 2021-10-22 | 宁波三星医疗电气股份有限公司 | 适用于Linux容器应用的多进程同步方法 |
Also Published As
Publication number | Publication date |
---|---|
TW201346766A (zh) | 2013-11-16 |
CN102693159B (zh) | 2015-07-01 |
US9329911B2 (en) | 2016-05-03 |
TWI493466B (zh) | 2015-07-21 |
US20130305259A1 (en) | 2013-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102693159B (zh) | 基于用户模式多任务下控制硬件设备的方法及其装置 | |
JP3659062B2 (ja) | 計算機システム | |
JP4896376B2 (ja) | コプロセッサの性能を強化するシステムおよび方法 | |
CN105579961B (zh) | 数据处理系统及操作方法、用于数据处理系统的硬件单元 | |
JP5335743B2 (ja) | タスクのスケジューリングを支援する装置 | |
JP3546678B2 (ja) | マルチos構成方法 | |
US9378069B2 (en) | Lock spin wait operation for multi-threaded applications in a multi-core computing environment | |
US4725946A (en) | P and V instructions for semaphore architecture in a multiprogramming/multiprocessing environment | |
US20200050478A1 (en) | Data processing systems | |
US7844782B2 (en) | Data processing system with memory access | |
JPH06119297A (ja) | データ処理システムにおける命令の実行順序を決定する方法および装置 | |
US7743234B2 (en) | Facilitating communication within an emulated processing environment | |
US11275633B1 (en) | Memory buffer management for microkernel operating system | |
JP3547011B2 (ja) | ウィンドウシステム環境において時間的に厳しいプロセスを実行する方法および装置 | |
JPH0567973B2 (zh) | ||
CN118227344A (zh) | 一种共享内存保护方法和微处理芯片 | |
JPH0376497B2 (zh) | ||
Halvorsen et al. | Mac OS X and iOS | |
Mneimneh | CSCI 120 Introduction to Computation Operating System (draft) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150701 Termination date: 20190509 |