폴링과 인터럽트는 프로세서(CPU)와 입출력 장치 사이의 통신입니다.

 

폴링(Polling)이란?

 

특정 주기마다 스레드를 돌면서 시그널이 들어왔는지 확인하는 방식입니다.

 

소프트웨어적으로 시그널을 확인하는 것이죠.

 

예를 들면 While문에 250ms flag 가 Set 되었을 때 If문을 통해 특정 시그널이 Set 되었는지 확인하는 것이죠.

 

이렇게 특정 주기마다 계속 확인해야 하기 때문에 시스템의 리소스를 많이 먹는다는 단점이 있습니다.

 

또한 특정 주기마다 확인하기 때문에 정확한 타이밍에 시그널이 들어왔는지 확인하는 것은 불가하고

 

주기에 따른 오차가 있습니다.

 

장점으로는 구현이 쉽다는 점, 우선순위 변경이 용이하다는 점이 있습니다, 

 

 

 

인터럽트(Interrupt)란?

 

외부의 인터럽트 핀에 신호가 들어오면 즉시 인터럽트 소스를 실행하고 다시 원래의 코드로 돌아오는 방식입니다.

 

하드웨어적으로 시그널을 확인하는 것이죠.

 

커널의 Interrupt Handler가 Interrupt를 확인하고 Interrupt가 발생했다면 Interrupt Thread로 발생을 알려줍니다.

 

Polling보다 구현이 복잡하다는 단점이 있습니다.

 

하지만 시그널이 들어온 정확한 타이밍을 알 수 있고, 즉 반응 시간이 빠릅니다.

 

Interrupt 발생시에만 처리를 하기 때문에 시스템 부하가 적습니다.

 

인터럽트의 시퀀스는 다음과 같습니다.

 

프로그램 실행 -> 인터럽트 요청 -> 프로그램 중단(수행중인 명령을 완료하고 PC, SR 저장)

-> 인터럽트 서비스 루틴 처리(인터럽트 벡터를 통하여 주소 접근) -> 프로그램 재시작(프로그램 카운터를 통하여 접근)

 

 

 

 

예를 들어 설명하자면

 

스위치가 눌렸을 때 LED를 켜주려면

 

폴링은 Loop 내부에서 일정 시간 간격으로 if문을 통해 스위치가 눌렸는지 확인하고 LED를 켜줍니다.

 

인터럽트는 스위치가 눌리면 인터럽트가 발생하여 LED를 켜줍니다.

 

 

 

+ Recent posts