인프런 커뮤니티 질문&답변
폴링 방식 관련
해결된 질문
작성
·
304
0
안녕하세요 폴링 방식과 관련해 궁금한 것이 있습니다!
폴링 방식에서 CPU는 입출력 작업이 들어오면 입출력 관리자에게 (입출력을 처리하라는) 입출력 명령을 내린다고 하셨는데
저는 이해를 ‘입출력 작업(‘0’키 눌림)이 들어오면 입출력 관리자에게 (화면에 ‘0’을 띄워)라는 명령을 내린다‘ 이런 식으로 했습니다
그런데 왜 언제 입출력 명령이 완료될지 알 수 없거나, 혹은 키 입력이 들어왔냐는 확인을 계속 해야 하는 것인지 잘 모르겠습니다;;
답변 1
0
1. 만약 게임에서 '0'키를 입력받는 것을 폴링 방식으로 코드를 짠다면 아래와 같은 코드를 만들 수 있을겁니다.
while(true){
if(Input(KeyCode.zero)){
// '0'키가 눌렸을 때 실행될 내용
}
wait(1000);
}
위 코드는 무한루프내 wait()으로 1초마다 '0'키가 눌렀는지 계속 검사하는 코드입니다.
키가 언제 눌렸는지 알 수 없으니까 계속 검사하는 것이죠.
구현은 쉽지만 쓸데없이 계속 검사를 하니까 성능은 좋지 않습니다.
2. 인터럽트는 해당 행위를 설명하는 단어입니다. 폴링 방식이 아니라 하드웨어적인 방법으로 '0'키가 눌렸을 때 "인터럽트 신호"가 발생되어 인터럽트 서비스 루틴이 실행됩니다. 온수옴님께서 말하는 인터럽트가 아마 "인터럽트 신호"인 것 같아서 이렇게 말씀드립니다.
만약 '0'키를 인터럽트 방식으로 구현한다면 '0'가 눌렸을 때 인터럽트 신호가 발생하고 이 인터럽트가 어떤 종료의 인터럽트인지 인터럽트 벡터를 뒤져서 확인합니다. 그리고 해당 인터럽트 서비스 루틴을 실행해서 '0'키가 눌렸을 때 동작하는 코드가 동작합니다.
폴링과 인터럽트의 가장 큰 차이점은
폴링은 소프트웨어적으로 일정주기마다 계속 확인해서 키보드가 눌렸는지 검사하는 방식이고
인터럽트는 하드웨어적으로 해당 키가 눌렸을 때 원하는 동작을 수행시키는 방식입니다.
궁금증이 해결되셨나요?






1. 머릿속으로 구상이 잘 안되는데
'0'키 눌림을 예시로 한다면 폴링 방식은 어떤 과정을 거치게 되는 것인가요?
2. 인터럽트 방식에서 입출력이 완료되었을 때 CPU에게 인터럽트 요청 신호를 주고, CPU는 인터럽트 서비스 루틴을 실행한다고 알고 있는데
인터럽트는 어느 과정에서 생성되게 되는 것인가요?