📌 DMA(Direct Memory Access)
DMA에 대해 알기 전,
일단 원칙적으로 메모리는 CPU에 의해서만 접근 가능한 장치이다.
따라서, 주변 장치들이 메모리에 접근하려면 CPU에게 인터럽트를 발생시켜 CPU가 일을 대행하는 식으로만 가능하다.
하지만, 모든 메모리 접근 연산이 CPU에 의해서만 이루어지면 주변 장치가 메모리 접근을 원할 때마다 인터럽트를 통해 CPU의 업무가 방해를 받게 돼 CPU 사용의 효율성이 떨어진다.
이러한 비효율성을 극복하기 위해 CPU 이외에 메모리 접근이 가능한 장치를 두었는데,
이것이 바로 DMA(Direct Memoey Access)이다.
DMA (Direct Memoey Access)
- 일종의 컨트롤러로서, CPU가 주변 장치들의 메모리 접근 요청에 의해 자주 interrupt 당하는 것을 막아줌
- CPU 이외에 메모리 접근이 가능한 장치
- 바이트당 하나의 interrupt가 아닌, block당 하나의 interrupt
- 훨씬 효율적
📌 Interrupt
➝ CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요한 경우에 CPU에게 알려 처리할 수 있도록 하는 것
- 우선적으로 처리해야 할 일이 발생하였을 때, 그것을 처리하고 원래 동작으로 돌아옴
✋ 그래서 Interrupt, 왜 하는데?
➝ 입출력 연산이 CPU 명령 수행 속도보다 현저히 느리기 때문!
오래 걸리는 입출력 연산을 CPU가 매번 기다리는 것, 얼마나 비효율적인가!
따라서 연산 결과가 나올 때까지 CPU에게 다른 일을 시킨다.
입출력 직원이 자신의 업무가 완료되면 그때, CPU 선배님에게 작업 완료를 알리라고 일러두어 CPU가 다시 해당 작업을 이어서 할 수 있게 한다. (CPU는 일하고 일하고 또 일하고,,)
여기서, 입출력 직원이 CPU 선배님에게 작업 완료를 알려주는 것이 인터럽트이다.
✒️ Interrupt Mechanism
▪️ Interrupt 발생 시,
- 현재 명령이 완료된 후, 현재 프로그램 실행 중지 (현재 하던 일까지만 마무리하고 지금의 정보들을 memory에 저장)
- 중단된 명령의 주소를 저장
- IRQ 번호 및 Interrupt 벡터 테이블을 통해 ISR(Interrupt Service Routine)의 주소를 가져옴
▪️ Interrupt가 처리되는 동안,
- 들어오는 Interrupt를 사용하지 않도록 설정하여 Interrupt 손실을 방지함
▪️ ISR 실행 후,
- 저장된 주소를 통해 중단된 프로그램으로 돌아옴
✋ 잠깐, 여기서 ISR이란?
ISR(Interrupt Service Routine)
- 인터럽트 핸들러(Interrupt Handler)라고도 불림
- 인터럽트가 접수되면 각각의 인터럽트에 대응하여 특정 기능을 처리하는 기계어 코드 루틴(커널이 실행)
ex) 키보드 자판을 눌러 키보드 인터럽트가 발생하면 이에 해당하는 ISR이 실행됨
✒️ Interrupt Timeline
참고사이트
https://velog.io/@adam2/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8
[OS기초] 인터럽트 제대로 이해하기
주변장치와 입출력 장치는 CPU나 메모리와 달리 인터럽트라는 메커니즘을 통해 관리된다. 그래서 인터럽트, 왜 하는거요? 그 이유는 입출력 연산이 CPU 명령 수행속도보다 현저히 느리기 때문이
velog.io
https://velog.io/@sparkbosing/DMA
DMA
운영 체제와 정보 기술의 원리는 정리한 내용입니다.원칙적으로는 메모리는 CPU에 의해서만 접근 가능한 장치입니다. 따라서, 주변 장치들이 메모리에 접근하기 위해서는 CPU에게 인터럽트를 발
velog.io