⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 semaphore.c.txt

📁 这是一个牛人的linux学习内核时分析内核的笔记
💻 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 + -