본문 바로가기
Lecture/OS

입출력 시스템

by YUNZEE 2023. 11. 28.
728x90

입출력장치와 채널

컴퓨터는 필수장치인 CPU와 메모리, 주변장치인 입출력장치와 저장장치로 구성되며, 각 장치는 메인보드에 있는 버스에 연결된다. 다양한 주변장치는 데이터 전송 속도에 따라 저속 주변장치와 고속 주변장치로 구분할 수 있다.

저속 주변장치: 메모리와 주변장치 사이에 오고 가는 데이터양이 적어 데이터 전송률이 낮은 장치를 말한다. (키보드)

고속 주변장치: 메모리와 주변장치 사이에 대용량의 데이터가 오고 가므로 데이터 전송률이 높은 장치를 말한다.(그래픽카드, 하드디스크)

전송 속도가 비슷한 장치끼리 묶어서 장치별로 채널을 할당하면 여러 채널을 효율적으로 사용하여 전체 데이터 전송 속도를 향상할 수 있다.

 

초기의 구조

CPU가 작업을 진행하다가 입출력 명령을 만나면 직접 입출력장치에서 데이터를 가져왔다. 이를 폴링polling방식이라고 한다. 지금도 그렇지만 주변장치는 CPU와 메모리보다 매우 느리다. 따라서 폴링 방식을 적용하여 CPU가 직접 입출력을 하면 입출력이 끝날 때까지 다른 작업을 할 수 없다.

 

입출력 제어기를 사용한 구조

CPU가 폴링 방식으로 주변장치를 관리하기 어려워져서 모든 입출력을 입출력 제어기 I/O controller에 맡기는 구조로 바뀌었다. 입출력 제어기를 사용한 입출력 버스의 구조를 보여준다. 입출력 제어기는 메인 버스와 입출력 버스의 2개 채널로 나뉜다. 메인버스는 고속으로 작동하는 CPU와 메모리가 사용하고 입출력 버스는 주변장치를 사용한다. 입출력 제어기를 사용하면 느린 입출력장치로 인해 CPU와 메모리의 작업이 느려지는 것을 막을 수 있어 전체 작업 효율이 향상된다.

 

입출력 버스의 분리

입출력 제어가를 사용하면 작업 효율은 높일 수 있지만 저속 주변장치 때문에 고속 주변장치의 데이터 전송이 느려지는 문제가 있다. 이러한 문제를 해결하기 위해 고속 입출력 버스와 저속 입출력 버스로 분리한 구조를 보여준다. 고속 입출력 버스에는 고속 주변장치를 연결하고 저속 입출력 버스에는 저속 주변 장치를 연결한다. 두 버스 사이의 데이터 전송은 채널 선택기channel selector가 관리한다. 예를 들어 고속 입출력 버스에서 데이터를 10번 받으면 저속 입출력 버스에서 데이터를 1번 받는 식으로 두 버스의 데이터 전송 속도를 조절한다.

 

직접 메모리 접근

입출력 제어기는 다양한 주변장치의 입출력을 대행하고 여러 채널에서 온 데이터를 메모리에 옮기는 역할을 한다.

메모리는 CPU명령에 따라 작동한다. 그런데 직접 메모리 접근 DMA은 CPU의 도움 없이도 메모리에 접근할 수 있도록 입출력 제어기에 부여된 권한이다. 입출력 제어기에는 직접 메모리 접근을 위한 DMA 제어기가 마련되어 있다.

 

CPU가 작업하는 공간과 DMA 제어기가 데이터를 옮기는 공간을 분리하여 메인 메모리를 운영한다. 이러한 방식을 메모리 맵 입출력 MMIO: memory mapped I/O이라고 한다. 메모리 맵 입출력에서는 메인 메모리의 주소 공간 중 일부를 DMA제어기에 할당하여 작업 공간이 겹치는 것을 막는다. 

 

입출력과 인터럽트

입출력 제어기와 DMA제어기의 협업으로 작업이 완료되면 입출력 제어기는 CPU에 인터럽트를 보낸다. 인터럽트는 주변장치의 입출력 요구나 하드웨어의 이상 현상을 CPU에 알려주는 신호다. CPU가 요청한 작업을 완료했을 때, 하드웨어 이상이 발생했을 때 등 다양한 경우에 인터럽트가 발생한다.

외부 인터럽트는 입출력장치로부터 오는 인터럽트뿐 아니라 전원 이상이나 기계적인 오류로 발생하는 인터럽트를 포함하므로 하드웨어 인터럽트라고도 부른다.

사용자의 의지로 사용자가 직접 발생시키는 인터럽트도 있는데 이것을 시그널 signal이라고 한다.

 

단일 버퍼와 이중 버퍼

단일 버퍼와 이중 버퍼 차이를 보자면 단일 버퍼 single buffer보다는 이중 버퍼 double buffer를 사용하는 것이 버퍼 운용에 유리하다. 단일 버퍼를 사용하면 데이터를 버퍼에 담는 작업과 버퍼에 있는 데이터를 퍼 가는 작업을 동시에 하기가 어렵다. 그러나 이중 버퍼를 사용하면 한 버퍼는 데이터를 담는 용도로 쓰고 다른 버퍼는 데이터를 가져가는 용도로 쓸 수 있다.

 

퀴즈

1. 메모리와 주변장치 사이에 오고 가는 데이터양이 적어 데이터 전송률이 낮은 장치를 말하는 것을 무슨 장치라고 하는가?

2. 메모리와 주변장치 사이에 대용량의 데이터가 오고 가므로 데이터 전송률이 높은 장치를 말하는 것을 무슨 장치라고 하는가?

3. 어떤 제어기를 사용하면 느린 입출력장치로 인해 CPU와 메모리의 작업이 느려지는 것을 막을 수 있어 전체 작업 효율이 향상된다. 어떤 제어기란 무엇인가?

4. CPU가 작업하는 공간과 DMA 제어기가 데이터를 옮기는 공간을 분리하여 메인 메모리를 운영한다. 이러한 방식을 무엇이라 하는가?

5. 외부 인터럽트는 입출력장치로부터 오는 인터럽트뿐 아니라 전원 이상이나 기계적인 오류로 발생하는 인터럽트를 포함하므로 어떤 인터럽트라고도 부르고 있는가?

6. 사용자의 의지로 사용자가 직접 발생시키는 인터럽트도 있는데 이것을 무엇이라 하는가?

7. 한 버퍼는 데이터를 담는 용도로 쓰고 다른 버퍼는 데이터를 가져가는 용도로 쓸 수 있게 구현한 버퍼를 무엇이라 부르는가?

728x90

'Lecture > OS' 카테고리의 다른 글

디스크 스케줄링  (2) 2023.11.30
저장장치  (0) 2023.11.29
스레싱과 프레임 할당  (2) 2023.11.23
페이지 교체 알고리즘  (2) 2023.11.22
요구 페이징  (0) 2023.11.16