CS/운영체제

#28 주변장치 - I/O 디바이스, 저장장치

RadderNepa 2023. 6. 3. 16:22

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)

https://ko.wikipedia.org/wiki/%EC%A7%81%EC%A0%91_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EC%A0%91%EA%B7%BC