1. 인터럽트의 개념 : 초기의 컴퓨터에는 주변장치가 많지 않았다. 당시에는 CPU가 직접 입출력장치에서 데이터를 가져오거나 내보냈는데, 이러한 방식을 폴링Polling 방식이라고 한다. 폴링 방식에서는 CPU가 입출력장치의 상태를 주기적으로 확인하여 일정한 조건을 맞출 때 데이터를 처리한다. CPU가 명령과 해석이라는 본래 역할 외에 모든 입출력까지 관여해야 하므로 작업효율이 떨어진다. 오늘날은 입출력 장치가 많아져 폴링방식은 효율이 떨어진다. 이것을 해결하기 위해 등장한 것이 인터럽트interrupt 방식이다. 인터럽트 방식은 CPU의 작업과 저장장치의 데이터 이동을 독립적으로 운영함으로써 시스템의 효율을 높인다. 즉, 데이터의 입출력이 이루어지는 동안 CPU가 다른 작업을 할 수 있다.
2. 인터럽트 방식의 동작 과정
- CPU가 입출력 관리자에게 입출력 명령을 보낸다.
- 입출력 관리자는 명령받은 데이터를 메모리에 가져다놓거나 메모리에 있는 데이터를 저장장치로 옮긴다.
- 데이터 전송이 완료되면 입출력 관리자는 완료신호를 CPU에 보낸다.
입출력관리자가 CPU에 보내는 완료 신호를 인터럽트 라고 한다. CPU는 입출력 관리자에게 작업지시를 내리고 다른 일을 하다가 완료 신호를 받으면 하던 일을 중단하고 옮겨진 데이터를 처리한다. 이처럼 작업을 중단하고 처리해야 하는 신호라는 의미에서 인터럽트 라고 한다.
컴퓨터에는 하드디스크 뿐만 아니라, 마우스, 키보드, 프린터 등 다양한 입출력 장치가 있다. 하드디스크가 여러 개 장착된 경우, USB드라이버와 같은 외부 저장장치를 사용하는 경우 등 여러가지 경우가 있다. 인터럽트 방식에서는 많은 주변장치 중 어떤 작업이 끝났는지를 CPU에 알려주기 위해 인터럽트 번호interrupt number를 사용한다. 인터럽트 번호는 완료 신호를 보낼 때 장치의 이름대신 사용하는 장치의 고유번호로서 운영체제마다 다르다. 윈도우 운영체제의 경우 인터럽트 번호를 IRQ(Interupt ReQuest)라고 부르며 키보드의 IRQ는 1번, 마우스의 IRQ는 12번, 첫번째 하드디스크의 IRQ는 14번과 같이 구분해서 사용한다.
CPU는 입출력 관리자에게 여러 개의 입출력 작업을 동시에 시킬 수 있다. 이 경우 여러 작업이 동시에 완료되고 그때마다 인터럽트를 여러 번 사용해야 하는데 이는 매우 비효율적이다. (인터럽트가 너무 자주 일어나기 때문에 CPU가 작업을 못하게 된다) 그래서 여러 개의 인터럽트를 하나의 배열로 만든 인터럽트 벡터interrupt vector를 사용한다. 인터럽트는 1.입출력요청 2. 데이터 전송 3. 인터럽트 발생 순으로 진행된다. 만약 0번에서 5번까지의 인터럽트 벡터가 있다고 가정하자. 그중 0번과 3번이 완료되었다고 가정하자. 그렇다면 인터럽트는 0번과 3번이 동시에 발생한다. CPU가 인터럽트 벡터를 받으면 0번과 3번을 동시에 처리하는 것이다.
입출력 작업이 완료되었음을 CPU에 알리기 위한 것 외에도 다양한 종류의 인터럽트가 있다. 사용자가 컴퓨터의 전원을 눌러 강제로 종료하면 CPU는 하던 일을 모두 멈추고 처리중인 데이터를 안전하게 보관한 뒤, 시스템을 종료해야 한다. 또한, 메모리에서 실행 중인 어떤 작업이 자신에게 주어진 메모리 영역을 넘어서 작업을 하려 하거나 0으로 숫자를 나누는 경우에도 모두 인터럽트가 발생하게 된다.
3. 직접 메모리 접근 Direct Memory Access DMA
과거의 운영체제는 폴링 방식을 사용했기 때문에 CPU가 메모리나 주변장치에 대한 모든 권한을 가지고 있었다. 그러나 효율성을 높이기 위해 인터럽트 방식을 사용하게 되면서 입출력 관리자가 데이터의 입출력을 맡게 되었다. 입출력이 필요할 때 CPU는 입출력 관리자에게 입출력 요청을 보내고 자신은 하던 일을 계속한다. 명령을 받은 입출력 관리자는 CPU가 요청한 데이터를 메모리에 가져다놓아야 하는데 이때 문제가 있다. 메모리는 CPU만 접근 권한을 가진 작업공간이라 입출력 관리자는 접근이 불가능하다는 것이다. 따라서 입출력관리자에게는 CPU의 허락 없이 메모리에 접근할 수 있는 권한이 필요한데, 이러한 권한을 직접 메모리 접근DMA 라고 한다. 데이터 전송을 지시받은 입출력 관리자는 직접 메모리 접근 권한이 있어야 CPU의 관여없이 작업을 완료할 수 있다.
4. 메모리 매핑 입출력 Memory-mapped I/O MMIO, I/O Mapped I/O
직접 메모리 접근은 인터럽트 방식의 시스템을 구성하는데 필수 요소이다. MMIO방식은 메모리와 입출력장치가 하나의 연속된 주소영역에 할당된다. 그러나 직접 메모리 접근을 사용하면 메모리가 복잡해진다. 메모리에는 CPU가 사용하는 데이터와 입출력장치가 사용하는 데이터가 섞이게 된다. 직접 메모리 접근을 통해 들어온 데이터를 메모리에 아무렇게나 둔다면 CPU가 사용하는 데이터와 섞여서 관리하기 어려울 것이므로 이를 막기 위해 메모리를 나누어 사용하는 방법이 도입되었다. CPU가 사용하는 메모리 공간과 직접 메모리 접근을 통해 들어오거나 나가는 데이터를 위한 공간을 분리해두었다. 이것이 I/O Mapped I/O 방식이다.
5. 사이클 훔치기
메모리는 CPU가 관할하는 중요한 장치이지만 직접 메모리 접근을 통해 입출력 장치로 메모리를 사용할 수 있게 되었다. 그러나 만약 동시에 접근을 하려고 하면 어떻게 될까? 보통 CPU가 양보를하게 된다. 그 이유는 CPU의 작업속도보다 입출력장치의 속도가 훨씬 느리기 때문이다. 이러한 상황을 사이클훔치기 Cycle Stealing 이라고 하게된다.
'CS > 운영체제' 카테고리의 다른 글
프로세스의 개요 (0) | 2020.10.29 |
---|---|
병렬처리 (0) | 2020.10.26 |
[운영체제] 컴퓨터 기본 구성 (0) | 2020.10.13 |
[운영체제] 운영체제의 구조 (0) | 2020.10.11 |
[운영체제] 운영체제의 역사 (0) | 2020.10.09 |