인터럽트란 CPU에게 커널 모드로 변경됨을 알리는 신호이다. 일반 소프트웨어는 권한이 있는 명령을 수행하지 못하기에, 인터럽트를 발생시켜서 커널 모드로 전환한 뒤 운영체제에게 대신 일을 맡긴다.
예를 들어 어떤 소프트웨어는 키보드 입력을 받기 위해 CPU에게 Interrupt를 발생시킬 수 있다.
인터럽트 신호가 발생했을 때 CPU는 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 확인한다. 인터럽트를 받아들일 수 있다면 CPU는 현재 작업을 백업하고, 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행한다. 인터럽트 서비스 루틴이 끝나면 CPU는 백업해 둔 작업을 복구하여 실행을 재개한다.
인터럽트 처리 절차
인터럽트 요청 신호 | 인터럽트를 요청하는 신호 |
---|---|
인터럽트 플래그 | 하드웨어가 인터럽트를 받아들일지 결정하는 플래그 |
인터럽트 서비스 루틴 | 인터럽트를 처리하기 위한 프로그램으로 인터럽트를 처리하는 방법 포함 |
인터럽트 벡터 | 인터럽트 서비스 루틴의 시작 주소를 알게 해 인터럽트 서비스 루틴을 식별하기 위한 정보 |
CPU가 일정한 시간 간격을 두고 각 자원들의 상태를 주기적으로 확인하는 방식이다. 각 자원들이 능동적으로 자신의 상태 변화를 CPU에 알리는 Interrupt 방식과 다르게 작동한다. 자원이 폴링 신호를 받으면 자신의 상태를 적어 놓을 수 있는 곳에 저장시키고, CPU는 그것을 폴링 때마다 읽어 보는 방식이다. 비유하자면 교수님이 10분마다 학생들에게 질문 있냐고 물어보는 것이다.
이 방식은 아무 일이 없어도 CPU가 일정 시간이 되면 폴링을 해야 하며, 각 자원은 직전 폴링 이후 다음 폴링까지 자신의 상태를 알릴 수 없기 때문에 사용되지 않는다.
하드웨어 인터럽트는 하드웨어가 발생시킨 인터럽트를 의미한다.
일반적으로 Interrupt라고 하면 하드웨어 인터럽트를 의미한다.
소프트웨어 인터럽트는 Trap이라고도 불린다.
Exception
프로그램이 오류를 범하여 예외가 발생한 경우
System Call
프로그램이 커널 함수를 호출하는 경우
동시에 인터럽트가 발생하면 CPU는 인터럽트 우선 순위를 기준으로 인터럽트를 처리한다. 이때 선점형 방식으로 동작한다.
인터럽트 처리 절차