CPU가 있으면 CPU가 직접 check 즉, polling하지 않고 IO 자체가 준비가 되면 IO가 interrupt를 걸어서 준비가 됐음을 알린다.
priority를 줄 수도 있음(우선순위를 먼저 처리)
장치가 준비됐거나 error가 발생했을 때,
Controller는 CPU에게 interrupt를 건다.
Interrupt는 exception과 같은 것.
그러나 명령 실행에 동기화되지 않음
instruction 사이에 handler를 호출할 수 있다
Cause information often identifies the interrupting device
이유 정보가 종종 interrupting device를 식별
Priority interrupts
더 긴급한 주의가 필요한 장치는 우선 순위가 높다
낮은 우선순위의 Interrupt를 위해 handler를 Interrupt할 수 있다
Special hardware needed
Interrupt controller
현재 모인 interrupt를 처리해서 CPU에 달린 하나의 interrupt pin으로 보내준다.
Interrupt controller
Example: ARM microcontroller (Cortex M0)
interrupt source들 모아서 CPU에게 알려주고 우선순위, 대기열 등에 의거하여 interrupt를 control 해주는 interrupt controller이 있음
I/O Data Transfer
Polling and interrupt-driven I/O
CPU가 메모리와 I/O 데이터 레지스터 간에 데이터 전송
고속 장치의 경우 시간이 많이 소요됨
CPU가 harddisk에서 데이터는 lw하고 다시 메모리에 저장하는 행동은 너무 시간 소모가 심함.
Direct memory access (DMA)
CPU가 관여하지 않고
OS가 메모리에서 시작 주소를 제공
I/O 컨트롤러가 메모리로/로부터 자동 전송
완료 또는 오류 시 컨트롤러가 중단됨
CPU는 다음과 기능이 있다. (셋 중 어느 기능이라도 없으면 CPU가 아님)
Arithmetic and Logical processing
Data move(lw/sw)
flow control
DMA는 위 기능 중에서 다른건 다 못하고 Data move만 가능하도록 만든 것이다.
IO에서 메모리, 메모리에서 IO
CPU 는 DMA controller 에게 다음과 같은 정보를 보낸다.
Read/Write
Device address
Starting address of memory block for data
Amount of data to be transferred
Direct Memory Access (DMA)
For high-bandwidth devices (like disks) interrupt-driven I/O would consume a lot of processor cycles
disk와 같은 높은 bandwidth를 가진 기기(interrupt-driven IO)는 수많은 processor cycle을 소비할 것이다.
With DMA, the DMA controller has the ability to transfer large blocks of data directly to/from the memory without involving the processor
DMA controller는 CPU 없이 memory와 직접적으로 거대 data block을 옮기는 능력이 있다.
The processor initiates the DMA transfer by supplying the I/O device address, the operation to be performed, the memory address destination/source, the number of bytes to transfer
CPU는 I/O device address, 메모리 주소 destination/source, 전송할 바이트 수를 공급함으로써 DMA 전송을 시작한다.
The DMA controller manages the entire transfer (possibly thousand of bytes in length), arbitrating for the bus
DMA controller는 전체의 전송을 관리한다.(가능한 한 1000 bytes 크기) ,bus를 커버하면서
When the DMA transfer is complete, the DMA controller interrupts the processor to let it know that the transfer is complete
DMA 전송이 끝나면 DMA controller가 CPU에게 interrupt를 걸어서 다 끝났음을 알린다.
하나의 시스템에 여러 개의 DMA 장치가 있을 수 있다
Processor및 DMA 컨트롤러는 bus cycles 및 메모리에 대해 경쟁한다
처음에는 slave처럼 작동하다가 CPU가 bus를 끊으면 마치 master처럼 작동
DMA Data transfer (Example)
DMA 없이
메모리와 I/O 사이의 CPU 전송(읽기/쓰기) 데이터
I/O 작업이 느리다 -> CPU 오버헤드
CPU write 명령(r/w), 장치 주소, 메모리 주소 및 카운트
Bus Request와 Bus Grant
DMA는 데이터 전송을 제어한다(CPU는 여전히 캐시를 사용하고 다른 계산을 수행할 수 있음)
작업이 완료되면 CPU에 인터럽트를 보낸다
block 단위로 보낼 수 있는 버퍼가 존재
DMA가 Bus를 통해서 CPU에게 Request를 보냄
CPU가 허락함(Bus Grant)
그러면 CPU와 memory의 연결을 끊어 버림
그러면 DMA가 master가 돼서 memory를 직접 주거니 받거니 한다.
disk가 CPU를 거치지 않고 directly memory에 access 할 수 있게 됐다.
전송을 마치면 interrupt를 보냄 -> 다시 CPU가 bus를 잡음
DMA data Transfer
DMA가 캐시된 메모리 블록에 기록하는 경우
캐시된 복사본이 stale해진다. (탁해진다, 신선하지 않다)
write-back cache에 dirty block이 있고, DMA가 memory block을 읽는 경우
오래된 데이터를 읽음
cache coherence 보장 필요
memory에 있는 데이터가 cache에도 있을 경우에는 memory에서 가져오거나 memory에 write해 봤자 의미가 없다.
cache에는 update 됐는데 memory에는 아직 update되지 않았다면 이 memory 내용을 가져오는 건 좋지 않음 -> cache coherence
write 할 때도 memory에만 update하면 안되고 cache에도 update 해주어야 함
DMA에 사용될 경우 OS는 캐시에서 쓰기를 강제로 수행합니다. (cache flush라고 함)