컴퓨터 & 코딩/CS

[혼공학습단 10기][혼공컴운] 입출력장치

구로그 2023. 7. 7. 15:26
728x90

✓ 장치 컨트롤러와 장치 드라이버

✅ 장치컨트롤러 (입출력 제어기 I/O controller, 입출력 모듈 I/O module)

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

- 오류 검출

- 데이터 버퍼링 

✏️ 버퍼링: 버퍼에 데이터를 조금씩 모았다가 한꺼번에 내보내거나, 데이터를 한 번에 많이 받아 조금씩 내보내는 방법   
💡 장치 컨트롤러를 사용하는 이유
- 입출력장치의 종류가 너무 많고 장치마다 속도, 데이터, 전송 형식이 다양하다
- 입출력 장치의 데이터 전송률이 낮아 전송률이 높은 CPU와 통신이 어렵다 
- 데이터 버퍼링을 통해 전송률이 높은 CPU와 전송률이 낮은 입출력장치와의 전송률 차이를 완화시킨다

- 구조: 

데이터 레지스터: CPU와 입출력장치 사이에 주고 받을 데이터가 담기는 레지스터. (최근에는 RAM을 대신 사용하기도 함)

상태 레지스터: 상태 정보 저장

제어 레지스터: 입출력장치가 수행할 내용에 대한 제어 정보와 명령 저장 

 

 

✅ 장치 드라이버:

- 장치 컨트롤러의 동작을 감지하고 제어함으로써 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램 

- 장치 드라이버를 인식하고 실행하는 주체는 운영체제이다 

 

💡 장치 컨트롤러 - 하드웨어적인 통로
장치 드라이버 - 소프트웨어적인 통로 

 

 


 

✓ 다양한 입출력 방법

1️⃣ 프로그램 입출력

프로그램 속 명령어로 입출력장치를 제어

✏️ CPU가 명령어를 표현하고 메모리에 저장하는 방법 
메모리 맵 입출력: 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법. 
고립형 입출력: 메모리를 위한 주소 공간과 입출력장치를 위한 주소 공간을 분리하는 방법. 메모리에 접근하는 명령어와 입출력 명령어가 다르다. 

 

 

 

2️⃣ 인터럽트 기반 입출력

입출력장치에 의한 하드웨어 인터럽트는 장치 컨트롤러에 의해 발생

❗️ 폴링
- 입출력장치의 상태가 어떤지, 처리할 데이터가 있는지 주기적으로 확인하는 것.
- 인터럽트 방식보다 CPU의 부담이 크다.
- 언터럽트를 활용해야 인터럽트 요청 전 까지 CPU가 온전히 다른 일에 집중할 수 있다. 

프로그래머블 인터럽트 컨트롤러 PIC (Programmable Interrupt Controller)

- 우선순위를 반영하여 다중 인터럽트를 처리. CPU에 가장 먼저 처리할 인터럽트를 알려준다.  

❗️ NMI (Non maskable interrupt): 막을 수 없는 인터럽트. 우선순위 판별 불필요 
 PIC가 우선순위를 조정해주는 인터럽트는 인터럽트 비트를 통해 막을 수 있는 하드웨어 인터럽트

 

 

 

 

3️⃣ DMA 입출력 Direct Memory Access 

CPU를 거치지 않고 상호작용을 할 수 있는 입출력 방식. CPU는 오로지 입출력의 시작과 끝에만 관여 

- DMA Controller: 시스템 버스에 연결됨. 

✏️ Cycle Stealing
시스템 버스는 동시에 사용이 불가능하다. 
그래서 DMA Controller는 CPU가 시스템 버스를 이용하지 않을 때마다 조금씩 시스템 버스를 이용하거나
CPU가 일시적으로 시스템 버스를 이용하지 않도록 허락을 구하고 시스템 버스를 집중적으로 이용한다. 

- 입출력 버스: CPU가 시스템 버스를 이용하지 못하게 되는 걸 막기 위한 버스 (PCI(Pepipheral Component Interconnect) 버스, PCI Express(PCle) 버스 등) 

- 입출력 프로세서 I/O Processor: 입출력 전용 CPU. 메모리 직접 접근하고 입출력 명령어를 직접 인출, 해석, 실행한다. 

 

 

 

 

 

반응형