interrupt vs polling

2025. 11. 20. 14:57·[ Laboratory ]/Advanced Operating System

polling

폴링은 CPU가 디바이스가 일을 끝냈는지 알아내기 위해 주기적으로 status register를 계속 읽어보는 방식이다. 

 

CPU가 디스크 등 I/O 디바이스에 작업을 요청하면

CPU는 그 장치가 끝났는지 계속 status register를 반복적으로 체크하고 

디바이스가 완료 상태로 바뀌면 CPU가 다음 동작을 진행하게 된다.

 

구조는 단순하지만 CPU가 계속 일하고 있는 디스크를 계속 확인하고 기다리는 polling 중이므로 이 시간동안 다른 테스크가 CPU를 사용할 수 없기 때문에 CPU 시간이 낭비된다. 

 

interrupt

인터럽트는 I/O 디바이스가 일을 스스로 완료한 후에 CPU에게 끝났음을 알리는 방식이다. 

 

CPU가 디스크 등 I/O 디바이스에 작업을 요청하면

CPU는 요청 프로세스를 sleep 상태로 전환시키고 다른 프로세스로 context switch한다. 

(=task1 대신 task2를 실행하는 것)

디스크 작업이 완료되는 순간 디바이스가 CPU에게 인터럽트 시그널을 보내고 

CPU는 인터럽트에 대해 대처하는 인터럽트 핸들러 ISR을 실행하고 

sleep 상태로 대기 중이던 프로세스를 깨우고

다시 원래 프로세스로 돌아가서 결과를 마저 처리하게 된다. 

(=task1로 돌아오는 것)

 

CPU는 디스크의 작업 완료를 기다리지 않고 다른 일을 할 수 있기 때문에 CPU와 I/O 디바이스 모두 잘 활용할 수 있다는 장점이 있다. 

 

너무 많은 인터럽트가 짧은 시간 안에 발생하게 되면 CPU가 인터럽트 처리만 하게 될 수 있다. 그래서 여러 I/O 완료를 한 번에 모아서 하나의 인터럽트로 처리하는 최적화 기술을 Coalescing interrupts 라고 한다. 

 

interrupt vs polling

디바이스 작업이 아주 빠르게 끝난다면 CPU가 처음 한두 번 polling 하는 동안 이미 작업이 끝나기 때문에 인터럽트하면 오히려 더 비용이 많이 든다. 프로세스를 sleep 시키고 다른 프로세스로 context switch하고 인터럽트 핸들러를 실행해야하기 때문이다. = 속도가 빠른 디바이스라면 polling이 유리하다.

 

디바이스 작업이 느리게 끝난다면 CPU가 polling 하면 기다리는 동안 그 시간을 많이 낭비하게 된다. 반면 인터럽트는 기다리는 동안 CPU가 다른 작업을 수행할 수 있기 때문에 속도가 느린 디바이스라면 interrupt가 유리하다. 

 

즉, 두 방식이 유리한지 판단할 때는 context switch 비용에 따라, polling으로 낭비되는 cycle의 양에 따라 결정된다. 

 

 

 

728x90

'[ Laboratory ] > Advanced Operating System' 카테고리의 다른 글

race condition  (0) 2025.11.29
lock free vs wait free  (0) 2025.11.20
io_uring  (0) 2025.11.20
ABI stability  (0) 2025.11.17
리눅스 eBPF, kfunc  (0) 2025.11.17
리눅스 cgroup  (0) 2025.11.17
리눅스 페이지 캐시 정책  (1) 2025.11.14
'[ Laboratory ]/Advanced Operating System' 카테고리의 다른 글
  • lock free vs wait free
  • io_uring
  • ABI stability
  • 리눅스 eBPF, kfunc
dev charlotte
dev charlotte
주 - 컴퓨터공학 / 복수 - 산업 보안
    250x250
  • dev charlotte
    int main() {
    dev charlotte
  • 전체
    오늘
    어제
    • 분류 전체보기
      • [ Laboratory ]
        • Paper review
        • Advanced Operating System
        • System Software & Storage
        • Lab etc
      • [ Computer Science ]
        • Algorithm_C++
        • Operating System
        • Information Retrieval
        • Database_sql
        • SW Engineering
        • Computer Network
        • JavaScript
        • Python
        • Data Structure
        • CS study
        • Distributed systems
      • [ Computer Security ]
        • Convergence Security
        • Web Security
        • PIMS
        • Network Security
        • Digital Finance
      • [ Artificial Intelligence ]
        • Trend
        • Seminar
      • [ 미래, 같이, LG ]
      • [ Development ]
        • [ Front-end ]
        • [ Back-end ] Spring 기본
        • [ Back-end ] Node.js
      • etc
        • 현대오토에버 스마트 모빌리티 공학 체험 교육
      • It's me
  • 블로그 메뉴

    • 링크

      • GitHub
    • 공지사항

    • 인기 글

    • 태그

      ACM
      현대오토에버 스마트 모빌리티
      티스토리챌린지
      현대오토에버 스마트모빌리티
      hotstorage
      코딩 교육
      백준
      싸피 13기
      오블완
      비전공자 코딩
      코드잇
      자바스크립트
      코딩 인강
      데이터베이스
      spdk
      프로그래머스
      프로그래머스 입문
      대학생 대외활동
      MySQL
      프로그래머스 c++
      스마트모빌리티공학체험교육
      ssafy 13기
      소프트웨어 공학
      공대생 대외활동
      프로그래밍 언어론
      싸피
      SQL
      SSAFY
      현대오토에버
      프로그래머스 코테
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.4
    dev charlotte
    interrupt vs polling
    상단으로

    티스토리툴바