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

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

시스템마다 용어가 다른 경우 x86에서 그 의미는 무엇입니까?



답변

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

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

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


답변

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

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

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

벡터화 이벤트

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

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

인터럽트

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

예외

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

예외 분류

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

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

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

결점

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

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

중단

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

가장자리 케이스

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


답변

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

트랩과 인터럽트의 차이점

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

어디로

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


답변

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


답변

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


답변

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


답변

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