Linux内核——cli()和sti()——标志寄存器的中断标志
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
cli()和sti()有点类似于汇编指令中的CLI和STL,当某个任务在执行的过程中不想被中断,则可以在任务的开始出执行cli(),在任务的结束处执行sti(),恢复中断的执行。
为了避免竞争条件和中断对临界代码区的干扰,在Linux 0.12内核代码中许多地方使用了cli和sti指令。cli指令用来复位CPU标志寄存器中的中断标志,使得系统在执行cli指令后不会响应外部中断。 sti指令用来设置标志寄存器中的中断标志,以允许CPU能识别并响应外部设备发出的中断。当进入可能引起竞争条件的代码区时,内核中就会使用cli指令来关闭对外部中断的响应,而在执行完竞争代码区时内核就会执行sti指令以重新允许CPU响应外部中断。
例如,在修改文件超级块的锁定标志和任务进入/退出等待队列操作时都需要首先使用cli指令关闭CPU对外部中断的响应,在操作完成之后再使用sti指令开启对外部中断的响应。如果不使用cli、sti 指令对,即在需要修改一个文件超级块时不使用cli来关闭对外部中断的响应,那么在修改之前判断出该超级块锁定标志没有置位而想设置这个标志时,若此时正好发生系统时钟中断而切换到其他任务去运行,并且碰巧其他任务也需要修改这个超级块,那么此时这个其他任务会先设置超级块的锁定标志并且对超级块进行修改操作。当系统又切换回原来的任务时,此时该任务不再判断锁定标志就继续执行设置超级块的锁定标志,从而造成两个任务对临界代码区的同时操作,引起超级块数据不一致,严重时会导致内核系统崩溃。
http://www.startos.com/zhuanti/zt02/2010/1108/8799.html
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献23条内容
所有评论(0)