?? semaphore.c.txt
字號:
this is writen by netbear in nankai university
all copyright reserved
you can copy and modify it,but you cant use it to make profit
****************************匯編段代碼*************************************************
本文件和/include/asm下的的semaphore.h頭文件相關,其中的匯編代碼承接該頭文件中函數調用。
(1):__down_failed匯編段代碼
保存當前進程的各段寄存器,然后調用__down函數將當前進程轉入休眠。休眠結束后從堆棧中講寄存器的值彈出。
(2):__down_interruptible匯編段代碼
保存當前進程的各段寄存器,然后調用__down_interruptible函數將當前進程轉入休眠。休眠結束后從堆棧中講寄存器的值彈出。
(3):__up_wakeup匯編段代碼
保存當前進程的各段寄存器,然后調用__up函數將當前進程轉入休眠。休眠結束后從堆棧中講寄存器的值彈出。
****************************************************************************************
*******************************正常代碼*************************************************
(4):__up
調用wake_up函數將&sem->wait中的進程喚醒。
(5):__down(struct semaphore *sem)
#聲明一個wait_queue_t形變量,
#將current進程加入到改變量中。
#然后將這個等待進程所在的wait(entry)加入到sem中的wait隊列中的隊尾。(注意,wait是一個wait_queue_head_t形變量)。
#將sem中的sleepers的個數加一。
#進入無限循環,
#用原子操作atomic_add_negative將count加一,始終保持count是-1,同時sleepers是1。只有這樣,當某個進程使用up函數把count加一以后才能喚醒進程。
#如果當前進程不滿足條件就進行調度。否則跳出循環。
#把當前的進程從等待隊列中刪除,并且把state設置為TASK_RUNNING狀態。
#喚醒sem中wait隊列中的一個進程執行。
(5):__down_interruptible(struct semaphore *sem)
和_down函數基本一致。
******************************************************************************************
注意:標有rw_型的變量和函數不用管,是多處理機的
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -