2011-01-25 4 views
1

긴 명령어 중간에 CPU가 인터럽트를 수신하면 어떻게됩니까? CPU가 전체 명령 또는 일부만 실행합니까?인터럽트시 프로세서가 명령어를 처리하는 방법

+1

"긴 명령"이란 무엇을 의미합니까? 모든 CPU 명령어는 원자 적이며 프로세서의 관점에서 가능한 한 가장 작은 시간 단위를 사용합니다. 아니면 수업 시간에 뭔가 빠졌나요? :) – Jakob

+0

@Jakob : 현대의 수퍼 스칼라 프로세서는 어떻습니까? 어떤 클록 사이클에서 "비행 중"지침을 100 개 이상 가질 수 있습니까? 인터럽트를 처리하려면 이러한 모든 지침을 완료해야합니까? –

+0

@Jakob : Intel 설명서에 따라 다른 지침은 시간이 많이 걸립니다 (주기) –

답변

1

어느 특정 명령은 폐기되고, 모든 부작용은 레지스터/메모리로 커밋되거나 그렇지 (그리고 그것이 마치 야 명령이 전혀 실행되지 않았습니다). 명령 퇴직의 전체적인 시점은 인터럽트와 같은 외부 사건의 시점에서 프로그램 상태에 대한 일관된 관점을 보장하는 것입니다.

특히 명령이 순서대로 중단되는 이유는 외부 관찰자가 순차적으로 명령을 실행하는 것처럼 CPU의 아키텍처 상태를 계속 볼 수 있도록하기 위해서입니다.

특히 REP-string 클래스 명령어의 예외가 있습니다.

나는 이것이 당신이 요구 한 것이라고 믿지만, 그렇지 않다면 나는 당신에게 묻습니다 : 어떻게하면 부분적으로 어디에서든지 명령이 실행되었다는 것을 관찰 할 수 있습니까?

1

내가 아는 한, 그것은 프로세서와 명령어에 달려있다. 보다 구체적으로, 프로세서가 보류중인 인터럽트를 샘플링할지 여부와 시간을 결정합니다. 프로세서가 현재 명령을 완료 한 후에 보류중인 인터럽트 만 찾으면 중간에있는 명령을 명확하게 중단하지 않습니다. 그러나 긴 명령어가 실행 중이면 명령어 실행 중 여러 번 인터럽트를 샘플링하는 것이 유용합니다 (대기 시간 기준). 여기에는 단점이 있습니다.이 경우 명령의 부분 실행 결과로 레지스터와 플래그에 대한 모든 변경 사항을 복원해야합니다. 인터럽트가 완료된 후에 다시 돌아와 해당 명령을 다시 실행해야하기 때문입니다 .

(출처 : 위키 http://en.wikipedia.org/wiki/Interrupt) 뷰의 프로그래머의 관점에서