2014-02-13 27 views
0

如何在多任务环境中的其他任务未修改我写入处理器寄存器的值之前不再需要它?如何在多任务环境中使用寄存器

mov eax , 42 
; 
; some calculations 
; 
; which use the value 
; 
; stored in the eax 
; 

如果其他程序在完成使用前会修改寄存器值,我的程序可能会崩溃。我如何处理它?

回答

4

操作系统照顾你这个。

当你多任务时,OS会保存你的上下文(标志和寄存器)。当你的上下文恢复时,保存的数据也会被恢复,所以即使你在另一个处理器中改变了eax的值,你的代码也会工作。从您的代码角度来看,您正在使用与以前相同的代码。你不能从另一个处理器访问一个处理器的寄存器,所以你在这两种情况下都是安全的。

导致问题的原因是数据的来源,例如,如果您将数据从内存移到eax,而没有锁定,则不保证数据没有变化。在这种情况下,您可以锁定,移动,计算和解锁。

+0

谢谢你的回答。我是否正确地认识到,“上下文切换”是CPU完成某个进程Foo的某个指令并开始执行进程Bar某条指令之前的时刻? – Kolyunya

+1

如今,您可以使用不同类型的上下文切换,例如处理中断,系统调用等。您所说的从单个处理器的角度来看是正确的。在多处理器环境中,Foo和Bar可以同时运行。您也可以使用上下文切换来运行操作系统本身。 – nmenezes

相关问题