해결된 질문
작성
·
125
0
프로그램 입출력 방식에서는 전송률이 높은 CPU가 전송률이 낮은 장치 컨트롤러의 상태 레지스터를 계속 확인을 해야 한다는 점이 효율에 있어 문제를 일으킨다고 했습니다.
인터럽트 기반 입출력 방식에서는 인터럽트 신호가 발생할 때만 CPU의 관심을 끌어서 이러한 문제가 없다고 했고요.
그런데 인터럽트 신호가 발생했는지를 확인하기 위해 CPU는 매 명령어 사이클에서 fetch하기 전에 인터럽트 레지스터를 확인하는 과정을 거치는데, 이러면 프로그램 입출력 방식에서 장치 컨트롤러의 상태 레지스터를 계속 확인하는 것과 별반 다른 점이 없는 것 아닌가요? 어떤 점이 개선이 되었다는 건지 잘 이해가 가지 않습니다.
학부 수업을 듣고 제대로 이해가 가지 않아 이 강의를 찾아서 다시 공부하고 있는데, 여전히 헷갈려서 질문 올립니다.
답변 2
1
안녕하세요
인터럽트 신호 발생과 fetch는 관련이 없습니다.
인터럽트 신호는 일방적으로 CPU를 향하는 버스 상의 신호입니다
fetch는 CPU가 주도하는 명령어 인출이구요~
따라서 인터럽트 신호를 받기 위해 굳이 명령어 인출은 필요하지 않습니다 :)
0
안녕하세요, 인프런 AI 인턴입니다.
님의 질문은 매우 유효한데요, 인터럽트 기반 입출력 방식에서 CPU의 효율성이 개선된 주요 차이점에 대해 설명드리겠습니다.
기본적으로 프로그램 입출력 방식(폴링 방식이라고도 함)에서는 CPU가 적극적으로 입출력 장치의 상태를 지속적으로 체크하는 반면, 인터럽트 기반 입출력은 CPU가 다른 작업을 수행하다가 입출력 장치로부터 인터럽트 신호를 받을 때만 관련 처리를 합니다. 이 차이는 CPU가 할당된 작업에 더 집중할 수 있게 하며, 자원 사용의 효율성을 대폭 향상시킵니다.
폴링 방식에서는 CPU가 높은 주기로 입출력 장치를 체크해야 하며, 이는 CPU 리소스를 크게 소모하게 됩니다. 반면, 인터럽트 방식에서는 인터럽트 신호가 발생했을 때만 CPU가 인터럽트 레지스터를 확인하게 되므로, CPU는 대부분의 시간을 실제 계산 작업이나 다른 중요한 태스크에 할애할 수 있습니다.
매 명령어 사이클에서 인터럽트 레지스터를 검사하는 것은 폴링에 비하면 매우 적은 리소스를 사용하며, 실제로 데이터 전송이 필요할 때만 처리를 하기 때문에 전반적인 시스템 성능이 개선됩니다.
님께서는 인터럽트 기반 입출력이 CPU 자원의 효율적 사용을 가능하게 하고, 시스템의 반응 시간을 단축시키는데 어떻게 기여하는지에 대해 더 깊게 이해하셨기를 바랍니다. 추가적인 질문이 있으시다면 언제든지 문의해주세요!
교재에서 만드는 예시 CPU는 fetch 직전 인터럽트 신호를 확인한다 되어있는데, 이것이 보편적으로 적용된다고 착각한 것 같네요. 감사합니다.