单条汇编语句是否可能因线程切换而被打断?

nekeyu606 2006-08-24 05:47:45
...
mov 0x1,%eax
mov 0x0,%ebx
...

线程是否可能在汇编语句执行中被切换出去?
好像一个mov需要4个时钟周期,线程是否可能在这4个时钟周期中给切换走?

linux切换点是怎么选取的?
...全文
514 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
superwiles 2006-09-14
  • 打赏
  • 举报
回复
看你怎么赋值了,简单的直接赋值是有可能被打断的,所以必须使用
(*(unsigned long *)&jiffiers)++,
SMP下 一个汇编指令并不一定就是原子的。

tkit 2006-09-12
  • 打赏
  • 举报
回复
非对齐的内存访问也有问题,除非显示的加LOCK前缀,否则中断可以发生
slone 2006-09-04
  • 打赏
  • 举报
回复
mov 0x1,%eax
mov 0x0,%ebx 如果只是对register 操作是不用担心的啦,但如果对内存操作就要注意了,smp 系统可能会存在的
nekeyu606 2006-09-04
  • 打赏
  • 举报
回复
其实这个问题的来源是:
对一个int32的赋值需要加锁保护么?

我们资深主管说不行...可是最终的赋值仅仅只是一条mov语句啊..
  • 打赏
  • 举报
回复
在cpu执行指令的过程中,不会出现一条机器指令被中断执行的情况。但是如果有若干条指令的话,就无法保证这些指令的执行是原子性的,除非你使用临界区。

单条汇编语句是否可能因线程切换而被打断? 一般情况下,一条汇编语句算一个CPU指令,就不会出现被中断。这里说是一般情况下是因为有些汇编语句是由几条汇编组成的,比如enter/leave,我不清楚在CPU在执行类似这样的指令的时候是否保持他们的原子性。

linux下由原子操作来保证,原子类型的定义和原子操作API都放在内核源码树的include/asm/atomic.h文件中,大部分使用汇编语言实现,因为c语言并不能实现这样的操作。
daemeon 2006-08-24
  • 打赏
  • 举报
回复 1
不会, 中断不会打断单条指令的执行。

When CPU completes executing the current instruction. it determins whether an interrupt i active by checking (1)instruction executions, (2) single-setup, (3) NMI, (4) coprocessor segment overrrun, (5) INTR, (6) INT instrution.

4,438

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧