컴퓨터시스템기사 실기 06 — 입출력 제어 (채널·DMA·인터럽트)
컴퓨터시스템기사 실기 06 — 입출력 제어 (채널·DMA·인터럽트)
출제기준 코드: 3-2-1 채널 · 3-2-2 DMA · 3-2-3 인터럽트
시험일: 2026-10-25 / 시리즈: 컴퓨터시스템기사 실기 06편
실기 시리즈 여섯 번째 글입니다.
05편이 기억장치였다면 이번 편은 입출력 장치를 CPU가 어떻게 제어하는가 입니다.
이 단원은 계산보다 단답형 용어 맞추기가 압도적입니다.
"~하는 방식은?" 형태의 설명을 읽고 용어를 쓰는 문제가 반복해서 나옵니다.
아래 표의 용어와 정의를 짝지어 외우면 거의 그대로 점수가 됩니다.
1. 실기 출제 포인트
| 구분 | 자주 나오는 형태 | 중요도 |
| 인터럽트 우선순위 | 폴링 / 데이지 체인 / 벡터 인터럽트 구분 | ⭐⭐⭐ |
| DMA 전송 모드 | 사이클 스틸링 정의 | ⭐⭐⭐ |
| 채널 | 셀렉터 채널, 멀티플렉서 채널 | ⭐⭐ |
| I/O 주소 방식 | 격리형(독립형) I/O vs 메모리 맵 I/O | ⭐⭐ |
| 인터럽트 벡터 | 인터럽트 벡터 테이블(IVT) | ⭐⭐ |
| 핸드셰이킹 | 비동기 입출력의 준비·응답 신호 | ⭐⭐ |
| 입출력 방식 비교 | 프로그램 제어 / 인터럽트 / DMA | ⭐⭐ |
| 캐시 연계 | DMA와 CPU의 캐시 일관성 문제 (05편) | ⭐⭐ |
💡 답안 키워드 박스
폴링(Polling)데이지 체인(Daisy Chain)벡터 인터럽트인터럽트 벡터 테이블DMA 컨트롤러사이클 스틸링셀렉터 채널멀티플렉서 채널격리형 I/O메모리 맵 I/O핸드셰이킹ISR복귀 주소
2. 입출력 제어의 세 가지 방식
| 방식 | 동작 | 장점 | 단점 |
| 프로그램 제어 I/O (Programmed I/O) |
CPU가 상태 플래그를 계속 확인(Busy-Wait) 하며 직접 전송 | 구조 단순 | CPU 낭비 |
| 인터럽트 구동 I/O | 장치가 준비되면 인터럽트로 CPU에 알림, CPU는 그동안 다른 일 수행 |
CPU 효율↑ | 매 전송마다 인터럽트 오버헤드 |
| DMA | DMA 컨트롤러가 CPU를 거치지 않고 메모리 ↔ 장치 직접 전송 | 대용량 고속 | 하드웨어(DMA 컨트롤러) 필요 |
기출 (B 2019-11, A 2017-3, 2022-3): CPU를 거치지 않고 주기억장치와 입출력장치 간에 직접 데이터를 전송하는 방식은? → DMA (Direct Memory Access)
2-1. I/O 주소 지정 방식
| 방식 | 특징 |
| 메모리 맵 I/O (Memory-Mapped) | 메모리와 같은 주소 공간 사용, 별도 I/O 명령 불필요, 메모리 주소 일부를 I/O에 소모 |
| 격리형 I/O (Isolated / 독립형) | 별도의 주소 공간 + 전용 I/O 명령(IN/OUT) 사용, 기억공간을 최대한 활용 |
기출 (2019-1, 2022-3): 입출력 인터페이스를 CPU에 연결하는 방법 중, CPU/기억장치 명령어와 다른 입출력 명령을 사용하며 기억공간을 최대로 활용할 수 있는 방식은?
→ 격리형 I/O (독립형 입출력 방식)
2-2. 핸드셰이킹과 스트로브
| 방식 | 설명 |
| 스트로브(Strobe) | 한쪽(송신 또는 수신)이 한 방향 신호만 보냄 → 상대가 받았는지 모름 |
| 핸드셰이킹(Handshaking) | 요청 ↔ 응답 신호를 주고받아 상대의 준비·수신 확인 → 신뢰성 높음 |
기출 (B 2017-11): Computer와 I/O 주변장치 사이 데이터 전송 시 입출력 준비 완료를 나타내는 신호가 필요한 비동기식 입출력 시스템에 널리 쓰이는 방식은? → 핸드셰이킹
기출 (A 2022-3): 인터페이스와 입출력 버스의 연결에서 데이터를 출력 주변장치로 전달하기 위해 사용되는 것은? → 주변장치 레지스터(Peripheral Register) (원문 그림 필요)
3. 채널 (3-2-1)
채널(Channel): 입출력 전용 프로세서. CPU가 입출력 명령만 내리면 채널이 독립적으로 입출력을 수행하고 완료 시 인터럽트로 알립니다. (DMA보다 더 지능적, 채널 명령어(CCW) 프로그램을 수행)
| 종류 | 특징 | 적합한 장치 |
| 셀렉터 채널 (Selector, 선택 채널) | 한 번에 한 장치가 채널을 독점, 블록 단위 고속 전송, 전송 중 중단 없음 |
자기 디스크, 자기 테이프 등 고속 장치 |
| 멀티플렉서 채널 (Multiplexer) | 여러 저속 장치가 채널을 시분할로 공유 (바이트 단위 교대) |
프린터, 터미널 등 저속 장치 |
| 블록 멀티플렉서 채널 | 블록 단위로 여러 고속 장치를 다중화 | 디스크 다수 |
기출 (2021-1): 채널 하나를 하나의 입출력 장치가 독점해서 사용하며 블록 단위로 고속 전송이 가능한 방식은? → 셀렉터 채널
⚠️ 함정: "독점 + 블록 + 고속" = 셀렉터, "여러 장치 + 저속 + 시분할" = 멀티플렉서. 키워드로 구분하세요.
4. DMA (3-2-2) ⭐⭐⭐
4-1. DMA 컨트롤러 구성
| 레지스터 | 역할 |
| 주소 레지스터 | 전송할 메모리의 시작 주소 |
| 워드(바이트) 카운터 | 남은 전송 개수 (0이 되면 종료) |
| 제어 레지스터 | 전송 방향(읽기/쓰기), 모드 |
4-2. 동작 순서
① CPU가 DMA 컨트롤러 초기화 (주소, 개수, 방향 설정) → 이후 CPU는 다른 작업
② 장치가 DMA 요청 (DMA Request)
③ DMA 컨트롤러가 버스 요청 (HOLD / Bus Request)
④ CPU가 버스 사용 허가 (HLDA / Bus Grant) — 버스 제어권 이양
⑤ DMA가 메모리 ↔ 장치 간 데이터 전송 (주소 증가, 카운터 감소)
⑥ 카운터 = 0 → 전송 완료를 인터럽트로 CPU에 통보
4-3. DMA 전송 모드 ⭐⭐⭐
| 모드 | 동작 | 키워드 |
| 버스트(Burst) / 블록 전송 | 블록 전체를 전송하는 동안 버스를 독점, 끝나면 반환 | 고속, CPU는 대기 |
| 사이클 스틸링 (Cycle Stealing) | 한 워드(한 사이클)씩 CPU의 버스 사이클을 훔쳐서 전송 | CPU 지연 최소, 워드 단위 |
| 투명(Transparent) | CPU가 버스를 사용하지 않을 때만 전송 | CPU 성능 영향 없음, 느림 |
기출 (2021-1, 2023-3, 2025-1 동일):
- CPU가 실행하던 프로그램을 잠시 대기시키고 DMA에게 우선권을 주는 방식
- 한 번의 DMA 동작으로 워드 단위의 데이터를 전송
- DMA가 CPU의 버스를 잠시 빌려 한 워드씩 전송하는 방식은?
→ 사이클 스틸링 (Cycle Stealing)
4-4. 인터럽트 vs 사이클 스틸링 (B 2016-04 Q15)
| 항목 | 인터럽트 | 사이클 스틸링 |
| CPU 상태 저장 | 필요 (PC·레지스터 저장 후 복구) | 불필요 (한 사이클만 양보) |
| 처리 주체 | CPU가 ISR 실행 | DMA 컨트롤러가 전송 |
| 지연 | 컨텍스트 전환 오버헤드 | 버스 한 사이클 |
4-5. DMA와 캐시 일관성 (05편 연계)
기출 (2024-3): DMA와 CPU가 같은 메모리를 참조할 때 캐시에서 발생할 수 있는 문제점은? → 캐시 일관성 문제
DMA가 메모리를 갱신하면 CPU 캐시에 옛 데이터(Stale)가 남고, Write-Back 캐시에서는 CPU가 캐시만 수정한 상태라 DMA가 오래된 메모리를 읽습니다.
해결: 캐시 스누핑, Non-cacheable 영역 지정, 소프트웨어 Flush/Invalidate.
5. 인터럽트 (3-2-3) ⭐⭐⭐
5-1. 종류
| 구분 | 설명 | 예 |
| 외부 인터럽트 | 하드웨어 장치·외부 요인 | I/O 완료, 타이머, 전원 이상, 정전, 키보드 |
| 내부 인터럽트 (트랩/예외) | CPU 내부 오류 | 0으로 나누기, 오버플로, 잘못된 명령, 페이지 부재 |
| 소프트웨어 인터럽트 | 프로그램이 명령으로 발생 | 시스템 콜 (SVC, INT) |
기출 (B 2016-11, 2021-11): 디스크 장애·정전 등 긴급한 상황이 발생했을 때 마이크로프로세서에 직접 전달하는 인터럽트는? → 외부 인터럽트 (복원본 정답 기준)
🔎 마스크할 수 없는 긴급 인터럽트를 가리키는 NMI(Non-Maskable Interrupt) 개념과 같은 맥락입니다.
시험지가 "긴급 / 정전 / 마이크로프로세서에 직접"으로 묻는다면 외부 인터럽트(전원 이상)를 우선 쓰고, NMI를 괄호로 병기하세요.
5-2. 처리 절차
① 현재 실행 중인 명령어를 완료
② 복귀 주소(PC)와 프로그램 상태(PSW/플래그)를 스택(메모리)에 저장
③ 인터럽트 원인 식별 → 서비스 루틴 주소 결정 (벡터)
④ 인터럽트 서비스 루틴(ISR) 실행
⑤ 저장했던 상태 복구 → 복귀(IRET)하여 원래 프로그램 재개
기출 (B 2016-04, 2020-11): CPU가 인터럽트 신호를 받으면 PC의 복귀 주소를 스택에 저장한 뒤 서비스 루틴으로 제어를 옮긴다. 이때 인터럽트 원인에 의해 분기 정보를 얻게 되는 정보는? → 인터럽트 벡터
기출 (2023-1): 인터럽트를 발생한 장치가 프로세서에게 분기할 곳을 알려주고, 서비스 루틴들의 주소를 가지고 있는 공간은? → 인터럽트 벡터 테이블 (IVT)
5-3. 우선순위 결정 방식 ⭐⭐⭐
| 방식 | 구현 | 동작 | 핵심 키워드 |
|---|---|---|---|
| 방식 | 구현 | 동작 | 핵심 키워드 |
| 폴링 (Polling) | 소프트웨어 | 공통 인터럽트 진입 후 장치를 순서대로 검사해 요청 장치를 찾음 | 소프트웨어, 느림, 구조 단순 |
| 데이지 체인 (Daisy Chain) |
하드웨어 | 장치를 우선순위 순으로 직렬 연결, 인터럽트 승인 신호가 앞 장치부터 전달 |
직렬, 가까운 장치가 우선 |
| 병렬 우선순위 | 하드웨어 | 우선순위 인코더 + 마스크 레지스터로 동시 판단 | 빠름, 회로 복잡 |
| 벡터 인터럽트 | 하드웨어 | 장치가 벡터 번호/주소를 직접 제공 → 즉시 ISR로 분기 | 빠름, 장치 식별 불필요 |
🔎 데이지 체인이 B형에서 4회 반복됩니다.
"직렬 연결 + 우선순위" 두 키워드를 보면 바로 쓰세요.
5-4. 인터럽트 마스크와 중첩
- 마스크(Mask): 특정 인터럽트를 일시적으로 무시(비활성) 하는 기능. 중요한 코드 구간 보호.
- 중첩 인터럽트: ISR 수행 중 더 높은 우선순위 인터럽트가 들어오면 중단하고 먼저 처리.
6. 기출 Q&A 모음
Q1. CPU를 거치지 않고 메모리와 입출력장치 간 직접 전송하는 방식은?
A. DMA.
Q2. DMA가 CPU의 버스를 잠시 빌려 한 워드씩 전송하는 방식은? (2021-1 외)
A. 사이클 스틸링.
Q3. 채널을 한 장치가 독점하며 블록 단위로 고속 전송하는 채널은? (2021-1)
A. 셀렉터 채널.
Q4. 별도 주소 공간과 전용 I/O 명령을 사용하는 방식은? (2019-1, 2022-3)
A. 격리형(독립형) I/O.
Q5. 공통 인터럽트 진입 후 장치를 차례로 검사하는 방식은? (2026-1)
A. 폴링 (Polling).
Q6. 인터럽트 장치를 우선순위 순으로 직렬 연결하는 방법은? (B형 4회)
A. 데이지 체인.
Q7. 서비스 루틴 주소를 모아 둔 영역은? (2023-1)
A. 인터럽트 벡터 테이블.
Q8. 비동기 입출력에서 준비·응답 신호를 주고받는 방식은? (B 2017-11)
A. 핸드셰이킹.
Q9. DMA와 CPU 동시 접근 시 캐시에서 생기는 문제는? (2024-3)
A. 캐시 일관성 문제.
7. ⚠️ 함정 패턴 정리
- 폴링(소프트웨어) ↔ 데이지 체인(하드웨어) 구분 — "차례로 검사" = 폴링, "직렬 연결" = 데이지 체인
- 사이클 스틸링 ↔ 인터럽트 — 상태 저장 필요 여부가 다름
- 셀렉터(독점·고속) ↔ 멀티플렉서(다수·저속)
- 격리형 I/O ↔ 메모리 맵 I/O — "전용 명령 + 별도 주소 공간"이면 격리형
- 벡터 인터럽트 ↔ 인터럽트 벡터 테이블 — 방식 vs 주소 테이블 이름. 문제를 끝까지 읽고 "공간/테이블"이면 IVT
- DMA 종료 통보는 인터럽트로 한다 (DMA와 인터럽트는 대립이 아니라 함께 쓰임)
- 핸드셰이킹 ↔ 스트로브 — 응답 신호가 있으면 핸드셰이킹
8. 💡 실무에서는?
- 인터럽트 분산 (인프라): 고성능 네트워크 서버에서 NIC 인터럽트가 특정 CPU 코어 하나에 몰리면 해당 코어가 100%가 되어 패킷 드롭이 생깁니다. 리눅스에서
/proc/interrupts로 분포를 확인하고,smp_affinity/irqbalance, NIC의 RSS(다중 큐)로 분산합니다. 데이지 체인의 우선순위 개념이 현대에는 APIC/MSI-X 라우팅으로 이어집니다. - 폴링의 재등장: 초고속 네트워크에서는 인터럽트 폭주를 피하려고 NAPI(인터럽트 + 폴링 혼합), DPDK의 busy polling을 씁니다. "폴링은 비효율"이 아니라 부하에 따라 선택합니다.
- DMA 보안: DMA는 CPU를 거치지 않고 메모리에 접근하므로 악성 PCIe/Thunderbolt 장치가 메모리를 읽는 DMA 공격이 가능합니다. 대응은 IOMMU(Intel VT-d, AMD-Vi) 로 장치별 접근 가능 메모리 범위를 제한하는 것이고, 가상화(PCI 패스스루, SR-IOV)에서도 필수 설정입니다. 보안 시스템 구축 시 점검 항목입니다.
- 스토리지 성능: NVMe의 다중 큐와 인터럽트 병합(coalescing)은 IOPS와 지연 사이의 트레이드오프를 조정합니다. 05편의 RAID, 캐시와 함께 I/O 성능 분석의 기본 틀입니다.
- 장애 분석: CPU
%si(softirq)·%hi(hardirq)가 높은데 사용자 프로세스는 한가하다면 입출력 인터럽트 처리가 병목이라는 신호입니다.
9. 핵심 정리
✅ I/O 3방식 = 프로그램 제어(Busy-Wait) / 인터럽트 / DMA
✅ 격리형 I/O = 전용 명령 + 별도 주소 공간 / 메모리 맵 = 같은 주소 공간
✅ 핸드셰이킹 = 요청·응답 / 스트로브 = 한쪽 신호
✅ 셀렉터 채널 = 독점·고속·블록 / 멀티플렉서 = 다수·저속·시분할
✅ DMA 순서 = 초기화 → 요청 → 버스 허가 → 전송 → 완료 인터럽트
✅ DMA 모드 = 버스트 / 사이클 스틸링(워드 단위) / 투명
✅ 인터럽트 처리 = 명령 완료 → PC 저장 → 원인 식별 → ISR → 복귀
✅ 우선순위 = 폴링(SW) / 데이지 체인(HW 직렬) / 병렬 / 벡터
✅ 서비스 루틴 주소 모음 = 인터럽트 벡터 테이블
✅ DMA + 캐시 → 일관성 문제 (스누핑)
10. 다음 편 예고
다음 편(07편)은 네트워크 프로토콜 분석 입니다.
OSI 7계층과 TCP/IP, 네트워크 토폴로지, 대표 프로토콜의 동작과 패킷 분석까지 이어갑니다!
궁금한 점은 댓글로 남겨주세요!