인터럽트란 프로그램 실행 도중 예기치 않은 상황이 발생했을 때 현재 실행중인 작업을 잠시 중단하고, 발생한 상황을 우선 처리한 후 실행 중인 작업으로 복귀하는 것을 말한다.
인터럽트는 크게 두 가지로 나눌 수 있다.
1) 소프트웨어 인터럽트( = 내부 인터럽트, Trap)
프로세스 내부에서 잘못된 명령이나 데이터를 사용할 때 발생하는 인터럽트를 의미한다.
소프트웨어가 인터럽트 요청 라인에 직접 신호를 보낸다.
즉, 실행 중인 프로그램이 스스로 인터럽트를 발생시킨다고 보면 된다.
2) 하드웨어 인터럽트( = 외부 인터럽트)
입출력 장치, 타이밍 장치, 전원 등의 외부적인 요인에 의해서 발생하는 인터럽트를 의미한다.
하드웨어 장치가 인터럽트 요청 라인에 신호를 보내면서 처리된다.
예를 들어 컴퓨터에 프린터를 연결하여 사용한다 했을 때, 프린터는 출력을 위해 컴퓨터에서 보내는 정보를 받아들일 준비가 필요하다.
프린터가 준비 됐는지 컴퓨터가 어떻게 알 수 있을까?
CPU는 프린터가 준비 될 때까지 무작정 대기할 수도 있고 다른일을 하고 있을 수도 있다.
무작정 대기한다면 대기하는 시간은 그냥 낭비되는 것이 되기 때문에 비효율적이다.
이때, 다른일을 하고 있다가 프린터의 준비가 완료되면 컴퓨터에게 알려주는 것이 인터럽트이다.
결과적으로 인터럽트가 필요한 이유는 불필요한 자원낭비를 막아 CPU 효율을 극대화 하기 위해서이다.
1. 인터럽트 발생
ex) 키보드 키가 눌리거나 타이머가 만료되었을 때
2. 인터럽트 신호 감지
CPU가 실행 중인 명령어를 멈춘다.
3. 현재 작업 중단 및 상태 저장
인터럽트 처리가 끝난 후에 중단된 작업을 다시 이어서 실행할 수 있도록 CPU가 현재 작업의 상태를 PCB(Process Control Block)에 저장한다.
4. 인터럽트 벡터 테이블 참조
각 인터럽트에는 고유한 번호가 할당되어 있는데, CPU는 이 번호를 사용하여 인터럽트 벡터 테이블을 참조한다. 이 테이블은 인터럽트 종류마다 번호를 정해서, 번호에 따라 처리해야 할 코드가 위치한 부분을 가리키고 있는 자료구조 이다.
5. 인터럽트 핸들러 실행
인터럽트 벡터 테이블에서 참조한 주소로 이동하여 해당 인터럽트 핸들러를 실행한다. 인터럽트 핸들러는 인터럽트가 발생한 원인을 처리하고, 필요한 작업을 수행한다. 예를 들어, 키보드 입력 인터럽트의 경우 눌린 키 값을 읽고 이를 처리한다.
인터럽트 핸들러(interrupt handler) = 인터럽트 처리 루틴(ISR : Interrupt service routine)
6. 인터럽트 처리 완료 및 복원
인터럽트 핸들러의 작업이 완료되면, CPU는 이전에 저장한 상태를 복원한다. 이 단계에서 CPU의 현재 상태를 나타내는 정보(프로그램 카운터와 레지스터 값 등)가 복원된다.
7. 중단된 작업 재개
CPU는 원래 중단된 작업으로 돌아가서 계속 실행한다. 인터럽트 처리 과정이 완료되었으므로, 시스템은 중단된 지점부터 정상적으로 작업을 이어나간다.
[네트워크] RESTful API (0) | 2024.07.19 |
---|---|
[네트워크] 로드밸런싱(Load Balancing) (0) | 2024.07.16 |
[네트워크] 대역폭(Bandwidth) (0) | 2024.07.12 |
[운영체제] 멀티 프로세스(Multi process)와 멀티 스레드(Multi Thread) (0) | 2024.07.09 |
[운영체제] Translation Lookaside Buffers (TLB) (1) | 2024.07.05 |