2015-01-21 17 views
-2

好吧,这是非常令人困惑的我,对大会的每个教程说,有数目较少内置于CPU的,寄存器那么,如果我创建了使用寄存器来计算,这样的程序:CPU如何在有限数量的寄存器中同时运行多个应用程序?

global _start 

section .text 

_start: 

reStrt: ; Label, Restart... 

MOV ah, 0 ; Initialise ah to 0 

INC ah ; ah++ [OR] ah=1 

JMP reStrt ; Unconditional jump to label "reStrt" 

后使用子系统:CONSOLE组装和链接此代码,我将启动它,并将看到永不退出的程序。

要关闭它,我们必须按下控制台窗口的[X]按钮,并且在本程序运行的同时,使用寄存器ah增加1并减少1,我再次启动该应用程序,现在同一个程序在同一时间运行2次。

但是这怎么可能呢?如果AH寄存器是CPU中的一个,那么两个程序如何共享该寄存器,但是不会与另一个共享一个值? B'cause我甚至没有创建一个变量(标签)来存储内存(RAM)的值。另外,如果有数百个寄存器但应用程序被限制使用每个寄存器的一个副本,那么我怎么能说我的计算机可以处理多少进程?

+0

你不需要大写这么多的单词。 – 2015-01-21 06:11:00

回答

3

context switches(尤其是运行一些其他process时),在operating system kernel被保存过程中的状态(尤其是其对schedulerpreemptive多任务处理中),特别是registers,某处memory

硬件通常可以通过在内存中保存至少一些寄存器来处理interrupts

如果您使用Linux或其他一些free software操作system,你就可以学习its源代码,发现所有这些细节。见例如Linux Assembly HowTo

请仔细阅读关于operating systemscomputer architecture(包括instruction set体系结构)的更多信息。去图书馆,你会发现很多关于这些主题的书籍。

+0

这意味着内核会自动将其保存在内存中,这意味着程序实际上并未同时运行,指令会一次传递给一个处理器,而不是一次全部传递给处理器。不是吗?感谢您的简短回答我喜欢它! – Rishabh 2015-01-21 06:53:07

+0

你需要遵循我给你的所有链接,并花费很多时间在操作系统和处理器体系结构上阅读书籍。请大家不要这么写:写一个接一个的处理器是不对的,应该是“一个处理器” – 2015-01-21 07:39:24

+0

对不起,它是我的坏习惯,下次我会照顾它,肯定的我一定会遵循你的链接,但是现在我很忙,需要一些时间,谢谢你的帮助...... – Rishabh 2015-01-21 15:56:48

相关问题