인터럽트 처리 부분에 궁금한것이 있습니다.
글쓴이: chadr / 작성시간: 화, 2010/09/28 - 4:19오전
만약에 cli를 통해서 인터럽트를 금지 시켰을 때 인터럽트 요청이 들어올 경우에는 어떻게 처리되나요?
cpu가 인터럽트를 sti를 통해 재개 시키고 나면 금지 시켰던 동안 들어온 인터럽트가 차례로 들어오는지
아니면 인터럽트를 금지시켰을 때 들어온 인터럽트는 모두 무시 되는지 궁금합니다. x86의 경우 입니다.
또한 cli를 이용해서 인터럽트를 전부 중지시키는 것 보다는 pic의 레지스터를 통해서 선택적으로 인터럽트를
금지시켜도 되는지 궁금합니다.
만약에 pic의 레지스터를 통해서 선택적으로 인터럽트를 중지 시키면 인터럽트가 중지된 동안에 들어온 인터럽트
또한 추후 해당 인터럽트를 재개 했을때 연속적으로 밀린 인터럽트가 들어오는지 아니면 무시가 되는지 궁금합니다.
Forums:
인터럽트는 보통
인터럽트는 보통 앞단에 펜딩 레지스터가 있고, 그 펜딩 레지스터를 마스크 레지스터를 이용해 마스킹을 한 다음 CPU쪽으로 전달합니다. 그래서 마스크 레지스터를 이용해 인터럽트를 활성화, 비활성화 시키죠.
인터럽트를 비활성화 시키더라도 펜딩 레지스터는 그대로 동작합니다. 마스크 레지스터를 이용해 인터럽트를 다시 활성화 시키면 펜딩 레지스터에 있는 인터럽트 신호가 그대로 CPU쪽으로 전달됩니다. 그래서 보통 마스크 레지스터를 설정하기 전에 펜딩 레지스터를 한번 지워주기도 합니다.
그리고, 보통 인터럽트 루틴에서 인터럽트 수행 후 인터럽트 컨트롤러의 펜딩 레지스터를 지워주는 루틴이 있습니다. 그 펜딩 레지스터를 지워주지 않고 인터럽트 수행을 끝내면 다음에 연달아서 해당 인터럽트가 걸리게 됩니다. 그렇기에, CPU의 STI 명령어 후에 인터럽트 컨트롤러에 펜딩 된 인터럽트가 인터럽트 우선순위에 따라 순서대로 호출되지 않을까 생각합니다.
참고로 x86의 상황은 잘 모르겠으며, 보통의 인터럽트 수행에 대한 얘기였습니다. 자세한건 해당 칩의 인터럽트 컨트롤러 문서를 보시는게 명확할 것 같습니다. 아니면, 다음분이... 자세히...
댓글 달기