본문 바로가기
목차
CE

C Runtime (CRT) 이란 - CRT, POSIX, System call, ABI

by ds31x 2026. 1. 16.
728x90
반응형

C Runtime( CRT )이란?

C Runtime(CRT)은 다음을 가리킴:

C 프로그램이
OS 위에서
실제로 실행되도록 만들어 주는 기본 실행 환경

  • C로 만든 프로그램을 컴파일하면 CPU 기계어로 이루어진 실행 파일(binary)이 만들어짐.
  • 이 실행 파일은 하드웨어 CPU에서 직접 실행되지만,
  •  OS 와의 모든 상호작용은 C Runtime을 통해 이루어짐.
    • 유저 공간 프로그램이 커널과 대화하기 위한 라이브러리가 CRT임.
    • Kernel도 C언어로 만들어지지만 Kernel binary는 CRT를 사용하지 않음.
C 프로그램
   ↓
C Runtime (libc, CRT)
   ↓
OS API (POSIX-style API on Unix like OS, Win32 on Windows)
   ↓
system call
   ↓
커널
   ↓
하드웨어

1. main()은 진짜 entry point 가 아님.

C 프로그램은 main()에서 시작하는 것처럼 보이지만,
실제로는 C Runtime이 먼저 실행 되고, CRT에 의해 main()이 호출되는 것임.

 

OS가 C언어로 만든 실행 파일을 로드하면,
가장 먼저 C Runtime의 코드가 실행되고 다음의 공통된 실행 루틴이 수행됨:

  • stack 만들기
  • 전역 변수 초기화
  • heap 준비
  • argc, argv 구성

그 다음에 비로서 main() 함수가 호출됨.

그래서 C Runtime이 없으면

  • main()은 호출되지 않으며
  • 결과적으로 프로그램 자체가 돌아가지 않음.

2. printf, malloc은 C 언어가 아닌 CRT가 제공하는 함수

다음 함수들은 C 언어 자체가 아닌 C Runtime이 제공하는 fucntion 들임:

printf()
malloc()
free()
fopen()
time()
exit()

 

예를 들어

printf("hello");

 

를 실행하면 내부적으로 다음의 처리가 이루어짐.

printf()
 → C Runtime
 → OS API (POSIX의 write 등)
 → system call
 → 커널이 화면에 출력

 

C Runtime이
C 함수들을
운영체제 기능으로
바꿔 주는 번역기 역할
을 수행함.


3. POSIX 란?

POSIX는 OS(UNIX와 UNIX like OS)가 사용자 영역에 제공해야 할 API의 표준 임.

  • 보통 OS API의 표준 이라고 불림 (Windows에선 POSIX 역할을 Win32 API 가 대신)
  • IEEE 표준이며, 미국에선 상업용 UNIX가 정부 등에 납품되려면 반드시 지켜야 하는 표준임.

https://dsaint31.me/mkdocs_site/CE/ch15/ce15_2_4_portability/

 

BME

CRT POSIX portability porting Portability (이식성):W 처음 개발된 H/W 및 S/W 환경 외에서 실행이 가능한지를 나타내는 특성. 100% 동작을 보장한다 라기보다는, 어느 정도의 수정 이 이루어져야 실행이 가능

dsaint31.me

 

POSIX가 정의하고 있는 대표적인 함수는 다음과 같음 (C를 이용해 정의):

open()
read()
write()
fork()

이 함수들이 어떤 의미를 가져야 하는지를 POSIX가 정하고 있음:

  • OS 는 이 API를 지켜야 하고,
  • C Runtime은 이 POSIX API를 이용해 자신이 제공하는 C 함수들을 구현.

POSIX 함수가 반드시 1:1로 system call에 대응되는 것은 아니며,
여러 system call의 조합이거나, 일부는 user-space에서 처리될 수도 있음.


4. System call 과의 관계

System call은

  • 사용자 영역에 있는 프로그램
  • OS의 Kernel에게 원하는 작업을 요청하기 위해 제공되는 interface 임.

앞서 소개한 open()이나 write() 같은

POSIX 함수는 결국 내부에서 system call을 사용해 Kernel의 기능을 사용

  • POSIX는 API만 정의하고,
  • system call은 운영체제가 각자 구현함.

System call에 대해 헷갈리면 다음을 참고: 2023.10.22 - [Linux] - [Linux] Distribution (배포판)과 Kernel

 

[Linux] Distribution (배포판)과 Kernel

GNU / Linux에서 Distribution(배포판)이란?“Linux 운영체제” 를 줄여서 Linux 라고 부르지만,엄밀히 말하면 Linux는 운영체제 전체가 아니라 Kernel(커널)의 이름 임. 실제로 설치하고 사용하는 Ubuntu, Fedora,

ds31x.tistory.com


5. OS마다 각자의 C Runtime이 존재

모든 OS는 자기만의 C Runtime을 가짐:

OS C Runtime
Linux glibc, musl
macOS Apple libc
Windows MSVCRT, UCRT
Android Bionic
  • 이들은 모두 같은 C 함수를 제공하므로 OS에 상관없이 같은 C 함수로 프로그램을 작성 가능.
  • CRT는 자신이 제공하는 C 함수가 호출되면 자신이 설치된 OS의 OS API와 system call을 사용하여 이를 실행함.

각 OS에 맞게 구현된 CRT 구현체 덕분에.
같은 C 프로그램이 여러 OS에서 돌아갈 수 있음


6. Java, Python과의 차이

Java나 Python은 C Runtime 위에

  • 가상의 컴퓨터(VM)를 하나 더 올리고.
  • 이 VM에서 Java / Python 코드로 만든 프로그램이 동작함.
  • 참고로 대부분 VM은 C로 컴파일된 binary이기 때문에 C Runtime 구현물(역시 binary)와 ABI를 통해 연결됨.
Java/Python 코드
 → bytecode 로 변환.
 → VM (가상 CPU, 가상 메모리)
 → C ABI → C Runtime
 → OS

 

C ABI 에 대해선 다음을 참고:
https://dsaint31.tistory.com/503#Application%20Binary%20Interface%20(ABI)-1-3

 

[Programming] Application Programming Interface (API)

API란Application Programming Interface (API)는 서로 다른 S/W Application이 source code 수준 에서 통신할 수 있도록 하는 Protocol 및 definition으로 구성된 Interface임.즉, API는 여러 S/W Application들이 서로 원활하게 상

dsaint31.tistory.com

 

이에 비해 C는 VM 없이 바로 CRT를 통해 OS를 사용가능.

C 코드
 → C Runtime
 → OS

결국 C는 POSIX에 의존하고, Java/Python은 VM에 의존.

 


결론

C Runtime은

C 프로그램과 운영체제 사이를
연결해 주는 필수 기반

이며,

다음의 OS와의 상호작용 기능들을 제공

  • 프로그램 시작
  • 메모리 관리
  • 파일 처리
  • 출력
  • 시간
  • 종료

 

OSIX(API) + C Runtime(구현) + C ABI(연결 규약) 가
C의 portability를 가능케 함.

 

C 프로그램이 여러 OS에서 돌아가는 이유는
C Runtime이 그 차이를 모두 숨겨주기 때문임.

https://dsaint31.me/mkdocs_site/CE/ch15/ce15_2_4_portability/


같이 보면 좋은 자료들

2024.04.22 - [CE] - [CE] Virtual Machine, Web Browser and Bytecode.

 

[CE] Virtual Machine, Web Browser and Bytecode.

Virtual Machine (가상 머신) An abstract computer with an incredibly complicated instruction set (=Bytecode)implemented entirely in software bytecode란?2024.06.05 - [CE] - [CE] Bytecode (바이트코드) [CE] Bytecode (바이트코드)Bytecode (바이

ds31x.tistory.com

2024.06.05 - [CE] - [CE] Bytecode (바이트코드)

 

[CE] Bytecode (바이트코드)

Bytecode (바이트코드)정의:Bytecode는 고수준 프로그래밍 언어로 작성된 source code를 중간 형태로 변환한 code 임.이는 특정 Virtual Machine (VM)에서 실행될 수 있도록 설계됨.가장 대표적인 예로 Java 및 Pyt

ds31x.tistory.com


 

728x90