인터럽트
Interrupt운영 체제 |
---|
공통 기능 |
디지털 컴퓨터에서 인터럽트(trap이라고도 함)[1]는 프로세서가 현재 실행 중인 코드(허용된 경우)를 인터럽트하여 이벤트를 적시에 처리할 수 있도록 요청하는 것이다.요청이 받아들여지면 프로세서는 현재 활동을 중지하고 상태를 저장하며 인터럽트 처리기(또는 인터럽트 서비스 루틴 ISR)라는 기능을 실행하여 이벤트를 처리한다.이러한 중단은 종종 일시적이어서, 비록 그 중단이 대신 치명적인 오류를 나타낼 수 있지만, 인터럽트 핸들러가 끝난 후에 소프트웨어가 정상적인 활동을 재개할[a] 수 있도록 한다.[2]
인터럽트는 일반적으로 시간에 민감한 주의를 요하는 전자적 또는 물리적 상태 변화를 나타내기 위해 하드웨어 장치에 의해 사용된다.인터럽트는 또한 컴퓨터 멀티태스킹, 특히 실시간 컴퓨팅에서 일반적으로 사용된다.이러한 방식으로 인터럽트를 사용하는 시스템은 인터럽트 구동이라고 한다.[3]
종류들
인터럽트 신호는 하드웨어 또는 소프트웨어 이벤트에 대응하여 발행될 수 있다.이들은 각각 하드웨어 인터럽트 또는 소프트웨어 인터럽트로 분류된다.특정 프로세서의 경우, 인터럽트 유형의 수는 아키텍처에 의해 제한된다.
하드웨어 인터럽트
는 외부 하드웨어 장치, 예에 의해 신호를 보낼 수 있는 하드웨어 인터럽트는 조건은 하드웨어의 상태와 관련된다., 인터럽트 요구가 PC에서(IRQ) 선 또는 장치processor 논리(예를 들어, IBMSystem/370의 CPU타이머)에 포함되 장치가 운영 체제(OS)[4]or,의 관심을 소통하고 있다. 만약CPU에서 실행되는 "bare-metal" 프로그램에서 OS가 없다.그러한 외부 장치는 컴퓨터의 일부일 수도 있고(예: 디스크 제어기) 외부 주변기기일 수도 있다.예를 들어 키보드 키를 누르거나 PS/2 포트에 꽂힌 마우스를 이동하면 프로세서가 키 입력 또는 마우스 위치를 읽도록 하는 하드웨어 인터럽트가 트리거된다.
하드웨어 인터럽트는 프로세서 클럭과 관련하여, 그리고 명령 실행 중에 언제든지 비동기적으로 도착할 수 있다.따라서 들어오는 모든 하드웨어 인터럽트 신호는 프로세서 클럭에 동기화하여 조절되며 명령 실행 경계에서만 작동된다.
많은 시스템에서 각 장치는 특정 IRQ 신호와 연관되어 있다.이를 통해 어떤 하드웨어 장치가 서비스를 요청하고 있는지 신속하게 판단할 수 있으며, 해당 장치의 서비스를 신속하게 수행할 수 있다.
1964년 CDC 3600과 같은 일부 구형 시스템에서는 모든 인터럽트가 동일한 위치로 이동했고 OS는 가장 높은 우선순위의 미사용 인터럽트를 결정하기 위해 전문지시를 사용했다.[5]현대 시스템에서는 일반적으로 하나 이상의 인터럽트 벡터 테이블로 구현되는 인터럽트의 각 유형(또는 각 인터럽트 소스에 대해)에 대해 구별되는 인터럽트 루틴이 있다.
마스킹
인터럽트를 마스킹하는 것은 비활성화하는 것이고 인터럽트를 마스킹 해제하는 것은 인터럽트를 활성화하는 것이다.[6]
프로세서는 일반적으로 내부 인터럽트 마스크 레지스터가 있어 하드웨어 인터럽트를 선택적으로 활성화(및 비활성화)할 수 있다.[b]각 인터럽트 신호는 마스크 레지스터의 비트와 연결된다.일부 시스템에서는 비트가 설정되면 인터럽트가 활성화되고, 비트가 명확하면 비활성화된다.다른 쪽에서는 그 반대가 참이고, 세트 비트가 인터럽트를 무력화시킨다.인터럽트가 비활성화된 경우 프로세서가 관련 인터럽트 신호를 무시하거나 보류 상태로 남아 있을 수 있다.마스크의 영향을 받는 신호를 마스크 가능한 인터럽트라고 한다.
일부 인터럽트 신호는 인터럽트 마스크의 영향을 받지 않으므로 비활성화할 수 없으며, 이를 NMI(Non-maskable Interrupt)라고 한다.이는 감시 타이머의 시간 초과 신호와 같이 어떤 상황에서도 무시할 수 없는 우선순위가 높은 이벤트를 나타낸다.
가짜 방해물
가짜 인터럽트는 소스를 찾을 수 없는 하드웨어 인터럽트다."팬텀 인터럽트" 또는 "유령 인터럽트"라는 용어도 이 현상을 설명하는데 사용할 수 있다.가짜 인터럽트는 레벨에 민감한 프로세서 입력에 연결된 유선-OR 인터럽트 회로에 문제가 있는 경향이 있다.그러한 방해는 시스템이 잘못된 경우 식별하기 어려울 수 있다.
유선-OR 회로에서는 인터럽트 라인의 바이어스 저항을 통한 기생 캐패시턴스 충전/배출은 프로세서가 인터럽트 소스가 제거되었음을 인식하기 전에 약간의 지연을 야기할 것이다.인터럽트 서비스 루틴(ISR)에서 인터럽트 장치가 너무 늦게 삭제된 경우, ISR의 현재 인스턴스가 종료되기 전에 인터럽트 회로가 대기 전류 상태로 돌아갈 충분한 시간이 없을 것이다.그 결과 프로세서는 인터럽트 요청 입력 시 전압이 모호하지 않은 내부 로직 1 또는 로직 0을 설정하기에 충분히 높거나 낮지 않기 때문에 또 다른 인터럽트가 보류 중이라고 생각할 것이다.명백한 방해물은 식별할 수 있는 출처가 없으므로 "가짜" 모니커는 다음과 같다.
오작동 중단은 회로 설계 결함, 높은 소음 수준, 크로스스토크, 타이밍 문제 또는 더 드물게 장치 에라타로 인한 전기적 이상 현상의 결과일 수도 있다.[7]
모의 인터럽트는 ISR이 그러한 인터럽트 발생 가능성을 설명하지 않는 경우 시스템 교착 상태 또는 기타 정의되지 않은 작동을 초래할 수 있다.모의 인터럽트는 대부분 유선-OR 인터럽트 회로의 문제인 만큼, 그러한 시스템에서 좋은 프로그래밍 관행은 ISR이 모든 인터럽트 소스의 활동을 점검하고 어느 소스가 인터럽트되지 않는 경우(아마도 이벤트 기록 이외의) 조치를 취하지 않는 것이다.
소프트웨어 인터럽트
소프트웨어 인터럽트는 특정 지침을 실행하거나 특정 조건이 충족될 때 프로세서가 직접 요청한다.모든 소프트웨어 인터럽트 신호는 특정 인터럽트 핸들러와 연관되어 있다.
소프트웨어 인터럽트는 의도적으로 실행될 때 인터럽트를 발생시키는 특수 지침을 실행함으로써 발생할 수 있다.이러한 지침은 서브루틴 호출과 유사하게 기능하며, 운영 체제 서비스를 요청하고 장치 드라이버와 상호 작용(예: 저장 매체를 읽거나 쓰는 것)하는 등 다양한 용도로 사용된다.소프트웨어 인터럽트는 또한 프로그램 실행 오류나 가상 메모리 시스템에 의해 트리거될 수 있다.
일반적으로 운영 체제 커널은 이러한 인터럽트를 포착하여 처리한다.일부 인터럽트는 프로그램에 투명하게 처리된다. 예를 들어, 페이지 장애의 일반적인 해결은 물리적 메모리에서 필요한 페이지에 접근할 수 있게 하는 것이다.그러나 분할 결함과 같은 다른 경우 운영 체제는 프로세스 콜백을 실행한다.Unix와 유사한 운영 체제에서는 신호 처리기를 호출하거나 기본 작업을 실행할 수 있는 SIGSEGV, SIGBUS, SIGIL 또는 SIGFPE와 같은 신호를 보내는 것이 포함된다(프로그램 종료).Windows에서 콜백은 STATUS_Access_VISION 또는 STATUS_INTEGER_DIVIDE_BY_ZERO와 같은 예외 코드가 있는 Structured Exception Handling을 사용하여 이루어진다.[8]
커널 프로세스에서 일부 유형의 소프트웨어 인터럽트가 발생하지 않도록 되어 있는 경우가 많다.그럼에도 불구하고 이러한 문제가 발생할 경우 운영 체제가 붕괴될 수 있다.
용어.
인터럽트, 트랩, 예외, 결함 및 중단이라는 용어는 "이 용어의 정확한 의미로서 명확한 합의는 없다"지만 인터럽트의 유형을 구별하기 위해 사용된다.[9]트랩이라는 용어는 어떤 인터럽트, 어떤 소프트웨어 인터럽트, 어떤 동기식 소프트웨어 인터럽트, 또는 이름에 트랩이 있는 지시로 인한 인터럽트만을 가리킬 수 있다.일부 사용법에서 트랩이라는 용어는 모니터 프로그램이나 디버거로 컨텍스트 전환을 시작하기 위한 중단점을 구체적으로 가리킨다.[1]예외라는 용어가 더 일반적이긴 하지만 예외 조건(예: 0으로 나누기, 잘못된 메모리 액세스, 불법 opcode)에 의해 야기되는 동기적 인터럽트를 언급할 수도 있다.[9]
x86은 인터럽트를 (하드웨어) 인터럽트와 소프트웨어 예외로 나누고 결함, 트랩, 중단의 세 가지 유형의 예외를 식별한다.[10][11] (하드웨어) 인터럽트는 I/O 장치에 의해 비동기적으로 트리거된 인터럽트로, 연속성 손실 없이 프로그램을 재시작할 수 있도록 한다.[10]고장은 다시 시작할 수도 있지만 명령의 동기식 실행과 관련된다. 반환 주소는 결함 지시사항을 가리킨다.트랩은 리턴 어드레스가 트랩 명령 후에 실행해야 할 명령을 가리킨다는 점을 제외하고 고장과 유사하며,[12] 한 가지 중요한 용도는 시스템 호출을 구현하는 것이다.[11]중단은 하드웨어 오류나 시스템 테이블의 잘못된 값과 같은 심각한 오류에 사용되며, 종종[c] 프로그램의 재시작을 허용하지 않는다.[12]
ARM은 모든 유형의 인터럽트를 참조하기 위해 예외라는 용어를 사용하며,[13] 예외를 (하드웨어) 인터럽트, 중단, 재설정 및 예외 생성 지침으로 나눈다.중단은 x86 예외에 해당하며 사전 추출 중단(명령 가져오기 실패) 또는 데이터 중단(데이터 액세스 실패)일 수 있으며 동기식 또는 비동기식일 수 있다.비동기적 중단은 정확하거나 부정확할 수 있다.MMU 중단(페이지 결함)은 동기식이다.[14]
트리거링 방법
각 인터럽트 신호 입력은 로직 신호 레벨 또는 특정 신호 에지(레벨 전환)에 의해 트리거되도록 설계된다.레벨에 민감한 입력은 특정(높거나 낮은) 로직 레벨이 입력에 적용되는 한 프로세서 서비스를 지속적으로 요청한다.신호 에지에 반응하는 에지 민감 입력: 특정(상승 또는 하강) 에지는 서비스 요청을 래치하게 하고, 프로세서는 인터럽트 핸들러가 실행될 때 래치를 재설정한다.
레벨 트리거됨
레벨 트리거된 인터럽트는 인터럽트 신호를 특정(하이 또는 로우) 활성 로직 레벨로 유지하여 요청한다.장치는 신호를 활성 수준으로 운전하고 유지함으로써 레벨 트리거 인터럽트를 호출한다.일반적으로 장치를 서비스한 후 프로세서가 명령할 때 신호를 무시한다.
프로세서는 각 명령 주기 동안 인터럽트 입력 신호를 샘플링한다.시료채취 시 신호가 어설션되면 프로세서가 인터럽트 요청을 인식한다.
레벨 트리거 입력을 통해 여러 장치가 유선-OR 연결을 통해 공통 인터럽트 신호를 공유할 수 있다.어떤 장치가 서비스를 요청하는지 결정하기 위해 프로세서가 폴링하는 경우.장치를 서비스한 후 프로세서는 ISR을 종료하기 전에 다시 폴링하고 필요한 경우 다른 장치를 서비스할 수 있다.
에지 트리거
에지 트리거 인터럽트는 인터럽트 라인의 레벨 전환에 의해 신호되는 인터럽트로서, 하강 에지(높음에서 낮음에서 높음까지) 또는 상승 에지(낮음에서 높음까지) 중 하나이다.인터럽트 신호를 원하는 장치는 펄스를 라인으로 구동시킨 다음 라인을 비활성화 상태로 해제한다.Pulse가 너무 짧아서 I/O를 폴링하여 감지할 수 없는 경우, 이를 감지하기 위해 특수 하드웨어가 필요할 수 있다.에지 트리거링의 중요한 부분은 인터럽트가 하이 에지 전환에 의해 트리거된 경우(예:) 레벨이 로우 에지로 유지되면 추가 인터럽트가 트리거되지 않는다는 것이다.더 이상의 인터럽트를 유발하기 위해서는 다시 떨어지기 전에 높은 레벨로 돌아가야 한다.이는 신호가 하이 레벨로 돌아올 때까지 로우 레벨이 인터럽트를 계속 생성하는 레벨 트리거와 대비된다.
에지 트리거 인터럽트가 있는 컴퓨터에는 보류 중인 인터럽트의 상태를 유지하는 인터럽트 레지스터가 포함될 수 있다.인터럽트 레지스터가 있는 시스템에는 일반적으로 인터럽트 마스크 레지스터도 있다.
프로세서 응답
프로세서는 각 명령 주기 동안 인터럽트 트리거 신호 또는 인터럽트 레지스터를 샘플링하며, 발견된 가장 높은 우선 순위 활성화 인터럽트를 처리한다.트리거링 방법과 관계없이 프로세서는 검출된 트리거에 이어 다음 명령 경계에서 인터럽트 처리를 시작하여 다음을 보장한다.
- 프로세서 상태는[d] 알려진 방식으로 저장된다.일반적으로 상태는 알려진 위치에 저장되지만 일부 시스템에서는 스택에 저장된다.
- PC가 가리키는 명령 이전의 모든 명령이 완전히 실행되었다.
- PC가 가리키는 것 이상의 지시사항은 실행되지 않았거나, 인터럽트를 취급하기 전에 어떤 지시사항도 실행 취소된다.
- PC가 가리키는 명령의 실행 상태를 알 수 있다.
시스템 구현
인터럽트는 제어 라인이 있는 구별되는 구성요소로서 하드웨어에서 구현되거나 메모리 서브시스템에[citation needed] 통합될 수 있다.
하드웨어에서 별개의 구성요소로 구현되는 경우, IBM PC의 PIC(Programmable Interrupt Controller)와 같은 인터럽트 컨트롤러 회로를 인터럽트 장치와 프로세서의 인터럽트 핀 사이에 연결하여 일반적으로 사용할 수 있는 하나 또는 두 개의 CPU 라인에 여러 개의 인터럽트 소스를 멀티플렉싱할 수 있다.메모리 컨트롤러의 일부로 구현되는 경우 인터럽트는 시스템의 메모리 주소 공간에 매핑된다.
여러 장치가 에지 트리거 인터럽트 라인을 공유하도록 설계되었다.인터럽트 라인은 풀다운 또는 풀업 저항이 있어야 능동적으로 구동되지 않을 때 그것의 기본 상태인 비활성 상태로 안착된다.장치는 라인을 기본 상태가 아닌 상태로 잠깐 주행하여 인터럽트를 신호하고 인터럽트를 신호하지 않을 때는 라인을 플로팅(활성적으로 주행하지 않음)하도록 한다.이러한 연결 유형을 오픈 컬렉터라고도 한다.그런 다음 이 라인은 모든 장치에서 발생하는 모든 펄스를 전달한다.(이것은 승객 누구나 운전자에게 정지 요청을 하기 위해 당길 수 있는 일부 버스와 트롤리의 당김줄과 유사하다.)그러나 서로 다른 장치에서 발생하는 인터럽트 펄스는 시간적으로 가까운 시간에 발생할 경우 병합될 수 있다.인터럽트가 손실되지 않도록 하려면 CPU가 펄스의 후행 에지(예: 라인을 위로 당기고 낮게 구동하는 경우 상승 에지)에 트리거해야 한다.인터럽트를 감지한 후 CPU는 모든 장치에서 서비스 요구 사항을 확인해야 한다.
에지 트리거 인터럽트는 레벨 트리거 인터럽트가 공유와 관련하여 갖는 문제를 겪지 않는다.우선순위가 낮은 기기의 서비스는 임의로 연기할 수 있으며, 우선순위가 높은 기기의 인터럽트는 계속 수신되어 서비스를 받고 있다.CPU가 서비스 방법을 모르는 장치가 있어 가상의 인터럽트가 발생할 수 있는 경우 다른 장치의 인터럽트 신호에 지장을 주지 않는다.그러나, 예를 들어, 일정 기간 동안 인터럽트를 마스킹할 때 에지 트리거된 인터럽트를 놓치기 쉽고 이벤트를 기록하는 하드웨어 래치가 없는 한 복구할 수 없다.이 문제는 프로세서가 무언가를 할 것으로 기대되는 것을 몰랐기 때문에 초기 컴퓨터 하드웨어에 많은 "잠금"을 야기했다.보다 최신 하드웨어에는 인터럽트 요청을 래치하는 하나 이상의 인터럽트 상태 레지스터가 있는 경우가 많다. 잘 작성된 에지 기반 인터럽트 처리 코드는 이들 레지스터를 점검하여 이벤트가 누락되지 않도록 할 수 있다.
고령의 산업 표준 아키텍처(ISA)버스는 기기가 IRQ라인을 공유할 수 있도록 의무화하지 않고 에지 트리거 인터럽트를 사용하지만,모든메인스트림 ISA마더보드에는 IRQ풀업 저항기가 라인에 포함되므로 IRQ라인을공유하는 ISA장치는 잘작동해야 한다.병렬 포트는 에지 트리거 인터럽트도 사용한다.많은 구형 기기는 IRQ 라인을 독점적으로 사용하고 있어 이를 공유하는 것이 전기적으로 안전하지 않다고 가정한다.
복수의 기기 「동일한 회선 공유」를 올릴 수 있는 3가지 방법이 있다.첫째는 배타적 전도(스위치) 또는 배타적 연결(핀에 연결)이다.다음은 버스로(모두 같은 회선 청취에 연결됨): 버스의 카드는 말을 해야 할 때를 알아야 하고, 말을 해서는 안 된다(즉, ISA 버스).대화는 두 가지 방법으로 유발될 수 있다: 축적 래치 또는 논리 게이트.논리 게이트는 주요 신호에 대해 모니터링되는 지속적인 데이터 흐름을 기대한다.축전기는 원격 측에서 임계값을 초과하여 게이트를 흥분시킬 때만 트리거하므로 협상 속도는 필요하지 않다.각각 속도 대 거리 이점이 있다.일반적으로 트리거는 상승 에지, 하강 에지, 임계값(오실로스코프는 다양한 모양과 조건을 트리거할 수 있음) 등 흥분성이 감지되는 방법이다.
소프트웨어 인터럽트에 대한 트리거링은 소프트웨어에 내장되어야 한다(OS와 앱 둘 다).'C' 앱에는 헤더에 트리거 테이블(기능 테이블)이 있는데, 이 테이블은 앱과 OS 모두 하드웨어와 관련이 없는 것을 알고 적절히 사용한다.그러나 이를 CPU를 신호하는 하드웨어 인터럽트와 혼동하지 마십시오(CPU는 소프트웨어 인터럽트와 유사하게 기능 테이블에서 소프트웨어를 규정한다).
인터럽트 라인 공유의 어려움
(모든 트리거링 스타일의) 인터럽트 라인을 공유하는 여러 장치는 모두 서로에 관한 가상 인터럽트 소스로 작용한다.많은 장치가 한 줄에 있으면 장치 수의 제곱에 비례하여 인터럽트를 서비스하는 작업 부하가 증가한다.따라서 사용 가능한 인터럽트 라인에 기기를 고르게 분산시키는 것이 바람직하다.인터럽트 라인의 부족은 인터럽트 라인이 구별되는 물리적 도체인 구형 시스템 설계에서 문제가 된다.인터럽트 라인이 가상인 메시지 서명 인터럽트는 새로운 시스템 아키텍처(PCI Express 등)에서 선호되며 이 문제를 상당 부분 해소한다.
프로그래밍 인터페이스가 잘못 설계된 일부 기기는 서비스를 요청했는지 여부를 판단할 수 있는 방법을 제공하지 않는다.그들은 그들이 원하지 않을 때 서비스를 받으면 문을 잠그거나 다른 방법으로 잘못 행동할 수 있다.그러한 장치는 거짓 인터럽트를 허용할 수 없으며, 따라서 인터럽트 라인을 공유하는 것도 허용할 수 없다.ISA 카드는 종종 값싼 디자인과 건설로 인해 이 문제로 악명이 높다.하드웨어 논리가 저렴해지고 새로운 시스템 아키텍처가 공유 가능한 인터럽트를 요구함에 따라 그러한 장치는 훨씬 더 희귀해지고 있다.
잡종
일부 시스템에서는 레벨 트리거 신호와 에지 트리거 신호를 혼합하여 사용한다.하드웨어는 에지를 찾을 뿐만 아니라, 인터럽트 신호가 일정 시간 동안 활성 상태를 유지하는지 검증한다.
하이브리드 인터럽트의 일반적인 용도는 NMI(마스크 불가능한 인터럽트) 입력용이다.NMI는 일반적으로 주요 또는 심지어 치명적인 시스템 이벤트를 신호하기 때문에, 이 신호의 좋은 구현은 일정 기간 동안 활성 상태를 유지하는지 확인함으로써 인터럽트가 유효한지 확인하려고 한다.이 2단계 접근방식은 시스템에 영향을 미치는 잘못된 인터럽트를 제거하는 데 도움이 된다.
메시지 서명됨
메시지 서명 인터럽트는 물리적 인터럽트 라인을 사용하지 않는다.대신 장치는 일반적으로 컴퓨터 버스인 일부 통신 매체를 통해 짧은 메시지를 보내 서비스 요청을 신호한다.메시지는 인터럽트용으로 예약된 유형이거나 메모리 쓰기 같은 기존 유형일 수 있다.
메시지 신호 인터럽트는 에지 트리거 인터럽트와 매우 유사하게 동작하는데, 인터럽트는 연속적인 조건이 아니라 순간적인 신호라는 것이다.인터럽트 핸들링 소프트웨어는 두 가지를 거의 같은 방식으로 취급한다.일반적으로 가장자리 트리거 인터럽트가 가깝게 간격을 두고 병합할 수 있는 것처럼 동일한 메시지(동일한 가상 인터럽트 라인)를 가진 보류 중인 여러 메시지 서명 인터럽트가 병합될 수 있다.
메시지 신호 인터럽트 벡터는 기본 통신 매체를 공유할 수 있는 범위까지 공유할 수 있다.추가적인 노력이 필요하지 않다.
인터럽트의 정체성은 별도의 물리적 컨덕터가 필요하지 않은 데이터 비트 패턴으로 표시되기 때문에 보다 뚜렷한 인터럽트를 효율적으로 처리할 수 있다.이것은 공유의 필요성을 줄여준다.인터럽트 메시지도 추가 회선이 필요 없이 직렬 버스를 통해 전달될 수 있다.
직렬 컴퓨터 버스인 PCI Express는 메시지 서명 인터럽트를 독점적으로 사용한다.
초인종
컴퓨터 시스템에 적용되는 푸시버튼 비유에서 초인종이나 초인종 인터럽트라는 용어는 소프트웨어 시스템이 컴퓨터 하드웨어 장치에 해야 할 일이 있다는 신호를 보내거나 통지할 수 있는 메커니즘을 설명하기 위해 종종 사용된다.일반적으로 소프트웨어 시스템은 기억장소에 대해 잘 알려져 있고 상호 합의된 어떤 장소에 데이터를 배치하고, 다른 기억장소에 글을 써서 "초인종을 누른다"는 것이다.이 서로 다른 기억 위치는 종종 초인종 영역이라고 불리며, 심지어 이 지역에는 다른 용도로 사용되는 여러 개의 초인종이 있을 수도 있다.기억의 초인종 영역에 "종을 울린다"고 쓰고 하드웨어 장치에 데이터가 준비되고 대기하고 있음을 알리는 것이 이 행위다.하드웨어 장치는 이제 데이터가 유효하고 실행될 수 있다는 것을 알게 될 것이다.일반적으로 데이터를 하드 디스크 드라이브에 쓰거나 네트워크를 통해 전송하거나 암호화 등을 할 수 있다.
초인종 인터럽트라는 용어는 대개 잘못된 말이다.그것은 장치에 의해 어떤 작업을 하게 하기 때문에 인터럽트와 유사하지만, 초인종 영역은 폴링된 영역으로 구현되기도 하고, 초인종 영역은 물리적 장치 레지스터에 기록되기도 하며, 초인종 영역은 물리적 장치 레지스터에 직접 유선 연결되기도 한다.물리적 장치 레지스터를 통해 쓰거나 직접 물리적 장치 레지스터에 쓸 때, 장치 중앙 프로세서 장치(CPU)가 있는 경우, 실제 인터럽트가 발생할 수 있다.
초인종 인터럽트는 메시지 시그널 인터럽트와 유사하기 때문에 비교될 수 있다.
멀티프로세서 IPI
멀티프로세서 시스템에서 프로세서는 IPI(프로세서 간 인터럽트[e])를 통해 다른 프로세서에 인터럽트 요청을 보낼 수 있다.
퍼포먼스
인터럽트는 낮은 부하에서 낮은 오버헤드와 양호한 대기 시간을 제공하지만, 여러 병리학을 방지하기 위해 주의를 기울이지 않는 한 높은 인터럽트 속도에서 현저하게 저하된다.인터럽트를 처리하는 데 소요되는 과도한 처리 시간으로 인해 전체 시스템 성능이 심각하게 저해되는 현상을 인터럽트 스톰이라고 한다.
시스템이 다른 필수 작업을 배제하기 위해 인터럽트를 처리하는 데 모든 시간을 할애하는 라이브록의 형태는 다양하다.극한 조건 하에서 많은 인터럽트(예: 매우 높은 네트워크 트래픽)가 시스템을 완전히 정지시킬 수 있다.이러한 문제를 방지하기 위해 운영 체제는 프로세스 실행을 예약할 때 신중하게 네트워크 인터럽트 처리를 예약해야 한다.[15]
멀티코어 프로세서를 사용하면 멀티큐어 NIC를 사용할 때 수신측 스케일링(RSS)을 통해 인터럽트 처리의 추가적인 성능 향상을 달성할 수 있다.이러한 NIC는 개별 인터럽트와 관련된 여러 수신 대기열을 제공한다. 이러한 각 인터럽트를 서로 다른 코어로 라우팅함으로써 단일 NIC가 수신한 네트워크 트래픽에 의해 트리거된 인터럽트 요청의 처리가 여러 코어 간에 분산될 수 있다.코어 간 인터럽트 분포는 운영 체제에서 자동으로 수행하거나, 인터럽트의 라우팅(일반적으로 IRQ 선호도라고 함)을 수동으로 구성할 수 있다.[16][17]
수신 패킷 조향(RPS)이라고 알려진 수신 트래픽 배포의 순전히 소프트웨어 기반 구현은 인터럽트 핸들러 기능의 일부로 데이터 경로의 후반부에 있는 코어 간에 수신 트래픽을 분배한다.RSS에 비해 RPS의 장점은 특정 하드웨어에 대한 요구사항이 없고, 보다 고급화된 트래픽 배포 필터 및 NIC에서 생성되는 인터럽트 비율 감소 등이다.단점으로서, RPS는 프로세서간 인터럽트(IPI)의 비율을 증가시킨다.수신 플로우 스티어링(RFS)은 소프트웨어 기반 접근방식을 애플리케이션 인접성을 고려하여 더욱 발전시키고, 특정 네트워크 패킷이 대상 애플리케이션에 의해 소비되는 동일한 코어에 의한 인터럽트 요청을 처리함으로써 추가적인 성능 향상이 달성된다.[16][18][19]
일반적인 용도
인터럽트는 일반적으로 하드웨어 타이머 서비스, 스토리지(예: 디스크 I/O) 및 통신 인터페이스(예: UART, 이더넷)로 데이터 전송, 키보드 및 마우스 이벤트 처리, 애플리케이션 시스템에서 요구하는 기타 시간에 민감한 이벤트에 대응하기 위해 사용된다.마스크가 불가능한 인터럽트는 일반적으로 감시 타이머 시간 초과, 전원 차단 신호 및 트랩과 같은 높은 우선순위 요청에 응답하는 데 사용된다.
하드웨어 타이머는 종종 주기적인 인터럽트를 발생시키기 위해 사용된다.일부 애플리케이션에서, 그러한 인터럽트는 절대 또는 경과 시간을 추적하기 위해 인터럽트 핸들러에 의해 계수되거나, OS 작업 스케줄러가 실행 중인 프로세스의 실행을 관리하는 데 사용하거나, 또는 둘 다에 사용된다.주기적인 인터럽트는 아날로그-디지털 변환기, 증분 인코더 인터페이스, GPIO 입력과 같은 입력 장치로부터 샘플링을 호출하고 디지털-아날로그 컨버터, 모터 제어기, GPIO 출력 등의 출력 장치를 프로그래밍하는 데도 일반적으로 사용된다.
디스크 인터럽트는 디스크 주변장치로부터 또는 디스크 주변장치로의 데이터 전송의 완료를 신호한다. 이것은 읽거나 쓰기를 기다리는 프로세스를 실행하게 할 수 있다.전원 차단 인터럽트는 전원 공급이 곧 끊길 것으로 예측하여, 컴퓨터가 전원 공급이 아직 충분히 남아 있는 동안 질서 있게 종료할 수 있도록 한다.키보드 인터럽트는 일반적으로 자동 검색을 구현하기 위해 키 입력을 버퍼링하게 한다.
인터럽트는 제품군의 일부 컴퓨터에 구현되지 않은 지시사항을 모방하는 데 가끔 사용된다.[20]예를 들어 부동소수 지점은 일부 시스템의 하드웨어에서 구현되고 저비용 시스템의 경우 에뮬레이션될 수 있다.후자의 경우, 구현되지 않은 부동소수 지시의 실행은 "불법 지시" 예외적인 중단을 야기할 것이다.인터럽트 핸들러는 소프트웨어에서 부동소수점 기능을 구현한 다음 하드웨어가 구현한 명령이 실행된 것처럼 인터럽트 프로그램으로 복귀한다.[21]이것은 전체 라인에서 애플리케이션 소프트웨어 이동성을 제공한다.
인터럽트는 신호와 유사하며, 신호는 프로세스 간 통신(IPC)에 사용되며, 커널에 의해 매개되고(아마 시스템 호출을 통해) 프로세스에 의해 처리되며, 인터럽트는 프로세서에 의해 매개되고 커널에 의해 처리된다는 차이점이 있다.커널은 인터럽트를 발생시킨 프로세스에 신호로 전달할 수 있다(일반적인 예로는 SIGSEGV, SIGBUS, SIGIL, SIGFPE 등이 있다).
역사
하드웨어 인터럽트는 최적화로 도입되어 투표 루프의 비생산적인 대기 시간을 없애고 외부 이벤트를 기다렸다.비록 초기 시스템이 오류 트랩 기능을 제공하였지만, 이 접근방식을 사용한 첫 번째 시스템은 1954년에 완료된 DYSEAC이다.[22]
UNIVAC 1103A 컴퓨터는 일반적으로 1953년에 가장 일찍 인터럽트를 사용한 것으로 인정된다.[23][24]앞서 UNIVAC I(1951)에서는 "산술적 오버플로로 주소 0에서 두 번의 장치 수정 루틴의 실행을 촉발했거나, 프로그래머의 옵션에서 컴퓨터를 중지시켰다"고 밝혔다.IBM 650(1954)은 인터럽트 마스킹의 최초 발생을 통합하였다.국립표준국 DYSEAC(1954)는 I/O에 인터럽트를 처음으로 사용했다.IBM 704는 디버깅을 위해 인터럽트를 가장 먼저 사용한 것으로, 분기 명령이 있을 때 특별한 루틴을 호출할 수 있는 "트랜스퍼 트랩"이 있었다.MIT 링컨 연구소 TX-2 시스템(1957)은 우선적 인터럽트의 여러 수준을 제공하는 최초의 시스템이었다.[24]
참고 항목
메모들
참조
- ^ a b "The Jargon File, version 4.4.7". 2003-10-27. Retrieved 20 January 2022.
- ^ Jonathan Corbet; Alessandro Rubini; Greg Kroah-Hartman (2005). "Linux Device Drivers, Third Edition, Chapter 10. Interrupt Handling" (PDF). O'Reilly Media. p. 269. Retrieved December 25, 2014.
Then it's just a matter of cleaning up, running software interrupts, and getting back to regular work. The "regular work" may well have changed as a result of an interrupt (the handler could
wake_up
a process, for example), so the last thing that happens on return from an interrupt is a possible rescheduling of the processor. - ^ Rosenthal, Scott (May 1995). "Basics of Interrupts". Archived from the original on 2016-04-26. Retrieved 2010-11-11.
- ^ "Hardware interrupts". Retrieved 2014-02-09.
- ^ "Interrupt Instructions". Control Data 3600 Computer System Reference Manual (PDF). Control Data Corporation. July 1964. pp. 4–6. 60021300.
- ^ Bai, Ying (2017). Microcontroller Engineering with MSP432: Fundamentals and Applications. CRC Press. p. 21. ISBN 978-1-4987-7298-3. LCCN 2016020120.
In Cortex-M4 system, the interrupts and exceptions have the following properties: ... Generally, a single bit in a mask register is used to mask (disable) or unmask (enable) certain interrupt/exceptions to occur
- ^ Li, Qing; Yao, Caroline (2003). Real-Time Concepts for Embedded Systems. CRC Press. p. 163. ISBN 1482280825.
- ^ "Hardware exceptions". docs.microsoft.com. 3 August 2021.
- ^ a b Hyde, Randall (1996). "Chapter Seventeen: Interrupts, Traps and Exceptions (Part 1)". The Art Of Assembly Language Programming. Retrieved 22 December 2021.
The concept of an interrupt is something that has expanded in scope over the years. The 80x86 family has only added to the confusion surrounding interrupts by introducing the int (software interrupt) instruction. Indeed different manufacturers have used terms like exceptions faults aborts traps and interrupts to describe the phenomena this chapter discusses. Unfortunately there is no clear consensus as to the exact meaning of these terms. Different authors adopt different terms to their own use.
- ^ a b "Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture". p. 6-12 Vol. 1. Retrieved 22 December 2021.
- ^ a b Bryant, Randal E.; O’Hallaron, David R. (2016). "8.1.2 Classes of exceptions". Computer systems: a programmer's perspective (Third, Global ed.). Harlow. ISBN 1-292-10176-8.
- ^ a b "Intel® 64 and IA-32 architectures software developer's manual volume 3A: System programming guide, part 1". p. 6-5 Vol. 3A. Retrieved 22 December 2021.
- ^ "Exception Handling". developer.arm.com. ARM Cortex-A Series Programmer's Guide for ARMv7-A. Retrieved 21 January 2022.
- ^ "Types of exception". developer.arm.com. ARM Cortex-A Series Programmer's Guide for ARMv7-A. Retrieved 22 December 2021.
- ^ Mogul, Jeffrey C.; Ramakrishnan, K. K. (1997). "Eliminating receive livelock in an interrupt-driven kernel". ACM Transactions on Computer Systems. 15 (3): 217–252. doi:10.1145/263326.263335. S2CID 215749380. Retrieved 2010-11-11.
- ^ a b Tom Herbert; Willem de Bruijn (May 9, 2014). "Documentation/networking/scaling.txt". Linux kernel documentation. kernel.org. Retrieved November 16, 2014.
- ^ "Intel 82574 Gigabit Ethernet Controller Family Datasheet" (PDF). Intel. June 2014. p. 1. Retrieved November 16, 2014.
- ^ Jonathan Corbet (November 17, 2009). "Receive packet steering". LWN.net. Retrieved November 16, 2014.
- ^ Jake Edge (April 7, 2010). "Receive flow steering". LWN.net. Retrieved November 16, 2014.
- ^ Thusoo, Shalesh; et al. "Patent US 5632028 A". Google Patents. Retrieved Aug 13, 2017.
- ^ Altera Corporation (2009). Nios II Processor Reference (PDF). p. 4. Retrieved Aug 13, 2017.
- ^ Codd, Edgar F. "Multiprogramming". Advances in Computers. 3: 82.
- ^ Bell, C. Gordon; Newell, Allen (1971). Computer structures: readings and examples. McGraw-Hill. p. 46. ISBN 9780070043572. Retrieved Feb 18, 2019.
- ^ a b Smotherman, Mark. "Interrupts". Retrieved 22 December 2021.
외부 링크
무료 사전인 Wiktionary에서 인터럽트 또는 인터럽트를 찾아 보십시오. |
- 인터럽트가 쉬워짐
- 마이크로칩 PIC 마이크로컨트롤러의 인터럽트
- IBM PC 인터럽트 테이블
- Alberta 대학교 CMPUT 296 인터럽트에 대한 콘크리트 컴퓨팅 노트, 2012년 3월 13일 원본에서 보관함