interrupt

agnusdei·2024년 10월 7일
0

Hardware & Software

목록 보기
9/136

인터럽트는 컴퓨터 시스템에서 중요한 사건이 발생했을 때 CPU의 주된 작업 흐름을 중단하고, 그 사건을 처리하기 위한 특별한 코드(인터럽트 핸들러)를 실행한 후 다시 원래 작업으로 복귀하는 메커니즘입니다. 인터럽트의 처리 순서와 원리는 다음과 같습니다.

인터럽트 처리 순서

1.	인터럽트 발생(Interrupt Request):
•	하드웨어나 소프트웨어에서 이벤트가 발생합니다. 예를 들어, 키보드 입력, 타이머 만료, 네트워크 패킷 수신 등이 인터럽트를 발생시킬 수 있습니다. 이를 **인터럽트 요청(Interrupt Request, IRQ)**이라고 부릅니다.
•	인터럽트는 비동기적으로 발생하며, 프로그램이 실행 중인 도중에도 언제든지 발생할 수 있습니다.
2.	인터럽트 인식(Interrupt Acknowledgment):
•	CPU는 현재 실행 중이던 작업을 일시 중지하고, 발생한 인터럽트를 인식합니다. CPU는 인터럽트 플래그를 통해 인터럽트 발생 여부를 확인할 수 있습니다.
•	인터럽트 신호가 들어오면, CPU는 다음 명령을 실행하기 전에 인터럽트 처리 루틴을 시작합니다.
3.	현재 상태 저장(Save Current Context):
•	인터럽트를 처리하기 전에, CPU는 현재 작업 상태(프로그램 카운터, 레지스터 값 등)를 스택에 저장합니다. 이렇게 저장된 상태는 나중에 복구되어 중단된 작업을 이어나갈 수 있게 해줍니다.
•	CPU는 작업 상태를 보존하기 위해 스택 프레임을 설정하며, 이를 통해 나중에 원래의 실행 흐름으로 복귀할 수 있습니다.
4.	인터럽트 벡터 테이블 참조(Lookup in Interrupt Vector Table):
•	CPU는 **인터럽트 벡터 테이블(Interrupt Vector Table)**을 참조하여, 발생한 인터럽트에 대한 처리 루틴(핸들러)의 주소를 찾습니다.
•	인터럽트 벡터 테이블은 각 인터럽트에 대응하는 **인터럽트 서비스 루틴(Interrupt Service Routine, ISR)**의 시작 주소를 저장하고 있는 테이블입니다. 이 테이블을 참조하여 적절한 핸들러를 실행합니다.
5.	인터럽트 핸들러 실행(Execute Interrupt Handler):
•	CPU는 인터럽트 벡터 테이블에서 찾은 주소로 이동하여 인터럽트 핸들러를 실행합니다. 이 핸들러는 인터럽트의 원인을 분석하고 적절한 처리를 수행합니다.
•	예를 들어, 키보드 입력 인터럽트가 발생했다면, 핸들러는 키보드에서 입력된 데이터를 읽어옵니다.
6.	상태 복구(Restore Previous Context):
•	인터럽트 핸들러가 끝나면, CPU는 이전에 저장했던 실행 상태(프로그램 카운터, 레지스터 값 등)를 스택에서 복구합니다. 이를 통해 인터럽트 발생 전에 수행하던 작업을 이어나갈 수 있습니다.
•	이 복구 과정은 CPU가 중단되었던 작업을 재개할 수 있도록 보장합니다.
7.	원래 작업으로 복귀(Return to Main Program):
•	상태 복구가 완료되면, CPU는 중단되었던 작업으로 돌아가 정상적으로 프로그램을 이어서 실행합니다. 프로그램은 마치 아무 일도 없었던 것처럼 원래 흐름을 계속합니다.

인터럽트 처리의 원리

인터럽트가 발생하면, CPU는 즉시 인터럽트를 인식하고 이를 처리해야 합니다. 이를 효율적으로 처리하기 위한 주요 원리는 다음과 같습니다:

1.	비동기적 처리(Asynchronous Handling):
•	인터럽트는 CPU가 명시적으로 요청하지 않더라도 언제든지 발생할 수 있습니다. CPU는 이러한 비동기적 이벤트에 대응하기 위해 인터럽트 요청 신호를 항상 감시하고 있습니다.
2.	우선순위 관리(Priority Management):
•	여러 개의 인터럽트가 동시에 발생할 수 있기 때문에, 각 인터럽트에는 우선순위가 부여됩니다. 더 중요한 작업을 처리하기 위해 낮은 우선순위의 인터럽트를 무시하거나, 높은 우선순위의 인터럽트부터 처리합니다.
•	Nested Interrupt: 우선순위가 높은 인터럽트가 낮은 우선순위의 인터럽트를 중단하고 실행될 수 있습니다. 이를 중첩 인터럽트라고 하며, 복잡한 시스템에서 자주 사용됩니다.
3.	인터럽트 마스킹(Interrupt Masking):
•	때로는 특정 작업 중에 인터럽트를 일시적으로 막아야 할 경우가 있습니다. 이를 인터럽트 마스킹이라고 하며, 중요한 작업을 방해받지 않도록 인터럽트를 임시로 비활성화하는 방식입니다.
•	마스킹된 동안에는 더 이상 인터럽트가 발생하지 않으며, 작업이 끝난 후 마스크를 해제하면 다시 인터럽트 처리가 가능해집니다.
4.	인터럽트 벡터 테이블(Interrupt Vector Table):
•	시스템은 발생한 인터럽트를 적절하게 처리하기 위해 인터럽트 벡터 테이블을 사용합니다. 이 테이블은 각각의 인터럽트에 대응하는 핸들러의 시작 주소를 저장하고 있어, CPU는 빠르게 해당 핸들러로 점프하여 인터럽트를 처리할 수 있습니다.
5.	컨텍스트 스위칭(Context Switching):
•	인터럽트가 발생하면, CPU는 현재 작업 상태를 저장하고 새로운 작업(인터럽트 처리)을 실행합니다. 이 과정은 매우 빠르게 이루어지며, 작업 상태를 안전하게 보존하고 복구할 수 있도록 스택을 사용합니다.
•	이를 통해 프로그램은 인터럽트가 발생해도 원래의 작업을 이어서 처리할 수 있습니다.

인터럽트의 유형

1.	하드웨어 인터럽트 (Hardware Interrupt):
•	외부 장치에서 발생한 이벤트를 처리하기 위해 발생합니다. 예를 들어, 키보드 입력, 마우스 클릭, 하드 디스크의 데이터 읽기 등이 하드웨어 인터럽트를 발생시킬 수 있습니다.
•	예시: 키보드 인터럽트, 타이머 인터럽트 등.
2.	소프트웨어 인터럽트 (Software Interrupt):
•	프로그램 자체에서 발생하는 인터럽트로, 특정 소프트웨어 루틴을 실행하기 위해 명령어에 의해 발생합니다. 주로 시스템 호출을 처리하기 위해 사용됩니다.
•	예시: 시스템 호출 인터럽트, 예외 처리(interrupt exception) 등.
3.	타이머 인터럽트 (Timer Interrupt):
•	시스템의 타이머가 일정 시간이 지나면 발생하는 인터럽트입니다. 운영체제는 타이머 인터럽트를 통해 프로세스 스케줄링을 관리합니다.
•	예시: 일정 주기로 발생하여 프로세스 간 전환을 관리하는 타이머 인터럽트.

요약

인터럽트는 CPU가 중요한 이벤트를 비동기적으로 처리하기 위해 발생하는 신호입니다. 인터럽트가 발생하면 CPU는 현재 작업을 일시 중단하고, 인터럽트 핸들러를 실행하여 이벤트를 처리한 후 원래의 작업으로 복귀합니다. 이 과정은 인터럽트 벡터 테이블을 통해 빠르게 처리되며, CPU는 인터럽트 처리 후 상태를 복구하여 중단된 작업을 이어나갑니다.

0개의 댓글