[혼공] CH08. 입출력장치
2023. 7. 27. 01:01ㆍ카테고리 없음
컴퓨터의 4가지 주요장치 파트의 마지막이다.
01. 장치 컨트롤러와 장치 드라이버
사실 CPU와 입출력장치는 장치 컨트롤러 라는 하드웨어를 통해 간접적으로 정보를 주고받는다.
왜 장치컨트롤러가 사용될까?
장치 컨트롤러를 사용하는 이유
- 입출력장치의 종류는 너무나도 많다.
필자가 사용중인 로지텍사의 버티컬 마우스, 삼성의 키보드 등등
입출력장치 제작회사는 많고 입출력장치 종류도 너무나도 다양하다.
그렇기 때문에 규격화하기엔 쉬운 일이 아니다. - CPU와 메모리 전송률과 입출력장치 전송률의 상대적인 속도 차이
* 전송률(transfer time) : 데이터를 얼마나 빨리 보낼 수 있는지에 대한 지표.
CPU는 전송률이 높아, 예를 들어 1초에 n천번 처리한다면,
입출력장치는 전송률이 낮아 예를 들어 1초에 n백번 처리한다.
장치 컨트롤러의 역할
- CPU와 입출력장치의 통신 중개
- 오류 검출
- 데이터 버퍼링
* 버퍼링 : 전송률 차이가 있는 기기 사이에서 버퍼라는 임시 저장공간에 데이터를 적재함. 한꺼번에 방출하거나, 조금씩 내보낸다.
장치 컨트롤러 구조
장치 컨트롤러의 구조는 다음과 같다.
- 데이터 레지스터
CPU와 입출력 장치 사이에 주고받을 데이터가 담기는 레지스터이다.
앞서서 말한 버퍼 역할을 수행한다. - 상태 레지스터
입출력장치의 상태, 오류확인 등의 상태 정보가 저장되어있다. - 제어 레지스터
입출려장치가 수행할 내용에 대한 제어정보와 명령이 저장되어있다.
장치 드라이버
장치 드라이버는 장치컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램이다.
02. 다양한 입출력방법
그렇다면 장치 컨트롤러는 어떤 방법으로 CPU와 정보를 주고받을까?
여기에는 크게 3가지 방법이 존재한다.
- 프로그램 입출력
프로그램 속 명령어로 입출력 장치를 제어한다.
즉, CPU가 입출력 관련 명령어를 만난다면 장치컨트롤러와 상호작용해서 입출력 작업을 수행한다.
그렇다면 CPU는 어떻게 작업할 입출력장치의 레지스터 값들을 알고 있을까?
여기에는 메모리 맵 입출력, 고립형 입출력으로 나뉜다.
- 메모리 맵 입출력
메모리에 접근하기 위한 주소공간과 입출력장치에 접근하기 위한 주소공간을 하나의 주소공간으로 간주한다.
입출력, 메모리 접근 시 주소공간이 같기 때문에 명령어가 같다.
- 고립형 입출력
메모리에 접근하기 위한 주소공간과 입출력장치에 접근하기 위한 메모리주소공간을 별도의 주소공간으로 간주한다.
- 인터럽트 기반 입출력
장치 컨트롤러가 입출력 작업 종료 등의 이유로 CPU에게 인터럽트를 날릴 때 발생한다.
CPU는 입출력에 의한 인터럽트에 대한 처리를 하게 되는데, 동시다발적으로 인터럽트 처리요청이 오면 여러 규칙 중 하나를 적용해서 처리한다.
- 순차적으로 인터럽트 처리하기(플래그 레지스터 > 인터럽트 비트 비활성화한 상태)
- 우선순위 고려해서 처리하기(플래그 레지스터 > 인터럽트 비트 활성화한 상태 or NMI 발생한 경우 - 인터럽트 비트 비활성시에도 우선순위 고려함)
이 경우, CPU는 이미 처리 중인 인터럽트 보다 우선순위가 높은 인터럽트 요청이 오면,
우선순위가 높은 인터럽트부터 처리한다.
* NMI(Non-Maskable Interupt) : 무시할 수 없는 인터럽트
- DMA 입출력
CPU는 입출력 동작에 관여하지 않고, DMA와 메모리가 입출력 동작을 수행한다.
DMA 입출력을 위해서는 DMA 컨트롤러 라는 하드웨어가 필요하다.
왜 CPU는 동작 관여하지 않는 방식이 생겼을까?
그 이유는 입출력 처리와 동시에 타 작업을 수행하는 CPU의 부담을 줄여주기 위해서다.
- 입출력 버스
DMA 입출력은 시스템 버스를 이용한다. DMA 입출력 시, 시스템 버스를 2번 이용한다면, CPU는 그만큼 시스템 버스 이용이 불가능하다.
그래서 입출력 버스라는 별도의 버스에 연결하는 방식으로 처리한다.