최종 수정 : 25.1.10
DMA를 이용한 입출력
1. DMA (Direct Memory Access) 제어기
CPU의 개입 없이 입출력장치와 주기억장치 사이에서 데이터를 직접 전송시키는 방법을 직접 메모리 접근(DMA)라고 한다. DMA에 의한 입출력이 수행되는 동안 중앙처리장치는 주기억장치 버스를 제어하지 못한다.
주기억장치의 데이터를 입출력장치에 보내거나,입출력장치의 데이터를 주기억장치에 전송하려면 PCU는 DMA 제어기로 주기억장치의 시작주소, 전송될 데이터의 양, 입출력장치의 주소를 알려주어야 한다. CPU는 DMA 제어기에 제어권을 넘긴 후에는 데이터 전송이 완료될 때까지 개입하지 않는다. 데이터전송은 DMA 제어기가 주기억장치 버스를 통하여 CPU에 버스요구(bus request)를 신청하면 CPU는 현재 진행 중인 명령어의 실행을 끝내고 나서 주소버스, 데이터버스, 제어버스를 끊고(하이 임피던스 상태) 버스승인(bus grant) 신호를 준다. 이렇게 되면 DMA 제어기는 CPU에서 버스 사용권을 넘거받아 데이터를 직접 죽억장치에 전송한다. 이 상태를 DMA 제어기가 CPU의 메모리 사이클을 훔친다고 한다. 전송이 완료되면 DMA 제어기는 인터럽트로 데이터 전송이 끝났음을 CPU에 알려주고 버스 제어권을 CPU에게 넘겨준다.
DMA 제어기가 데이터를 전송하는 방법은 크게 2가지가 있다.
DMA 대량전송(burst transfer)
- DMA 제어기가 장시간 동안 버스를 사용하므로 CPU의 동작이 지연되는 단점이 있다.
사이클 스틸(ctle stealing)
- 한 데이터씨 전송하며
- 단지 한 번에 하나의 기억장치 사이클만 DMA에 뺏기게 된다.
2. DMA 동작순서
CPU는 처음에 DMA를 초기화시키고 나서, DMA 제어기가 CPU에 버스요구신호르르 보내면 CPU는 승낙하는 신호를 보낸다. DAM 동작이 끝나면 DMA는 인터럽트 신호로 CPU에 알려주고 CPU는 다시 원래의 프로그램을 수행하게 된다.
1) CPU가 DMA를 초기화하는 내용
- 주기억장치의 블록 전송의 시작주소
- 전송될 데이터의 원드 수
- 입출력장치의 주소
- 읽기(read)/쓰기(write) 지정자
2) 주기억장치 블록 데이터를 디스크에 전송하는 과정
- CPU가 DMA 제어기를 초기화시킨다.
- DMA 제어기는 버스 요청신호를 발생한다.
- CPU가 버스승인 신호를 발생한 후 버스를 넘겨준다.
- DMA 제어기가 주기억장치로부터 데이터를 읽어서 디스크에 저장한다. 전송이 완료될 때까지 이 과정을 반복한다.
- 전송이 완료되면 DMA는 CPU로 인터럽트 신호를 보내서 완료됨을 알린다.
3. 사이클 스틸링(cycle stealing)
CPU와 DMA 제어기가 시스템버스를 공유하기 때문에 DMA 제어기가 데이터 전송을 위해서 시스템버스를 사용할 경우에는 CPU에서 버스 사용권을 넘겨받아서 데이터를 직접 입출력장치와 주기억장치에 전송하게 된다. 즉, CPU가 주기억장치를 액세스하지 않는 시간 동안에 시스템버스를 사용하는 것이다. 이것을 DMA 사이클 훔침(cycle stealing)이라고 한다.
참고
독학사 교재
'CS 공부 > 컴퓨터 구조' 카테고리의 다른 글
클러스터 컴퓨터 (0) | 2025.01.10 |
---|---|
컴퓨터 성능평가 (0) | 2025.01.10 |
인터럽트를 이용한 입출력 (0) | 2025.01.09 |
입출력장치 주소지정 (0) | 2025.01.09 |
입출력장치 제어 (0) | 2025.01.09 |
댓글