폴링(polling)이란 하나의 장치(또는 프로그램)가 충돌 회피 또는 동기화 처리 등을 목적으로 다른 장치(또는 프로그램)의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때 송수신 등의 자료처리를 하는 방식을 말한다. 이는 컴퓨터 과학에서 외부 장치의 상태를 능동적으로 샘플링하는 동기적(synchronous) 기법을 의미하며, 폴드 I/O(polled I/O) 또는 소프트웨어 구동 I/O(software-driven I/O)라고도 부른다.
개요
폴링에서 제어 장치(또는 프로그램)는 버스(bus)나 멀티포인트 형태와 같이 여러 장치가 동일 회선을 사용하는 상황에서 순차적으로 각 단말 장치에 회선 사용 의사가 있는지를 묻는다. 예를 들어, 병렬 포트에 연결된 프린터의 경우 컴퓨터는 프린터가 다음 문자를 수신할 준비가 될 때까지 상태를 반복적으로 확인한다. 이러한 과정은 때로 단 1비트만 읽는 수준으로 미세하게 이루어질 수 있다.
폴링은 입출력(I/O) 측면에서 가장 자주 사용되며, 하드웨어 구현의 좋은 예로 워치독 타이머(watchdog timer)가 있다.
동작 방식
폴링의 일반적인 동작 알고리즘은 다음과 같다.
- 호스트 측: 제어기의 busy 비트가 0(준비 완료)이 될 때까지 반복적으로 읽는다.
- 호스트 측: busy 비트가 0이 되면 명령 레지스터에 명령을 기록한다. 출력인 경우 write 비트를 설정하고 데이터를 data-out 레지스터에 기록한다. 입력인 경우 controller가 기록한 데이터를 data-in 레지스터에서 읽고 read 비트를 0으로 설정한다.
- 호스트 측: 명령 준비(command-ready) 비트를 1로 설정한다.
- 제어기 측: 명령 준비 비트가 설정되었음을 감지하면 busy 비트를 1로 설정하고 명령 레지스터를 읽어 해당 I/O 작업을 수행한다.
- 제어기 측: 작업이 완료되면 command-ready 비트와 busy 비트를 0으로 초기화한다.
유형
폴링은 그 수행 방식에 따라 여러 유형으로 나뉜다.
-
롤콜 폴링(Roll-call Polling): 폴링 장치 또는 프로세스가 고정된 순서로 목록의 각 요소를 질의한다. 각 요소로부터 응답을 기다리므로, 응답하지 않는 요소로 인한 잠금(lock-up)을 방지하기 위해 타이밍 메커니즘이 필요하다. 폴링 메시지의 오버헤드가 크거나 대부분의 요소가 비활성 상태인 경우 비효율적일 수 있다.
-
허브 폴링(Hub Polling / Token Polling): 각 요소가 다음 요소를 고정된 순서로 폴링하는 방식이다. 첫 번째 요소에 도달하면 폴링 주기가 다시 시작된다.
활용 분야
폴링은 다음과 같은 다양한 컴퓨팅 맥락에서 사용된다.
- 운영체제: 다중 작업(multitasking) 환경에서 프로세서 시간 및 자원을 여러 경쟁 프로세스에 할당하는 데 사용된다.
- 네트워크: 어떤 노드가 네트워크에 접근하려 하는지 결정하는 데 사용된다. 또한 EGP(Exterior Gateway Protocol)와 같은 라우팅 프로토콜에서 라우팅 정보를 수집하는 데도 활용된다.
- 웹 애플리케이션: 클라이언트가 주기적으로 서버에 요청을 보내 데이터 변경 여부를 확인하는 방식으로 사용된다. 짧은 폴링(Short Polling)과 긴 폴링(Long Polling)으로 나뉜다.
폴링과 인터럽트의 비교
폴링의 대안으로는 인터럽트(interrupt) 방식이 있다. 인터럽트는 장치나 프로세스가 주의가 필요함을 CPU에 신호로 알리는 방식이다. 폴링은 구현이 단순하지만 CPU가 장치 상태를 반복적으로 확인해야 하므로 CPU 자원을 소모한다. 반면 인터럽트는 장치가 준비되었을 때만 CPU에 알리므로 멀티태스킹 환경에서 일반적으로 더 효율적이다. 다만, 여러 장치가 단일 인터럽트를 공유하는 경우 인터럽트 서비스 루틴(ISR)이 해당 인터럽트를 발생시킨 장치를 식별하기 위해 다시 폴링을 사용하기도 한다.
폴 메시지(Poll Message)
멀티드롭 라인(Multidrop line) 방식에서는 중앙 컴퓨터가 특정 단말기에 폴링 메시지를 보내고, 모든 단말기가 출력 라인을 청취하지만 폴링된 단말기만이 응답하여 전송할 데이터를 보낸다. 스타 네트워크(Star network)에서는 마스터가 질서 있는 방식으로 입력을 수집하기 위해 폴링이 사용된다.
같이 보기
- 인터럽트(Interrupt)
- DMA(Direct Memory Access)
- 버스 웨이팅(Busy waiting)
- 웹소켓(WebSocket)