INTERRUPT, EXCEPTION, TRAP, FAULT, ABORT의 차이?

chaos4chaos의 이미지

비동기적 사건과 동기적 사건....
즉, 에러의 발생위치가 외부인지 내부인지에 따라 interrup와 trap을 구분한다고 알고 있었는데요..
컴퓨터 구조 관련한 책들을 보니 용어가 무쟈게 혼동스럽네요..
제가 기존에 알고 있던 trap을 exception이라고 정의를 하고,
다시 exception을 trap, fault, abort로 구분을 하고 있습니다.

intel CPU에서 exception의 분류가
1. trap : INT 명령으로 명시적으로 발생
2. fault : 0으로 나눈 에러
3. abort : 복구 불가능한 에러

와 같다는데요...
특히 divide by 0 error를 fault라고 언급한 책을 본적이 없어서 무척 헥갈립니다. page fault와 같은 용어도 위에서 말하는 폴트와는 차이가 있지 않나요???
용어를 정리해서 글을 좀 써야하는데... 어떤 용어가 vendor-specific하지 않은 일반적인 용어인지 도움말씀 부탁드립니다.

chaos4chaos의 이미지

궁금헌데... 구글에서도 별다른 반응이 없고... 그렇습니다.
:D

kane의 이미지

공룡책에서는 일반적으로 interrupt라고 쓰고,
software-generated interrupt의 경우 trap(or an exception)이라고 구분을 하기도 합니다.
trap과 exception은 혼용되는 것 같습니다.
그 분류을 뭐라고 부르는지는 모르겠습니다. 아마 아키책을 봐야할 것 같은데..

chaos4chaos wrote:
intel CPU에서 exception의 분류가
1. trap : INT 명령으로 명시적으로 발생
2. fault : 0으로 나눈 에러
3. abort : 복구 불가능한 에러

와 같다는데요...
특히 divide by 0 error를 fault라고 언급한 책을 본적이 없어서 무척 헥갈립니다. page fault와 같은 용어도 위에서 말하는 폴트와는 차이가 있지 않나요???.


2번의 falut와 page fault는 같은 fault 인 것 같습니다.
page fault가 INT 명령에 의해 발생하는 것도 아니고, 복구 불가능한 에러도 아니니 fault의 부류에 속할 것 같습니다. falut는 '잘못된 명령에 의한 에러' 정도로 생각할 수 있겠습니다.
(그런데 abort에 속하는 에러에는 어떤 것이 있죠?)
litdream의 이미지

음? fault: 0 으로 나눈 에러라는 정의에 대해 이해가 잘 안가는군요?

0 으로 나눔은, Division by 0 를 뜻하시는지?
근데, 그것이 fault 였었나요? C 에서는 floating point exception 정도 나지않을까
싶습니다만?

삽질의 대마왕...

kane의 이미지

0 으로 나눔은, Division by 0 를 뜻합니다.

위의 exception 분류는 language 레벨이 아니라 hardware(CPU) 레벨의 이야기입니다.

프로세스가 division by zero를 수행하면 CPU에서 exception을 발생시킬테고, 이 exception이 fault 종류라는 뜻입니다. 이 예외 상황이 발생하면 OS가 프로세스를 종료시키고 에러 메세지를 출력합니다. 하지만 에러 메세지가 꼭 fault여야 하지는 않습니다.

urmajest의 이미지

ftp://download.intel.com/design/Pentium4/manuals/25366814.pdf

예전에 여기서 자세한 설명을 본 기억이 나네요.

5장에 보시면 있어요.

이게 vendor-specific한건지는 잘 모르겠고 -_-

page fault는 fault입니다 ^^

Necromancer의 이미지

용어는 vendor specific 하는걸로 알고 있습니다.

x86계열에서는 interrupt는 외부요청(IRQ)에 의해 불려지는 걸 의미하고
exception은 cpu가 명령어 실행중에 더이상 실행이 불가능한 어떤
문제가 있음을 인지할 때(fault와 abort로 나뉩니다),
trap은프로그램에 의해 불려질 때... (플래그레지스터에 TR비트인가
해서 그걸 세팅하면 매 명령어 실행후에 INT 1을 자동으로 불러내는게
있을겁니다. 디버그용으로 알고 있는데.. 이것만이 해당될겁니다.)

다른 머신에서는 다른 용어로 불리는게 기억이 안나는군요.
컴구조시간에 mips에 대해 들었는데

Written By the Black Knight of Destruction

익명 사용자의 이미지

> intel CPU에서 exception의 분류가
> 1. trap : INT 명령으로 명시적으로 발생
> 2. fault : 0으로 나눈 에러
> 3. abort : 복구 불가능한 에러

쓰신 그대로 Intel CPU에서 처리 방식에 따라 구분하는 방법입니다. 그냥 Intel의 용어라고 생각하세요. 일반적으로 OS에서는 trap 과 exception을 비슷한 의미로 사용합니다.

chaos4chaos의 이미지

서서히 (개념이) 자리를 잡아가는 듯 합니다.
감사합니다.
다른 친구들 한테는 맨날 매뇰봐라 매뇰봐라 해놓구선, 정작 저에게는 무쟈게 관대한.... :?

몇가지 쬐금 더 궁금한게 있는데요...
interrupt-driven 방식의 장비가 아닌 경우(?) 예를 들면, 구형 batch 장비 등에서도 divide by 0, 수행중의 H/W 통신, H/W의 에러 등은 적절히 보고되어야 할텐데요... 이 경우에는 어떻게 개념이 진행되어 가는지 혹시(!) 마땅한 꼬리를 보여주시면.... :D

열심히 찾고 있는데... 쩝... 별로 좋아하지도 않는 스빠게리가 대구리 속에 꽉찬 느낌입니다....

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.