← 질문 목록
#410깊이 0
트랩과 인터럽트의 차이는 무엇인가?
운영체제기초
답변 연습
내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요
무엇이 일으켰느냐로 갈린다. 트랩은 지금 도는 명령이 스스로 일으키고, 인터럽트는 바깥 장치가 명령과 상관없이 끼어든다.
| 기준 | 트랩 | 인터럽트 |
|---|---|---|
| 일으키는 쪽 | 지금 도는 명령 | 바깥 장치 |
| 언제 오는가 | 그 명령을 실행할 때 | 언제 올지 모른다 |
| 무엇이 정하는가 | 프로그램이 한 일 | 바깥 사정 |
명령이 일으키는 것도 한 종류가 아니다. 트랩은 의도해서 부른 것이라 처리한 뒤 다음 명령으로 돌아간다. 시스템 호출과 중단점이 그렇다.
폴트는 다르다. 실패한 그 명령으로 돌아가 다시 실행한다. 0으로 나누기와 페이지 부재가 폴트다. 어보트는 어디서 났는지도 모르고 재시작도 못 한다.
인터럽트는 그렇지 않다. 키를 누르거나 디스크가 다 읽었을 때 오므로 어느 명령에서 끼어들지 정해져 있지 않다.
부르는 이름은 넓게도 좁게도 쓴다. 넓게는 둘 다 인터럽트로 묶고 안에서 온 것을 소프트웨어 인터럽트라 부른다. 좁게 나눌 때만 바깥에서 온 것을 인터럽트라 한다.
예외와 하드웨어 인터럽트는 번호로 표를 찾아 그 자리로 뛴다. 다만 x86-64의 시스템 호출은 그 표를 안 거치고 등록해 둔 진입점으로 바로 간다.