#28 주변장치 - I/O 디바이스, 저장장치
2023.02.12 - [운영체제] - #3 컴퓨터 하드웨어와 구조(feat 폰 노이만 구조)
#3 컴퓨터 하드웨어와 구조(feat 폰 노이만 구조)
● 프로그램 내장방식 - 오늘도 나는 폰 공부를 한다. - 예전에는 ENIAC(애니악)과 같이 하드웨어를 이용해 프로그램을 만들었기 때문에 프로그램이 달라질 때마다 매번 스위치와 배선의 위치를
radderveloper.tistory.com
● 도입
- 주변장치에는 그래픽카드, 하드디스크, SSD, 키보드, 마우스 등 여러가지가 있다.(아래는 주변장치의 내부구조)
- 주변장치들은 메인보드에 있는 버스로 연결되며 각 하드웨어에 맞게 외부 인터페이스가 존재한다.
- 또한 장치의 상태와 데이터를 저장할 수 있는 각종 레지스터들이 존재한다.
- 레지스터들은 입출력 작업을 할 때 데이터를 저장하는 역할을 하는데 이 값들은 CPU가 사용하기 위해 메모리로 이동되기도 한다.
- 하나의 버스는 Address 버스, Data 버스, Control 버스로 이루어져있다.
- 그래서 I/O 디바이스(입출력 디바이스)는 위 3가지의 버스를 따로 받을 수 있다.
● 캐릭터 디바이스와 블록 디바이스
- 주변장치는 캐릭터 디바이스와 블록 디바이스 2가지로 나눌 수 있는데 이는 데이터의 전송 단위가 캐릭터(글자) or 블록(범위)을 기준으로 나눈 것이다.
- 캐릭터 디바이스는 데이터 전송 단위가 캐릭터(글자)이기에 상대적으로 적은 양의 데이터 전송
- 블록 디바이스는 데이터 전송 단위가 블록(범위)이기에 상대적으로 많은 양의 데이터 전송
- 캐릭터 디바이스 : 마우스, 키보드, 사운드카드, 직렬/병렬 포트 등
- 블록 디바이스 : HDD, SDD, 그래픽카드 등이 있다.
● 주변장치와 버스와 입출력 제어기
- 주변장치들은 메인보드 내의 버스로 연결된다고 했다.
- 예전에는 주변장치들을 하나의 버스로 연결해서 사용했다.
- CPU는 작업을 하던 도중 I/O 명령을 만나면 직접 입출력 장치에서 데이터를 가져와야 했는데 이 경우 CPU가 입출력 중에는 다른 작업을 하지 못 했기 때문에 CPU 사용률이 떨어지는 상황이 발생했다. cf) CPU도 메인보드 내에 존재한다.
- 이러한 문제를 해결하기 위해 입출력 제어기(I/O Controller)와 여러 개의 버스가 추가됐다.
1.
- CPU는 I/O 명령을 만나면 입출력 제어기에게 입출력 작업을 맡기고 다른 작업을 실행한다.
2.
- 입출력 제어기는 두 개의 채널(시스템 버스와 입출력 버스)로 구분한다.
- 시스템 버스 : 고속으로 작동하는 CPU와 메모리가 사용
- 입출력 버스 : 주변장치들이 사용
- 입출력 버스는 세부적으로 느린장치(마우스, 키보드 등)와 빠른장치(HDD)를 구분하기 위해 (고속 입출력 버스와 저속 입출력 버스) 2개의 채널로 나뉘어진다.
- 느린장치와 빠른장치를 구분해 속도 차이로 인한 병목현상을 해결하기 위함이다.
3.
- 그래픽 카드는 대용량의 데이터를 다루기 때문에 고속 입출력 버스로도 감당이 안 되는 수준이다.
- 때문에 그래픽 카드는 입출력 버스에 있지 않고 시스템 버스에 바로 연결해서 사용한다.
4.
- 입출력 제어기는 여러 주변장치를 처리하는데 입출력 버스에서 온 데이터를 메모리를 옮겨준다.
- 근데 메모리는 CPU의 명령으로 움직이기 때문에 입출력 제어기가 메모리에 접근하기 위해서는 CPU가 필요하다.
- 입출력 제어기가 CPU의 도움이 필요없도록 DMA 제어기가 추가됐다.
- DMA가 있기에 입출력 제어기는 데이터를 직접 메모리에 저장하거나 가져올 수 있게 됐다.
cf) DMA = Direct Memory Access(직접 메모리 접근)
5.
- CPU와 DMA가 사용하는 메모리가 겹치지 않도록 [CPU가 사용하는 메모리 영역]과 [DMA가 사용하는 메모리 영역]을 나누는데 이를 Memory Mapped I/O 라고 부른다.
cf)