1

I wonder why when you execute 2 assembly program at the same time or they use threads so it will look like this.

//program1
mov eax,1
add eax,50

program 2
xor eax,eax
add eax,eax

Registers unlike ram can be accessed through any program so how does these programs doesn't change each other? I mean that program 1 instruction 1 can be after instruction 1 command 2 Help!

4

2 回答 2

2

操作系统确保不同的程序不会混淆彼此的寄存器。否则,任何类型的多任务处理都是不可能的。

所有程序(即使是最初没有用汇编编写的程序)都会不断更改寄存器。这就是 CPU 的工作原理。没有办法解决它。由于任务切换可能发生在任何时刻——在任何两个汇编指令之间——操作系统确保当程序重新获得控制权时,寄存器的先前值被恢复。寄存器就像变量——如果程序中的变量在随机时刻不可预测地改变了它们的值,你感觉如何?

在内部,当操作系统创建一个线程时,它也会分配一个内存块,大到足以容纳 CPU 中的所有寄存器。当任务切换发生并且线程失去控制时,操作系统将所有寄存器保存在那里。当线程重新获得控制权时,寄存器将被恢复。

就操作系统内核而言,不同的程序(进程)作为不同的线程运行。每个进程至少有一个线程——主线程。即使你运行同一个程序两次,你最终会得到两个不同的进程和两个线程,每个进程一个,并且它们不会看到或更改彼此的寄存器。

为了在同一进程中的线程之间共享信息,您可以使用内存。为了在进程之间共享信息,可以使用共享内存或其他进程间通信方法。所有这些都是由操作系统提供的;CPU 本身对多任务处理的规定相当少。

于 2014-03-04T16:54:17.033 回答
1

对于多核 CPU,每个内核都有自己的一组寄存器。对于只有一个内核的多任务处理,在切换到另一个任务或线程之前,所有寄存器都将被保存。

短剑

于 2014-02-27T23:22:30.740 回答