장치 컨트롤러
- 일반적으로 입출력장치보다 CPU, 메모리보다 다루기 더 까다로움
입출력 장치의 종류는 매우 많음 -> 다양한 입출력 장치와 정보를 주고받는 방식을 규격화하기 어려움
CPU와 메모리의 데이터 전송률은 높지만, 입출력 장치의 데이터 전송률은 낮음
- 따라서 입출력장치는 장치 컨트롤러를 통해 컴퓨터와 정보를 주고받게 됨
장치 컨트롤러의 역할
- CPU와 입출력장치간의 통신중개
- 오류 검출
- 데이터 버퍼링 (버퍼에 데이터를 저장해 전송률을 비슷하게 맞춰줌)
장치 컨트롤러의 구조
- 장치 컨트롤러는 버스에 연결되서 정보를 주고받게 됨
- 정보로는 데이터, 상태, 제어가 있으며, 이는 각각의 레지스터에 저장됨
데이터 레지스터: CPU와 입출력 장치 사이에 주고받을 데이터가 담기는 레지스터로, RAM을 사용하기도 함
상태 레지스터: 입출력장치가 작업을 할 준비가 됬는지, 작업이 완료됬는지, 오류는 없는지 등의 상태 정보 저장
제어 레지스터: 입출력장치가 수행할 내용에 대한 제어 정보를 저장
장치 드라이버
- 장치 드라이버는 장치 컨트롤러의 동작을 감지하고 제어하는 프로그램
장치 컨트롤러가 하드웨어적 통로라 하면, 장치 드라이버는 입출력장치를 연결하기 위한 소프트웨어적 통로
- 장치 드라이버를 인식하고 실행시켜주는 것은 운영체제임
입출력 방법
1. 프로그램 입출력
- 프로그램 속 명령어를 통해 입출력 장치를 제어하는 방법
- 입출력 명령어를 통해 장치 컨트롤러의 레지스터 값을 읽고 씀으로서 이루어짐
ex) 메모리에 저장된 정보를 하드 디스크에 백업시
- CPU가 하드 디스크 컨트롤러의 제어 레지스터에 쓰기 명령을 내보냄
- 하드 디스크 컨트롤러는 하드 디스크 상태를 확인하고 상태 레지스터에 준비완료 표시를 하게 됨
- CPU는 상태 레지스터를 주기적으로 읽어보면서 하드 디스크가 준비됨을 확인하면 백업할 메모리의 정보를 데이터 레지스터에 작성하게 됨
- 백업 작업이 진행중이면 1번으로 돌아가서 백업이 완료될때까지 반복해 진행함
- 레지스터 값을 알아내는 방식에 따리 구체적인 방법으로 메모리 맵 입출력, 고립형 입출력 방식으로 나뉘게 됨
메모리 맵 입출력
- 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법
각각의 장치의 레지스터 주소를 메모리에 부여하고 작업을 할 때 메모리 접근 명령어를 그대로 사용
- 메모리 주소 공간이 축소됨
고립형 입출력
- 메모리를 위한 주소 공간과 입출력 장치를 위한 주소 공간을 분리하는 방법
- 주소 공간을 메모리와 입출력 장치 양쪽에 전부 할당할 수 있지만 입출력시에는 입출력 전용 명령어를 사용해야 함
인터럽트 기반 입출력
- 인터럽트를 사용해 입출력 장치를 제어하는 방법
- 하드웨어 인터럽트는 장치 컨트롤러에 의해 발생함
- 프로그램 입출력에 비해 효율적인 CPU사용이 가능함
- 인터럽트가 동시에 여러개가 발생했을 경우 순서대로 처리할 수도 있지만, 우선순위를 반영해 인터럽트를 처리할 수도 있음
PIC(Programmable Interrupt Controller)
- 여러 장치 컨트롤러에 연결되어 장치 컨트롤러의 하드웨어 인터럽트의 우선순위를 판단해 CPU에 처리할 인터럽트가 무엇인지 판단하게 해주는 하드웨어
- NMI(마스크 불가능 인터럽트 -> 매우 긴급한 인터럽트) 우선순위까지 판단하지는 않음
DMA 입출력
- DMA 컨트롤러를 통해 CPU를 거치지 않고 입출력 장치가 메모리에 직접적으로 접근하는 방식
- CPU가 DMA 컨트롤러에 입출력 작업을 명령하면 DMA 컨트롤러가 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 함
- 입출력 작업이 완료되면 DMA컨트롤러가 인터럽트를 통해 CPU에 작업의 완료를 알림
- 필요한 경우 DMA 컨트롤러는 메모리에 직접 접근함
- DMA 컨트롤러가 입출력을 할 때 시스템 버스를 사용하는데, 시스템 버스는 공용 자원이여서 CPU와 동시 사용 불가능
- 따라서 DMA 컨트롤러는 CPU가 시스템 버스를 이용하지 않을때마다 조금씩 시스템 버스를 사용하거나, CPU가 일시적으로 시스템 버스를 이용하지 않도록 하고 시스템 버스를 사용함 -> Cycle stealing
입출력 버스
- DMA 컨트롤러가 시스템 버스를 사용했을 때 불필요하게 시스템 버스를 2번 사용해야함 (읽고 쓸때 한번씩)
- 입출력 버스를 활용해 DMA 컨트롤러가 시스템 버스를 사용하는 빈도를 줄이게 됨
- 입출력 버스에는 PCI, PCIe 버스 등이 있음
출처:
https://www.youtube.com/watch?v=RRgGVu8OCP4&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=23
혼자 공부하는 컴퓨터 구조+운영체제, 강민철, 한빛미디어