※ 전남대학교 박태준 교수님의 운영체제 강의를 듣고, 정리한 내용입니다.
외부 장치들은 무언가 입력이 있거나 작업의 완료, 예외 상황 등이 발생하면 CPU 에게 자신의 상태에 대해 알려줍니다.
예시
CPU 는 자신이 할일을 아래와 같은 방식들로 처리를 합니다.
CPU 가 직접 입출력장치에서 데이터를 가져오거나 내보내는 방식을 Polling 이라고 합니다.
CPU 가 외부 상태를 주기적으로 검사하며 요청 ( Request ) 이 있으면 처리하는 방식입니다.
여기서, 처리해야할 메시지는 CPU 가 poll 할 때 까지 기다려야 합니다.
Polling 에는 주기가 있는데, 높을 수록 메시지 응답속도가 높고, 낮을수록 실시간성이 떨어진다는 특징이 있습니다.
각 자원들이 능동적으로 자신의 상태변화를 CPU 에게 알리는 방식을 Interrupt 라고 합니다.
즉, CPU 에게 어떤 작업을 실행하라고 작업물을 던져주는 것이 Interrupt 라고 볼 수 있습니다.
언제 작업을 처리해야하는지 알려주기 때문에, CPU 는 필요할 때만 외부 장치와 통신하고 남는 시간동안은 다른 작업을 처리합니다.
즉, 일반적으로 CPU 의 활용율을 높일 수 있지만, 너무 많은 인터럽트가 발생하게 되면 CPU 가 해야할 일을 제대로 처리하지 못해 오히려 효율이 떨어질 수 있습니다.
폴링과 인터럽트에 대해 살펴보았는데, 폴링이던, 인터럽트던 모두 CPU 가 주관하며, 데이터를 처리한다! 라는 공통점이 있습니다.
결국 CPU 가 데이터를 처리하려고 이동하는데 걸리는 시간이 존재하게 되며, 이는 곧 데이터 이동 처리에 시간을 낭비하게 된다라는 뜻입니다.
이 문제점을 해결하고자, DMA ( Direct Memory Access, 직접 메모리 접근 제어기 ) 가 등장하게 되었습니다.
DMA 는 CPU 개입 없이 메모리와 하드웨어 장치 간 데이터 전송을 하기 위해 만들어진 별도의 공간 입니다.
DMA 컨트롤러가 버스를 제어하고, I/O 와 메모리간 전송을 제어합니다.
이후 DMA 동작이 끝나고 나면, DMA 컨트롤러가 인터럽트를 발생시켜 작업이 완료되었음을 CPU 에게 알려줍니다.
덕분에 CPU 는 자신이 해야할 일들을 더 많이 처리할 수 있게 되었습니다.