OS
는 컴퓨터의 하드웨어를 관리해주는 역할을 한다. 컴퓨터의 하드웨어에는 CPU, Memory, Storage, I/O device가 있다. 그중 CPU와 메모리는 프로그램의 수행을 제어한다. 운영체제는 응용프로그램과 하드웨어 사이에 있다. OS를 거치지 않고서야 하드웨어에 접근할 수 없다. 여기서 OS를 거친다는 의미는 OS에서 제공하는 System call
을 호출하여 이 함수를 통해 하드웨어에 접근하게 해주는 것이다.
OS의 핵심파트이며 보통 Linux kernel
이라 부른다. Android OS 안에도 Linux kernel이 존재한다.
모든 I/O 디바이스에는 controller
가 존재한다. 이 controller는 깡통 같은 기계 안에 들어있는 보드를 의미한다. 보드인 controller
에서 메모리로 왔다갔다 하는게 I/O operation
이다. I/O operation
을 수행하라고 하는 역할은 CPU가 한다.
CPU의 간섭 없이 I/O operation을 하는 것이 DMA
이다. I/O와 프로그램 수행이 동시에 일어날 수 있게끔 하고 I/O하는 동안에 다른 일을 할 수 있다. 그리고 I/O가 끝난 것을 CPU에게 알려주는 것을 interrupt
라고 한다.
interrupt
를 생성하는 것은 source
이다. 이 source
마다 함수로 만드는 것이 ISR Handler
이다. Handler가 이미 kernel
안에 있어야만 한다. 여기서 ISR을 등록해주는 것이 핵심이다. 딜레이 없이 source
가 입력되면 interrupt
가 발생하고 무조건적으로 Handler가 수행된다.
예를 들어 B라는 interrupt가 발생하면 kernel 안에 있는 interruptB를 수행한다.
Interrupt Vector
안에는 source
와 Handler
가 있다. source가 발견되면 벡터를 look up해서 주소가 담긴 Handler을 확인한다. 주소를 저장해놔야 interrupt 발생하기 이전에 위치로 다시 돌아가서 원래 하던 일을 수행할 수 있게끔 해준다.
좋은 글 감사합니다 !