CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요할 경우에 CPU에게 알려 처리할 수 있도록 하는 것
크게하드웨어 인터럽트
와소프트웨어 인터럽트
로 나눔
하드웨어 인터럽트
: 하드웨어가 발생시키는 인터럽트로, CPU가 아닌 다른 하드웨어 장치가 CPU에 어떤 사실을 알려주거나 CPU 서비스를 요청해야 할 경우 발생시킴
소프트웨어 인터럽트
: 소프트웨어가 발생시키는 인터럽트. 프로그램이 오류를 범하여 Execption이 발생하거나 사용자 프로그램이 커널함수 사용을 위해 호출하는 System Call이 발생하는 경우를 말함.
CPU는 매번 프로그램 카운터가 가리키고 있는 지점의 명령을 하나씩 수행하고 나서, 다음 명령을 수행하기 직전에 인터럽트 라인
이 세팅되었는지 체크함
인터럽트가 발생하면?
1. 현재 실행중인 명령의 메모리 주소를 포함한 부가 정보를 저장
cpu에서 명령이 실행될 뗴에는 cpu 내부에 있는 임시 기억장치인 레지스터에 데이터를 읽거나 쓰면서 작업을 함
이때 인터럽트가 발생하면 기존의 레지스터 값들이 지워지게 되므로 cpu 내의 이러한 상태를 pcb에 저장함
pcb에 저장되는 내용
: 실행중이던 코드의 메모리 주소, 레지스터 값, 하드웨어 상태 등
2. 인터럽트 처리 루틴
운영체제는 할 일을 쉽게 찾아가기 위해 인터럽트 벡터를 가지고 있음.
인터럽트 벡터
: 인터럽트 종류마다 번호를 정해서 번호에 따라 처리해야 할 코드가 위치한 부분을 가리키는 자료구조
인터럽트 벡터를 따라가면 실제 처리해야 할 코드는 인터럽트 처리 루틴(or 인터럽트 핸들러)라고 불리는 다른 곳에 정의됨
인터럽트 처리 루틴
: 해당 인터럽트를 처리하는 커널 함수
3. 인터럽트 당하기 직전으로 복원
인터럽트 처리후 PCB에 저장한 수행중이던 원래 작업으로 돌아가 중단했던 일을 계속 진행함
Polling은 주기적으로 하드웨어를 물어보며 해당 장치가 준비되었는지 확인하고, 준비되었다면 작업을 시작하는 방식입니다. 하지만 계속해서 물어봐야 하므로 시스템의 자원을 낭비할 수 있습니다
좋은 글이네요. 공유해주셔서 감사합니다.