인터럽트는 발생하는 "비정상적인"이벤트로 , 다른 상황에 관계없이 즉시 처리해야합니다 . 필자는 예상치 못했거나 나쁜 것이 아니기 때문에 인용 부호 안에 "비정상적"이라고 말하지만, CPU의 관점에서 볼 때 "비정상적"이라고 말하면 관련이없는 코드를 실행하는 동안 "정상적으로 발생"하기 때문입니다.
CPU에는 인터럽트 수신을위한 몇 가지 메커니즘이 있으며 다양한 종류의 인터럽트가 발생할 때 "수행 할 작업"을 구성하는 방법이 있습니다. 이를 통해 운영 체제는 하드웨어 장치가 작업을 수행 할 때 (정기 간격으로 인터럽트를 생성하는 중요한 하드웨어 시계 포함) 알림을 받도록 정렬 할 수 있습니다. CPU의 인터럽트 처리 구성을 통해 OS에서 지정된 코드는 인터럽트가 발생할 때마다 제어권을 얻습니다.
인터럽트 핸들러 실행이 시작될 때 컴퓨터는 매우 불쾌한 상태입니다 (응용 프로그램 프로그래머에게). 기계가 다른 작업을 수행하는 데 바빴으며 ( 무엇이든 가능 ) 이제 OS에 "무슨 일이 발생했다"는 알림이 표시됩니다. 실제로 시스템의 어느 곳에서나 인터럽트를 처리하고 CPU에서 실행중인 "무엇이든"을 방해하지 않으면 서 필요한 처리를 수행하는 데 필요한 다른 정보를 수집해야합니다. OS가 현재 실행중인 응용 프로그램 프로세스를 전환하려면 나중에 컨텍스트를 방해하지 않고 복원 할 수 있도록 컨텍스트를 충분히 저장해야하며 다른 컨텍스트를로드 한 다음 CPU가 정상적으로 재개되도록하십시오. 그 맥락에서 실행.
언급 한 바와 같이, 인터럽트는 하드웨어 장치로부터 알림을받는 데 사용되며 (단일 대안은 주기적으로 확인하는 것임) 시간을 추적하고 애플리케이션 프로세스에서 제어권을 다시 확보 할 수있는 기회를 얻습니다 (어떤 애플리케이션이 실행 중인지 전환하기 위해) 잘못된 명령을 실행하는 응용 프로그램 프로세스에서 복구하고 응용 프로그램이 OS를 요청할 수 있도록합니다. 이러한 것을 시스템 호출이라고합니다. 응용 프로그램이 기계를 서로 엉망으로 만드는 것을 방지하기 위해 응용 프로그램은 일반적으로 "사용자 모드"로 기계와 함께 실행되므로 응용 프로그램이 기본적으로 이미 할당 된 읽기 및 쓰기 (가상) 메모리 이외의 다른 작업을 수행 할 수 없습니다. 이것은 무엇이든 할 수 있음을 의미합니다그렇지 않으면 (파일 읽기 / 쓰기, 더 많은 메모리 요청, 장치 액세스 등) 응용 프로그램이 시스템 호출을해야합니다. 그것은 기본적으로 OS가 그것을 찾을 것이라는 것을 알고 어딘가에하고 싶은 것에 대한 정보를 남겨두고 올바른 종류의 인터럽트를 일으키는 CPU 명령을 실행함으로써 그렇게합니다. 그런 다음 OS는 응용 프로그램에서 수행하려는 작업을 확인하고 해당 요청을 수행해야하는지 여부를 결정할 수 있습니다. 이렇게하면 OS가 프로세스 외부에 영향을 미치는 작업을 수행하려는 프로세스의 모든 시도에 관여하게됩니다. 액세스 정책을 적용 할 수있는 유일한 방법입니다.
기본적으로 OS는 인터럽트에 의해 구동됩니다. "추상"OS는 기계를 "정상 작동"상태로 부트 스트랩하고 어느 시점에서 제어를 "정상"프로세스로 전환합니다. 정상적인 상황에서 OS는 인터럽트를 처리하여 제어권을 다시 얻습니다. 그러나 인터럽트없이 흥미로운 것은 거의 없기 때문에 OS는 기본적으로 모든 것을 항상 제어합니다.