看linux 1.2.13看到这个了,

转:http://blog.163.com/njut_wangjian/blog/static/165796425201242010718848/

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()相关推荐

  1. Linux内核--网络栈实现分析(二)--数据包的传递过程--转

    转载地址http://blog.csdn.net/yming0221/article/details/7492423 作者:闫明 本文分析基于Linux Kernel 1.2.13 注:标题中的&qu ...

  2. Linux内核网络栈1.2.13-tcp.c概述

    参考资料 <<linux内核网络栈源代码情景分析>> af_inet.c文件中调用函数在协议层的实现 本文主要根据在af_inet.c文件中根据初始化不同的协议,来调用不同的协 ...

  3. Linux内核网络栈1.2.13-af_inet.c概述

    参考资料 <<linux内核网络栈源代码情景分析>> socket常用函数继续调用分析 根据socket提供的常用库函数,socket.read和write等函数,继续往下一层 ...

  4. Linux内核网络栈1.2.13-socket.c函数概述

    参考资料 <<linux内核网络栈源代码情景分析>> socket常用函数概述 根据socket提供的常用的库函数,socket,read,write等函数, 执行的过程 in ...

  5. linux内核网络初始化,Linux内核--网络栈实现分析

    本文分析基于内核Linux Kernel 1.2.13 以后的系列博文将深入分析Linux内核的网络栈实现原理,这里看到曹桂平博士的分析后,也决定选择Linux内核1.2.13版本进行分析. 原因如下 ...

  6. Linux内核--网络栈实现分析(三)--驱动程序层+链路层(上)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7497260 更多请看专栏,地址 ...

  7. Linux内核--网络栈实现分析(一)--网络栈初始化--转

    转载地址 http://blog.csdn.net/yming0221/article/details/7488828 作者:闫明 本文分析基于内核Linux Kernel 1.2.13 以后的系列博 ...

  8. 显示驱动包含在Linux内核层,驱动程序层(上) - Linux内核--网络栈实现分析_Linux编程_Linux公社-Linux系统门户网站...

    经过前面两篇博文的分析,已经对Linux的内核网络栈的结构有了一个模糊的认识,这里我们开始从底层开始详细分析Linux内核网络栈的实现.由于这是早期版本,代码的层次隔离做的还不是很好,这里说是从底层分 ...

  9. Linux内核的Softirq机制

    前言  中断服务程序往往都是在CPU关中断的条件下执行的,以避免中断嵌套而使控制复杂化.但是CPU关中断的时间不能太长,否则容易丢失中断信号.为此,Linux将中断服务程序一分为二,各称作" ...

最新文章

  1. Scala中任意表达式都是有返回值的(具体返回结果的值取决于满足条件的代码体的最后一行内容)
  2. linux识别新加存储盘,Linux下新加磁盘
  3. 分布式版本控制工具Git
  4. HAProxy负载均衡原理及企业级实例部署haproxy集群
  5. spring python负载均衡_Spring Cloud:使用Ribbon实现负载均衡详解(上)
  6. 微信小程序性别代码对应描述
  7. 前景背景分离方法(二)高斯混合模型法GMM(Gaussian Mixture Model)
  8. 服务器云端设置怎么退出_换新手机时,3个地方要及时清除退出,别让旧手机成隐私“内鬼”...
  9. python自动化笔记_python自动化学习笔记(一)
  10. java 获取当前时间的时间戳(秒级与毫秒级)
  11. Cheat Engine 特征码
  12. pyton对txt文件的读取写入和加密(含代码)
  13. docker安装gitea
  14. 大一python基础编程试卷_Python编程基础练习题
  15. 程序员不得不知道的英语词汇
  16. Win10 系统下安装 vim
  17. 1103. Integer Factorization (30)
  18. Ispell in Emacs
  19. 04: 部署MongoDB服务 、 MongoDB基本使用
  20. 注意力机制(attention)学习记录(二)

热门文章

  1. Mac OS QQ的截屏快捷键设置
  2. java hypot_Java Math类静态double hypot(double d1,double d2)与示例
  3. [附源码]计算机毕业设计JAVA旅游网站
  4. 人群密度估计--Recurrent Attentive Zooming for Joint Crowd Counting and Precise Localization
  5. 川大计算机专业导师冯子亮,川大计算机学院硕导名单_跨考网
  6. 不可错过的 7 个JS 小技巧,一定要进来瞧瞧哦
  7. WINCC的SQL应用,无需修改任何源码
  8. c语言双精度小数点后取几位_c语言float类型小数点后位数
  9. 阿里云服务器备案服务码申请流程及使用限制
  10. kafka集群搭建教程(使用自带的zookeeper)