문제

나는 본 적이 몇 가지 질문에 여기에 대한 예외, 며,그들 중 일부에서 힌트 인터럽트를 예외로, 하지만 아무도 연결이 분명하다.

  • 무엇이 인터럽트?

  • 예외가 무엇입니까?(주시기 바랍 것을 설명하는 예외에 대한 각각의 언어를 알고 있기 때문에,어떤 차이점)

  • 을 때에 예외는 인터럽트와 그 반대의 경우?

도움이 되었습니까?

해결책

는 중단은 CPU 신호에 의해 생성된 하드웨어,또는 특정 CPU 다.이러한 원인 중단 핸들러를 실행할 수 있습니다.것과 같은 I/O 신호에서는 I/O 하드웨어를 생성 interupts.

예외로의 생각할 수 있는 소프트웨어 버전의 중단,에만 영향을 미치는 그것의 과정입니다.

나는 확실하지 않에 대한 정확한 정보,하지만 예외가 에 의해 구현되는 중단.

다른 팁

귀하의 프로세서가 다수의 외부 인터럽트 핀입니다.일반적으로 이러한 핀에 연결된 하드웨어와를 나타내는 데 사용되는 때는 일부를 외부의 이벤트가 발생합니다.예를 들어,사용하는 경우에는 직렬 포트의 UART 인상을 올리 핀에 연결된 하나의 인터럽트 핀에서 프로세서를 나타내는 바이트가 수신되었는지 확인합니다.

다른 주변기기 같은 타이머 컨트롤러 usb,etc.또한 인터럽트를 생성에 기초의 일부 외부의 이벤트입니다.

프로세서 수신 신호에 하나의 그것의 외부 인터럽트 핀에 그것은 바로 점프하는 일부를 임명에 위치 메모리고 시작 실행됩니다.실행되는 코드는 일반적으로 불렀는 ISR,또는 인터럽트 서비스 루틴입니다.지 않는 한 당신이 구현 드라이버 또는 임베디드 소프트웨어의 일종을 가능성은 낮다는 당신이 이제까지 걸쳐 올 ISRs.

불행하게도 이에 대한 질문에 대한 답변을 예외를 조금 더 적은 분명 있었다 3 개의 다른 의미에 나와는 다른 대답이 페이지에 있습니다.

론만의 대답을 참조하여 소프트웨어 구성.이것은 순전히 어플리케이션 수준 예외는 조각의 코드가 나타낼 수 있는 오류 감지할 수 있는 다른 조각의 코드입니다.이 없 하드웨어 관련 여기에서 모두.

다음은 제외하에 의해 본 작업입니다.이것은 시스템을 구축하는 데 사용되는 죽일 때 작업 그것이 불법처럼 나누 0,불법적으로 액세스하는 메모리 등등.

그리고 셋째가 하드웨어 예외는 아니다.의 관점에서 동작은 동일한 인터럽트에서는 프로세서는 즉시 이동을 일부 후보에는 메모리 위치와 시작 실행됩니다.는 예외에서 다릅니다 인터럽트는 예외가 발생하여 불법적 활동하는 프로세서에서 감지되었습니다.예를 들어 MMU 에서 프로세서에서 감지하는 불법적 메모리 액세스와 발생하는 예외는 아니다.이러한 예외가 하드웨어 초기에 대한 트리거 운영 체제를 수행하는것은 정리 작업(로에서 설명한 절).

인터럽트에 의해 생성 장치는 외부의 CPU(타이머,틱 디스크 작업이 완료되면 네트워크 패킷이 도착,etc.) 고 비동기 과 함께 프로그램 실행이 가능합니다.예외가 동기 과 함께 프로그램 실행(예:사단에 의해 제로에 액세스하는 잘못된 주소).

지 않는 한 당신의 프로그램을 실행하지 않고 시스템 운영(또는 개발 OS),그것은 볼 수 없을 것입니다 raw 예외로/인터럽트.그러나,그들이 운영체제에 의해 처리다(중단),로 변환하거나 일부 다른 형태로 되기 전에 반영되어 다시 사용자 프로그램(예:신호에서 유닉스,구조적 예외 처리(SEH)on Windows)가 있는 기회를 처리하십시오.

인터럽트를 표시하는 무언가를 외부로 프로세서 핵심이 그것을 요구하의 관심입니다.그것은 인터럽트의 정상적인 흐름,프로그램을 실행합니다 인터럽트 서비스 루틴(ISR)및 일반적으로 반품을 하기 전에 그것이 인터럽트가 발생했습니다.

많은 변화에 이 기본 테마인터럽트가 생성될 수 있으로 소프트웨어,다른 작업을 얻을 수 있습 CPU 후 ISR,등등....키 포인트는 인터럽트 발생할 수 있는 언제든지 이유를 위해 코드/CPU 가 no 제어.

예외를 조금 더 까다롭게 정의했기 때문에 잠재적으로 세 가지 수준의 의미는:

예외가 하드웨어

특정 프로세서(사용 예)예외를 정의를 나타내는 어떤 종류의 특별한 조건이 발생했습니다:시스템 재설정이 잘못된 주소,일부 가상 주소로 번역 캐시 놓치,등등....

이러한 예외도를 구현하는 데 사용되는 브레이크포인트 또는 시스템 호출합니다.이 경우에,그들은 행동이 거의 같은 인터럽트.

OS 예외

일부 하드웨어의 예외는 것에 의해 처리됩니다.예를 들어,당신의 프로그램에 액세스하는 잘못된 메모리입니다.이것은 하드웨어 예외는 아니다.OS 가 있는 핸들러한 예외는 아니다,그리고 확률이 OS 를 보낼 것입니다 신호 귀하의 응용 프로그램(SIGSEGV 예를 들어)을 나타내는 문제가 있습니다.

하는 경우 프로그램 신호 처리기 설치,신호 처리기를 실행하고 희망과 거래 상황이다.지 않는 경우가 신호 처리기,프로그램을 종료 될 수있는 일시 중단됩니다.

이라고 생각한 창의 구조적 예외 처리기(SEH)이 형식의 예외가 있습니다.

소프트웨어는 예외

어떤 언어 Java,C++,C#개념이 있는 소프트웨어의 예외는 언어에서 제공하의 취급을 위한 예상치 못한 또는 예외적 조건 의 운영과 관련된 프로그램.이 경우에는 예외가 발생에서 어떤 시점에서의 코드와 일부 코드는 최대 높 프로그램 실행을 쌓는 것""잡을 제외하고 실행합니다.이것은 무엇을 하려고/catch 블록 않습니다.

나는 정교에 어떤 인터럽트가 있기 때문에 하나의 중요한 유형의 방해 아무도 아직 처리:크로노그래프로 되돌아갑니다.

하지만 첫째,다시 보자.을 얻을 때 인터럽트,인터럽트 처리기(는 삶에 kernelspace)실행하는 일반적으로 인터럽트를 비활성화,보고를 보류 중인 모든 비즈니스(처리하는 패킷에 도착했 네트워크,처리하는 키스트로크,etc.) 다음(우리는 여전히는 커널에서 이 시점에서)수치는 무엇인 프로세스를 실행하는 다음(동일 수 있습 중 하나 될 수 있었다,다른 하나에 따라 스케줄러)그리고 그것을 실행합니다.

하나의 프로세스를 실행하는 프로세서에 지정된 시간에.과할 때 사용하는 멀티태스킹 운영 체제 방법 스위치 사이에 그들은 컨텍스트 스위치-기본적으로 레지스터의 프로세서 얻을 덤프하는 메모리,흐름을 전달하는 새로운 프로세스 및 프로세스가 완료되면 당신은 컨텍스트 전환하는 다른 뭔가가 있습니다.

그렇게 말하는 내가 쓰는 간단하는 C 프로그램을 계산하는 모든 숫자 또는 피보나치,또는 다른 것입니다.또는 더 나은:지만 아무것도하지 않는 회전 내부에있는 동안(1)반복입니다.을 어떻게 다른 프로세스 시스템에서 얻을 수있는 기회를 실행하는가?는 무엇이 있는 경우도 발생하는 원인이 인터럽트?

대답은 있는 타이머 장치는 지속적으로 중단.그것은 무엇을 유지하고 회전시키는 과정에서 아래로 전체 시스템입니다.하지만 내가 주는 인터럽트 처리기 인터럽트를 비활성화,그래서 당신이 뭔가를 할 경우에는 블록은 무한정할 수 있습을 전체 시스템입니다.

예외

는 경우는 예외입니다 프로세서 코드를 실행하는지에 그것의 정상적인 경로입니다.이것은'예외'정상 작동하는 기본적으로 선형 운동을 통해 코드로와 제어 구조이다.다른 언어로 지원하는 다양한 형식의 예외,일반적으로 사용되는 오류를 처리하는 동안 프로그램 작업입니다.

인터럽트

인터럽트는 제외 하드웨어 수준에서(일반적으로).인터럽트는 물리적인 신호 프로세서에서는 CPU 를 저장소의 현재 상태 및 이동을 중단(또는 예외)처리기 코드입니다.후에 핸들러가 수행 원래 상태로 복원 및 처리를 계속할 수 있습니다.

인터럽트에는 예외 경우에도,그것은 것입니다.인터럽트를 나타낼 수 있습니다:

  • 오류 등의 메모리 액세스 위반이
  • OS 요구하는 작업을 수행을 지원하는 실행중인 프로그램과 같은 소프트웨어 인터럽트 또는 이 메모리는 페이징 요청
  • 하드웨어 장치가 필요합주의와 같은 받는 네트워크 패킷,또는 빈 전송 버퍼

이들은 항상 힘 프로세서를 일시 중지 그것의 현재 활동과 거래를 올려지는 예외에만 다시 한 번 인터럽트 처리가 완료됩니다.

의 측면에서 인터럽트는 일반적인 문제는 인종 조건입니다.예를 들어 있는 인터럽트는 정기적으로 증가하는 글로벌 실시간 시계입니다.시계 수 64 비트에서 32 비트 기계입니다.

는 경우 프로그램을 읽고계,그리고 도착 첫 번째는 32 비트 단,다음 인터럽트가 발생하면 인터럽트 처리기 종료 프로세스가 두 번째는 32 비트 단어,그리고 데이터를 조리-두 개의 단어가 동기화 될 수 있습니다.만약 당신이 시도를 사용하여 mutex 세마포어 또는 잠금 변수,그 과정에서는 인터럽트는 것을 걸기 위해 잠금 장치를 중단 시스템(교)지 않는 한,모두 처리기와 프로세스는 데이터를 사용하여 작성된 매우 신중합니다.그것은 쉽게 얻는 문제에서 작성할 때 인터럽트.

다시 참가자의 기능은 또한 다른 문제입니다.실행하는 경우에는 funcA 프로그램 코드에서는 인터럽트는 또한 실행합 funcA 할 수 있습 끝나지 않은 결과로 인해 공유 변수(정체되거나 힙 변수,종류,etc.).당신은 일반적으로 실행하려는 코드만 가능 인터럽트 처리기와 자주 이 플래그를 설정하도록 프로세스 할 수 있는 실제 작업 이후,걱정하지 않고 충돌이 발생합니다.

어떤 방법으로 이와 비슷한 개발에 대해 다중 프로세서,그 이유 중 하나 커널프로그래밍기법 등을 배운은 여전히 검은 마술에 의해 많습니다.

-Adam

인터럽트를 발생할 것으로 예상된 정기적으로(지만 때로는 그들은 일정하지 않)..그 인터럽트 cpu 기 때문에 뭔가 중요한 일이 일어났고 그것을 요구하의 즉시 처리 될.

예외가 있어야 할 예외 규칙;이러한에 의해 발생하는 소프트웨어기 때문에 예상치 못한 일이 일어났고 이것을 시도 할 수있는 기회입니다 그것에 대해 뭔가를,또는 적어도 충돌하게 됩니다.

에 대해 이야기할 때 인터럽트와 예외 당신은 일반적으로 말하는 가까운 하드웨어 수준 코드와 인터럽트와 예외는 종종에서 구현되는 부분에 의해 하드웨어 부분에서 소프트웨어입니다.

인터럽트 이벤트에 하드웨어(또는 수동으로 해고에서 어셈블리)와 관련이 있는 벡터의 처리기 사용할 수 있는 손잡이 인터럽트 이벤트,그것은 IO 완료,IO 오류(디스크 기억 장애),IO 이벤트(마우스 이동에 대한 예).이 인터럽트를 줄 수 있는 상승하는 예외를 자주 할 때 일부 예기치 않은 인터럽트가 발생합니다.

예외가 예기치 않은 행동할 때 자주 하드웨어를 사용하여 이러한에서는 인터럽트와는 별도로 처리에서 소프트웨어를 사용하여 인터럽트 처리기입니다.프로그래밍 언어로 우리는 그들의 거의 항상 변장으로 통제 구조물의 종류입니다.

일반적으로,인터럽트는 하드웨어 구현 함정의 일부입니다.등록 처리기 위한 특정 인터럽트(0 으로 나누,에서 사용할 수 있는 데이터 주변 기기,타이머를 만)그 때는 이벤트 발생하는 모든 처리 시스템-넓은 정지,당신은 신속하게 프로세스의 중단하고,일을 계속.이들은 일반적으로 implented 장치 드라이버 또는 커널이다.

예외는 소프트웨어 구현의 방법으로 처리에 오류 코드입니다.당신이 설정 처리기 위한 특정(일반)예외가 있습니다.예외가 발생하면,언어 실행시 시작됩니다 스택 해제에 도달할 때까지 처리기는 특정 핸들러를 사용합니다.해당 지점에서 처리할 수 있는 제외하고,또는 종료 프로그램입니다.

단순하게 유지...

당신이 완료되면 처리를 중단,당신은(일반적으로)반환하여 무엇을 했기 전에 당신이 중단됩니다.

예외를 처리 관련 버리는 연속적인 계층의 현재 작업에까지 당신은 거품까지점 예외 처리할 수 있습(잡).

을 처리하는 동안 인터럽트를 결정할 수 있습니다 던지는 예외는 아니다,그러나 의미하지는 않을 고려해야 할 인터럽트 자체로는 예외는 아니다.예외가 없습니다"인터럽트"(이후로는 그 의미하는 것의 가능성을 반환하이 무엇을 하기 전에 당신은 중단되었);오히려 그들은"취소"(일부 하위 집합의)현재 활동입니다.

명시된 바와 같이 이미 여러 번,인터럽트는 일반적으로 트리거하여 외부과 같은 엔터티 하드웨어 또는 사용자를(예,마우스 클릭이나 키아 CTRL+C)하면서 예외가 생성(throw)동시에 소프트웨어를 검출하는"문제"또는"뛰어난 상태".

Iterrupts 은 기본적으로 하드웨어 기반의 프린터 indiciating 그것은"out"종이 또는 네트워크 카드를 나타내는 그것은 분실 연결합니다.

예외는 것은 단순히 오류 조건에서 귀하의 프로그램에 의해 감지,try/하고 있습니다.다음과 같:

Try
   {
   ... various code steps that "throw exceptions" on error ...
   }
catch (exception e)
   {
   print 'Crap! Something bad happened.' + e.toString()
   }

그것의 편리한 방법을 잡아"오류"에서 일어나는 블록의 코드를 처리할 수 있습니다 그들에서 비슷한 패션이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top