?? semaphore.h.txt
字號:
這個頭文件提供了內(nèi)核機制中的信號量的定義,其中所定義的信號量的數(shù)據(jù)結構和各種處理函數(shù)只適用于內(nèi)核態(tài)的調(diào)用,而并不提供給用戶態(tài)的程序來使用。
(1):struct semaphore{
atomic_t count; 定義了信號量的數(shù)量。
int sleepers; 定義了睡眠的進程數(shù)。
wait_queue_head_t wait; 定義了休眠的進程的鏈表。
long __magic; 魔數(shù)(?)
}
(2):sema_init(struct semaphore *sem, int val)
信號量的初始化函數(shù),任何一個聲明過的信號量在使用之前都必須先進行初始化,其中參數(shù)val就是信號量的初始值,也就是代表臨界區(qū)資源的數(shù)量。這個值要首先賦給sem種的count變量。然后將sleepers的值設為0,然后對等待隊列進行設置(init_waitqueue_head).
(3):init_MUTEX(struct semaphore *sem)
只是調(diào)用了sema_init(sem,1)
(4):down(struct semaphore * sem)
使用匯編語言對sem->count的值進行減一操作。如果count小于0,這調(diào)用__down_failed(在arch\i386\kernel\semaphore.c中),并將參數(shù)sem傳進去。其中__down_failed將調(diào)用另一個函數(shù)將當前的進程轉入休眠狀態(tài)。
(5):down_interruptible(struct semaphore *sem)
和函數(shù)down基本一樣。
(6):up(struct semaphore *sem)
使用匯編語言對sem->count的值進行加一操作。然后調(diào)用__up_wakeup函數(shù)(在arch\i386\kernel\semaphore.c中)。將當前的進程喚醒。
注意:本文件和arch\i386\kernel\semaphore.c緊密相關,相應的函數(shù)請參照相關文件。
信號量在內(nèi)核程序中的使用方法:
聲明一個信號量型變量;
首先使用sema_init初始化信號量;
使用down或者down_interruptible;
使用up;
up函數(shù)以下的函數(shù)都是為多處理機而設置的,不必理會。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -