2015-01-21 9 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" 

을 이 코드를 Subsystem : CONSOLE과 조립 및 연결하고, 나는 그것을 시작하고 절대로 종료하지 않는 프로그램을 볼 것입니다.

닫기 콘솔 창에서 [X] 버튼을 눌러야하며, 동시에이 프로그램이 실행되는 동안 ah 등록을 사용하여 1 씩 증가하고 1 씩 감소 시키면 해당 응용 프로그램을 다시 시작합니다 , 이제 같은 프로그램이 같은 시간에 2 번 실행됩니다.

하지만 어떻게 그렇게 할 수 있습니까? AH 레지스터가 CPU에서 하나 인 경우 두 프로그램이 해당 레지스터를 공유 할 수는 있지만 값을 다른 레지스터와 공유하지는 마십시오. B'cause 나는 심지어 메모리 (RAM)에 값을 저장하기 위해 변수 (레이블)를 만들지 않았습니다. 또한 레지스터가 수백 개 있지만 응용 프로그램이 각각 하나의 복사본을 사용하도록 제한되어있는 경우 내 컴퓨터에서 처리 할 수있는 프로세스의 양은 어떻게 나타낼 수 있습니까? memory 어딘가에 특히 registerscontext switches에서

+0

많은 단어를 대문자로 표기하지 않아도됩니다. –

답변

3

(특히, 다른 실행 process)는 operating system kernel는 (특히 그 schedulerpreemptive 멀티 태스킹 내부) 처리 상태를 저장된다.

하드웨어는 종종 메모리에 적어도 일부 레지스터를 저장하여 interrupts을 처리 할 수 ​​있습니다. 당신이 system을 운영 Linux 또는 다른 free software를 사용한 경우

, 당신은 its 소스 코드를 공부하고 모든 세부 사항을 찾을 수 있습니다. 예 : Linux Assembly HowTo

operating systemscomputer architecture (instruction set 구조 포함)에 대해 자세히 읽어보십시오. 도서관으로 가면이 주제에 관한 많은 책을 찾을 수 있습니다.

+0

즉, 커널이 자동으로 RAM에 저장한다는 것을 의미합니다. 즉, 프로그램이 실제로 동시에 실행되지 않는다는 것을 의미합니다. 지침은 Processor One에 전달되며, 한 번에 처리되지 않습니다. 그렇지 않니? 짧은 답변을 주셔서 감사합니다. – Rishabh

+0

내가 준 링크를 모두 따라야하고 운영 체제 및 프로세서 아키텍처에 대한 책을 읽는 데 많은 시간을 할애해야합니다. 그리고 제발, 너무 많은 단어를 대문자로하지 마십시오 : "하나씩 프로세서 하나"로 작성하는 것은 잘못되었습니다. "프로세서 하나씩" –

+0

미안하지만, 저의 나쁜 습성, 다음 번에 확실하게 처리하겠습니다. 나는 확실히 당신의 연결을 따를 것이지만, 지금 매우 바쁜 메신저로 약간의 시간이 걸릴 것입니다, 그리고 도움을 주셔서 감사합니다 ... – Rishabh