답변:
트랩 사용자 프로세스에서 예외이다. 제로 또는 유효하지 않은 메모리 액세스로 나눈 결과입니다. 커널 루틴 ( 시스템 호출 ) 을 호출하는 일반적인 방법이기도합니다. 왜냐하면 사용자 루틴 보다 우선 순위가 높은 커널 루틴 이기 때문입니다. 처리는 동 기적입니다 (따라서 사용자 코드가 일시 중단 된 후 계속됩니다). 어떤 의미에서 그것들은 "능동적"입니다-대부분의 경우, 코드는 트랩이 발생할 것으로 예상하고이 사실에 의존합니다.
인터럽트는 하드웨어 (하드 디스크와 같은 장치, 그래픽 카드, I / O 포트 등)에 의해 생성 된 무언가이다. 인터럽트 핸들러는 결국 비 동기화 될 때까지 기다려야하므로 비동기식 (예 : 사용자 코드의 예측 가능한 위치에서는 발생하지 않음) 또는 "수동적"입니다.
트랩 처리기의 처리기가 인터럽트 처리기처럼 보이기 때문에 트랩을 일종의 CPU 내부 인터럽트로 볼 수도 있습니다 (레지스터 및 스택 포인터가 저장되고 컨텍스트 스위치가 있으며 중단 된 경우에는 실행이 재개 될 수 있음) .
트랩 과 인터럽트 는 밀접한 관련이 있습니다. 트랩은 예외 유형 이며 예외는 인터럽트와 유사합니다.
Intel x86은 두 가지 겹치는 범주, 벡터 이벤트 ( 인터럽트 vs 예외 ) 및 예외 클래스 ( 오류 vs 트랩 vs 중단 )를 정의합니다.
이 게시물의 모든 인용문은 2016 년 4 월 Intel Software Developer Manual 버전에서 인용 한 것입니다 . (결정적이고 복잡한) x86 관점의 경우 인터럽트 및 예외 처리에 대한 SDM 장을 읽는 것이 좋습니다.
벡터화 된 이벤트 ( 인터럽트 및 예외 )로 인해 프로세서 상태의 많은 부분을 저장 한 후 프로세서가 인터럽트 핸들러로 점프합니다 (나중에 해당 지점에서 실행을 계속할 수 있음).
예외 및 인터럽트에는 프로세서라고하는 인터럽트 핸들러를 결정하는 벡터라는 ID가 있습니다. 인터럽트 핸들러는 인터럽트 설명자 테이블에 설명되어 있습니다.
하드웨어 신호에 따라 프로그램을 실행하는 동안 임의의 시간에 인터럽트가 발생합니다. 시스템 하드웨어는 인터럽트를 사용하여 주변 장치 서비스 요청과 같은 프로세서 외부의 이벤트를 처리합니다. 소프트웨어는 또한 INT n 명령어를 실행하여 인터럽트를 생성 할 수 있습니다.
프로세서가 0으로 나누기와 같은 명령을 실행하는 동안 오류 조건을 감지하면 예외가 발생합니다. 프로세서는 보호 위반, 페이지 결함 및 내부 시스템 결함을 포함한 다양한 오류 조건을 감지합니다.
예외 는 보고 된 방식과 예외를 유발 한 명령을 프로그램 손실 또는 작업 연속성없이 다시 시작할 수 있는지 여부에 따라 오류 , 트랩 또는 중단 으로 분류됩니다 .
요약 : 트랩 은 명령 포인터를 증가시키고 결함 은 발생하지 않으며 '폭발'을 중단 합니다.
트랩 트래핑 명령의 실행 직후에보고 된 예외이다. 트랩을 사용하면 프로그램 연속성 손실없이 프로그램 또는 작업을 계속 실행할 수 있습니다. 트랩 핸들러의 리턴 주소는 트 랩핑 명령 이후에 실행될 명령을 가리 킵니다.
장애는 일반적으로 보정 할 수있는 예외이며 그 보정되면, 프로그램은 연속성의 손실없이 재시작 할 수있다. 폴트가보고되면 프로세서는 폴트 명령 실행을 시작하기 전의 상태로 머신 상태를 복원합니다. 결함 핸들러에 대한 리턴 주소 (CS 및 EIP 레지스터의 저장된 내용)는 결함 명령 뒤의 명령이 아니라 결함 명령을 가리 킵니다.
예 : 페이지 오류는 종종 복구 할 수 있습니다. 응용 프로그램의 주소 공간이 RAM에서 디스크로 교체되었을 수 있습니다. 스왑 아웃 된 메모리에 액세스하려고하면 응용 프로그램에서 페이지 오류가 발생합니다. 커널은 해당 메모리를 디스크에서 램으로 가져 와서 수동 제어를 응용 프로그램으로 되돌릴 수 있습니다. 응용 프로그램은 스왑 아웃 된 메모리에 액세스하는 오류 명령에서 중단 된 위치에서 계속되지만 이번에는 메모리 액세스가 오류없이 성공해야합니다.
중단은 항상 예외를 발생시킨 명령어의 정확한 위치를보고하지 않고 예외를 발생시킨 프로그램이나 작업의 재시작을 허용하지 않는 예외입니다. 중단은 하드웨어 오류 및 시스템 테이블의 불일치 또는 잘못된 값과 같은 심각한 오류를보고하는 데 사용됩니다.
소프트웨어 호출 인터럽트 (INT 명령에 의해 트리거 됨)는 트랩과 같은 방식으로 동작합니다. 프로세서가 상태를 저장하고 인터럽트 핸들러로 점프하기 전에 명령이 완료됩니다.
일반적으로 예외, 결함, 중단, 트랩 및 인터럽트 와 같은 용어는 모두 동일한 것을 의미하며 "인터럽트"라고합니다.
트랩과 인터럽트의 차이점
트랩 : 프로그래머가 시작하여 제어를 특수 처리기 루틴으로 전송합니다. (예 : 80x86 INT 명령이 좋은 예입니다.)
어디로
인터럽트 (하드웨어) : CPU 외부의 외부 하드웨어 이벤트를 기반으로하는 프로그램 제어 중단 (예 : 키보드의 키를 누르거나 타이머 칩의 시간 초과)
인터럽트는 하드웨어 인터럽트이고 트랩은 소프트웨어 호출 인터럽트입니다. 하드웨어 인터럽트가 발생하면 일반적으로 다른 하드웨어 인터럽트가 비활성화되지만 트랩에는 해당되지 않습니다. 트랩이 제공 될 때까지 하드웨어 인터럽트를 허용하지 않으면 인터럽트 플래그를 명시 적으로 지워야합니다. 일반적으로 컴퓨터의 인터럽트 플래그는 트랩과 달리 (하드웨어) 인터럽트에 영향을줍니다. 즉,이 플래그를 지우면 트랩을 막을 수 없습니다. 트랩과 달리 인터럽트는 CPU의 이전 상태를 유지해야합니다.
트랩은 소프트웨어 인터럽트입니다 .0 값으로 나누는 변수를 선언하는 프로그램을 작성하면 트랩으로 처리됩니다.이 프로그램을 실행할 때마다 동일한 오류가 동시에 발생합니다. 프로그램이 필요한 서비스를 요청하는 트랩의 특수 버전. i / o 오류와 같은 인터럽트 (하드웨어 인터럽트에 대한 일반적인 단어)의 경우 CPU는 임의의 시간에 중단되며 물론 프로그래머의 결함이 아닙니다.