트랩과 인터럽트의 차이점은 무엇입니까?


답변:


203

트랩 사용자 프로세스에서 예외이다. 제로 또는 유효하지 않은 메모리 액세스로 나눈 결과입니다. 커널 루틴 ( 시스템 호출 ) 을 호출하는 일반적인 방법이기도합니다. 왜냐하면 사용자 루틴 보다 우선 순위가 높은 커널 루틴 이기 때문입니다. 처리는 동 기적입니다 (따라서 사용자 코드가 일시 중단 된 후 계속됩니다). 어떤 의미에서 그것들은 "능동적"입니다-대부분의 경우, 코드는 트랩이 발생할 것으로 예상하고이 사실에 의존합니다.

인터럽트는 하드웨어 (하드 디스크와 같은 장치, 그래픽 카드, I / O 포트 등)에 의해 생성 된 무언가이다. 인터럽트 핸들러는 결국 비 동기화 될 때까지 기다려야하므로 비동기식 (예 : 사용자 코드의 예측 가능한 위치에서는 발생하지 않음) 또는 "수동적"입니다.

트랩 처리기의 처리기가 인터럽트 처리기처럼 보이기 때문에 트랩을 일종의 CPU 내부 인터럽트로 볼 수도 있습니다 (레지스터 및 스택 포인터가 저장되고 컨텍스트 스위치가 있으며 중단 된 경우에는 실행이 재개 될 수 있음) .


5
lxr.free-electrons.com/source/arch/x86/kernel/… 0으로 나누는 것이 하드웨어 인터럽트로 초기화 된다는 것이 흥미 롭습니다 . 왜 그렇게됩니까?
Alex Kreimer

8
실제로 ALU가이 문제를 발견하면 CPU가 보내는 인터럽트이기 때문입니다. 세그먼테이션 오류처럼. 그러나 모든 수학 오류로 인해 인터럽트가 발생하는 것은 아닙니다 (오버플로가 발생하지는 않음).
Aaron Digulla

4
말이 되네요 그러나 약간 혼란스러운 점은 이전 Linux 커널에서 왜 소프트웨어 트랩으로 초기화 되었는가입니다. set_trap_gate (0, & divide_error);
Alex Kreimer

11
" 조금 혼란 스럽다" 는 무슨 뜻 입니까? 그것의 매우 혼란 :-) 여기서 문제는 0으로 그 격차 것은 하드웨어 인터럽트 (IRQ / 벡터 0)하지만 커널 개발자들은 어떻게 처리하는 몇 가지 선택이있다. 따라서 사용자 프로세스에서는 트랩이지만 CPU 쪽에서는 인터럽트입니다. 누구가 옳습니까? 없어요? 양자 모두?
Aaron Digulla

3
물론 이것은 x86 CPU에만 해당됩니다. 다른 CPU는 다르게 작동합니다.
Aaron Digulla

110

트랩인터럽트 는 밀접한 관련이 있습니다. 트랩은 예외 유형 이며 예외는 인터럽트와 유사합니다.

Intel x86은 두 가지 겹치는 범주, 벡터 이벤트 ( 인터럽트 vs 예외 ) 및 예외 클래스 ( 오류 vs 트랩 vs 중단 )를 정의합니다.

이 게시물의 모든 인용문은 2016 년 4 월 Intel Software Developer Manual 버전에서 인용 한 것입니다 . (결정적이고 복잡한) x86 관점의 경우 인터럽트 및 예외 처리에 대한 SDM 장을 읽는 것이 좋습니다.

벡터화 이벤트

벡터화 된 이벤트 ( 인터럽트예외 )로 인해 프로세서 상태의 많은 부분을 저장 한 후 프로세서가 인터럽트 핸들러로 점프합니다 (나중에 해당 지점에서 실행을 계속할 수 있음).

예외 및 인터럽트에는 프로세서라고하는 인터럽트 핸들러를 결정하는 벡터라는 ID가 있습니다. 인터럽트 핸들러는 인터럽트 설명자 테이블에 설명되어 있습니다.

인터럽트

하드웨어 신호에 따라 프로그램을 실행하는 동안 임의의 시간에 인터럽트가 발생합니다. 시스템 하드웨어는 인터럽트를 사용하여 주변 장치 서비스 요청과 같은 프로세서 외부의 이벤트를 처리합니다. 소프트웨어는 또한 INT n 명령어를 실행하여 인터럽트를 생성 할 수 있습니다.

예외

프로세서가 0으로 나누기와 같은 명령을 실행하는 동안 오류 조건을 감지하면 예외가 발생합니다. 프로세서는 보호 위반, 페이지 결함 및 내부 시스템 결함을 포함한 다양한 오류 조건을 감지합니다.

예외 분류

예외 는 보고 된 방식과 예외를 유발 한 명령을 프로그램 손실 또는 작업 연속성없이 다시 시작할 수 있는지 여부에 따라 오류 , 트랩 또는 중단 으로 분류됩니다 .

요약 : 트랩 은 명령 포인터를 증가시키고 결함 은 발생하지 않으며 '폭발'을 중단 합니다.

트랩 트래핑 명령의 실행 직후에보고 된 예외이다. 트랩을 사용하면 프로그램 연속성 손실없이 프로그램 또는 작업을 계속 실행할 수 있습니다. 트랩 핸들러의 리턴 주소는 트 랩핑 명령 이후에 실행될 명령을 가리 킵니다.

결점

장애는 일반적으로 보정 할 수있는 예외이며 그 보정되면, 프로그램은 연속성의 손실없이 재시작 할 수있다. 폴트가보고되면 프로세서는 폴트 명령 실행을 시작하기 전의 상태로 머신 상태를 복원합니다. 결함 핸들러에 대한 리턴 주소 (CS 및 EIP 레지스터의 저장된 내용)는 결함 명령 뒤의 명령이 아니라 결함 명령을 가리 킵니다.

예 : 페이지 오류는 종종 복구 할 수 있습니다. 응용 프로그램의 주소 공간이 RAM에서 디스크로 교체되었을 수 있습니다. 스왑 아웃 된 메모리에 액세스하려고하면 응용 프로그램에서 페이지 오류가 발생합니다. 커널은 해당 메모리를 디스크에서 램으로 가져 와서 수동 제어를 응용 프로그램으로 되돌릴 수 있습니다. 응용 프로그램은 스왑 아웃 된 메모리에 액세스하는 오류 명령에서 중단 된 위치에서 계속되지만 이번에는 메모리 액세스가 오류없이 성공해야합니다.

중단

중단은 항상 예외를 발생시킨 명령어의 정확한 위치를보고하지 않고 예외를 발생시킨 프로그램이나 작업의 재시작을 허용하지 않는 예외입니다. 중단은 하드웨어 오류 및 시스템 테이블의 불일치 또는 잘못된 값과 같은 심각한 오류를보고하는 데 사용됩니다.

가장자리 케이스

소프트웨어 호출 인터럽트 (INT 명령에 의해 트리거 됨)는 트랩과 같은 방식으로 동작합니다. 프로세서가 상태를 저장하고 인터럽트 핸들러로 점프하기 전에 명령이 완료됩니다.


6
이것은 "새로운 사용자의 답변이 늦음"검토 대기열에서주의를 기울이고 있는지 확인하기위한 테스트를 제공한다는 긍정적 인 답변이었습니다.
Noumenon

1
감사! 그것은 나에게 많은 것을 의미한다 :)
ruthafjord

이것은 x86에 대한 훌륭한 답변입니다. 이 질문은 원래 매우 일반적이며 x86에 대해서는 언급하지 않았습니다. 균형을 맞추기 위해 편집했습니다. 아마도이 답변의 맨 위에 x86 세계 이외의 용어에 대한 문제를 해결하기 위해 다른 단락을 추가 할 수 있습니까? 그리고 / 또는 내가 더 악화했다고 생각하면 질문에 대한 또 다른 편집을 남겨 두십시오 : PI는 실제로 x86 만 알고 있지만 다른 시스템이 매우 유사한 용어를 사용하고 실제로 다음과 같이 말할 수 있다는 것이 사실입니다 :)
Peter Cordes

1
미끄러 져 PPC의 aarchitecture 책을, 그들의 정의는 대부분 중복되는 것 같습니다. 이들은 엣지 케이스의 새로운 이름을 가지며 예외를 별개의 카테고리의 일부가 아닌 하위 유형의 인터럽트처럼 취급합니다.
ruthafjord

1
이 답변이 가장 잘 설명되어 있다고 생각합니다. 둘 사이에 존재할 수있는 흐릿한 선에 대해 설명합니다. 그리고 페이지 결함으로 인해 CPU가 명령을 다시 시도하여 트랩이 명령을 건너 뛰고 계속 진행한다고 언급합니다.
in70x

9

일반적으로 예외, 결함, 중단, 트랩인터럽트 와 같은 용어는 모두 동일한 것을 의미하며 "인터럽트"라고합니다.

트랩과 인터럽트의 차이점

트랩 : 프로그래머가 시작하여 제어를 특수 처리기 루틴으로 전송합니다. (예 : 80x86 INT 명령이 좋은 예입니다.)

어디로

인터럽트 (하드웨어) : CPU 외부의 외부 하드웨어 이벤트를 기반으로하는 프로그램 제어 중단 (예 : 키보드의 키를 누르거나 타이머 칩의 시간 초과)


좋은 정의. 출처?
alexlomba87

6

트랩 의 특별한 종류의 인터럽트 일반적으로 불린다 소프트웨어 인터럽트 . 인터럽트 모두 커버하는 더 일반적인 용어로 하드웨어 인터럽트 (하드웨어 장치의 인터럽트) 및 소프트웨어 인터럽트 (예를 들면 소프트웨어의 인터럽트, 트랩 ).


4
일부 저자 (Tanenbaum)가 "하드웨어 트랩"을 언급한다는 것은 훨씬 더 혼란을줍니다. 우리가 하드웨어 트랩과 소프트웨어 인터럽트를 가질 수 있다면, 정의는 상당히 어둡고 항상 하드웨어 나 소프트웨어라는 단어가 필요합니다.
The111

3

트랩은 프로그램과 같은 코드에 의해 호출되며 예를 들어 OS 루틴 (일반적으로 동기식)을 호출하는 데 사용됩니다. 인터럽트는 이벤트 (데이터를 수신 한 네트워크 카드 나 CPU 타이머와 같은 여러 번의 하드웨어)에 의해 호출되며, 이름에서 알 수 있듯이 CPU가 처리하기 위해 드라이버 루틴으로 전환해야하기 때문에 정상적인 제어 흐름을 중단합니다. 이벤트.


2

인터럽트는 시스템 내에서 하드웨어 생성 흐름 변경입니다. 인터럽트의 원인을 처리하기 위해 인터럽트 핸들러가 소환됩니다. 그런 다음 제어는 중단 된 컨텍스트 및 명령으로 돌아갑니다. 트랩은 소프트웨어 생성 인터럽트입니다. 인터럽트는 장치 폴링이 필요하지 않도록 I / O 완료를 알리는 데 사용될 수 있습니다. 트랩은 운영 체제 루틴을 호출하거나 산술 오류를 포착하는 데 사용될 수 있습니다.


2

트랩은 현재 명령의 실행으로 인해 발생하므로 동기 이벤트라고합니다. 여기서 인터럽트는 외부 이벤트와 관련되어 비동기식으로 알려진 프로세서에서 실행중인 독립 명령에 의해 발생합니다.


2

인터럽트는 하드웨어 인터럽트이고 트랩은 소프트웨어 호출 인터럽트입니다. 하드웨어 인터럽트가 발생하면 일반적으로 다른 하드웨어 인터럽트가 비활성화되지만 트랩에는 해당되지 않습니다. 트랩이 제공 될 때까지 하드웨어 인터럽트를 허용하지 않으면 인터럽트 플래그를 명시 적으로 지워야합니다. 일반적으로 컴퓨터의 인터럽트 플래그는 트랩과 달리 (하드웨어) 인터럽트에 영향을줍니다. 즉,이 플래그를 지우면 트랩을 막을 수 없습니다. 트랩과 달리 인터럽트는 CPU의 이전 상태를 유지해야합니다.


1

트랩은 소프트웨어 인터럽트입니다 .0 값으로 나누는 변수를 선언하는 프로그램을 작성하면 트랩으로 처리됩니다.이 프로그램을 실행할 때마다 동일한 오류가 동시에 발생합니다. 프로그램이 필요한 서비스를 요청하는 트랩의 특수 버전. i / o 오류와 같은 인터럽트 (하드웨어 인터럽트에 대한 일반적인 단어)의 경우 CPU는 임의의 시간에 중단되며 물론 프로그래머의 결함이 아닙니다.


1
시스템 호출이 어떻게 트랩인지 설명 할 수 있습니까?
Radha Gogia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.