📄 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 + -