Interrupt
인터럽트
인터럽트는 다른 중요 작업을 처리하는 데 운영 체제에게 시간을 할당하도록 허용하며, 시스템의 효율성과 응답성을 향상시킵니다. CPU는 인터럽트가 발생하면 현재 실행 중인 작업을 중단하고, 인터럽트 처리 루틴(Interrupt Service Routine, ISR) 또는 핸들러(Handler)라고 불리는 특수한 코드 블록을 실행합니다. 이후에는 원래 작업으로 복귀하여 중단한 지점부터 계속 진행합니다.
CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능
CPU는 매번 프로그램 카운터가 가리고 있는 곳의 명령을 수행한 뒤, 다음 명령을 수행하기 직전에 인터럽트 라인이 세팅되었는지 체크한다.
이를 통해 인터럽트가 발생했으면 CPU는 현재 수행 중이던 프로세스를 멈추고 운영체제의 **인터럽트 처리 루틴(ISR)**을 수행한다.
💡 어떤 프로세스를 처리하고 있다가 인터럽트가 발생해서 인터럽트 처리 루틴을 동작하려면 컨텍스트 스위칭이 필요한거 아니야?
인터럽트가 발생했을 때 인터럽트 서비스 루틴(ISR)을 실행하기 위해 일어나는 것은 정확히 말하면 전통적인 컨텍스트 스위칭과는 약간 다릅니다. 전통적인 컨텍스트 스위칭은 하나의 프로세스(또는 스레드)에서 다른 프로세스(또는 스레드)로 실행 흐름을 바꾸는 것을 의미합니다. 이 때 프로세스의 상태, 레지스터 값, 프로그램 카운터 등이 저장되고 불러와져야 합니다.
그러나 인터럽트 발생 시에는:
현재 실행 중인 프로세스의 중요한 레지스터 값들과 프로그램 카운터 등의 상태를 저장합니다.
인터럽트 서비스 루틴을 실행합니다.
인터럽트 처리가 끝난 후 원래 프로세스의 상태와 레지스터 값들을 복원합니다.
이 과정은 "컨텍스트를 저장하고 복원한다"는 측면에서 컨텍스트 스위칭과 유사합니다. 그러나 전통적인 컨텍스트 스위칭에서는 다른 프로세스로의 전환을 의미하는 반면, 인터럽트 처리에서는 같은 프로세스로 다시 돌아가게 됩니다.
결론적으로, 인터럽트 처리는 컨텍스트의 일부를 저장하고 복원하는 과정을 포함하므로, 이를 "컨텍스트 스위칭"이라고 부르기도 합니다. 그러나 이는 전통적인 프로세스 간의 컨텍스트 스위칭과는 약간 다른 의미입니다. 인터럽트 처리 중에 실제로 다른 프로세스로 전환될 필요가 있는 경우 (예: 타임 슬라이싱에 의한 스케줄링), 그 때는 전통적인 컨텍스트 스위칭이 발생합니다.
Last updated