Linux内核——cli()和sti()
来源:互联网 发布:自然文化遗产知乎 编辑:程序博客网 时间:2024/04/29 18:28
cli()和sti()有点类似于汇编指令中的CLI和STL,当某个任务在执行的过程中不想被中断,则可以在任务的开始出执行cli(),在任务的结束处执行sti(),恢复中断的执行。
个人理解,CLI/STI和cli()/sti()工作的机制是相同的,都是对标志寄存器中的中断标志进行操作。一般在汇编指令中,CLI 和STL往往是成对出现的;但是cli()和sti()不一定是成对出现的。下面的例子或许可以说明一定的问题。
save_flags(..);
cli();
.............
restore_flags(..);
有时候我们会看到上述的情况,只有cli()没有sti(),这里采取的操作是先保存标志寄存器中的值,然后在禁止中断,在执行完相应的任务后再恢复标志寄存器中的值,这里之所以没有用sti(),可能是因为在任务的执行过程中会执行cli()和sti(),造成cli()和sti()的嵌套,这样可能会造成混乱,可能致使原来的任务没发顺利执行。
Linux内核中的例子是/linux/fs/inode.c中的一段代码,这里采用了cli()和sti()成对出现,可能就是因为在cli()和sti()之间没有再出现cli()和sti()。当然这只是我个人的理解。
static inline void wait_on_inode(struct m_inode *inode)
{
cli();
while(inode->i_lock)
sleep_on(&inode->i_wait);//若指定的i节点上锁,进入睡眠等待状态
sti();
}
这个函数的作用是等待指定的i节点可用。
- Linux内核——cli()和sti()
- Linux内核——cli()和sti()
- Linux内核——cli()和sti()——标志寄存器的中断标志
- sti()和cli()
- cli/sti 用法
- cli/sti 用法
- 汇编指令CLI / STI
- CLI、STI汇编指令
- CLI与STI
- asm cli/sti 指令
- 汇编指令CLI/STI
- ASM中关于CLI和STI的详解
- cli()/sti()移除指南
- system built-in routines cli() and sti()
- 复习8086汇编中的 CLI STI CLD STD指令
- Linux内核0.12——内核编程语言和环境
- Linux内核0.12——内核编程语言和环境
- linux内核0.11——内核编程语言和环境
- 学习鸟哥私房菜 记录关键词-1 2013-12-23
- 关于sqrt函数的效率跟踪
- androidmanifest.xml权限中文说明
- c++ 单链表
- php实现webservice
- Linux内核——cli()和sti()
- 守护进程c代码实现
- 将Excel数据导入到SQLServer2008时数据库中许多空记录行
- 如何删除word多余的回车,删除word多余的断行。
- 调试Release版程序的Crash错误(五)
- linux内核源码的下载 ------ 各种版本的 v1.x v2.x v3.x
- ArcGIS Desktop 的字段(Field)那些事
- NSString的常用方法
- matlab使用avifile制作视频、VideoReader读取视频和movie函数将图片以视频方式播放