컴퓨터 과학

[운영체제] 시스템 콜

Data Jun 2025. 11. 25. 08:58

운영체제(OS)는 단순히 ‘백그라운드에서 돌아가는 프로그램’이 아니라 하드웨어와 사용자 프로그램 사이를 조율하는 핵심 관리자입니다.
이번 글에서는 시스템 콜(System Call), 커널 모드 전환, 사용자 모드/커널 모드, 그리고 실제 시스템 콜 호출 사례까지 정리합니다.

 

1. 응용 프로그램과 OS의 상호작용

응용 프로그램은 직접 하드웨어를 건드릴 수 없습니다.
→ 반드시 운영체제(OS)에 시스템 콜(System Call) 형태로 요청해야 합니다.

  • 응용 프로그램들은 파일 생성, 삭제, 디스크 저장 등 다양한 작업을 요구합니다.
  • 하지만 직접 하드웨어를 제어할 수 없기 때문에, 시스템 콜을 통해 운영체제에 요청합니다.
  • 운영체제는 해당 요청에 맞는 커널 내부 코드(예: 하드디스크 저장 코드, 파일 삭제 코드)를 실행합니다.
  • 그 결과가 아래의 하드웨어로 전달되어 실제 작업이 수행됩니다.

즉, 시스템 콜은 프로그램 → 운영체제 → 하드웨어로 이어지는 공식 통로입니다.

 

2. 시스템 콜이 호출되면 내부에서 무슨 일이 일어날까

 

 

시스템 콜이 실행되면 CPU는 사용자 모드 → 커널 모드로 전환하며 OS 코드를 실행합니다.

 

시스템 콜 호출 시 다음 순서로 진행됩니다.

 

1️⃣ 소프트웨어 인터럽트 발생

  • 시스템 콜 트랩 명령이 실행되면 CPU에 인터럽트가 전달됩니다.

2️⃣ CPU가 커널 모드로 전환

  • 사용자 모드에서는 제한된 명령만 수행 가능하지만 커널 모드에서는 모든 명령 실행이 가능합니다.

3️⃣ 운영체제 코드 실행

  • 파일 삭제, 디스크 저장, 디렉터리 생성 같은 실제 작업 수행

4️⃣다시 사용자 모드로 복귀

  • 작업이 끝나면 원래 프로그램의 코드 실행이 재개됩니다.

 

3. 시스템 콜 처리 과정 메모리 관점

시스템 콜은 마치 인터럽트처럼 커널영역으로 점프하여 실행된 뒤 다시 사용자 영역으로 되돌아옵니다.

 

1️⃣ 사용자 영역에서 응용 프로그램 실행 

  • 코드가 CPU에서 일반 사용자 모드로 실행됨.

2️⃣ 응용 프로그램이 시스템 콜 호출

  • 파일 생성, 네트워크 보내기 등 OS 기능이 필요할 때 호출.

3️⃣ CPU → 커널 영역으로 전환

  • 운영체제 전용 메모리 영역으로 점프

4️⃣ 운영체제 코드 실행

  • 커널 내부 코드가 실제 기능 수행.

5️⃣ 시스템 콜 리턴 후 사용자 영역으로 복귀

  • 다시 사용자 프로그램의 다음 줄부터 실행 재개.

 

4. 사용자 모드 VS 커널 모드

CPU는 두 가지 모드로 동작합니다:

  • 사용자 모드(User Mode)
  • 커널 모드(Kernel Mode)

1️⃣ 🟦 사용자 모드 (User Mode)

  • 응용 프로그램이 실행되는 영역
  • OS 서비스를 직접 제공받을 수 없음
  • 메모리, 하드웨어 접근은 제한됨
  • 보호된 명령(예: 디스크 접근)은 실행 불가

2️⃣ 🟥 커널 모드 (Kernel Mode)

  • 운영체제 코드가 실행되는 모드
  • 하드웨어 접근 가능
  • 모든 명령 실행 가능
  • 시스템 콜 실행 시 CPU는 자동으로 커널 모드로 전환됨

Dual Mode는 보안 + 안전성 확보를 위한 필수 구조입니다.

 

5. hello world도 시스템 콜을 600번 넘게 호출한다

아주 간단한 Python 프로그램도 실행 과정에서 수백 번의 시스템 콜을 호출합니다.

  • stat, openat, read, fstat 등 수많은 시스템 콜이 호출됨
  • 600회 이상 호출
  • 단순한 "hello world" 출력조차도 내부적으로 파일 로딩, 라이브러리 접근 등 OS 기능을 활용하기 때문

즉, “아무것도 안 하는 앱조차 시스템 콜 덩어리”라는 사실이 드러납니다.

 

6. ls 명령어도 프로그램이기 때문에 시스템 콜을 쓴다

우리가 자주 쓰는 ls 명령어도 내부적으로는 **프로그램(program)**이며, 실행 과정에서 많은 시스템 콜을 호출합니다.

  • openat, close, read, write, stat 등 다양한 시스템 콜 발생
  • 총 호출 횟수: 162번

리눅스 명령어도 결국 프로그램이며, OS 서비스를 받아야만 동작한다는 점을 보여줍니다.

 

 

정리하면

개념 핵심 내용
시스템 콜 사용자 프로그램이 운영체제 서비스를 요청하는 유일한 통로
커널 모드 하드웨어 접근 가능, 운영체제가 실행되는 모드
사용자 모드 안전한 실행 환경, 제한된 명령만 가능
시스템 콜 호출 흐름 사용자 프로그램 → 소프트웨어 인터럽트 →  커널 모드 전환 →  OS 가능 수행 →  사용자 모드 복

 

운영체제를 “큰 그림”으로 이해하면
프로세스, 파일 시스템, 메모리 관리, 스케줄링 같은 후속 개념도 훨씬 쉽게 연결됩니다.