Enterprise Infrastructure Intelligence ● Certified engineers online · Fast response guaranteed
리눅스/OS

glibc System Call 래퍼의 구조와 동작 원리

glibc는 Linux 커널의 시스템 콜을 C 표준 라이브러리의 함수 인터페이스로 추상화하는 래퍼 계층을 제공합니다. 아키텍처별 호출 규약 변환 및 에러 처리를 담당하여 애플리케이션이 커널 세부사항을 감추고 이식성 있는 프로그래밍을 가능하게 합니다.

2026.09.29  ·  11회  · 

glibc System Call 래퍼의 역할

glibc는 Linux 커널의 시스템 콜에 대한 C 언어 래퍼 함수를 제공합니다. 이 래퍼는 단순한 기술적 번역 계층으로, C 호출 규약을 각 아키텍처의 커널 ABI로 변환합니다. 대부분의 애플리케이션은 chmod, open, write 같은 glibc 함수를 통해 시스템 콜에 접근하며, glibc는 아키텍처별 레지스터 배치와 에러 처리를 자동으로 처리합니다.

아키텍처별 호출 규약과 레지스터 매핑

x86-64에서는 syscall 명령어를 사용하며, 시스템 콜 번호는 eax(또는 rax) 레지스터에 전달됩니다. 인자는 rdi, rsi, rdx, r10, r8, r9 순서로 전달되고, 반환값은 rax에 저장됩니다. ARM EABI는 swi 명령어를 사용하고 r7에 콜 번호를 놓으며, 32비트 아키텍처에서는 64비트 값 정렬 같은 추가 고려사항이 발생합니다.

에러 처리 및 호환성 매핑

glibc 래퍼는 커널이 반환한 음수 에러값을 양수로 변환하여 errno에 저장하고 -1을 반환합니다. 또한 구형 시스템 콜이 신규 콜로 대체된 경우 자동 매핑합니다(예: dup2를 dup3으로 구현, open을 openat으로 호출). 32비트와 64비트 시간값 변환 같은 ABI 호환성 처리도 수행하여 이식성을 보장합니다.

WIKIDATA WORKSTATION
AI·렌더링에 최적화된
전문가용 워크스테이션
NVIDIA RTX GPU · 최대 192GB 메모리 · ECC 지원