CPU가 프로그램을 실행하는 도중,
예외 상황
이 발생하여 처리가 필요한 경우,
현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 원래 실행중이던 작업으로 복귀하는 것
내부 인터럽트는 주로 프로그램 내부에서 잘못된 명령
또는 잘못된 데이터
를 사용했을때에 발생하게 됩니다.
일반적인 경우로 CPU 내부에서 프로세스가 실행되면서 인터럽트가 발생되고
0으로 나눌 때
계산 결과가 OverFlow or UnderFlow 일때
허용되지 않은 명령 혹은 공간에 접근했을 때 (Exception)
위와 같은 경우에 인터럽트가 발생하게 됩니다.
주로 하드웨어에서 발생하는 이벤트 입니다.
CPU 외부에서 어떤 일이 발생했을 경우, 전기적인 신호로 CPU에게 알립니다.
I/O 장치
Timer event
전원 장치 이상
위와 같은 경우 인터럽트가 발생하게 됩니다.
시스템 콜 인터럽트 실행을 위해서는 강제로 코드에 인터럽트 명령을 넣어 CPU에게 실행시켜야 합니다.
위의 사진에서 Timer Interrupt에 의해 프로세스 A의 실행이 중단되고 프로세스 B 가 실행되는 중 입니다.
인터럽트의 발생에 의해 프로세스가 변경되는 과정에 대한 사진인데,
이때 사용자 모드
와 커널 모드
로 수시로 바뀌면서 시스템 콜 (예: Timer Interrupt)
이 필요할때 수행시킵니다.
IDT란?
IDT ( Interrupt Descriptor Table )
미리 정의되어 있는 인터럽트들의번호
와실행 코드
를가리키는 주소
들이 저장되어 있는 Table.
컴퓨터 부팅 시 운영체제가 IDT에 인터럽트들을 기록하고,
인터럽트가 발생하면 IDT를 확인하여 Interrupt 번호에 해당하는 함수를 호출해서 인터럽트를 처리하게 됩니다.
아래의 사진은 프로세스 실행 중 인터럽트가 발생되었을때의 처리 흐름을 보여줍니다.
처리과정을 살펴보자면,
프로세스 실행중 인터럽트 발생
현재 프로세스의 실행 중단
현재 수행중이었던 프로세스의 상태를 해당 프로세스의 PCB에 저장
발생한 인터럽트의 번호
를 IDT
에서 확인하여 해당하는 인터럽트 번호
에 해당하는 함수를 호출
해서 실질적인 작업을 수행
실행이 중단되었던 프로세스 의 PCB
를 불러와 CPU 레지스터
에 초기화 시켜줌으로서 프로세스를 다시 수행
위와 같은 흐름이 됩니다.
바로 이전에 공부했던 PCB, Context Switching 에 대한 내용이 여기서 나오네요!
아직 CPU 스케줄링에 대한 내용을 공부해보지 않아 정확히 어떤 방식으로 프로세스가 수행되는지 정확히는 모르겠네요.
CPU 스케줄링에 대한 내용을 공부해보면 전체적인 흐름을 파악할수있을거같아요 !