운영체제 | System Call

성수당·2025년 9월 12일

운영체제

목록 보기
13/31
post-thumbnail

🥔 System Call이란?

System Call(시스템 콜)사용자 프로그램이 커널 기능을 요청할 때 사용하는 인터페이스다.

운영체제는 사용자 프로그램이 하드웨어나 커널 자원에 직접 접근하는 것을 금지하고, 반드시 시스템 콜을 통해 간접적으로 요청하게 한다.
예: 파일 열기, 읽기, 쓰기, 메모리 할당, 프로세스 생성 등

🥔 왜 System Call이 필요한가?

사용자 프로그램이 시스템 자원에 직접 접근하면 보안·안정성 문제가 발생할 수 있다.
그래서 운영체제는 사용자 모드(User Mode)와 커널 모드(Kernel Mode)를 구분하고, 커널 기능은 시스템 콜을 통해서만 사용할 수 있도록 제한한다.

시스템 콜은 사용자 모드에서 커널 모드로의 모드 전환(Mode Switching) 을 수반한다.

🥔 시스템 콜의 동작 과정

  1. 사용자 프로그램이 시스템 콜 라이브러리 호출 (open(), read() 등)
  2. 라이브러리는 내부적으로 시스템 콜 번호와 인자를 설정하고 시스템 콜 인터럽트를 발생시킴
  3. 커널은 시스템 콜 핸들러를 통해 해당 요청을 처리
  4. 결과를 사용자 공간에 반환하고 커널 모드 → 사용자 모드로 복귀
// 예시: 파일 열기
int fd = open("file.txt", O_RDONLY);

🥔 대표적인 System Call 종류

범주시스템 콜 예시
프로세스 관리fork(), exec(), wait(), exit()
파일 시스템open(), read(), write(), close()
디바이스 제어ioctl(), read(), write()
정보 요청getpid(), getuid()
메모리 관리mmap(), brk()
통신(IPC)pipe(), shmget(), msgsnd(), recv()

🥔 x86 vs x86-64 시스템 콜 방식

구조시스템 콜 진입 방법
x86 (32bit)int 0x80 인터럽트 사용
x86-64 (64bit)syscall 명령어 사용 (더 빠름)

최근 리눅스 커널은 syscall 명령어를 선호하며, 시스템 콜 번호와 인자 위치가 레지스터로 고정되어 있다.
예: rax = 시스템 콜 번호, rdi, rsi, rdx, … = 인자

🥔 커널 소스에서 시스템 콜은 어떻게 구현될까?

Linux 커널 예시:

  1. 사용자 공간에서 read(fd, buf, size) 호출
  2. glibc → 시스템 콜 번호(예: 0)와 인자 레지스터 설정
  3. syscall → 커널 진입
  4. 커널의 sys_read() 함수 호출 → 내부 로직 수행
  5. 결과 반환

🥔 strace로 시스템 콜 추적

리눅스에서 strace 명령어를 사용하면 프로그램이 호출하는 시스템 콜을 실시간 추적할 수 있다.

strace ./my_program
open("input.txt", O_RDONLY) = 3
read(3, "data", 1024)        = 1024
write(1, "data", 1024)       = 1024
close(3)                     = 0

🥔 시스템 콜 vs 함수 호출

항목함수 호출시스템 콜
실행 영역사용자 공간커널 공간
속도빠름상대적으로 느림 (모드 전환 필요)
예시printf()write()
목적코드 재사용커널 자원 접근

표준 라이브러리 함수는 내부적으로 시스템 콜을 사용할 수도 있고, 아닐 수도 있다.

🥔 시스템 콜 번호 확인

리눅스에서는 시스템 콜 번호가 unistd.h 헤더에 정의되어 있다.
또는 man 2 syscall 또는 /usr/include/asm/unistd_64.h 파일에서 직접 확인 가능

#define __NR_read 0
#define __NR_write 1
#define __NR_open 2
...

🥔 마무리

  • System Call 은 사용자 프로그램이 운영체제 기능을 사용할 수 있는 공식 통로
  • 커널과 사용자 공간을 안전하게 연결하는 인터페이스
  • 직접 다루기보단 라이브러리를 통해 호출하는 경우가 많지만, OS 구조를 이해하려면 반드시 알아야 하는 개념
profile
말하는 감자🥔

0개의 댓글