2015-01-21 18 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

相關問題