사용자 프로그램이 운영체제의 서비스를 요청할 때 사용하는 인터페이스
trap 명령어 등을 이용해 CPU에게 커널 코드 실행을 요청함| 분류 | 시스템 콜 예시 | 설명 |
|---|---|---|
| 프로세스 제어 | fork(), exec(), exit(), wait() | 프로세스 생성, 종료, 실행 |
| 파일 조작 | open(), read(), write(), close() | 파일 열기, 읽기, 쓰기 등 |
| 장치 제어 | ioctl(), read(), write() | 장치와의 입출력 |
| 정보 유지/관리 | getpid(), alarm(), sleep() | 시간/프로세스 정보 |
| 통신 | pipe(), shmget(), send(), recv() | IPC, 네트워크 통신 등 |
read(fd, buffer, size);CPU가 프로그램을 실행하는 도중에 현재 작업을 잠시 중단하고,
시스템에 발생한 긴급한 상황이나 요청을 처리하기 위해 CPU의 제어권을 운영체제로 넘기는 메커니즘
인터럽트가 말생하면 CPU의 제어권은 즉시 운영체제(커널)로 넘어감
→ 인터럽트: CPU에게 “지금 처리해야 할 일이 생겼다”하고 알려주는 신호
→ CPU는 현재 작업을 잠깐 멈추고, 해당 이벤트를 처리한 후 원래 작업으로 복귀
| 종류 | 원인 | 예시 |
|---|---|---|
| 하드웨어 인터럽트 | CPU 외부의 하드웨어 장치가 발생 | 키보드 입력, 마우스 클릭, 디스크 작업 완료, 타이머 종료 |
| 소프트웨어 인터럽트 (트랩/예외) | CPU 내부에서 프로그램 실행 중 발생 | 시스템 콜 (OS 서비스 요청), 예외 (프로그램 오류) |
인터럽트가 발생하면 CPU는 다음의 과정을 통해 안전하게 처리함
CPU 이벤트
├── 인터럽트 (Interrupt) ← 외부 발생 (하드웨어 장치 등)
└── 예외 (Exception) ← 내부 발생 (CPU 내부 실행 중 발생)
├── 비의도적 예외 ← 0으로 나누기, 페이지 폴트 등
└── 소프트웨어 인터럽트 ← 의도적 예외 = 시스템 콜 (trap)
현재 실행 중인 명령어에서 문제가 생겨 운영체제가 개입해야 하는 상황
프로그램의 명령어가 실행되는 과정에서 CPU 내부적으로 발생하는 동기적(Synchronous) 이벤트
하드웨어 장치(키보드, 디스크)에 의해 비동기적으로 발생하는 일반적인 하드웨어 인터럽트와 구별됨
| 예외 유형 | 정의 | 예시 |
|---|---|---|
| 오류 (Fault/Error) | 프로그램의 실행을 계속할 수 없는 치명적인 상황 | 0으로 나누기 (Divide by Zero), |
| 유효하지 않은 명령어 실행 | ||
| 트랩 (Trap) | 의도적으로 OS 서비스를 요청하기 위해 발생시키는 예외 | 시스템 콜(System Call) 호출 |
| 중단 (Abort) | 복구할 수 없는 심각한 오류 | 하드웨어 고장, 메모리 패리티 오류 등 |
| 항목 | 인터럽트 (Interrupt) | 예외 (Exception) |
|---|---|---|
| 발생 위치 | CPU 외부에서 발생 | CPU 내부에서 발생 |
| 원인 | 하드웨어 장치나 소프트웨어의 요청 | 현재 실행 중인 명령어에서 문제 발생 |
| 처리 주체 | 인터럽트 핸들러 | 예외 핸들러 |
| 의도성 | 대부분 비의도적 (입출력 완료 등) | 의도적 or 오류에 의한 발생 |
| 예시 | 키보드 입력, 타이머 완료, 네트워크 수신 | 0으로 나누기, 페이지 폴트, 시스템 콜(trap) |
| 공통점 | 모두 커널 모드 진입, 핸들러로 처리됨 |
or 인터럽트 서비스 루틴 (ISR, Interrupt Service Routine)
: 인터럽트가 발생했을 때 운영체제 커널 내부에서 해당 요청을 처리하는 전용 코드 조각 (함수)
[주요 역할]