OS/Linux

[실습과 그림으로 배우는 리눅스 구조] 2. 사용자 모드로 구현되는 기능

noahkim_ 2026. 2. 26. 18:52

다케우치 사토루 님의 "실습과 그림으로 배우는 리눅스 구조" 책을 정리한 포스팅 입니다.

 

1. 시스템 콜

  • 사용자 프로그램이 커널의 기능을 사용하기 위해 요청하는 인터페이스
  • 하드웨어 관련 작업을 요청함 (프로세스 생성, 파일 열기, 네트워크 통신, 메모리 할당 등)
  • ⚠️ 사용자 프로그램은 직접 하드웨어를 접근할 수 없음 (커널 권한 필요)

 

종류

기능 시스템 콜
프로세스 실행 execve()
프로세스 생성 fork()
파일 열기 open()
파일 쓰기 write()
메모리 할당 brk(), mmap()
네트워크 socket()

 

발생 과정

  1. 사용자 프로그램이 시스템 콜 호출 (write(), open() 등)
  2. 내부에서 syscall 명령어 호출 (어셈블리어)
  3. 소프트웨어 인터럽트 발생
  4. CPU 모드 전환 (사용자 → 커널)
  5. 커널 작업 수행
  6. 사용자 모드로 복귀

 

wrapper 함수

  • 고급 언어를 위해 시스템 콜을 감싸는 함수
  • ✅ 시스템 콜은 실제로 어셈블리 명령어인 syscall로 호출해야 함
  • ⚠️ CPU 아키텍쳐 의존적이므로 고급 언어에서 직접 작성이 어렵고, 이식성이 낮음
  • ➡️ 고급 언어에서 쉽게 사용하도록 제공함

 

예시) pid()

더보기
#include <unistd.h>
#include <stdio.h>

int main() {
    pid_t pid = fork();

    if (pid == 0)
        printf("Child process\n");
    else
        printf("Parent process\n");
}
  • 내부 동작: fork() → glibc wrapper → syscall(SYS_fork)로 호출

 

3. 표준 C 라이브러리

glibc

  • 시스템 콜 Wrapper 제공

 

4. OS가 제공하는 프로그램

  • 운영체제는 커널 뿐만 아니라 여러 프로그램이 제공됨
구분 프로그램 역할 핵심 개념
부팅 시작 init 시스템 부팅 시 최초 실행 프로세스 (PID 1) 전통적 초기화 시스템
  systemd 현대 리눅스의 초기화 및 서비스 관리자 병렬 서비스 실행, 의존성 관리
시스템 조정 sysctl 커널 파라미터 조회 및 변경 /proc/sys 인터페이스 사용
  nice 프로세스 우선순위 조정 CPU 스케줄링 영향
  sync 메모리 버퍼 데이터를 디스크에 강제 기록 데이터 일관성 유지
파일 조작 touch 빈 파일 생성 또는 타임스탬프 변경 파일 메타데이터 수정
  mkdir 디렉토리 생성 파일 시스템 조작
데이터 처리 grep 텍스트 검색 정규표현식 기반 필터링
  sort 데이터 정렬 텍스트 정렬 알고리즘
  uniq 중복 행 제거 연속 중복 제거
성능 측정 sar CPU, 메모리 등 시스템 자원 통계 수집 사용자/커널 모드 비율 확인
  iostat 디스크 I/O 통계 확인 I/O 병목 분석
개발 도구 gcc C/C++ 컴파일러 소스 → 바이너리 변환
  perl 스크립트 언어 실행 환경 텍스트 처리 자동화