본문 바로가기
: ) IT

DMA (Direct Memory Access) / 가상메모리

by miiinn 2026. 1. 13.

좋은 타이밍입니다! **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의 동작 과정 (순서 중요!)

시험에서는 이 절차를 섞어놓고 순서를 맞추라는 문제가 나옵니다.

  1. CPU가 DMA 제어기에 명령: 전송 방향(읽기/쓰기), 메모리 주소, 전송할 데이터 양 등을 알려줌.
  2. DMA가 버스 제어권 요청: 데이터를 옮기려면 통로(Bus)가 필요하므로 CPU에게 Bus Request를 보냄.
  3. CPU가 제어권 승인: CPU가 버스를 빌려줌 (Bus Grant).
  4. 데이터 전송: DMA가 CPU 도움 없이 직접 메모리와 I/O 장치 간에 데이터를 옮김.
  5. 종료 알림: 전송이 끝나면 CPU에게 인터럽트를 걸어 "다 끝났습니다!"라고 보고함.

3. 핵심 키워드: Cycle Stealing (사이클 스틸링)

DMA 하면 무조건 따라오는 아주 중요한 용어입니다.

  • 정의: DMA가 데이터를 옮기는 동안 CPU와 메모리 버스를 같이 써야 할 때가 있습니다. 이때 DMA가 CPU의 메모리 접근 사이클을 슬쩍 훔쳐서(우선권을 가져가서) 데이터를 먼저 전송하는 것을 말합니다.
  • CPU 상태: CPU는 아주 잠깐 멈추게 되지만, 인터럽트와 달리 상태 저장(Context Switching) 같은 복잡한 과정 없이 한 사이클만 쉬면 되므로 매우 효율적입니다.

💡 시험 대비 1순위 요약

구분 내용
목적 CPU의 부하 경감, 시스템 전체 효율 향상
전송 단위 데이터 블록(Block) 단위 (한 비트씩 안 함)
종료 보고 **인터럽트(Interrupt)**를 통해 보고
버스 점유 Cycle Stealing (CPU로부터 버스 사용권을 뺏어옴)
Sheets로 내보내기

🧩 함께 알아둘 것: 채널(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)
판별 주체 소프트웨어 (루틴 실행) 하드웨어 (회로 연결)
속도 느림 빠름
경제성 높음 (추가 장치 불필요) 낮음 (추가 회로 필요)
우선순위 검사 순서에 의해 결정 연결 순서에 의해 결정

🧩 인터럽트 처리 순서 (암기용)

이 순서가 섞여서 나오면 당황하기 쉽습니다. 딱 이 흐름만 보세요.

  1. 인터럽트 요청 발생
  2. 현재 수행 중인 명령어 완료 (중간에 멈추지 않음)
  3. 현재 PC(프로그램 카운터)와 레지스터 상태 저장 (나중에 돌아오기 위해)
  4. 인터럽트 서비스 루틴(ISR)으로 점프하여 처리
  5. 복구 및 원래 프로그램 재개

오늘의 요약:

인터럽트는 하던 일을 잠시 멈추는 것인데, 일일이 물어봐서 찾으면 폴링, 회로로 한 번에 찾으면 벡터 방식입니다!

 

 

 

채널(I/O Channel)에 의한 입출력도 CPU의 관여를 최소화하기 위해 만든 방식입니다.

쉽게 비유하자면, **DMA가 '단기 아르바이트생'**이라면, **채널은 '전문 매니저(전용 프로세서)'**라고 보시면 됩니다.


1. DMA vs 채널(Channel) 차이점

두 방식 모두 CPU가 일일이 간섭하지 않는다는 공통점이 있지만, **'똑똑함의 정도'**가 다릅니다.

  • DMA (Direct Memory Access):
    • CPU가 "어디서 어디로, 얼마큼 옮겨"라고 아주 구체적으로 명령을 내려줘야 합니다.
    • 한 번에 하나의 작업(블록)만 처리할 수 있는 경우가 많습니다.
  • 채널 (Channel):
    • **자체적인 명령어(채널 프로그램)**를 해석할 수 있는 능력이 있습니다.
    • CPU는 채널에게 "이 리스트에 적힌 일들 다 처리해"라고 던져주기만 하면 됩니다.
    • 여러 개의 입출력 장치를 동시에 제어할 수 있는 훨씬 강력하고 독립적인 **입출력 전용 프로세서(IOP)**입니다.

2. 채널의 입출력 과정

  1. CPU의 명령: CPU는 주기억장치에 있는 **'채널 프로그램'**의 시작 주소만 알려주고 다른 일을 하러 갑니다.
  2. 채널의 독립 수행: 채널이 직접 메모리에서 명령어를 읽어와서 입출력 장치들을 지휘합니다. (데이터 전송 포함)
  3. 종료 보고: 모든 작업이 끝나면 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