현재의 운영체제는 인터럽트 기반 시스템이다. 운영체제가 부팅되어 메모리에 상주한 후, 운영체제는 대기 상태로 유지되는데 이때 인터럽트가 발생하면 os내부에서 다른 동작을 하게 된다.
interrupt(인터럽트) : 프로그램을 실행하던 도중 예기치 못한 상황이 발생하면 현재 하던 일을 그만두고, 발생된 상황을 우선적으로 처리한다. 해석 그대로 끼어들기라고 생각하면 된다.
인터럽트의 이유는?
인터럽트는 예외 상황이나 하드웨어 장치의 입출력, 소프트웨어의 호출 등으로 인해 발생하여 cpu의 연산을 멈추고, 이 인터럽트에 해당하는 코드를 실행하게 하는 것이다. 그러나 이 인터럽트가 없다면 cpu는 장치의 상태를 계속 점검하는 wait loop가 발생하게 되고, cpu가 다른 연산을 할 수 없도록 하기 때문에 cpu가 낭비되게 된다. cpu를 최대한 낭비하지 않도록 하는 시스템이 인터럽트이다!
이 과정에서 os는 메모리에 항상 대기 상태로 존재함.
결론 : cpu는 하던 일을 멈추고 os의 ISR을 실행한다.
ex) 마우스가 hwp 아이콘을 클릭 시?
cpu는 하던 일을 멈추고 os의 내부 코드인 ISR을 실행. 결국 hwp가 메모리로 올라오게 된다. os의 코드는 인터럽트가 발생 시 실행되게 된다.
모든 인터럽트는 인터럽트 결과 운영체제 내의 특정 코드를 실행시킨다.(ISR)
하드웨어 인터럽트 : cpu가 프로그램을 실행하고 있을 때, 마우스나 키보드 등 하드웨어가 발생시킨 인터럽트이다.
ISR 실행 후 cpu는 다시 대기 상태
소프트웨어 인터럽트 : 소프트웨어가 발생시키는 인터럽트로, 사용자 프로그램이 스스로 인터럽트 라인을 생성한다. 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우에 발생한다.
소프트웨어 인터럽트 종료 시 이 인터럽트를 발생시킨 사용자 프로그램으로 복귀한다.
내부 인터럽트 : 잘못된 명령어나 잘못된 데이터를 사용했을 경우 발생하는 인터럽트.
Divide by zero(0으로 나누었을 경우), overflow/underflow, 기타 exception 등이 있을 수 있다.
운영체제는 평소에는 대기 상태이다가 하드웨어 인터럽트 / 소프트웨어 인터럽트 / 내부 인터럽트에 의해 운영체제 내부의 코드(ISR)이 실행된다.
ISR이 종료되면 원래 대기상태(hw interrupt)로 복귀하거나 사용자 프로그램(sw interrupt)로 복귀한다.