CH08 입출력장치
08-1 장치 컨트롤러와 장치 드라이버
입출력장치는 앞서 학습한 CPU, 메모리보다 다루기가 더 까다롭다
첫째, 입출력장치에는 종류가 너무나도 많다
장치가 다양하면 장치마다 속도, 데이터 전송 형식 등도 다양한다
-> 다양한 입출력장치와 정보를 주고받는 방식을 규격화하기 어렵다
둘째, 일반적으로 CPU 와 메모리의 데이터 전송률은 높지만 입출력장치의 데이터 전송률은 낮다
* 전송률 Transfer Rate - 데이터를 얼마나 빨리 교환할 수 있는지를 나타내는 지표
장치 컨트롤러의 역할
CPU와 입출력장치 간의 통신중개
일종의 번역가 역할 수행 (규격화하기 어렵다는 문제를 어느 정도 해결)
오류 검출
입출력장치에 문제가 있지 않은지 오류 검출
데이터 버퍼링
버퍼링 - 전송률이 높은 장치와 낮은 장치 사이에 주고 받는 데이터를
버퍼라는 임시 저장 공간에 저장하여 전송률을 비슷하게 맞추는 방법
장치 컨트롤러의 구조
데이터 레지스터
CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터 (버퍼 역할)
RAM (Hardware) 을 사용하기도
상태 레지스터
상태 정보 저장
입출력장치가 입출력 작업을 할 준비가 되었는지,
입출력 작업이 완료되었는지,
입출력장치에 오류는 없는지 등의 상태 정보
제어 레지스터
입출력장치가 수행할 내용에 대한 제어 정보
장치 드라이버
장치 컨트롤러의 동작을 감지하고 제어하는 프로그램
장치 컨트롤러가 입출력장치를 연결하기 위한 하드웨어적인 통로라면,
장치 드라이버는 입출력장치를 연결하기 위한 소프트웨어적인 통로
장치 드라이버가 설치되어 있지 않다면 해당 입출력장치를 사용할 수 없다
운영체제가 연결된 장치의 드라이버를 인식하고 실행할 수 있다면 컴퓨터 내부와 정보를 주고받을 수 있다
반대로 운영체제가 장치 드라이버를 인식하거나 실행할 수 없다면 그 장치는 컴퓨터 내부와 정보를 주고받을 수 없다
(드라이버/ 프로그램을 인식하고 실행하는 주체는 운영체제이다)
08-2 다양한 입출력 방법
프로그램 입출력
프로그램 속 명령어로 입출력장치를 제어하는 방법
입출력 명령어로써 장치 컨트롤러와 상호작용
ex. 메모리에 저장된 정보를 하드 디스크에 백업 == 하드 디스크에 새로운 정보 쓰기
CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이루어진다
근데 CPU가 이 레지스터들 (입출력장치의 주소) 를 어떻게 알까?
이런 명령어들은 어떻게 명령어로 표현되고 어떻게 메모리에 저장될까?
ex. 프린터 컨트롤러의 데이터 레지스터에 100을 써라, 키보드 컨트롤러의 상태 레지스터를 읽어라
프로그램 입출력 방식 - 메모리 맵 입출력 & 고립형 입출력
ex. 516번지 - 프린터 컨트롤러의 데이터 레지스터, 517번지 - 프린터 컨트롤러의 상태 레지스터
518번지 - 하드 디스크 컨트롤러의 데이터 레지스터, 519번지 - 하드 디스크 컨트롤러의 상태 레지스터
'517번지를 읽어 들여라' == 프린터 상태 읽기, '518번지에 a를 써라' == 하드 디스크에 a 쓰기
메모리 접근 명령어 == 입출력장치 접근 명령어, 별도의 입출력 명령어 필요 없이 메모리를 읽고 쓰는 명령어로 접근
별도의 주소 공간으로 간주하여 별도의 활성화 명령어를 사용해야 한다
인터럽트 기반 입출력
인터럽트 복습
(하드웨어) 인터럽트의 개념 - CPU 사이클의 낭비를 막기 위해 입출력장치가 일을 할 동안 다른 일을 하기 위한 일종의 알람 개념
플래그 레지스터 속 인터럽트 비트 (하드웨어 인터럽트를 받을지 말지 결정하는 비트)
인터럽트 요청 신호
인터럽트 서비스 루틴 - 인터럽트를 처리하기 위한 특별한 프로그램
하드웨어 인터럽트 - 플래그 레지스터 속 인터럽트 비트를 비활성화한 채 인터럽트를 처리하는 경우.
논 마스커브 인터럽트 NMI - 인터럽트 비트를 비활성화해도 순차적으로 처리가 불가능한 인터럽트 ex. 하드웨어 고장, 정전
NMI 는 하드웨어 인터럽트 한정으로 해당한다
현실적으로 모든 인터럽트를 순차적으로 처리할 수 없고 인터럽트 중에서도 더 빨리 처리해야 하는 인터럽트가 있다
더 빨리 처리해야 하는 인터럽트 == 우선 순위가 높은 인터럽트
NMI 는 별도의 핀이 있다
DMA 입출력
프로그램 입출력, 인터럽트 기반 입출력의 공통점은
입출력장치와 메모리 간의 데이터 이동은 CPU가 주도하고, 이동하는 데이터도 반드시 CPU를 거친다
CPU의 부담을 줄이기 위해 고안된 방안
DMA 입출력 과정
앞선 예시의 DMA 과정에서 시스템 버스를 사용하지만 시스템 버스는 공용 자원이기에 동시 사용이 불가능하다
CPU가 시스템 버스를 사용할 때 DMA 컨트롤러는 시스템 버스를 사용할 수 없고
DMA 컨트롤러가 시스템 버스를 사용할 때는 CPU가 시스템 버스를 사용할 수 없다
그래서 DMA 컨트롤러는
1. CPU가 시스템 버스를 이용하지 않을 때마다 조금씩 시스템 버스 이용
2. CPU가 일시적으로 시스템 버스를 이용하지 않도록 허락을 구하고 시스템 버스 이용
입출력 버스
장치 컨트롤러가 시스템 버스에 직접 연결되어도 괜찮을까? -> 괜찮지 않다
요새는 입출력 작업 명령어를 실행하는 DMA 컨트롤러까지 나왔다
입출력 전용 CPU도 나왔다고 한다
'크래프톤정글 > 혼공컴운' 카테고리의 다른 글
[혼공컴운] CH10 프로세스와 스레드 (3) | 2024.10.17 |
---|---|
[혼공컴운] CH09 운영체제 시작하기 (0) | 2024.10.16 |
[혼공컴운] CH07 보조기억장치 (1) | 2024.10.09 |
[혼공컴운] CH06 메모리와 캐시 메모리 (4) | 2024.10.08 |
[혼공컴운] CH05 CPU 성능 향상 기법 (1) | 2024.10.07 |