TWI493466B - 控制硬體裝置的方法及其裝置 - Google Patents
控制硬體裝置的方法及其裝置 Download PDFInfo
- Publication number
- TWI493466B TWI493466B TW101128447A TW101128447A TWI493466B TW I493466 B TWI493466 B TW I493466B TW 101128447 A TW101128447 A TW 101128447A TW 101128447 A TW101128447 A TW 101128447A TW I493466 B TWI493466 B TW I493466B
- Authority
- TW
- Taiwan
- Prior art keywords
- hardware device
- processing program
- mutex
- access
- thread
- Prior art date
Links
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)
Description
本發明涉及電腦技術領域,特別是涉及基於使用者模式多工下驅動程式控制硬體裝置的方法及其裝置。
Unix系統如Linux下的程式都可以工作在兩種模式下:使用者模式(User Mode)以及核心模式(Kernel Mode)。這兩種模式所能提供的系統資源並不相同。
一個在使用者模式下運行的程式,只能受限制地存取部分系統資源,不能直接存取核心(Kernel)資料結構,不能直接與核心程式互動。
以32位元的中央處理器(Central Processing Unit,簡稱為CPU)為例,一個在核心模式下運行的程式,可以執行任何CPU指令,存取4G儲存空間的任意位置,也可以直接存取核心資料結構或程式。
驅動程式(Driver)是指通過某個檔案系統格式化,並帶有一個磁碟機代號的儲存區域。驅動程式在整個控制環節中,正好處於主控制器(Main Controller)以及馬達(Motor)的中間環節,它的主要功能是接收來自主控制器的信號,然後將信號進行處理再轉移至馬達以及和馬達有關的感應器,並且將馬達的工作情況回饋至主控制器。
為了使多工下的硬體裝置及資料能彼此共用,主流的Linux驅動程式都是在核心模式下工作,但這樣會產生至
少以下幾個缺陷:
第一,由於驅動程式被包含在Linux核心裡面,難以迴避通用通用公共授權條款(General Public License,簡稱為GPL)。一旦受到GPL傳染,驅動程式必須公開自己的原始程式碼(Source Code),這種要求對於商業應用是很難接受的。
第二,應用程式需要頻繁地出入核心模式,對一些功能複雜的硬體裝置,例如:圖形處理顯示器,如果需要頻繁地出入核心,將帶來巨大的系統負荷,進而導致整個系統性能的下降。
第三,在核心模式下的驅動程式,一旦某個程式產生存取擁堵(congestion)時,通常會造成整個系統運行的擁堵,即便這個存取擁堵只是由某一個處理程序(Process)的錯誤造成的。另一方面,在使用者模式下,驅動程式內的某個程式產生存取擁堵時,通常只會導致使用它的那一個處理程序擁堵,不會影響到系統及其它處理程序。
第四,不容易進行硬體裝置的調整,特別是對一些需要經常存取硬體裝置暫存器(Register)的情況更是如此。
現行已有的某些基於使用者模式的驅動程式,也只能應用在一些相對簡單的硬體裝置上,無法做到在多工環境下,讓應用程式隨機、安全地對硬體裝置進行存取。
本發明主要解決的技術問題是提供一種基於使用者模式多工下驅動程式控制硬體裝置的方法及其裝置,能夠
大幅提升存取複雜硬體裝置時驅動程式的性能,又能很好地實現在多工環境下對硬體裝置的隨機安全存取。
為解決上述技術問題,本發明採用的一個技術方案是:提供一種基於使用者模式多工下驅動程式控制硬體裝置的方法,包括以下步驟:在使用者模式下接收一第一處理程序存取一硬體裝置的一請求,其中該請求包含與該第一處理程序相對應的一第一識別碼(identification,簡稱為ID);判斷該第一處理程序是否取得存取該硬體裝置的一互斥鎖;若該第一處理程序取得該互斥鎖,則判斷該第一識別碼是否符合與最近一次存取該硬體裝置的一第二處理程序相對應的一第二識別碼;以及,若該第一識別碼不符合該第二識別碼,則對該第一處理程序和該第二處理程序進行內容置換(context switch),使得該第一處理程序使用該硬體裝置。
其中,還包括如下步驟:從已保留的一處理程序映像檔讀出一暫存器和一I/O狀態資料或上述兩者之一後,將其寫入該硬體裝置,進而使該硬體裝置恢復為與該第一處理程序相對應的配置。
其中,該處理程序映像檔是指在使用者模式下的驅動程式的程式映像檔,該處理程序映像檔用於保留該暫存器和該I/O狀態資料或上述兩者之一,且該處理程序映像檔為每個處理程序所獨享的資料。
其中,還包括以下步驟:若該第一處理程序取得該互斥鎖,判斷一第一執行緒的識別碼與已經取得該互斥鎖的一第二執行緒的識別碼是否符合,其中該第一執行緒係與
該第一處理程序相對應、該第二執行緒係與該第二處理程序相對應;若該第一執行緒的識別碼與該第二執行緒的識別碼符合,則將一互斥鎖計數器的值加1,該第一執行緒繼續使用該硬體裝置;以及,若該第一執行緒的識別碼與該第二執行緒的識別碼不符合,則該第一執行緒等待,直到獲得該互斥鎖。
其中,若該第一識別碼與該第二識別碼相同,則該第一處理程序繼續使用該硬體裝置。
其中,還包括以下步驟:判斷一互斥鎖計數器的值是否大於等於1;以及若該互斥鎖計數器的值大於等於1,則表示該第一處理程序已取得該互斥鎖,若該互斥鎖計數器的值小於1,則表示該第一處理程序沒有取得該互斥鎖。
其中,還包括以下步驟:該第一處理程序結束使用該硬體裝置後,判斷該第一處理程序的一互斥鎖計數器的值是否小於1;以及若該互斥鎖計數器的值小於1,則釋放該互斥鎖,並退出使用該硬體裝置的狀態,若該互斥鎖計數器的值大於等於1,則將互斥鎖計數器的值減1。
其中,該第一處理程序係透過至少一個應用程序介面(Application Programming Interface,簡稱為API)來使用該硬體裝置的。
其中,還包括以下步驟:判斷該請求是否屬於一資源獨佔模式請求,若為該資源獨佔模式請求,則利用該資源獨佔模式下的起始應用程序介面獲取存取該硬體裝置的互斥鎖,該第一處理程序連續使用該硬體裝置直到該第一處理程序完成所有的作業;以及在該第一處理程序完成所
有的作業後,釋放該互斥鎖,並退出使用該硬體裝置的狀態。
其中,還包括以下步驟:註冊該第一處理程序的程式終止處理函數,該程式終止處理函數係回收該第一處理程序所有的資訊並還原該硬體裝置的狀態。
其中,還包括如下步驟:判斷該第一處理程序是否正在使用該硬體裝置;若該第一處理程序正在使用該硬體裝置,則釋放該硬體裝置;若該第一處理程序並未使用該硬體裝置,則判斷該第一處理程序的一互斥鎖計數器的值是否大於等於1;以及若該互斥鎖計數器的值大於等於1,則釋放該互斥鎖,將該互斥鎖計數器的值設為0,退出該第一處理程序。
其中,還包括以下步驟:對該第一處理程序進行驅動程式初始化。
其中,還包括以下步驟:判斷該第一處理程序是否是第一個請求存取該硬體裝置的處理程序;以及若該第一處理程序是第一個請求存取該硬體裝置的處理程序,則該第一處理程序根據執行緒互斥存取而建立該互斥鎖以及一共用映像檔,若該第一處理程序不是第一個請求存取該硬體裝置的處理程序,則該第一處理程序取得已經建立好的該互斥鎖以及該共用映像檔。
其中,該共用映像檔是指在使用者模式下驅動程式的映像檔,該共用映像檔用於保留該硬體裝置暫存器和I/O狀態資料或上述兩者之一,且該共用映像檔為所有處理程序所共用的資料。
為解決上述技術問題,本發明採用的另一個技術方案是:提供一種基於使用者模式多工下控制一硬體裝置的裝置,包括:一接收模組,其係在使用者模式下接收一第一處理程序存取該硬體裝置的一請求,該請求包含與該第一處理程序相對應的一第一識別碼;一第一判斷模組,其係判斷該第一處理程序是否獲取了存取該硬體裝置的一互斥鎖;一第二判斷模組,其係在該第一處理程序獲取了該互斥鎖時,判斷該第一識別碼與最近一次存取該硬體裝置的一第二處理程序相對應的一第二識別碼是否符合;以及一切換與使用模組,其係在該第一識別碼與該第二識別碼不符合時,在該第一處理程序和該第二處理程序之間進行內容置換,使該第一處理程序使用該硬體裝置。
其中,該切換與使用模組係從已保留的該第一處理程序的映像檔讀出暫存器和I/O狀態資料或上述兩者之一,並將其寫入該硬體裝置,該硬體裝置恢復為該第一處理程序的配置。
其中,該處理程序映像檔是指使用者模式下驅動程式的處理程序映像檔,該映像檔用於保留該硬體裝置暫存器和I/O狀態資料或上述兩者之一,且該映像檔為每個處理程序所獨享的資料。
其中,還包括:一第三判斷模組,其係在該第一處理程序獲取了該互斥鎖時,判斷一第一執行緒的識別碼與已經獲得該互斥鎖的一第二執行緒的識別碼是否相同,其中該第一執行緒係與該第一處理程序相對應、該第二執行緒係與該第二處理程序相對應;以及一第一執行模組,當該
第一執行緒的識別碼與該第二執行緒的識別碼符合時,其係將互斥鎖計數器的值加1,使該第一執行緒繼續使用該硬體裝置;當該第一執行緒的識別碼與該第二執行緒的識別碼不符合時,其係使該第一執行緒執行等待,直到獲得該互斥鎖。
其中,還包括:一第二執行模組,其係在該第一識別碼與該第二識別碼符合時,使該第一處理程序繼續使用該硬體裝置。
其中,該第一判斷模組係包括:一第一判斷單元,其係判斷該第一處理程序的互斥鎖計數器的值是否大於等於1;以及一互斥鎖單元,用於在該互斥鎖計數器的值大於等於1時,表示該第一處理程序獲取了該互斥鎖,而在該互斥鎖計數器的值小於1時,則表示該第一處理程序沒有獲取存取該互斥鎖。
其中,還包括:一第四判斷模組,在該第一處理程序結束使用該硬體裝置後,判斷該第一處理程序的互斥鎖計數器的值是否小於1;以及一第三執行模組,其係在該互斥鎖計數器的值小於1時,釋放該互斥鎖,並退出使用該硬體裝置的狀態,在該互斥鎖計數器的值大於等於1時,則將該互斥鎖計數器的值減1。
其中,該第一處理程序是通過至少一個應用程序介面來使用該硬體裝置的。
其中,還包括一資源獨佔模組,包括:一硬體裝置獨佔單元,其係判斷該請求是否屬於一資源獨佔模式請求,在判斷為資源獨佔模式請求時,則該資源獨佔模式下的起
始應用程序介面獲取存取該硬體裝置的互斥鎖,該第一處理程序連續使用該硬體裝置直到該第一處理程序完成所有的作業;以及一硬體裝置退出單元,用於在該第一處理程序完成所有的作業之後,釋放該互斥鎖,並退出使用該硬體裝置的狀態。
其中,還包括一程式終止處理函數模組,其係回收該第一處理程序所有的資料資訊並還原該硬體裝置狀態,包括:一第二判斷單元,其係判斷該第一處理程序是否正使用該硬體裝置;一硬體裝置釋放單元,其係在該第一處理程序正使用該硬體裝置時,釋放該硬體裝置;一第三判斷單元,其係在該第一處理程序沒有使用該硬體裝置時,判斷該互斥鎖計數器的值是否大於等於1;以及一互斥鎖釋放單元,其係在該互斥鎖計數器的值大於等於1時,釋放該互斥鎖,將該互斥鎖計數器的值設為0,並退出該第一處理程序。
其中,包括一驅動程式初始化模組,包括:一第四判斷單元,其係判斷該第一處理程序是否是第一個請求存取該硬體裝置的處理程序;以及驅動程式初始化單元,其係當該第一處理程序是第一個請求存取該硬體裝置的處理程序時,使該第一處理程序建立一個基於執行緒互斥存取的互斥鎖以及共用映像檔。
其中,該共用映像檔係指在使用者模式下驅動程式的一共用映像檔,該共用映像檔係保留該硬體裝置暫存器和I/O狀態資料或上述兩者之一且為所有處理程序所共用的資料。
本發明的有益效果是:區別于現有技術的情況,本發明採用獲取互斥鎖以及內容置換的方式來實現在使用者模式下對硬體裝置的隨機存取。即,在當前需要存取硬體裝置的處理程序獲取互斥鎖後,判斷處理程序的識別碼是否相同,確定是否在當前需要存取硬體裝置的處理程序和最近一次存取硬體裝置的處理程序之間進行內容置換,以便於在多工時存取硬體裝置。藉由這種方式,在存取複雜硬體裝置時,能夠大幅提升使用者模式下驅動程式的性能,又能很好地實現在多工環境下對硬體裝置的隨機安全存取。
為了對本發明之上述及其他方面有更佳的瞭解,下文特舉較佳實施例,並配合所附圖式,作詳細說明如下:
下面結合附圖和實施例對本發明進行詳細說明。
請參見第1圖,其係根據本發明構想之第一較佳實施利,基於使用者模式多工下,利用驅動程式控制硬體裝置的流程圖。如第1圖所示,包括:
步驟S101:在使用者模式下,接收由需要存取硬體裝置的處理程序所發出的存取硬體裝置的請求。其中,請求中含有與需要存取硬體裝置的處理程序相對應的識別碼(identification,簡稱為ID)。
Linux等Unix系統下的中央處理器以兩種模式運行:使用者模式以及核心模式。在使用者模式下,使用者只能受限制地存取部分系統資源,不能直接存取核心資料
結構,也不能直接與核心程式互動。在核心模式下,一個程式可以執行任何CPU指令,存取4G(以32位元CPU為例)儲存空間的任意位置,也可以直接存取核心資料結構或程式。
在使用者模式下,接收需要存取硬體裝置的處理程序存取硬體裝置的請求,比如影像處理的請求等。
一個程式至少有一個處理程序,一個處理程序至少有一個執行緒(thread)。任何一個處理程序,首先有一個主執行緒(即它自身),然後可能有0個或多個子執行緒。需要存取硬體裝置的處理程序包括單一處理程序以及多處理程序,而單一處理程序包括多個執行緒,多處理程序包括多個執行緒。
每個處理程序在初始化的時候,系統都會分配一個與其相對應的識別碼,用於標識處理程序。處理程序是具有一定獨立功能的程式關於某個資料集合上的一次運行活動,是系統進行資源配置和排程的一個獨立單位。執行緒是處理程序的一個實體,是CPU排程和分派的基本單位。執行緒是比處理程序更小的能獨立運行的基本單位,執行緒本身不擁有系統資源,只擁有一點在運作過程必需的資源(如程式計數器,一組暫存器和堆疊(stack)),但是它可與同屬一個處理程序的其他的執行緒共用處理程序所擁有的全部資源。
步驟S101的過程中還包括:對需要存取硬體裝置的處理程序進行驅動程式初始化,處理程序進行驅動程式初始化以後,驅動程式即可有一個基於執行緒互斥存取的互
斥鎖以及共用映像檔(image file)。初始化的步驟是:
(1)判斷需要存取硬體裝置的處理程序是否是第一個請求存取硬體裝置的處理程序。須注意的是,需要存取硬體裝置的處理程序是否是第一個請求存取硬體裝置的處理程序,將連帶使需要存取硬體裝置的處理程序以不同的方式進行驅動程式初始化。
(2)若需要存取硬體裝置的處理程序確實是第一個請求存取硬體裝置的處理程序,則需要存取硬體裝置的處理程序建立一個基於執行緒互斥存取的互斥鎖以及共用映像檔。若需要存取硬體裝置的處理程序不是第一個請求存取硬體裝置的處理程序,則需要存取硬體裝置的處理程序直接取得已經建立好的互斥鎖以及共用映像檔。
第一個請求存取硬體裝置的處理程序進行驅動程式初始化時,需要建立一個基於執行緒互斥存取的互斥鎖以及共用映像檔。一旦基於執行緒互斥存取的互斥鎖以及共用映像檔建立後,後續請求存取硬體裝置的處理程序只需要獲取互斥鎖以及共用映像檔即可。
共用映像檔指的是,在使用者模式下,驅動程式共用映像所使用的檔案。共用映像檔用於保留硬體裝置的暫存器和輸出入(input/output,簡稱為I/O)狀態資料或上述兩者之一,且共用映像檔是所有處理程序所共用的資料。
步驟S102:判斷需要存取硬體裝置的處理程序,是否取得了存取硬體裝置的互斥鎖(Mutex)。
需要存取硬體裝置的處理程序首先需要取得存取硬體裝置的互斥鎖,有了存取硬體裝置的互斥鎖後,才有許
可權存取硬體裝置。
互斥運算是用來控制多工對共用資料進行串列存取的同步機制。在多工應用中,當兩個或多個任務同時存取共用資料時,可能會造成資料破壞,而互斥運算可以使得多個任務以依序存取資料,從而達到保護資料的目的。
其中,判斷需要存取硬體裝置的處理程序是否獲取了存取硬體裝置的互斥鎖的步驟包括:(1)判斷需要存取硬體裝置的處理程序的互斥鎖計數器(MutexCount)的值是否大於等於1;(2)若互斥鎖計數器的值大於等於1,代表需要存取硬體裝置的處理程序已獲取了存取硬體裝置的互斥鎖,若互斥鎖計數器的值小於1,代表需要存取硬體裝置的處理程序,並沒有獲取存取硬體裝置的互斥鎖。
在上述步驟中,通過判斷互斥鎖計數器的值是否大於等於1,判斷需要存取硬體裝置的處理程序是否取得存取硬體裝置的互斥鎖。
其中,步驟S102的判斷過程中還包括如下的判斷過程,具體是:(1)若需要存取硬體裝置的處理程序獲取了存取硬體裝置的互斥鎖,判斷需要存取硬體裝置的執行緒的識別碼與已經獲得互斥鎖的執行緒的識別碼是否相同;以及(2)若與已經獲得互斥鎖的執行緒的識別碼相同,則將互斥鎖計數器的值加1,並且讓需要存取硬體裝置的執行緒繼續使用硬體裝置;若與已經獲得互斥鎖的執行緒的識別碼不相同,則需要存取硬體裝置的執行緒必須等
待,直到獲得互斥鎖。
步驟S103:若需要存取硬體裝置的處理程序取得存取硬體裝置的互斥鎖,則判斷需要存取硬體裝置的處理程序的識別碼與最近一次存取硬體裝置的處理程序的ID是否相同。
若需要存取硬體裝置的處理程序的識別碼與最近一次存取硬體裝置的處理程序的識別碼相同,說明需要存取硬體裝置的處理程序與最近一次存取硬體裝置的處理程序是同一個處理程序,則需要存取硬體裝置的處理程序繼續使用硬體裝置。
若需要存取硬體裝置的處理程序的識別碼與最近一次存取硬體裝置的處理程序的識別碼不相同,說明需要存取硬體裝置的處理程序與最近一次存取硬體裝置的處理程序並不是同一個處理程序。
步驟S104:若需要存取硬體裝置的處理程序的識別碼,與最近一次存取硬體裝置的處理程序的識別碼不相同,則在需要存取硬體裝置的處理程序和最近一次存取硬體裝置的處理程序之間進行內容置換(context switch),改由需要存取硬體裝置的處理程序使用硬體裝置。
內容置換是多工排程的核心內容,也是在一個CPU上並行運行多個程式的基礎。內容置換是指在多工系統中,CPU的控制權由當前運行任務轉移到另外一個就緒任務時所發生的事件,當前運行任務轉為就緒(或者待機、刪除)狀態,另一個被選定的就緒任務成為當前運行任務。內容置換會包括保留當前運行任務的運行環境,並恢復將要運
行任務的運行環境。此處的任務即為應用程式,一個程式至少有一個處理程序。
如果需要存取硬體裝置的處理程序與最近一次存取硬體裝置的處理程序是同一個程式時,代表最近一次存取硬體裝置的處理程序的硬體裝置的狀態就是需要存取硬體裝置的處理程序的硬體裝置的狀態。因此,這種情況並不需要進行內容置換。
另一方面,如果需要存取硬體裝置的處理程序與最近一次存取硬體裝置的處理程序不是同一個處理程序時,代表兩者的硬體裝置的狀態並不相同。因此,此種情況便需要進行內容置換。亦即,透過內容置換,讓需要存取硬體裝置的處理程序得以使用硬體裝置。
在步驟S104中,在需要存取硬體裝置的處理程序和最近一次存取硬體裝置的處理程序之間進行內容置換。具體來說,步驟S104指的是:從已保留的需要存取硬體裝置的處理程序映像檔讀出暫存器和I/O狀態資料或上述兩者之一,並將其寫入硬體裝置。由於硬體裝置恢復為需要存取硬體裝置的處理程序的配置,因而處理程序可以使用硬體裝置。
所謂處理程序映像檔是指,在使用者模式下,驅動程式的處理程序映像檔,處理程序映像檔用於保留硬體裝置暫存器和I/O狀態資料或上述兩者之一且為每個處理程序所獨享的資料。
其中,在需要存取硬體裝置的處理程序使用結束硬體裝置後,還包括以下步驟:
(1)需要存取硬體裝置的處理程序使用結束硬體裝置後,判斷需要存取硬體裝置的處理程序的互斥鎖計數器的值是否小於1;以及(2)若互斥鎖計數器的值小於1,則釋放互斥鎖,並退出使用硬體裝置的狀態,若互斥鎖計數器的值大於等於1,則將互斥鎖計數器的值減1。
其中,需要存取硬體裝置的處理程序是通過一個或者多個應用程序介面(Application Programming Interface,簡稱為API)來使用硬體裝置的。
在本發明中,首先驅動程式對應用程式開發的每一個應用程序介面都儘量做到功能單一,即將硬體功能模組化,應用程式要存取功能模組,必須通過一個或幾個驅動程式的應用程序介面來實現,例如以驅動程式的第一應用程序介面Driver API1、驅動程式的第二應用程序介面Driver API2、驅動程式的第三應用程序介面Driver API3等表示;其次,每個應用程序介面都會在作業系統的互斥鎖存取機制保護下,確保在多工的環境中對硬體裝置進行互斥存取。
在單一處理程序(Single Process),多執行緒(Multi-thread)的環境下,每個執行緒(Thread)直接通過互斥鎖實現安全的存取硬體裝置。
此外,在多處理程序(Multi-Process),多執行緒(Multi-thread)的環境下,首先檢查最近一次存取驅動程式的處理程序,與當前需要存取硬體裝置的處理程序是否為同一個。
如果最近一次存取驅動程式的處理程序,與當前需要存取硬體裝置的處理程序相同,便允許當前需要存取硬體裝置的處理程序在互斥鎖保護機制下,仍可獲取硬體裝置的存取權限。
如果最近一次存取驅動程式的處理程序,與當前需要存取硬體裝置的處理程序不同,則當前需要存取硬體裝置的處理程序首先需取得互斥鎖。取得互斥鎖相當於拿到硬體裝置的存取權限,此時,再將硬體裝置設置為當前需要存取硬體裝置的處理程序的配置,然後再繼續進行想要執行的硬體裝置存取請求。
對資料結構分類,需要各應用程式共用的資料,儲存到共用空間裡面。對於每個應用獨立的資料,存放在處理程序空間裡面(存為靜態變數),為每個應用程式獨享。
為了使每個處理程序都能保留一份硬體設定的“現場”,讓後續使用時也能恢復硬體設定的“現場”,以利繼續先前被打斷的作業,驅動程式需要保留一份硬體裝置暫存器的處理程序映像檔,這屬於每個應用程式獨立的資料,儲存僅有本處理程序可見的靜態變數。
為了提升驅動程式的運行速度,同時使各個處理程序能夠共用硬體資訊,驅動程式還需要再維護一份暫存器的共用映像檔。也就是將屬於各應用程式共用的資料,儲存到共用空間裡面,可供所有處理程序查看。
因此,在抽象化擷取(abstract)驅動程式的硬體特徵時,把全部的硬體裝置暫存器分為三類:處理程序獨享的、處理程序共用的以及其他類。此外,驅動程式分別保
留為兩份映像檔:處理程序映像檔及共用映像檔。
處理程序獨享的暫存器及其他類暫存器的映像檔被定義為靜態變數,存放在處理程序映像檔裡面。另一方面,處理程序共用暫存器的映像檔則存放到共用映像檔中。
在寫每一個暫存器值時,將值寫入實際硬體裝置的暫存器的同時,也將值更新到對應的映像檔裡面。在讀回暫存器值時,對暫存器值分類。其中,處理程序獨享或共用的暫存器值可分別從對應的映像檔中讀出暫存器值;至於其他類暫存器值(如狀態暫存器),則直接從硬體裝置中重新讀取值。
這樣一來,相當於為每個處理程序創造了一份硬體映像檔。
當系統程式由處理程序A切換到更高優先順序的處理程序B,處理程序B即獲得了硬體裝置的存取權限。當處理程序B處理完自己的作業,系統需要再次切回處理程序A,而驅動程式會發現處理程序需要再度進行切換。
因此,當系統由處理程序B切回處理程序A時,首先從處理程序空間的處理程序映像檔中,讀取處理程序A的暫存器值,將需要恢復的暫存器值重新寫入硬體裝置中。
經過此操作,硬體裝置又回到當初處理程序A的狀態中,這樣處理程序A就可以繼續進行先前被打斷的硬體作業。在整個處理程序的切換過程中,所有的操作都封裝在驅動程式裡面,因此上層應用程式感覺不到差異,就像是獨享了硬體裝置一樣。
在本發明中,驅動程式初始化時,建立兩份暫存器映像檔:處理程序映像檔及共用映像檔,處理程序映像檔用於存放因應各處理程序而分別設置的暫存器值,共用映像檔用於存放,在各處理程序所設置相同或需要共用的暫存器值。
以本發明應用的圖形處理器為例,搬移Blt相關的暫存器值,如:來源與目的緩衝區的位址(Source and Destination Buffer’s Address)位址、記憶體格式(Memory Format)、寬度(Width)、高度(Height)、音高(Pitch)、色調(Color Key)、外部調色盤表格位址(External Palette Table Address)位址等,都需要存放在處理程序映像檔中。
而某些繪圖引擎(Graphics engine)設置相關的暫存器值,如:引擎致能(Engine Enable)、引擎重置(Engine Reset)、指令佇列致能(Command Queue enable)、虛擬指令佇列大小(Virtual Command Queue Size)、虛擬指令佇列致能(Virtual Command Queue Enable)等,都需要存放在共用映像檔中,供每個處理程序共用,以避免多次、隨機的、相互衝突的設置,造成當機。
另外,還有一些唯讀(Read Only)的狀態暫存器,如:引擎狀態(Engine Status)、指令佇列狀態(Command Queue Status)等,由於這些狀態暫存器的值每次都是直接從硬體裝置讀取,因此這些狀態暫存器的值就不需要存放在映像檔中。
按照上面的分類,在驅動程式的暫存器寫入函數中,
將值寫入真正硬體裝置的同時,分別寫入對應的映像檔中。同理,在暫存器讀取函數中,按上面的分類,有映像檔保留的,直接從相應的映像檔中讀取暫存器值(並不從真正的硬體裝置讀取),除此之外的其它暫存器值,直接從硬體裝置中讀取。
在需要進行內容置換時,對需要恢復的暫存器值,先直接調用上面的“暫存器讀取函數”,由於處理程序獨享的暫存器值會從處理程序映像檔中讀出來,因此也就會讀出當前需要存取硬體裝置的處理程序上一次被系統排程切走之前的最後一次硬體暫存器設置,然後再把讀出來的值通過“暫存器寫入函數”寫入硬體暫存器,也就完成了硬體裝置的“恢復現場”動作,達到內容置換的效果。第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:結束內容置換,可以開始其它硬體裝置的存取。
在本發明應用實例的驅動程式設計中,第一個進行驅動程式初始化的處理程序,先向系統申請建立一個基於執行緒互斥存取的互斥鎖,並建立共用映像檔相關資料結構。建立完成後,後續處理程序即可直接獲取並使用互斥鎖及共用映像檔。每個處理程序進行驅動程式初始化時,
驅動程式會首先記錄處理程序的處理程序識別碼(Process identification,簡稱為PID)。
在每個驅動程式對外開放的應用程序介面中,都會有一段定義入口程式drv_entry,其中部份的程式碼會首先判斷當前需要存取硬體裝置的處理程序是否已經獲取互斥鎖。
如果沒有,則等待直到獲取到互斥鎖,然後記錄下獲得互斥鎖的執行緒識別碼(Thread identification,簡稱為TID),同時將標識執行緒請求連續佔用互斥鎖次數的互斥鎖計數器值加1。
如果已經獲取,則判斷當前執行緒識別碼是否與已獲取了互斥鎖的執行緒識別碼相同。如果兩者相同,則僅將互斥鎖計數器的值加1,表示執行緒要求連續佔用互斥鎖及硬體裝置,執行緒可繼續利用驅動程式存取硬體裝置;此外,如果執行緒識別碼與已佔用互斥鎖的執行緒識別碼不同,則一樣需要等待直到獲取到互斥鎖。
一旦執行緒獲取到互斥鎖,都會首先記錄下獲得互斥鎖的執行緒識別碼,表示自己已經拿到硬體裝置存取權限,同時將互斥鎖計數器的值加1。
接下來入口程式(drv_entry)的部分程式碼會繼續檢查上一次獲取互斥鎖的處理程序識別碼,是否與當前需要存取硬體裝置的程式的處理程序識別碼相等。如果相等,則允許其繼續後面的操作;否則將先恢復硬體裝置到處理程序之前的狀態,然後再繼續後面的操作。
與入口程式drv_entry相似,在每個驅動程式應用
程序介面(driver API)的結束部分,都會有一段退出程式drv_return,其中部份的程式碼會用於確認當前執行緒已獲取互斥鎖,且互斥鎖計數器的值等於1的情況下釋放互斥鎖,否則將互斥鎖計數器的值減1即可(不會釋放互斥鎖,以滿足連續佔用互斥鎖及硬體裝置的需求),隨後返回。入口程式drv_entry及退出程式drv_return的處理流程圖,如第3A、3B圖所示。
步驟S301:開始啟動驅動程式API的入口程式drv_entry。
步驟S302:驅動程式API的入口程式drv_entry判斷當前需要存取硬體裝置的處理程序是否已經獲取互斥鎖。若當前需要存取硬體裝置的處理程序已經獲取互斥鎖,進入步驟S303;反之,若當前需要存取硬體裝置的處理程序沒有獲得互斥鎖,進入步驟S304。
步驟S303:判斷當前執行緒識別碼與已經獲得互斥鎖的執行緒識別碼是否相同。若當前執行緒識別碼與已經獲得互斥鎖的執行緒識別碼相同,進入步驟S305;以及,若當前執行緒識別碼與已經獲得互斥鎖的執行緒識別碼不同,進入步驟S304。
步驟S304:持續等待,直到當前執行緒獲得互斥鎖,然後進入步驟S305。
步驟S305:將已經獲取互斥鎖的執行緒識別碼記錄為當前的執行緒識別碼,同時將互斥鎖計數器的值加1。
步驟S306:判斷當前需要存取硬體裝置的處理程序識別碼與最後存取驅動程式的處理程序識別碼是否相
同。若當前需要存取硬體裝置的處理程序識別碼與最後存取驅動程式的處理程序識別碼相同,進入步驟S308;另一方面,若當前需要存取硬體裝置的處理程序識別碼與最後存取驅動程式的處理程序識別碼不同,進入步驟S307。
步驟S307:在驅動程式中進行內容置換,將最後存取驅動程式的處理程序識別碼更新為當前的處理程序識別碼,然後進入步驟S308。
步驟S308:獲得存取硬體裝置的許可權,並使用硬體裝置。
步驟S309:硬體裝置使用完畢,驅動程式API的退出程式(drv_return)開始啟動;
步驟S310:驅動程式API的退出程式(drv_return)判斷當前的處理程序識別碼的互斥鎖計數器的值是否小於等於1。若當前的處理程序識別碼的互斥鎖計數器的值小於等於1,進入步驟S311;若當前的處理程序識別碼的互斥鎖計數器的值大於1,進入步驟S312。
步驟S311:驅動程式API的退出程式(drv_return)釋放互斥鎖。
步驟S312:將互斥鎖計數器的值減1,然後進入步驟S313。
步驟S313:驅動程式API的退出程式(drv_return)退出API。
本發明還提供了一種資源獨佔模式,在此種模式下,需要存取硬體裝置的處理程序將獨佔硬體裝置的資源。享用資源獨佔模式也是需要請求的,在步驟S101的過程中,
需要存取硬體裝置的處理程序請求獨佔硬體裝置的資源,具體包括:(1)判斷請求是否屬於資源獨佔模式請求,若為資源獨佔模式請求,則資源獨佔模式下的起始應用程序介面獲取存取硬體裝置的互斥鎖,並且需要存取硬體裝置的處理程序連續使用硬體裝置直到需要存取硬體裝置的處理程序完成所有的作業;以及(2)在需要存取硬體裝置的處理程序完成所有的作業之後,釋放互斥鎖,並退出使用硬體裝置的狀態。
在本發明中,資源獨佔模式透過驅動程式而對外開放兩個應用程序介面:應用程序介面API_BeginDraw及應用程序介面API_EndDraw。由此,提供一個由應用程式自由獲取和釋放驅動程式互斥鎖,以達到獨自佔用硬體裝置的目的。
應用程序介面API_BeginDraw會透過入口程式(drv_entry)先行佔用互斥鎖,但退出時卻不會調用退出程式(drv_return),即不釋放互斥鎖,這樣應用程式即可保持佔用互斥鎖的狀態。
應用程序介面API_EndDraw會檢查如果本應用程式有執行應用程序介面API_BeginDraw,且已經獲得互斥鎖,則直接執行退出程式(drv_return)釋放獲得的互斥鎖。
通過以上兩個應用程序介面,應用程式可以一直持有互斥鎖,而阻止其它執行緒或處理程序進入驅動程式使用硬體裝置,也就完成了“資源獨佔”。
應用程式對硬體裝置使用完畢後,通過應用程序介面API_EndDraw即可退出“資源獨佔”模式。執行應用程序介面API_BeginDraw佔用互斥鎖以後,執行緒實際上就已經獲得硬體裝置的獨立存取權限。在執行緒隨後的其它驅動程式應用程序介面存取中,入口程式(drv_entry)會發現一直是執行緒佔用著互斥鎖,只是對執行緒佔用互斥鎖的次數進行加1的操作。
同理,在退出程式(drv_return)的程式碼中,會發現當前執行緒的互斥鎖計數器的值大於1,因此也只是將互斥鎖計數器的值減1,不會釋放互斥鎖。
由於此過程中,執行緒一直持有互斥鎖,從而可以控制硬體裝置連續作業下去,其它處理程序或執行緒若向驅動程式請求硬體裝置的存取,都會因無法獲得互斥鎖而阻塞,無法進行硬體裝置的存取。因此,在執行緒的連續硬體裝置存取中,並不會出現內容置換。
當執行緒完所有作業,退出最後一個作業的驅動程式應用程序介面(調用一次退出程式(drv_return)的程式碼),想要釋放硬體裝置的時候,調用應用程序介面API_EndDraw即會再次執行退出程式(drv_return)的程式碼,這一次將發現互斥鎖計數器的值等於1,因此將會釋放互斥鎖,其它處理程序即可接著使用硬體裝置了。
另外,本發明也提供了一種異常退出保護機制。此種保護機制要求需要存取硬體裝置的處理程序的程式終止處理函數Drv_atexit進行註冊。其中,程式終止處理函數Drv_atexit用於回收需要存取硬體裝置的處理程序所
有的資料資訊並還原硬體裝置狀態。其步驟具體包括:(1)判斷需要存取硬體裝置的處理程序是否正在使用硬體裝置;(2)若需要存取硬體裝置的處理程序正在使用硬體裝置,則釋放硬體裝置;(3)若需要存取硬體裝置的處理程序並未使用硬體裝置,則判斷處理程序的互斥鎖計數器的值是否大於等於1;以及(4)若互斥鎖計數器的值大於等於1,則釋放互斥鎖,將互斥鎖計數器的值設為0,退出需要存取硬體裝置的處理程序。
在本發明中,通過註冊終止函數atexit將收集驅動程式裡面關於處理程序的所有軟體資料結構資訊和硬體裝置資源,對其進行處理:重定所有驅動程式內部資料為初始狀態,釋放處理程序佔用的硬體裝置,如關閉尚處於開啟狀態的,處理程序佔用的顯示引擎Display engine等。
最後,再檢查處理程序的互斥鎖計數器的值。若互斥鎖計數器的值大於0,則直接將互斥鎖計數器的值清為0,並釋放其佔用的所有互斥鎖,隨後退出。第4圖說明了如何利用註冊終止函數atexit,而對程式終止處理函數進行註冊的處理流程圖。
步驟S401:程式終止處理函數Drv_atexit開始啟動。
步驟S402:程式終止處理函數Drv_atexit判斷當前需要存取硬體裝置的處理程序識別碼是否正在佔用硬體裝置。若當前需要存取硬體裝置的處理程序識別碼正佔用硬體裝置,進入步驟S403,若當前需要存取硬體裝置的處理程序識別碼沒有佔用硬體裝置,進入步驟S404。
步驟S403:釋放處理程序佔用的所有硬體裝置。
步驟S404:程式終止處理函數Drv_atexit判斷當前需要存取硬體裝置的程式處理程序識別碼的互斥鎖計數器的值是否大於等於1。若互斥鎖計數器的值大於等於1,進入步驟S405,若互斥鎖計數器的值小於1,進入步驟S406。
步驟S405:釋放互斥鎖,使互斥鎖計數器的值等於零。
步驟S406:清除處理程序相關驅動程式資訊後退出。
參閱第5圖、第6圖,這兩個圖給出了本發明基於使用者模式多工下驅動程式控制硬體裝置的方法的兩個具體應用實例流程圖。
處理程序A為系統開機後第一個進行驅動程式初始化的處理程序,系統啟動完成後,處理程序A向驅動程式請求完成一個對目的緩衝器(Destination Buffer)填充顏色(Fill Color)的操作(需使用到的驅動程式應用程序介面編號:2、4)。處理程序A完成任務前,另一處理程序B也向驅動程式請求完成一個從來源緩衝器(Source Buffer)到目的緩衝器的位塊轉換(bit block transfer,簡稱為Bitblt)操作(需使用到的驅動程式應用程序介面編號:1、2、3)。在系統排程下,兩個處理程序交錯執行。在本發明之驅動程式的多工架構下,實現這兩個應用。
請參見第5圖,其係通常情況下,兩個處理程序在系統排程下,平等獲取硬體裝置使用權限的應用實例流程圖。
步驟S501:處理程序A初始化驅動程式。
步驟S502:建立共用映像檔,建立互斥鎖,通過atexit註冊處理程序A的程式終止處理函數,並記錄處理程序A的處理程序識別碼。
此處,處理程序A是第一個進行驅動程式初始化的處理程序,因此需要建立互斥鎖以及共用映像檔,同時也註冊了程式終止處理函數。記錄處理程序A的處理程序識別碼的目的是,作為後面判斷處理程序A是否和最近一次存取硬體裝置的處理程序是相同的依據。
步驟S503:驅動程式應用程序介面2啟動,入口程式(drv_entry)啟動,等待互斥鎖。
需要存取硬體裝置的處理程序是透過一個或者多個應用程序介面來使用硬體裝置。先啟動入口程式(drv_entry),通過判斷互斥鎖計數器的值,來判斷處理程序A是否獲取了互斥鎖。
步驟S504:取得互斥鎖,設置目的緩衝器:位址、寬度、高度、形式等等;取得互斥鎖後,即可使用硬體裝置。
步驟S505:驅動程式應用程序介面2結束,退出程式(drv_return)釋放互斥鎖。
驅動程式應用程序介面2結束,退出程式(drv_return)通過互斥鎖計數器的值確定操作:釋放互斥鎖。
在上面步驟S501-S505的過程中,處理程序B向驅動程式請求使用硬體裝置,在處理程序A使用的驅動程式
API2釋放互斥鎖後,此時處理程序B的驅動程式API1以及API2獲得互斥鎖。
步驟S506:處理程序B進行驅動程式初始化。
步驟S507:獲取共用映像檔,註冊atexit函數,並記錄處理程序識別碼。
處理程序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的處理程序識別碼和最近一次存取硬體裝置的處理程序B的處理程序識別碼不相同,表明處理程序A和處理程序B不是同一個處理程序。因此,需要在處理程序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函數,並記錄處理程序識別碼。
此處處理程序A的驅動程式初始化與第5圖的基本一樣,不同之處在於:請求中含有資源獨佔模式下的起始應用程式設計發展介面API(以API_BeginDraw表示)以及結束應用程式設計發展介面API(以API_EndDraw表示),屬於資源獨佔模式請求。
在資源獨佔模式下,起始應用程式設計發展介面API取得存取硬體裝置的互斥鎖,且需要存取硬體裝置的處理程序將連續使用硬體裝置,直到需要存取硬體裝置的處理程序完成所有的作業。
步驟S603:申請進入資源獨佔模式:啟動驅動程式應用程序介面API_BeginDraw,入口程式drv_entry啟動,等待互斥鎖。
步驟S604:驅動程式API2啟動,入口程式drv_entry啟動。
步驟S605:取得互斥鎖,設定目的緩衝器的位址、寬度、高度、形式等等;
步驟S606:驅動程式API2結束,退出程式(drv_return)。
在上面步驟S601-S606的過程中,處理程序B向驅動程式請求使用硬體裝置,在處理程序A使用的API2結束後,系統程式排程進入處理程序B。
步驟S607:處理程序B進行驅動程式初始化。
步驟S608:獲取共用空間,註冊atexit函數,並記錄處理程序識別碼。
步驟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才可以獲得互斥鎖,使用硬體裝置。
區別于現有技術的情況,本發明採用獲取互斥鎖以及內容置換的方式,實現在使用者模式下對硬體裝置的隨機存取。即,在當前需要存取硬體裝置的處理程序獲取互斥鎖後,通過判斷處理程序的識別碼是否相同,確定是否在當前需要存取硬體裝置的處理程序,和最近一次存取硬體裝置的處理程序之間進行內容置換,以便於在多工時存取硬體裝置。通過這種方式,在存取複雜硬體裝置時,能夠大幅提升使用者模式下驅動程式的性能,又能很好地實現在多工環境下對硬體裝置的隨機安全存取。
另外,本發明由於將驅動程式置於使用者模式下,首
先規避了通用公共授權條款傳染,不用公開原始程式碼,方便方案供應商開發一些自己獨有的應用。其次,可以明顯提升多工環境下系統性能,大大減少因頻繁出入核心模式所帶來的系統負荷。
此外,為了實現內容置換,驅動程式採用將所有暫存器分類,從映像檔中讀取大部分暫存器值的辦法,避免為了讀取某些硬體裝置佇列中的暫存器設置值而需要等待很長時間的情況,這也從側面更加提升了驅動程式的性能。
在本發明應用的圖形處理顯示平臺上實測發現,比現有技術在核心模式下的驅動程式提升約30%的性能;在多工環境下,由於每個任務都有內容置換的保護,因此每個應用程式都感覺硬體裝置是自己獨享的,而且正在按自己的要求工作,完美實現多處理程序下硬體裝置共用。
透過資源獨佔模式,可以滿足不同應用需求下對硬體裝置或性能的定制化需求,使用起來方便靈活。透過註冊的終止處理函數,可保證在應用程式未正常釋放硬體裝置或異常退出時,完成驅動程式資源的回收及硬體裝置狀態重定等操作。
請參見第7圖,其係根據本發明構想之較佳實施例,基於使用者模式多工下驅動程式控制硬體裝置的裝置的一實施例的結構示意圖。裝置包括:接收模組701、第一判斷模組702、第二判斷模組703以及切換與使用模組704。
接收模組701用於在使用者模式下接收需要存取硬
體裝置的處理程序存取硬體裝置的請求。其中,在請求中含有需要存取硬體裝置的處理程序的處理程序識別碼。
第一判斷模組702用於判斷需要存取硬體裝置的處理程序是否獲取了存取硬體裝置的互斥鎖。
第二判斷模組703用於在需要存取硬體裝置的處理程序獲取了存取硬體裝置的互斥鎖時,則判斷需要存取硬體裝置的處理程序的識別碼與最近一次存取硬體裝置的處理程序是否具有相同的處理程序識別碼。
切換與使用模組704用於在需要存取硬體裝置的處理程序的識別碼與最近一次存取硬體裝置的處理程序的識別碼不相同時,則在需要存取硬體裝置的處理程序和最近一次存取硬體裝置的處理程序之間進行內容置換,讓需要存取硬體裝置的處理程序使用硬體裝置。
其中,需要存取硬體裝置的處理程序是通過一個或者多個應用程式設計發展介面API來使用硬體裝置的。
裝置還包括驅動程式初始化模組,驅動程式初始化模組包括:第四判斷單元以及驅動程式初始化單元。
第四判斷單元用於判斷需要存取硬體裝置的處理程序是否是第一個請求存取硬體裝置的處理程序。
驅動程式初始化單元用於在是第一個請求存取硬體裝置的處理程序時,則需要存取硬體裝置的處理程序建立一個基於執行緒互斥存取的互斥鎖以及共用映像檔。對於不是第一個請求存取硬體裝置的處理程序而言,則由需要存取硬體裝置的處理程序獲取已經建立好的互斥鎖以及共用映像檔。
第一個請求存取硬體裝置的處理程序進行驅動程式初始化時,需要建立一個基於執行緒互斥存取的互斥鎖以及共用映像檔。一旦建立好基於執行緒互斥存取的互斥鎖以及共用映像檔後,後續得處理程序若需要請求存取硬體裝置時,該處理程序只需要獲取互斥鎖以及共用映像檔即可。
共用映像檔是指使用者模式下驅動程式的共用映像檔,共用應用檔用於保留硬體裝置暫存器和I/O狀態資料或上述兩者之一且為所有處理程序所共用的資料。
第一判斷模組702包括:第一判斷單元以及互斥鎖單元。
第一判斷單元用於判斷需要存取硬體裝置的處理程序式的互斥鎖計數器的值是否大於等於1。
互斥鎖單元用於在互斥鎖計數器的值大於等於1時,則表示需要存取硬體裝置的處理程序取得存取硬體裝置的互斥鎖。若互斥鎖計數器的值小於1時,表示需要存取硬體裝置的程式並未取得存取硬體裝置的互斥鎖。
裝置還包括:第三判斷模組以及第一執行模組。
第三判斷模組用於在需要存取硬體裝置的處理程序獲取了存取硬體裝置的互斥鎖時,判斷需要存取硬體裝置的執行緒的識別碼與已經取得互斥鎖的執行緒的識別碼是否相同。
第一執行模組用於在與已經獲得互斥鎖的執行緒的識別碼相同時,則將互斥鎖計數器的值加1,並且需要存取硬體裝置的執行緒繼續使用硬體裝置;在與已經獲得互
斥鎖的執行緒的識別碼不相同時,則需要存取硬體裝置的執行緒等待,直到取得互斥鎖。
裝置還包括第二執行模組,第二執行模組具體用於在需要存取硬體裝置的處理程序的識別碼與最近一次存取硬體裝置的處理程序的識別碼相同時,則需要存取硬體裝置的處理程序繼續使用硬體裝置。
切換與使用模組704具體用於從已保留的需要存取硬體裝置的處理程序映像檔讀出暫存器和I/O狀態資料或上述兩者之一,並將其寫入硬體裝置,硬體裝置恢復為需要存取硬體裝置的處理程序的配置。
處理程序映像檔是指使用者模式下驅動程式的處理程序映像檔。其中,映像檔用於保留硬體裝置暫存器和I/O狀態資料或上述兩者之一,且各個處理程序映像檔為每個處理程序所獨享的資料。
裝置還包括:第四判斷模組以及第三執行模組。
當需要存取硬體裝置的處理程序結束對硬體裝置的使用後,第四判斷模組判斷需要存取硬體裝置的處理程序的互斥鎖計數器的值是否小於1。
當互斥鎖計數器的值小於1時,第三執行模組將釋放互斥鎖,並退出使用硬體裝置的狀態。另一方面,若互斥鎖計數器的值大於等於1時,第三執行模組則將互斥鎖計數器的值減1。
裝置還包括資源獨佔模組,資源獨佔模組包括:硬體裝置獨佔單元以及硬體裝置退出單元。
硬體裝置獨佔單元用於判斷請求是否屬於資源獨佔
模式請求。在判斷為資源獨佔模式請求時,則資源獨佔模式下的起始應用程式設計發展介面API獲取存取硬體裝置的互斥鎖,並且需要存取硬體裝置的處理程序連續使用硬體裝置直到需要存取硬體裝置的處理程序完成所有的作業。
一旦需要存取硬體裝置的處理程序完成所有的作業之後,硬體裝置退出單元將釋放互斥鎖,並退出使用硬體裝置的狀態。
裝置還包括程式終止處理函數模組,程式終止處理函數模組用來回收需要存取硬體裝置的處理程序所有的資料資訊並還原硬體裝置狀態,包括:第二判斷單元、硬體裝置釋放單元、第三判斷單元、互斥鎖釋放單元以及退出單元。
第二判斷單元用於判斷需要存取硬體裝置的處理程序是否正使用硬體裝置。
在需要存取硬體裝置的程式正使用硬體裝置時,硬體裝置釋放單元將釋放硬體裝置。
第三判斷單元用於在需要存取硬體裝置的處理程序沒有使用硬體裝置時,則判斷處理程序的互斥鎖計數器的值是否大於等於1。
互斥鎖釋放單元用於在互斥鎖計數器的值大於等於1時,則釋放互斥鎖,將互斥鎖計數器的值設為0,退出需要存取硬體裝置的處理程序。
本發明根據互斥鎖的取得,以及內容置換的方式,實現在使用者模式下對硬體裝置的隨機存取。即,在當前需
要存取硬體裝置的處理程序取得互斥鎖後,判斷處理程序的識別碼是否相同。據此而確定是否在當前的處理程序和最近一次存取硬體裝置的處理程序之間進行內容置換,以便在多工時存取硬體裝置。透過這種方式,在存取複雜硬體裝置時,能夠大幅提升驅動程式在使用者模式下的性能,又能很完善地實現在多工環境下對硬體裝置的隨機安全存取。
需要提出說明的是,本發明由於將驅動程式置於使用者模式下,首先避免了驅動程式受到通用公共授權條款傳染,方便方案供應商開發獨有的應用,其次,提升多工環境下系統性能,大大減少系統負荷;同時驅動程式將所有暫存器分類,從映像檔中讀取大部分暫存器值,避免為了讀取某些硬體裝置佇列中的暫存器設置值而需要等待很長時間的情況,從側面更加提升了驅動程式的性能。
在本發明應用的圖形處理顯示平臺上實測發現,比現有技術在核心模式下的驅動程式提升約30%的性能;資源獨佔模式可以滿足不同應用需求下對硬體裝置或性能的定制化需求;註冊的終止處理函數可保證在應用程式未正常釋放硬體裝置或異常退出時,完成驅動程式資源的回收及硬體裝置狀態重定等操作。
以上所述僅為本發明的實施例,並非因此限制本發明的專利範圍,凡是利用本發明說明書及附圖內容所作的等效結構或等效流程變換,或直接或間接運用在其他相關的技術領域,均同理包括在本發明的申請專利保護範圍內。
701‧‧‧接收模組
702‧‧‧第一判斷模組
703‧‧‧第二判斷模組
704‧‧‧切換與使用模組
第1圖是本發明基於使用者模式多工下驅動程式控制硬體裝置的方法一實施例的流程圖。
第2圖是本發明基於使用者模式多工下驅動程式控制硬體裝置的方法中內容置換的流程圖。
第3A、3B圖是本發明基於使用者模式多工下驅動程式控制硬體裝置的方法中多工實現進入退出驅動程式API的流程圖。
第4圖是本發明基於使用者模式多工下驅動程式控制硬體裝置的方法中終止處理函數處理的流程圖。
第5圖是本發明基於使用者模式多工下驅動程式控制硬體裝置的方法中在多工環境下典型的流程圖。
第6圖是本發明基於使用者模式多工下驅動程式控制硬體裝置的方法中在多工環境下使用資源獨佔模式後的流程圖。
第7圖是本發明基於使用者模式多工下驅動程式控制硬體裝置的裝置的一實施例的結構示意圖。
Claims (26)
- 一種基於使用者模式多工下驅動程式控制硬體裝置的方法,包括以下步驟:在使用者模式下接收一第一處理程序存取一硬體裝置的一請求,其中該請求包含與該第一處理程序相對應的一第一識別碼(identification,簡稱為ID);判斷該第一處理程序是否取得存取該硬體裝置的一互斥鎖;若該第一處理程序取得該互斥鎖,則判斷該第一識別碼是否符合與最近一次存取該硬體裝置的一第二處理程序相對應的一第二識別碼;以及,若該第一識別碼不符合該第二識別碼,則對該第一處理程序和該第二處理程序進行內容置換(context switch),使得該第一處理程序使用該硬體裝置。
- 如申請專利範圍第1項所述之方法,其中還包括如下步驟:從已保留的一處理程序映像檔讀出一暫存器和一I/O狀態資料或上述兩者之一後,將其寫入該硬體裝置,進而使該硬體裝置恢復為與該第一處理程序相對應的配置。
- 如申請專利範圍第2項所述之方法,其中該處理程序映像檔是指在使用者模式下的驅動程式的程式映像檔,該處理程序映像檔用於保留該暫存器和該I/O狀態資料或上述兩者之一,且該處理程序映像檔為每個處理程序 所獨享的資料。
- 如申請專利範圍第1項所述之方法,其中還包括以下步驟:若該第一處理程序取得該互斥鎖,判斷一第一執行緒的識別碼與已經取得該互斥鎖的一第二執行緒的識別碼是否符合,其中該第一執行緒係與該第一處理程序相對應、該第二執行緒係與該第二處理程序相對應;若該第一執行緒的識別碼與該第二執行緒的識別碼符合,則將一互斥鎖計數器的值加1,該第一執行緒繼續使用該硬體裝置;以及,若該第一執行緒的識別碼與該第二執行緒的識別碼不符合,則該第一執行緒等待,直到獲得該互斥鎖。
- 如申請專利範圍第1項所述之方法,其中若該第一識別碼與該第二識別碼相同,則該第一處理程序繼續使用該硬體裝置。
- 如申請專利範圍第1項所述之方法,其中還包括以下步驟:判斷一互斥鎖計數器的值是否大於等於1;以及若該互斥鎖計數器的值大於等於1,則表示該第一處理程序已取得該互斥鎖,若該互斥鎖計數器的值小於1,則表示該第一處理程序沒有取得該互斥鎖。
- 如申請專利範圍第1項所述之方法,其中還包括以下步驟:該第一處理程序結束使用該硬體裝置後,判斷該第一處理程序的一互斥鎖計數器的值是否小於1;以及若該互斥鎖計數器的值小於1,則釋放該互斥鎖,並退出使用該硬體裝置的狀態,若該互斥鎖計數器的值大於等於1,則將互斥鎖計數器的值減1。
- 如申請專利範圍第1項所述之方法,其中該第一處理程序係透過至少一個應用程序介面(Application Programming Interface,簡稱為API)來使用該硬體裝置的。
- 如申請專利範圍第8項所述之方法,其中還包括以下步驟:判斷該請求是否屬於一資源獨佔模式請求,若為該資源獨佔模式請求,則利用該資源獨佔模式下的起始應用程序介面獲取存取該硬體裝置的互斥鎖,該第一處理程序連續使用該硬體裝置直到該第一處理程序完成所有的作業;以及在該第一處理程序完成所有的作業後,釋放該互斥鎖,並退出使用該硬體裝置的狀態。
- 如申請專利範圍第1所述的方法,其中還包括以下步驟:註冊該第一處理程序的程式終止處理函數,該程 式終止處理函數係回收該第一處理程序所有的資訊並還原該硬體裝置的狀態。
- 如申請專利範圍第10項所述之方法,其中還包括如下步驟:判斷該第一處理程序是否正在使用該硬體裝置;若該第一處理程序正在使用該硬體裝置,則釋放該硬體裝置;若該第一處理程序並未使用該硬體裝置,則判斷該第一處理程序的一互斥鎖計數器的值是否大於等於1;以及若該互斥鎖計數器的值大於等於1,則釋放該互斥鎖,將該互斥鎖計數器的值設為0,退出該第一處理程序。
- 如申請專利範圍第1項所述之方法,其中還包括以下步驟:對該第一處理程序進行驅動程式初始化。
- 如申請專利範圍第12項所述之方法,其中還包括以下步驟:判斷該第一處理程序是否是第一個請求存取該硬體裝置的處理程序;以及若該第一處理程序是第一個請求存取該硬體裝置的處理程序,則該第一處理程序根據執行緒互斥存取而建立該互斥鎖以及一共用映像檔,若該第一處理程序不是第一個請求存取該硬體裝置的處理程序,則該第一處理程序取得已經建立好的該互斥鎖以 及該共用映像檔。
- 如申請專利範圍第13項所述之方法,其中該共用映像檔是指在使用者模式下驅動程式的映像檔,該共用映像檔用於保留該硬體裝置暫存器和I/O狀態資料或上述兩者之一,且該共用映像檔為所有處理程序所共用的資料。
- 一種基於使用者模式多工下控制一硬體裝置的裝置,包括:一接收模組,其係在使用者模式下接收一第一處理程序存取該硬體裝置的一請求,該請求包含與該第一處理程序相對應的一第一識別碼;一第一判斷模組,其係判斷該第一處理程序是否獲取了存取該硬體裝置的一互斥鎖;一第二判斷模組,其係在該第一處理程序獲取了該互斥鎖時,判斷該第一識別碼與最近一次存取該硬體裝置的一第二處理程序相對應的一第二識別碼是否符合;以及一切換與使用模組,其係在該第一識別碼與該第二識別碼不符合時,在該第一處理程序和該第二處理程序之間進行內容置換,使該第一處理程序使用該硬體裝置。
- 如申請專利範圍第15項所述之裝置,其中該切換與使用模組係從已保留的該第一處理程序的映像檔讀出暫存器和I/O狀態資料或上述兩者之一,並將其寫入該 硬體裝置,該硬體裝置恢復為該第一處理程序的配置。
- 如申請專利範圍第16所項所述之裝置,其中該處理程序映像檔是指使用者模式下驅動程式的處理程序映像檔,該映像檔用於保留該硬體裝置暫存器和I/O狀態資料或上述兩者之一,且該映像檔為每個處理程序所獨享的資料。
- 如申請專利範圍第15項所述之裝置,其中還包括:一第三判斷模組,其係在該第一處理程序獲取了該互斥鎖時,判斷一第一執行緒的識別碼與已經獲得該互斥鎖的一第二執行緒的識別碼是否相同,其中該第一執行緒係與該第一處理程序相對應、該第二執行緒係與該第二處理程序相對應;以及一第一執行模組,當該第一執行緒的識別碼與該第二執行緒的識別碼符合時,其係將互斥鎖計數器的值加1,使該第一執行緒繼續使用該硬體裝置;當該第一執行緒的識別碼與該第二執行緒的識別碼不符合時,其係使該第一執行緒執行等待,直到獲得該互斥鎖。
- 如申請專利範圍第15項所述之裝置,其中還包括:一第二執行模組,其係在該第一識別碼與該第二識別碼符合時,使該第一處理程序繼續使用該硬體裝置。
- 如申請專利範圍第15項所述之裝置,其中該第一判斷模組係包括:一第一判斷單元,其係判斷該第一處理程序的互斥鎖計數器的值是否大於等於1;以及一互斥鎖單元,用於在該互斥鎖計數器的值大於等於1時,表示該第一處理程序獲取了該互斥鎖,而在該互斥鎖計數器的值小於1時,則表示該第一處理程序沒有獲取存取該互斥鎖。
- 如申請專利範圍第15項所述之裝置,其中還包括:一第四判斷模組,在該第一處理程序結束使用該硬體裝置後,判斷該第一處理程序的互斥鎖計數器的值是否小於1;以及一第三執行模組,其係在該互斥鎖計數器的值小於1時,釋放該互斥鎖,並退出使用該硬體裝置的狀態,在該互斥鎖計數器的值大於等於1時,則將該互斥鎖計數器的值減1。
- 如申請專利範圍第15項所述之裝置,其中該第一處理程序是通過至少一個應用程序介面來使用該硬體裝置的。
- 如申請專利範圍第22項所述之裝置,其中還包 括一資源獨佔模組,包括:一硬體裝置獨佔單元,其係判斷該請求是否屬於一資源獨佔模式請求,在判斷為資源獨佔模式請求時,則該資源獨佔模式下的起始應用程序介面獲取存取該硬體裝置的互斥鎖,該第一處理程序連續使用該硬體裝置直到該第一處理程序完成所有的作業;以及一硬體裝置退出單元,用於在該第一處理程序完成所有的作業之後,釋放該互斥鎖,並退出使用該硬體裝置的狀態。
- 如申請專利範圍第15項所述之裝置,其中還包括一程式終止處理函數模組,其係回收該第一處理程序所有的資料資訊並還原該硬體裝置狀態,包括:一第二判斷單元,其係判斷該第一處理程序是否正使用該硬體裝置;一硬體裝置釋放單元,其係在該第一處理程序正使用該硬體裝置時,釋放該硬體裝置;一第三判斷單元,其係在該第一處理程序沒有使用該硬體裝置時,判斷該互斥鎖計數器的值是否大於等於1;以及一互斥鎖釋放單元,其係在該互斥鎖計數器的值大於等於1時,釋放該互斥鎖,將該互斥鎖計數器的值設為0,並退出該第一處理程序。
- 如申請專利範圍第15項所述之裝置,其中包括 一驅動程式初始化模組,包括:一第四判斷單元,其係判斷該第一處理程序是否是第一個請求存取該硬體裝置的處理程序;以及驅動程式初始化單元,其係當該第一處理程序是第一個請求存取該硬體裝置的處理程序時,使該第一處理程序建立一個基於執行緒互斥存取的互斥鎖以及共用映像檔。
- 如申請專利範圍第25項所述之裝置,其中該共用映像檔係指在使用者模式下驅動程式的一共用映像檔,該共用映像檔係保留該硬體裝置暫存器和I/O狀態資料或上述兩者之一且為所有處理程序所共用的資料。
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 |
---|---|
TW201346766A TW201346766A (zh) | 2013-11-16 |
TWI493466B true TWI493466B (zh) | 2015-07-21 |
Family
ID=46858633
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW101128447A TWI493466B (zh) | 2012-05-09 | 2012-08-07 | 控制硬體裝置的方法及其裝置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9329911B2 (zh) |
CN (1) | CN102693159B (zh) |
TW (1) | TWI493466B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103310149B (zh) * | 2013-05-27 | 2018-06-26 | 华为终端(东莞)有限公司 | ***功能调用的方法、装置及终端 |
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 |
CN105263053B (zh) * | 2015-10-15 | 2019-04-30 | 深圳创维数字技术有限公司 | 多业务的硬件资源调度方法、***及数字电视 |
CN105335237B (zh) * | 2015-11-09 | 2018-09-21 | 浪潮电子信息产业股份有限公司 | 一种操作***的死锁预防方法 |
CN105426253A (zh) * | 2015-12-18 | 2016-03-23 | 广州广电运通金融电子股份有限公司 | 一种自助设备硬件管理方法和装置 |
CN107065639A (zh) * | 2016-12-13 | 2017-08-18 | 北京光年无限科技有限公司 | 基于智能机器人的外设行为冲突控制方法和*** |
CN107391249A (zh) * | 2017-07-31 | 2017-11-24 | 上海爱优威软件开发有限公司 | 一种多用户编码的进程调度方法及*** |
KR102549540B1 (ko) * | 2017-09-22 | 2023-06-29 | 삼성전자주식회사 | 스토리지 장치 및 그 동작 방법 |
CN109947575B (zh) * | 2019-03-21 | 2021-08-24 | 恒生电子股份有限公司 | 读写锁的加锁、释放方法及相关*** |
CN109976672B (zh) * | 2019-03-22 | 2022-02-22 | 深信服科技股份有限公司 | 一种读写冲突优化方法、装置、电子设备及可读存储介质 |
CN112015525B (zh) * | 2019-05-29 | 2024-07-12 | 上海哔哩哔哩科技有限公司 | 任务进程阻塞管理方法 |
US11250124B2 (en) * | 2019-09-19 | 2022-02-15 | Facebook Technologies, Llc | Artificial reality system having hardware mutex with process authentication |
CN111124622A (zh) * | 2019-11-22 | 2020-05-08 | 深圳震有科技股份有限公司 | 一种多线程访问临界资源的方法、存储介质及智能终端 |
CN113535414A (zh) * | 2021-05-31 | 2021-10-22 | 宁波三星医疗电气股份有限公司 | 适用于Linux容器应用的多进程同步方法 |
CN115391066B (zh) * | 2022-08-31 | 2023-06-30 | 瀚博半导体(上海)有限公司 | 用于芯片的数据交互方法、装置和人工智能芯片 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200517865A (en) * | 2003-09-25 | 2005-06-01 | Ibm | Method and system for autonomically adaptive mutexes |
TW200713036A (en) * | 2005-09-19 | 2007-04-01 | Via Tech Inc | Selecting multiple threads for substantially concurrent processing |
US20070288931A1 (en) * | 2006-05-25 | 2007-12-13 | Portal Player, Inc. | Multi processor and multi thread safe message queue with hardware assistance |
TW200941338A (en) * | 2007-12-18 | 2009-10-01 | Advanced Micro Devices Inc | Mechanism for profiling program software running on a processor |
Family Cites Families (12)
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 |
CA2201275A1 (en) * | 1997-03-27 | 1998-09-27 | Chris L. Brealey | Locking tool data objects in a framework environment |
US20040068607A1 (en) * | 2002-10-07 | 2004-04-08 | Narad Charles E. | Locking memory locations |
CN100353325C (zh) * | 2004-08-23 | 2007-12-05 | 华为技术有限公司 | 实现共享内存数据库的方法及内存数据库*** |
US7937710B1 (en) * | 2005-11-22 | 2011-05-03 | Nvidia Corporation | Context switch signaling method and system |
US8589943B2 (en) * | 2007-08-15 | 2013-11-19 | Sony Computer Entertainment Inc. | Multi-threaded processing with reduced context switching |
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 |
CN102262559B (zh) * | 2010-05-24 | 2013-08-14 | 腾讯科技(深圳)有限公司 | 一种资源共享的方法及*** |
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 (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200517865A (en) * | 2003-09-25 | 2005-06-01 | Ibm | Method and system for autonomically adaptive mutexes |
TW200713036A (en) * | 2005-09-19 | 2007-04-01 | Via Tech Inc | Selecting multiple threads for substantially concurrent processing |
US20070288931A1 (en) * | 2006-05-25 | 2007-12-13 | Portal Player, Inc. | Multi processor and multi thread safe message queue with hardware assistance |
TW200941338A (en) * | 2007-12-18 | 2009-10-01 | Advanced Micro Devices Inc | Mechanism for profiling program software running on a processor |
Also Published As
Publication number | Publication date |
---|---|
TW201346766A (zh) | 2013-11-16 |
US9329911B2 (en) | 2016-05-03 |
CN102693159B (zh) | 2015-07-01 |
US20130305259A1 (en) | 2013-11-14 |
CN102693159A (zh) | 2012-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI493466B (zh) | 控制硬體裝置的方法及其裝置 | |
JP3659062B2 (ja) | 計算機システム | |
CN105579961B (zh) | 数据处理***及操作方法、用于数据处理***的硬件单元 | |
EP3425502B1 (en) | Task scheduling method and device | |
US10073711B2 (en) | Virtual machine monitor configured to support latency sensitive virtual machines | |
US9367459B2 (en) | Scheduling method and multi-core processor system | |
EP0969381A2 (en) | Method of efficient non-virtual main memory management | |
US9378069B2 (en) | Lock spin wait operation for multi-threaded applications in a multi-core computing environment | |
JP2004272894A (ja) | グラフィックス処理ユニットのマルチスレッド式カーネル | |
US10599468B2 (en) | Housekeeping virtual processor overcommit for real time virtualization | |
JPH1115793A (ja) | 資源の保全性を保護する方法 | |
US7844782B2 (en) | Data processing system with memory access | |
EP1693743A2 (en) | System, method and medium for using and/or providing operating system information to acquire a hybrid user/operating system lock | |
US7743234B2 (en) | Facilitating communication within an emulated processing environment | |
Mejia-Alvarez et al. | Interrupt Handling Schemes in Operating Systems | |
EP0297895B1 (en) | Apparatus and method using lockout for synchronization of access to main memory signal groups in a multiprocessor data processing system | |
US20130239113A1 (en) | Information processing apparatus, computer product, and information processing method | |
US11275633B1 (en) | Memory buffer management for microkernel operating system | |
JP2002014827A (ja) | プロセスの制御及び可視化方法 | |
JP2010026575A (ja) | スケジューリング方法およびスケジューリング装置並びにマルチプロセッサシステム | |
JP3764282B2 (ja) | プログラム制御システムの制御装置 | |
Ju | A real time multitasking kernel for the IBM personal computer | |
Halvorsen et al. | Mac OS X and iOS | |
JP4984153B2 (ja) | 実時間タスクにおけるブロック回避方法 | |
JPH0376497B2 (zh) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees | ||
MM4A | Annulment or lapse of patent due to non-payment of fees |