Quick Comparison
text
interrupt -> 장치·timer처럼 현재 명령 바깥의 비동기 사건
exception -> 현재 명령 실행 중 fault·trap·abort 같은 동기 사건
system call -> user code가 OS 서비스를 의도적으로 요청하는 제어 전환셋 모두 CPU 제어 흐름을 handler로 바꿀 수 있지만 발생 원인과 복귀 가능성이 다릅니다. System call은 보통 특별한 명령과 OS의 정해진 진입점을 사용하며, 임의의 kernel 함수 호출과 같지 않습니다.
실행 흐름
장치 interrupt가 오면 CPU와 OS는 현재 실행 상태를 보존하고 등록된 handler를 실행한 뒤, 가능한 경우 중단한 흐름으로 돌아갑니다. Page fault나 divide error 같은 exception은 현재 명령과 직접 연결됩니다. Page fault는 필요한 page를 준비한 뒤 명령을 다시 시도할 수 있지만 잘못된 주소 접근은 process 종료로 이어질 수 있습니다.
File read 같은 system call은 user mode에서 직접 장치를 만지는 대신 kernel이 권한과 handle을 검사하고 driver·I/O 경로를 실행하게 합니다. 호출 자체가 곧 disk 완료를 뜻하지는 않으며 cache, queue, 비동기 completion이 사이에 있을 수 있습니다.
자주 틀리는 점
- 모든 exception을 C++
throw와 같은 언어 예외로 보지 않습니다. - Interrupt handler에서 오래 걸리는 일반 작업을 모두 처리하지 않습니다.
- System call이 항상 thread context switch를 발생시킨다고 단정하지 않습니다.
- Page fault가 언제나 치명적 오류라는 뜻은 아닙니다.
참고 링크
2 sources