하드웨어 인터럽트 처리 순서

콜 파머가 될 남자·2024년 2월 11일
0

삽질

목록 보기
1/1
post-thumbnail

혼공컴운 교재로 학습한 내용을 복습하던 중 궁금점이 생겼다
하드웨어 인터럽트 처리 순서는 다음과 같다

  1. 입출력장치 -> CPU 인터럽트 요청 신호 전송
  2. CPU가 실행 사이클을 끝내고 명령어 인출 전에 인터럽트 여부 확인
  3. CPU가 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 확인
  4. 인터럽트를 받아들일 수 있으면 CPU는 지금까지의 작업을 백업
  5. CPU가 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
  6. 인터럽트 서비스 루틴이 끝나면 4번에서 백업해 놓은 작업을 복구하여 실행을 재개한다

3번 과정에서 인터럽트 요청을 확인하고, 요청이 있다고 가정해보자
그렇다면 인터럽트 플래그를 확인하여 받아들일 수 있는 상태여야 이를 처리할 수 있는데,
만약 받아들이지 못하는 상태라면 말짱도루묵 아닌가 ?

즉, 반대로 인터럽트 플래그를 먼저 확인하고 인터럽트 요청 유무를 확인한다고 해보자
(0 - 인터럽트를 받아들일 수 없음, 1 - 인터럽트를 받아들일 수 있음 가정)

인터럽트 플래그 = 0 : 인터럽트가 발생하던 말던 받아들일 수 없으므로 인터럽트 요청 확인할 필요가 없다.
인터럽트 플래그 = 1 : 인터럽트 요청을 매번 확인 .. ? ? ?

이렇게 쓰고 보니까 둘다 비슷한 것 같기도 하고...
구글링 해봐도 원하는 답변이 안나와서 밑져야 본전으로 지피티씨한테 물어봤다

플래그 레지스터의 여러 종류의 플래그들 중에서 인터럽트 플래그의 값은 "대부분 가능" 으로 되어있나..? 일반적으로 어떤 값이 디폴트인지는 잘 모르겠다

그냥 지피티씨 말대로 단순하게
"인터럽트 플래그를 먼저 확인할 경우, 값이 어떻다 한들 인터럽트 요청을 받아들이는 것이 지연되어 처리의 지연을 초래할 수 있으니 인터럽트의 요청을 우선시 하자" 로 결론을 내야 될 것 같다.

profile
콜 파머가 개발자라면 사회적 인지도는 어느 정도일까

0개의 댓글