시스템 콜 (System Call) - 4. 시스템 콜이 동작하는 과정

2025. 2. 8. 15:31정보기술/운영체제 (OS)

4장: 시스템 콜이 동작하는 과정


1. 시스템 콜이 실행될 때 내부적으로 어떤 일이 일어나는가?

시스템 콜(System Call)은 프로그램이 운영체제의 기능을 사용할 수 있도록 요청하는 메커니즘입니다. 이를 통해 프로그램은 파일 조작, 프로세스 생성, 메모리 할당, 네트워크 통신 등 다양한 작업을 수행할 수 있습니다.

그렇다면 시스템 콜이 호출될 때 내부적으로 어떤 과정이 발생할까요? 이를 이해하기 위해 단계별 흐름을 살펴보겠습니다.


📌 시스템 콜의 실행 흐름 (단계별 과정)

💡 프로그램이 read() 시스템 콜을 호출한다고 가정해 봅시다.

1️⃣ 사용자 모드에서 시스템 콜 호출

  • 프로그램이 read() 시스템 콜을 호출하면 실행 흐름이 사용자 모드(User Mode)에서 시작됩니다.
  • 프로그램은 운영체제의 특정 기능(예: 파일에서 데이터 읽기)이 필요하므로 시스템 콜을 요청합니다.
  • 시스템 콜은 보통 라이브러리 함수(예: libc)를 통해 호출됩니다.

2️⃣ 시스템 콜 번호 저장 및 트랩(Trap) 발생

  • 운영체제는 시스템 콜을 효율적으로 관리하기 위해 시스템 콜 번호(System Call Number)를 사용합니다.
  • read() 시스템 콜의 번호가 레지스터에 저장됩니다.
  • syscall 명령어 또는 int 0x80 인터럽트 명령어를 사용해 CPU가 커널 모드로 전환됩니다.

3️⃣ 커널 모드 전환 (컨텍스트 스위칭 발생)

  • 트랩(Trap)이 발생하면 CPU는 커널 모드(Kernel Mode)로 전환됩니다.
  • 커널 모드는 운영체제가 하드웨어에 직접 접근할 수 있는 특권 모드입니다.
  • 컨텍스트 스위칭(Context Switching)이 발생하여 현재 프로그램의 상태를 저장한 후 커널 코드로 이동합니다.

4️⃣ 시스템 콜 핸들러 실행

  • 커널의 시스템 콜 핸들러(System Call Handler)가 실행됩니다.
  • 시스템 콜 테이블(System Call Table)에서 read()에 해당하는 커널 함수를 찾아 실행합니다.
  • 예를 들어, sys_read()라는 내부 함수가 호출될 수 있습니다.
  • 커널은 파일 시스템에서 요청된 데이터를 읽어 메모리에 저장합니다.

5️⃣ 결과 반환 및 사용자 모드 복귀

  • 작업이 완료되면 커널은 사용자 프로그램에 결과(예: 읽은 데이터의 크기 또는 오류 코드)를 반환합니다.
  • CPU는 커널 모드에서 사용자 모드로 전환하여 프로그램이 계속 실행될 수 있도록 합니다.
  • 컨텍스트가 복원되며 프로그램이 시스템 콜 호출 이후의 명령을 수행합니다.

📢 정리: 시스템 콜 실행 흐름

  1. 사용자 프로그램이 시스템 콜을 호출 (read(), write(), fork() 등)
  2. 시스템 콜 번호를 레지스터에 저장
  3. 트랩(Trap) 발생, CPU가 커널 모드로 전환
  4. 시스템 콜 핸들러가 실행되며 요청을 처리
  5. 작업 완료 후 결과 반환, CPU가 사용자 모드로 복귀

2. 시스템 콜 테이블과 운영체제 내부 구조

📌 시스템 콜 테이블 (System Call Table)이란?

운영체제는 다양한 시스템 콜을 지원합니다. 각 시스템 콜은 고유한 번호(System Call Number)를 가지고 있으며, 시스템 콜을 실행할 때 이 번호를 기반으로 적절한 커널 함수를 호출합니다.

운영체제 내부에는 시스템 콜 테이블(System Call Table)이 존재하며, 이 테이블은 시스템 콜 번호와 해당 핸들러 함수의 주소를 매핑합니다.


📌 시스템 콜 테이블의 구조 예시

시스템 콜 번호 시스템 콜 이름 커널 함수
0 sys_read() 파일에서 데이터 읽기
1 sys_write() 파일에 데이터 쓰기
2 sys_open() 파일 열기
3 sys_close() 파일 닫기
4 sys_fork() 새로운 프로세스 생성
5 sys_exec() 실행 중인 프로세스를 새로운 프로그램으로 변경
6 sys_exit() 프로세스 종료
7 sys_wait() 자식 프로세스 종료 대기

📢 시스템 콜 테이블이 하는 역할

✅ 시스템 콜을 효율적으로 처리할 수 있도록 운영체제가 관리하는 핵심 데이터 구조
✅ 사용자 프로그램이 호출한 시스템 콜 번호에 맞는 커널 함수를 실행
✅ 새로운 시스템 콜을 추가하려면 시스템 콜 테이블을 업데이트해야 함


3. 인터럽트와 트랩(Trap)의 개념

시스템 콜은 단순한 함수 호출이 아니라, 운영체제의 특권 모드(커널 모드)로 전환하는 메커니즘이 필요합니다. 이를 위해 CPU는 인터럽트(Interrupt)와 트랩(Trap)을 사용합니다.


📌 인터럽트(Interrupt)란?

인터럽트는 외부 이벤트(입출력, 하드웨어 신호 등)가 발생할 때 CPU의 현재 작업을 중단하고 특정 코드를 실행하는 메커니즘입니다.

하드웨어 인터럽트 (Hardware Interrupt)

  • 키보드 입력, 마우스 클릭, 네트워크 패킷 수신 등
  • 하드웨어 장치가 CPU에게 신호를 보내 인터럽트를 발생시킴

소프트웨어 인터럽트 (Software Interrupt)

  • 프로그램이 명시적으로 발생시키는 인터럽트
  • 시스템 콜도 int 0x80 또는 syscall 명령어를 사용해 소프트웨어 인터럽트를 발생시킴

📌 트랩(Trap)이란?

트랩은 예상된 이벤트(예: 시스템 콜, 예외 처리)가 발생할 때 실행되는 특별한 인터럽트입니다.

트랩의 역할

  1. 시스템 콜 처리: syscall 또는 int 0x80을 실행하면 트랩이 발생하여 운영체제의 시스템 콜 핸들러가 실행됨
  2. 예외 처리(Exception Handling): 0으로 나누기 오류, 페이지 폴트(Page Fault) 등이 발생하면 트랩을 통해 운영체제가 개입
  3. 디버깅: 브레이크포인트(Breakpoint) 설정 시 트랩을 사용하여 디버거가 프로그램의 실행을 중단할 수 있음

📢 인터럽트 vs 트랩 비교

구분 인터럽트 (Interrupt) 트랩 (Trap)
발생 원인 외부 하드웨어 장치 (키보드, 마우스, 네트워크 등) 내부 소프트웨어 이벤트 (시스템 콜, 예외)
발생 시점 예상치 못한 순간 (비동기) 코드 실행 중 특정 시점 (동기)
처리 방식 CPU가 현재 실행 중인 작업을 중단하고 처리 커널이 특정 이벤트 발생 시 처리

🚀 정리 및 핵심 요약

시스템 콜이 실행될 때 사용자 모드 → 커널 모드 전환 과정이 발생
시스템 콜 테이블을 통해 시스템 콜 번호에 맞는 커널 함수를 실행
인터럽트(Interrupt)와 트랩(Trap)을 이용해 시스템 콜이 실행됨
인터럽트는 외부 이벤트, 트랩은 시스템 콜 및 예외 처리