본문 바로가기

운영체제

운영체제 - 입출력 I/O 제어 (폴링, 인터럽트, DMA)

컴퓨터의 주요 작업을 꼽으면 계산과 I/O 작업을 들 수 있다
운영체제는 입출력 시 입출력 작업 및 입출력 장치를 관리하고 제어한다

I/O 란 device 와 컨트롤러의 버퍼 사이에서의 데이터 흐름이다 (CPU 는 컨트롤러의 버퍼와 메인 메모리를 오가며 데이터를 읽어낸다)

이때 컴퓨터에서 입출력 장치간 통신으로 많이 언급되는 용어인 폴링, 인터럽트, DMA 방식에대해 정리해보고자 한다

 

1. 폴링 (polling)

  • 폴링은 CPU 가 자신과 연결 된 입출력 장치에서 무슨 일이 있는지를 주기적으로 확인하는 방식이다
  • CPU 는 계속해서 입출력 장치의 상태를 확인한다. CPU 가 버퍼를 계속 확인 (=polling) 해야 하므로 비효율적이다
  • 컨트롤러는 상태 레지스터의 비지 비트를 통해 자신의 상태를 나타낸다
  • 호스트는 명령 레지스터의 명령 준비 완료 비트(command-read bit) 를 통해 입출력을 원한다는 신호를 한다
  • CPU 가 상태 레지스터의 digit 비트가 0 이될때까지 검사
  • 여기서 CPU 는 digit 비트가 소거될때 까지 루프를돌며 검사를 반복한다 (이과정을 Polling 이라고 한다)

사실 루프를 도는 시간이 길어지다보면 매우 비효율적이고,
몇몇 장치들은 호스트가 빨리 서비스 해주지 않으면 데이터는 계속 들어오지만 막상 CPU 는 하드웨어가 동작이 끝날 때까지 상태를 체크하여 다른 처리가 계속 미뤄지고 오버플로우를 일으키게된다

이런 비효율은 보완하기 위해 생겨난것이 Interrupt 이다
이는 입출력 장치가 CPU 에 자신의 상태 변화를 통보하는 하드웨어 기법이다

 

2. 인터럽트 (interrupt)

  • 인터럽트란 CPU 가 처리중에 있을 때, 입출력 하드웨어 장치나 다른 예외적 상황의 발생으로 처리가 필요한 상황에 CPU 를 불러 처리하도록 하는 것이다
  • 즉 포장 주문을 해놓고 그대로 기다리는것이 Polling 방식이라면 포장 음식이 만들어지는동안 다른 볼일을 보다가 음식점에서 연락이 오면 Interrrupt 해서 찾아가는 효율적인 방식이다
  • 하지만 Polling 방식도 높은 처리량을 보이는 I/O 에 사용되기 때문에 Polling 과 Interrupt 가 함께 사용되기도 한다
  • CPU 는 IRQ(Interrupt Request Line) 을 가지고 있는데, 하나의 명령어의 실행을 완료할 때마다 항상 이선을 검사한다
  • 컨트롤러가 이 라인에 신호를 보내면 하던 일을 잠깐 멈추고 현재 작업 내용을 Context 에 잠깐 저장한 상태로 Interrupt handling 을 하게 된다

 

3. DMA (Direct Memory Access)

  • Interrupt 를 적용해 Polling 의 단점은 CPU 가용 시간을 증가할 수 있는 장점이 있다고 하였다
  • 하지만 인터럽트 방식은 1 word 를 처리할 때마다 CPU 에 인터럽트 신호를 전송하는 방식으로 여전히 CPU 의 가용 시간을 잡아먹고 있다
  • 이런 문제를 해결하기 위해 CPU 가 하는 일을 DMA Controller 가 대신하고 있다
  • DMA 를 이용하면 입출력 장치간 데이터를 주고 받는 과정이 끝났을 때에만 인터럽트가 발생하므로 CPU 의 역할을 현저히 줄일 수 있게된다

 


참고 : https://peterleeeeee.github.io/Intro-OS(2)/

 

OS(Operating System) - I/O, polling, Interrupt, DMA

Colorful

peterleeeeee.github.io

참고 : https://complicated0idea.tistory.com/14