I/O와 DMA
상태·데이터 레지스터를 통한 I/O와 폴링·인터럽트·DMA·채널의 역할을 구분합니다.
키보드는 불규칙하게 데이터를 보내고 SSD는 큰 블록을 전송합니다. CPU가 이 장치들을 같은 방식으로 계속 확인하면 불필요한 대기가 많아집니다. I/O(입출력)는 CPU·메모리와 외부 장치 사이에서 데이터를 교환하는 작업입니다.
컨트롤러가 연결 규약을 맡습니다
입출력 컨트롤러에는 보통 데이터·상태·제어를 주고받는 인터페이스가 있습니다. 상태 레지스터의 ready 비트를 확인해 읽을 데이터가 있는지 판단하고, 제어 레지스터로 장치 동작을 요청합니다. 메모리 사상 I/O는 장치 레지스터를 주소 공간 일부에 배치합니다. 포트 I/O는 별도 I/O 접근 규칙을 사용합니다. 명령의 표기는 ISA·플랫폼에 따라 다릅니다.
장치 주소를 일반 RAM처럼 언제든 반복 읽어도 된다고 가정하면 안 됩니다. 읽기·쓰기가 장치 동작이나 상태를 바꿀 수 있습니다. 이 교재는 실제 하드웨어 레지스터를 임의로 조작하는 실습 대신 전송 모델로 이해합니다.
CPU의 관여가 달라지는 세 방식
폴링(polling)은 CPU가 ready 상태를 반복 확인합니다. 단순하지만 데이터가 아직 없는데도 검사 비용이 듭니다. 인터럽트 방식은 장치가 사건을 알리고 CPU가 처리 루틴으로 이동합니다. 대기 중 CPU가 다른 일을 할 수 있지만 알림·문맥 저장·처리에도 비용이 듭니다.
DMA(Direct Memory Access)는 CPU가 전송 시작 주소·크기·방향 등을 설정하면 DMA를 지원하는 컨트롤러가 장치와 메모리 사이의 데이터를 전송합니다. CPU가 모든 바이트의 복사를 직접 수행하지 않아도 됩니다. 그래도 설정·완료 확인·오류 처리·메모리 보호·일관성 고려는 필요합니다.
CPU는 요청을 설정하고 컨트롤러는 데이터를 옮깁니다
CPU가 주소·길이·방향을 설정한다. 전송 완료를 CPU에 알린다. 각 단계의 값과 전환 이유를 비교합니다.
컴퓨터구조 · 읽는 순서
CPU는 요청을 설정하고 컨트롤러는 데이터를 옮깁니다
입력 방향의 DMA 모델입니다. 실선은 설정 또는 데이터 이동, 점선은 완료 알림입니다.
CPU 설정 → 장치 데이터 전송 → 완료 확인 순서입니다. CPU가 바이트마다 직접 복사하지 않아도 준비·보호·일관성·오류 처리는 필요합니다.
이 예의 조건
- 본문과 전체 도표의 예를 따라 전송 설정부터 완료 알림까지 진행합니다.
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 전송 설정 CPU가 주소·길이·방향을 설정한다. |
|
|
| 데이터 전송 DMA가 입력 장치와 메모리 사이의 전송을 수행한다. |
|
|
| 완료 알림 전송 완료를 CPU에 알린다. |
|
|
CPU는 요청을 설정하고 컨트롤러는 데이터를 옮깁니다
CPU가 주소·길이·방향을 설정한다. 전송 완료를 CPU에 알린다. 각 단계의 값과 전환 이유를 비교합니다.
컴퓨터구조 · 읽는 순서
CPU는 요청을 설정하고 컨트롤러는 데이터를 옮깁니다
입력 방향의 DMA 모델입니다. 실선은 설정 또는 데이터 이동, 점선은 완료 알림입니다.
CPU 설정 → 장치 데이터 전송 → 완료 확인 순서입니다. CPU가 바이트마다 직접 복사하지 않아도 준비·보호·일관성·오류 처리는 필요합니다.
이 예의 조건
- 본문과 전체 도표의 예를 따라 전송 설정부터 완료 알림까지 진행합니다.
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 전송 설정 CPU가 주소·길이·방향을 설정한다. |
|
|
| 데이터 전송 DMA가 입력 장치와 메모리 사이의 전송을 수행한다. |
|
|
| 완료 알림 전송 완료를 CPU에 알린다. |
|
|
전송을 끝내면 완료 사건을 인터럽트 등으로 알릴 수 있습니다. “DMA는 CPU가 전혀 관여하지 않는다”는 표현은 시작·완료의 책임을 빠뜨립니다. I/O 채널은 여러 전송 동작을 수행하는 채널 프로그램 같은 더 넓은 제어 역할로 설명할 수 있습니다. 역사적 채널 구조와 현재 장치별 DMA 기능을 같은 하드웨어로 단정하지 않습니다.
단순 비용 비교
256바이트를 CPU가 한 바이트당 2사이클로 옮기면 복사에 512사이클을 사용합니다. DMA 설정·완료 처리가 합계 60사이클이라는 가정에서는 CPU가 직접 관여하는 비용은 60사이클입니다. 이것은 전체 전송 지연이 60사이클이라는 뜻이 아닙니다. 버스·장치 전송은 별도 시간과 자원을 사용합니다. 작은 전송은 설정 비용의 비중이 커집니다.
독립 문제: 처리량과 CPU 비용
한 번에 8바이트를 보내는 작은 작업 100번과 800바이트 블록 한 번이 있습니다. CPU 복사는 바이트당 2사이클, DMA 한 요청의 CPU 관여는 50사이클입니다. 각 경우의 CPU 관여 비용을 비교하고, 비용만으로 전체 완료 시간을 정할 수 있는지 설명하세요.
힌트
요청 수를 세세요. DMA 설정 비용은 총 바이트에만 비례하지 않습니다.
풀이
CPU 복사는 둘 다 800×2=1,600사이클입니다. DMA 요청 100번은 5,000사이클, 한 요청은 50사이클입니다. 작은 요청에서는 이 가정의 DMA 관여 비용이 더 큽니다. 장치·연결 지연·동시 작업은 주어지지 않아 전체 완료 시간은 확정할 수 없습니다.
실제 DMA의 메모리 일관성 조건은 Linux DMA 문서에서 별도로 정의합니다. 다음 버스는 여러 요청이 연결 자원을 사용하는 규칙입니다.