하나 또는 여러 개의 CPU에서, 디바이스 컨트롤러는 bus를 통해 memory와 연결되고, 접근하고, 메모리를 공유한다.
bus의 두 종류
bus 컴포넌트 분류
I/O Controller: I/O operation을 통해 CPU의 명령을 수행한다.
I/O controller registers: Data register, Control register
Polling I/O vs. Interrupt-driven I/O
- Polling I/O: CPU가 주기적으로 I/O status register를 확인한다. 따라서 CPU가 계속 관여해야 한다는 단점 존재
- Interrupt-driven I/O: I/O controller가 CPU에게 연산이 끝났음을 알리면 interrupt를 발생시킨다.
Memory-mapped I/O vs. Port-mapped I/O
- Memory-mapped I/O: 메모리와 다른 I/O의 주소공간을 통합한다.
- I/O device 접근 시 instruction이 메모리와 똑같다는 장점이 있지만, 확장될수록 버거워진다는 단점이 존재한다.
- Port-mapped I/O: 메모리와 I/O의 주소공간을 각각의 port로 분리한다.
- 확장성에서의 문제는 없으나, port에 대한 접근을 위해 별도의 instruction이 필요하다.
OS는 레지스터와 Program counter를 저장하여 CPU 상태를 유지한다.
Interrupt mechanism
- 인터럽트 발생 시
- 현재 진행 중인 명령을 완료한 후, 프로그램의 실행을 중지한다.
- 중단된 명령의 주소를 저장한다. (next PC)
- IRQ 번호 및 인터럽트 벡터 테이블을 통해 ISR의 주소를 가져온다.
- ISR로 이동한다.
- 인터럽트가 처리되는 동안
- 실행 중 다른 인터럽트가 도착하면 -> 중요한 것부터 처리한다.
- 수신 인터럽트를 사용하지 않도록 설정하여 인터럽트 손실을 방지한다.
- ISR을 실행한 후
- 저장되어 있는 주소를 통해 중단되었던 프로그램으로 돌아간다.
Interrupt Timeline