고속 시스템 콜 vs. 저속 시스템 콜: 시그널이 블록된 시스템 콜을 깨우는 방법

2025-06-03

이 글에서는 운영 체제에서 고속 시스템 콜과 저속 시스템 콜의 근본적인 차이점을 자세히 살펴봅니다. 고속 시스템 콜(`getpid()` 등)은 즉시 반환되는 반면, 저속 시스템 콜(`read()` 등)은 외부 이벤트를 기다리느라 블록될 수 있습니다. 이 글에서는 시그널이 블록된 저속 시스템 콜을 어떻게 중단하는지, `EINTR` 오류를 처리하는 방법과 `SA_RESTART` 플래그를 사용하는 방법을 코드 예제를 통해 보여줍니다. 또한 디스크 I/O의 뉘앙스와 커널이 다양한 유형의 시스템 콜을 처리하는 방법을 논의하고, 다양한 I/O 모델(블로킹 I/O, 논블로킹 I/O, I/O 멀티플렉싱, 시그널 구동 I/O, 비동기 I/O, I/O Uring)의 장단점을 비교합니다.

더 보기