인터럽트 처리
인터럽트는 CPU가 하던 일을 잠깐 멈추고 긴급 사건을 먼저 처리하는 기법이다. 책을 읽다가 전화벨이 울리면 책갈피를 꽂고 전화를 받은 뒤 다시 읽는 것과 같다. 정식으로는 장치나 프로그램 내부 사건이 CPU에 신호를 보내 ISR로 분기하게 하는 제어 전환 기법이다.…
주요 장면
대본
인터럽트의 정의
인터럽트는 CPU가 하던 일을 잠깐 멈추고 긴급 사건을 먼저 처리하는 기법이다.
책을 읽다가 전화벨이 울리면 책갈피를 꽂고 전화를 받은 뒤 다시 읽는 것과 같다.
정식으로는 장치나 프로그램 내부 사건이 CPU에 신호를 보내 ISR로 분기하게 하는 제어 전환 기법이다.
구성 요소와 흐름
인터럽트는 장치가 보낸 요청 신호에서 시작된다.
인터럽트 제어기가 우선순위를 판별하고, CPU가 마스크를 확인하여 분기한다.
분기한 ISR이 요청별 실제 처리를 맡고, 끝나면 원래 프로그램으로 돌아간다.
벡터 방식
장치는 벡터 번호를 CPU에 알리고, CPU는 그 번호로 처리 주소를 찾는다.
인터럽트 벡터 테이블(IVT)은 번호마다 ISR 시작 주소를 가진 표다.
폴링은 CPU가 장치를 계속 확인하지만, 벡터 방식은 분기 대상이 정해져 응답이 빠르다.
인터럽트와 트랩 구분
인터럽트는 외부 장치에서 오는 비동기 사건이다.
트랩은 명령 실행 중 프로그램 내부에서 나는 동기 사건이다.
시스템 호출은 소프트웨어 인터럽트로 커널 모드 진입을 구현한다.
인터럽트와 트랩을 섞어 쓰면 감점이 크므로 발생 시점부터 구분한다.
마스커블과 NMI
마스커블 인터럽트는 마스크 비트로 일시적으로 무시할 수 있는 인터럽트다.
넌마스커블 인터럽트(NMI)는 마스크로 막을 수 없는 최고 우선순위 인터럽트다.
복구 불가능한 하드웨어 오류 보고나 워치독 시간 초과처럼 막으면 안 되는 경우에 쓴다.
ISR 진입 시 마스크가 자동 설정되므로, 중첩을 원하면 마스크를 해제해야 한다.
지연 시간 계산
인터럽트 지연은 발생부터 ISR 첫 명령까지의 시간이다. 세 항을 더하면 된다.
명령 완료 2 마이크로초, 마스크 구간 5 마이크로초, 문맥 저장 3 마이크로초다.
따라서 지연 시간은 2 + 5 + 3 = 10 마이크로초가 된다.
단위가 모두 마이크로초이므로 결과도 마이크로초다. 10 마이크로초는 일반 임베디드 인터럽트 지연과 같은 크기다.
마스크 구간만 7 마이크로초로 바꾸면 2 + 7 + 3 = 12 마이크로초다.