본문 바로가기

CS

쉽게 배우는 운영체제 | ch10. 입출력 시스템과 저장장치

입출력 시스템

컴퓨터는 필수장치인 CPU와 메모리, 주변장치인 입출력장치와 저장장치로 구성되며 각 장치는 메인보드에 있는 버스로 연결된다.

  • 저속 주변장치: 메모리와 주변 장치 사이에 오고 가는 데이터의 양이 적어 데이터 전송률이 낮은 장치를 말한다. 키보드의 경우 아무리 빨리 타이핑을 한다고 해도 1초에 1KB를 넘지 않으므로 저속 주변장치
  • 고속 주변장치: 메모리와 주변장치 사이에 대용량의 데이터가 오고 가므로 데이터 전송률이 높은 장치. 출력 장치인 그래픽 카드의 경우 모니터에 초당 수싲밪으이 그래픽을 보여주어야 하기 떄문에 고속 주변장치이다.

여러 주변장치는 메인보드 내의 버스로 연결된다. 그런데 버스에는 많은 종류의 장치가 연결 되기 때문에 버스를 1개만 사용하면 병목 현상이 발생한다. 따라서 여러개의 버스를 묶어서 사용하는데, 이때 여러개의 데이터가 지나다니는 하나의 통로를 채널이라고 부른다. 채널은 도로의 차선이라고 생각하면 쉽게 이해될 것이다. 4채널 버스는 4개의 주변장치가 동시에 데이터를 주고 받을 수 있는 4차선 도로와 같다.

입출력 버스의 구조

주변 장치는 CPU와 메모리보다 매우 느리다. 따라서 폴링방식을 적용하여 CPU가 직접 입출력을 한다면 입출력이 끝날 때까지 다른 작업을 할 수 없다. 이제 폴링방식에서 입출력 제어기에 맡기는 구조로 바뀌었다. 입출력 제어기는 메인 버스와 입출력 버스로 나뉘며, 메인 버스는 고속으로 작동하는 CPU와 메모리가 사용하고 입출력 버스는 주변장치가 사용한다. CPU에서 입출력 요청이 오면 입출력 제어기는 입출력 장치로부터 데이터를 직접 송수신한다. 입출력 제어기를 사용하면 느린 입출력 장치로 인해 CPU와 메모리의 작업이 느려지는 것을 막을 수 있어 전체 작업 효율이 향상된다.

현대의 컴퓨터는 CPU와 메모리를 연결하는 메인버스, CPU와 그래픽카드를 연결하는 그래픽 버스, 고속 입출력 버스와 저속 입출력 버스를 사용한다.

직접 메모리 접근

DMA는 CPU의 도움 없이도 메모리에 접근할 수 있도록 입출력 제어기에 부여된 권한으로, 입출력 제어기에는 직접 메모리에 접근하기 위한 DMA제어기가 마련되어있다.

주변장치에서 전송된 데이터는 DMA제어기를 거쳐 메모리에 올라간다. 반대로 메모리에서 주변장치로 데이터를 전송할 때는 DMA제어기가 메모리에서 데이터를 가져오면 채널 선택기에서 적당한 채널로 전송한다.

인터럽트

입출력 제어기와 DMA 제어기의 협업으로 작업이 완료되면 입출력 제어기는 CPU에 인터럽트를 보낸다. 인터럽트는 주변장치의 입출력 요구나 하드웨어의 이상 현상을 CPU에게 알려주는 역할을 하는 신호이다. 컴퓨터 시스템에는 다양한 종류의 장치가 있기 때문에 CPU가 인터럽트를 받아도 어떤 장치로부터 받은 인터럽트인지 확인하기가 어렵다. 따라서 각 장치에는 IRQ라는 고유의 인터럽트 번호가 부여된다. 인터럽트가 발생하면 CPU는 IRQ를 보고 어떤 장치에서 인터럽트가 발생했는지 파악한다.

버퍼링

버퍼는 속도가 다른 두 장치의 속도 차이를 완화하는 역할을 한다. 느린 장치를 통해 들어오는 데이터를 버퍼에 모아 한꺼번에 이동하면 효율적이다. 하드 디스크나 CD-ROM등 배부분의 입출력장치는 버퍼를 사용하여 느린 속도를 보완한다.

주변장치뿐 아니라 커널에서도 버퍼를 사용한다. 커널이 입출력장치로 보내야할 데이터를 버퍼에 담아놓으면 입출력 제어기가 커널 버퍼에서 입출력 장치로 데이터를 보낸다. 커널이 버퍼를 사용하면 입출력 작업이 완료되기 전에 다른 작업을 할 수 있어 시스템의 성능이 좋아진다.