👩‍💻 알고리즘/🎛️ 컴퓨터 구조 & OS

[혼공학습단 12기] 8장, 입출력장치

오브 🧙‍♂️ 2024. 7. 22. 13:58

" 장치 컨트롤러 역할 " 

- 종류가 많고, 데이터 전송률이 낮아 CPU나 메모리에 비해 까다롭다.

(다른 언어를 하는 것, 말의 속도가 달라 대화가 안 되는 것과 같다.)

- 컴퓨터 내부와 정보를 주고받는다.

 

역할

1.CPU와 입출력장치 간의 통신 중개

2. 오류 검출

3. 데이터 버퍼링

 

버퍼링

- 전송률이 높은 장치와 낮은 장치 사이에 주고받는 데이터를 버퍼라는 임시 저장 공간에 저장하여 전송률을 비슷하게 맞추는 방법

- 버퍼에 데이터를 조금씩 모았다가 한꺼번에 내보내거나, 데이터를 한 번에 많이 받아 조금씩 내보내는 방법

 

" 장치 컨트롤러 구조 " 

데이터 레지스터, 상태 레지스터, 제어 레지스터로 구성된다.

 

1. 데이터 레지스터

- CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터

- 버퍼 역할

 

2. 상태 레지스터

- 입출력장치가 입출력 작업을 할 준비가 되었는지, 입출력 작업이 완료되었는지, 입출력장치에 오류는 없는지 등의 상태 정보가 저장된다.

 

3. 제어 레지스터

- 입출력장치가 수행할 내용에 대한 제어 정보와 명령을 저장 

 

" 장치 컨트롤러가 정보를 주고받는 방법 " 

1. 프로그램 입출력

- 기본적으로 프로그램 속 명령어로 입출력을 제어하는 방법

- CPU가 프로그램 속 명령어를 실행하는 과정에서 입출력 명령어를 만나면 CPU는 입출력장치에 연결된 장치 컨트롤러와 상호작용하며 입출력 작업을 수행한다. 

 

[ 메모리에 저장된 정보를 하드 디스크에 백업하는 상황 ]

CPU는 하드디스크 컨트롤러의 제어 레지스터에 쓰기 명령을 보냄 =>

하드디스크 컨트롤러는 하드 디스크 상태를 확인하고, 하드 디스크가 준비가 됐다면 상태 레지스터에 준비되었다고 표시 =>

CPU는 상태 레지스터를 주기적으로 읽으며 디스크 준비 여부를 확인함 =>

CPU가 준비 여부를 확인하면 백업할 메모리의 정보를 데이터 레지스터에 씀=> 쓰기가 끝나면 백업 종료

 

1-1. 메모리 맵 입출력

메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법

 

1-2. 고립형 입출력

- 메모리를 위한 주소 공간과 입출력장치를 위한 주소공간을 분리하는 방법

- CPU는 입출력장치에 접근하기 위해 메모리에 접근하는 명령어와는 다른 입출력 명령어를 사용

 

2. 인터럽트 기반 입출력

- 입출력장치가 입출력 작업을 할 준비가 되었는지, 입출력 작업이 완료되었는지, 입출력장치에 오류는 없는지 등의 상태 정보가 저장된다.

- 장치 컨트롤러가 입출력 작업을 끝낸 뒤 CPU에게 인터럽트 요청 신호를 보내면 CPU는 하던 일을 잠시 백업하고 인터럽트 서비스 루틴을 실행한다.

-프로그래머블 인터럽트 컨트롤러(PIC)를 이용해 다중 인터럽트를 처리한다

 

[ PIC의 다중 인터럽트 처리 과정 ] 

1. PIC가 장치 컨트롤러에서 인터럽트 요청 신호를 받는다. 

2. PIC는 인터럽트의 우선순위를 파악한 후, CPU에게 인터럽트 요청 신호를 보낸다.

3. CPU는 PIC에 인터럽트 확인 신호를 보낸다.

4. PIC는 데이터버스를 통해 CPU에 인터럽트 벡터를 보낸다.

5. CPU는 인터럽트 벡터를 통해 인터럽트 요청의 주체를 알게 되고, 해당 장치의 인터럽트 서비스 루틴을 수행한다.

 

3. DMA 입출력

- 입출력장치가 수행할 내용에 대한 제어 정보와 명령을 저장

- 모든 데이터가 CPU를 거쳐야 하면 CPU는 부담을 가지게 된다. 그래서 입출력장치와 메모리가 CPU를 거치지 않고 상호작용할 수 있는 DMA 방식이 등장하였다.

- 직접 메모리에 접근할 수 있다. 

- 시스템 버스에 연결된 DMA 컨트롤러가 필요하다.  

- 시스템 버스로 메모리에 직접 접근이 가능하지만, 시스템 버스는 동시 사용이 불가능하다. 

 

[ DMA의 입출력 과정 ] 

1. CPU는 DMA 컨트롤러에 입출력장치의 주소, 수행할 연산, 메모리 주소 등의 정보로 입출력 정보를 명령한다. 

2. DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 수행한다.

3. 입출력 작업이 끝나면 DMA 컨트롤러는 CPU에 인터럽트를 걸어 작업이 끝났음을 알린다.

 

" 입출력버스 " 

DMA 컨트롤러와 장치 컨트롤러들을 별도에 버스에 연결한다. => 입출력버스 !

WHY?

DMA를 위해 시스템 버스를 너무 많이 사용하면, CPU가 그만큼 시스템 버스를 이용하지 못한다.

 

- PCI 버스 등의 종류가 있고, 여러 입출력장치들을 PCIe 버스와 연결해 주는 통로인 PCIe 슬롯이 있다.