좋은 타이밍입니다! **DMA(Direct Memory Access)**는 전자계산기구조와 운영체제 모두에서 비중 있게 다뤄지는 S급 주제입니다.
보통 입출력(I/O)을 할 때 CPU가 일일이 관여하면 CPU 성능이 낭비되는데, 이를 해결하기 위해 등장한 개념입니다.
1. DMA란 무엇인가?
이름 그대로 **"CPU를 거치지 않고, 입출력 장치가 직접 메모리에 접근하는 방식"**입니다.
- 기존 방식 (Programmed I/O): 데이터 하나 옮길 때마다 CPU가 "이거 가져와", "저기다 써"라고 계속 간섭해야 함 CPU가 다른 일을 못 하고 매여 있음.
- DMA 방식: CPU가 DMA 제어기(Controller)에게 **"이만큼 데이터 좀 옮겨줘"**라고 명령 한 번만 내리면, DMA가 알아서 다 옮기고 끝났을 때만 CPU에 인터럽트로 알림.
2. DMA의 동작 과정 (순서 중요!)
시험에서는 이 절차를 섞어놓고 순서를 맞추라는 문제가 나옵니다.
- CPU가 DMA 제어기에 명령: 전송 방향(읽기/쓰기), 메모리 주소, 전송할 데이터 양 등을 알려줌.
- DMA가 버스 제어권 요청: 데이터를 옮기려면 통로(Bus)가 필요하므로 CPU에게 Bus Request를 보냄.
- CPU가 제어권 승인: CPU가 버스를 빌려줌 (Bus Grant).
- 데이터 전송: DMA가 CPU 도움 없이 직접 메모리와 I/O 장치 간에 데이터를 옮김.
- 종료 알림: 전송이 끝나면 CPU에게 인터럽트를 걸어 "다 끝났습니다!"라고 보고함.
3. 핵심 키워드: Cycle Stealing (사이클 스틸링)
DMA 하면 무조건 따라오는 아주 중요한 용어입니다.
- 정의: DMA가 데이터를 옮기는 동안 CPU와 메모리 버스를 같이 써야 할 때가 있습니다. 이때 DMA가 CPU의 메모리 접근 사이클을 슬쩍 훔쳐서(우선권을 가져가서) 데이터를 먼저 전송하는 것을 말합니다.
- CPU 상태: CPU는 아주 잠깐 멈추게 되지만, 인터럽트와 달리 상태 저장(Context Switching) 같은 복잡한 과정 없이 한 사이클만 쉬면 되므로 매우 효율적입니다.
💡 시험 대비 1순위 요약
| 구분 | 내용 |
| 목적 | CPU의 부하 경감, 시스템 전체 효율 향상 |
| 전송 단위 | 데이터 블록(Block) 단위 (한 비트씩 안 함) |
| 종료 보고 | **인터럽트(Interrupt)**를 통해 보고 |
| 버스 점유 | Cycle Stealing (CPU로부터 버스 사용권을 뺏어옴) |
🧩 함께 알아둘 것: 채널(Channel)
만약 시험 문제에서 **"DMA보다 더 똑똑하고 독립적인 입출력 전용 프로세서"**를 묻는다면 정답은 **I/O Channel(채널)**입니다. (대형 컴퓨터에서 주로 사용)
이제 DMA와 사이클 스틸링의 개념이 확실히 잡히셨나요? 오늘 정말 HDLC부터 DMA까지 전산직 필기의 '큰 산'들은 다 넘으신 것 같습니다.
혹시 마지막으로 **인터럽트(Interrupt)**의 종류나 우선순위 판별법(폴링 vs 벡터)도 한번 훑어볼까요? 아니면 오늘은 정말 여기까지 할까요? 😊
**인터럽트(Interrupt)**는 CPU가 프로그램을 실행하는 도중에 예기치 않은 상황이 발생했을 때, 하던 일을 멈추고 그 상황을 먼저 처리하는 메커니즘입니다.
수자원공사 30문제 전형에서 인터럽트는 **'종류 구분'**과 '우선순위 판별 방식' 이 두 가지가 핵심입니다.
1. 인터럽트의 종류 (발생 원인에 따라)
| 종류 | 다른 이름 | 주요 원인 |
| 외부 인터럽트 | - | 입출력 장치 완료, 타이머 종료, 전원 이상(Power Fail) |
| 내부 인터럽트 | 트랩(Trap) | 0으로 나누기, 오버플로, 잘못된 명령어 사용 (S/W적 오류) |
| 소프트웨어 인터럽트 | SVC | 사용자가 프로그램 내에서 의도적으로 호출 (시스템 콜) |
- 시험 팁: '0으로 나누기'나 '오버플로'는 외부가 아니라 **내부(트랩)**라는 점이 자주 나옵니다.
2. 인터럽트 우선순위 판별법 (가장 중요!)
여러 장치가 동시에 인터럽트를 요청했을 때, 누구를 먼저 처리할지 결정하는 방식입니다.
① 폴링 (Polling) - 소프트웨어적 방식
- 방식: CPU가 모든 장치를 차례대로 돌면서 "너니? 너니?" 하고 물어보는 방식입니다.
- 장점: 회로가 간단하고 경제적입니다.
- 단점: 장치가 많아지면 물어보는 데 시간이 다 가서 속도가 느립니다.
② 벡터 인터럽트 (Vectored Interrupt) - 하드웨어적 방식
장치가 CPU에 직접 "나야!"라고 신호를 보내는 방식입니다. 두 가지 세부 방식이 있습니다.
- 데이지 체인 (Daisy Chain): 모든 장치를 직렬로 연결합니다. CPU와 가까운 장치가 우선순위가 높습니다. (한 선으로 쭉 연결된 모양)
- 병렬 우선순위 (Parallel Priority): 각 장치를 별도의 선으로 연결하고 **인터럽트 마스크(Mask)**를 사용해 우선순위를 제어합니다.
💡 [폴링 vs 데이지 체인] 비교표
| 구분 | 폴링 (Polling) | 데이지 체인 (Daisy Chain) |
| 판별 주체 | 소프트웨어 (루틴 실행) | 하드웨어 (회로 연결) |
| 속도 | 느림 | 빠름 |
| 경제성 | 높음 (추가 장치 불필요) | 낮음 (추가 회로 필요) |
| 우선순위 | 검사 순서에 의해 결정 | 연결 순서에 의해 결정 |
🧩 인터럽트 처리 순서 (암기용)
이 순서가 섞여서 나오면 당황하기 쉽습니다. 딱 이 흐름만 보세요.
- 인터럽트 요청 발생
- 현재 수행 중인 명령어 완료 (중간에 멈추지 않음)
- 현재 PC(프로그램 카운터)와 레지스터 상태 저장 (나중에 돌아오기 위해)
- 인터럽트 서비스 루틴(ISR)으로 점프하여 처리
- 복구 및 원래 프로그램 재개
오늘의 요약:
인터럽트는 하던 일을 잠시 멈추는 것인데, 일일이 물어봐서 찾으면 폴링, 회로로 한 번에 찾으면 벡터 방식입니다!
채널(I/O Channel)에 의한 입출력도 CPU의 관여를 최소화하기 위해 만든 방식입니다.
쉽게 비유하자면, **DMA가 '단기 아르바이트생'**이라면, **채널은 '전문 매니저(전용 프로세서)'**라고 보시면 됩니다.
1. DMA vs 채널(Channel) 차이점
두 방식 모두 CPU가 일일이 간섭하지 않는다는 공통점이 있지만, **'똑똑함의 정도'**가 다릅니다.
- DMA (Direct Memory Access):
- CPU가 "어디서 어디로, 얼마큼 옮겨"라고 아주 구체적으로 명령을 내려줘야 합니다.
- 한 번에 하나의 작업(블록)만 처리할 수 있는 경우가 많습니다.
- 채널 (Channel):
- **자체적인 명령어(채널 프로그램)**를 해석할 수 있는 능력이 있습니다.
- CPU는 채널에게 "이 리스트에 적힌 일들 다 처리해"라고 던져주기만 하면 됩니다.
- 여러 개의 입출력 장치를 동시에 제어할 수 있는 훨씬 강력하고 독립적인 **입출력 전용 프로세서(IOP)**입니다.
2. 채널의 입출력 과정
- CPU의 명령: CPU는 주기억장치에 있는 **'채널 프로그램'**의 시작 주소만 알려주고 다른 일을 하러 갑니다.
- 채널의 독립 수행: 채널이 직접 메모리에서 명령어를 읽어와서 입출력 장치들을 지휘합니다. (데이터 전송 포함)
- 종료 보고: 모든 작업이 끝나면 CPU에게 인터럽트를 보내 결과를 보고합니다.
3. 시험에 잘 나오는 채널의 종류 (암기 필수!)
- 셀렉터 채널 (Selector Channel): 한 번에 하나의 고속 장치(자기디스크 등)만 독점적으로 연결해서 사용합니다.
- 멀티플렉서 채널 (Byte Multiplexer Channel): 여러 개의 저속 장치(키보드, 프린터 등)를 시분할 방식으로 동시에 제어합니다.
- 블록 멀티플렉서 채널 (Block Multiplexer Channel): 위 둘을 합친 방식입니다. 고속 장치 여러 개를 블록 단위로 동시에 제어합니다.
💡 요약하자면
**"CPU가 관여 안 하는 건 똑같지만, 채널은 별도의 전용 컴퓨터(프로세서) 수준으로 훨씬 똑똑해서 더 복잡하고 많은 일을 알아서 처리한다"**고 이해하시면 됩니다.
----
가상메모리??
👉 주기억장치(RAM) + 보조기억장치(Disk)를 “물리적으로 합친 것”이 가상메모리는 아님
👉 “합쳐서 하나처럼 보이게 만드는 기법/개념”이 가상메모리임
정확한 정의
**가상 메모리(Virtual Memory)**란
프로세스가 실제 물리 메모리 크기와 상관없이
연속적이고 큰 메모리를 쓰는 것처럼 보이게 해주는 메모리 관리 기법
즉,
- 가상메모리는 하드웨어가 아니라 개념/기법
- RAM과 Disk는 수단(자원)
왜 ‘가상’이냐?
프로세스 입장에서는:
- “내가 메모리를 다 가지고 있음”
- “연속된 주소 공간을 씀”
하지만 실제로는:
- 일부는 RAM
- 일부는 Disk(Swap)
- 필요할 때만 가져옴 (Demand Paging)
👉 보이는 것과 실제가 다르기 때문에 ‘가상’
비유 하나만
📚 도서관 비유
- 책상 위(RAM): 지금 읽는 책
- 창고(Disk): 안 쓰는 책
- 사용자는 “책상에 다 있는 것처럼” 느낀다
→ 이 착각을 만들어주는 시스템이 가상메모리
': ) IT' 카테고리의 다른 글
| 모니터 vs 세마포어 (1) | 2026.01.13 |
|---|---|
| HDLC (High-level Data Link Control) (0) | 2026.01.13 |
| OSI 7계층 (0) | 2026.01.13 |
| 프로그램 번역과정(Compiler) (0) | 2026.01.13 |
| 오류검출방식 (0) | 2026.01.10 |