CPU가 직접 입출력장치에 데이터를 가져오거나 내보내는 방식이다.
CPU가 입출력장치의 상태를 주기적으로 계속 검사하여 어떠한 조건을 만족할 때 데이터를 처리한다.
반복적인 모니터링 작업으로 인해 작업의 효율이 떨어지기 때문에 오늘날의 다양한 프로세스를 처리하기에는 적합하지 않다.
CPU가 아닌 주변의 입출력장치(입출력 관리자)가 대신 입출력 해주는 방식이다. 때문에 데이터의 입출력이 이루어지는 동안 CPU는 다른 작업을 할 수 있다.
즉 CPU의 작업과 저장장치의 데이터 이동을 독립적으로 운영할 수 있어 시스템의 효율을 높일 수 있다.
데이터의 입출력이 이루어지는 동안 CPU는 다른 작업을 할 수 있기 때문에 현대 운영체제는 인터럽트 기반의 시스템을 사용하고 있다.
인터럽트란? 입출력 관리자가 CPU에 보내는 이벤트 신호를 의미한다. 부팅이 끝나면 운영체제는 메모리에 정착하게 되고, 이벤트(event)를 기다리며 대기하고 있다가 어떠한 이벤트가 발생하면 운영체제 내부에 있는 interrupt service routine의 코드를 통해서 이벤트를 처리하게 된다.
마우스, 키보드, 프린트기 등과 같은 하드웨어에서 발생한 인터럽트를 하드웨어 인터럽트(Hardware Interrupt)라고 부른다. 하드웨어를 사용하면 이벤트가 발생하게 되며 이러한 신호(인터럽트)를 CPU에 전달하여 각 하드웨어에 맞는 interrupt service routine의 코드를 찾아 상황에 맞게 해결한다.
소프트웨어에서 발생한 인터럽트를 소프트웨어 인터럽트(Software Interrupt)라고 부른다. 소프트웨어 인터럽트는 명령어 또는 전기적 신호를 CPU에 보내는 방식을 말한다.
실행할 수 없는 작업(N/0)을 처리하기 위해 만들어진 인터럽트를 내부 인터럽트(Internal Interrupt)라고 부른다.
위 그림과 같은 하드웨어, 소프트웨어에 어떠한 이벤트가 발생하게 되면 CPU에 상황을 전달하게 되고 CPU는 전달받은 신호를 확인한다. 그다음 memory에 적재되어 있는 OS를 찾아가 OS 내부에 적절하게 맞아떨어지는 interrupt service routine을 찾아 이벤트를 처리한다.