시스템 콜이 호출되면 어떤 일이 발생하나요?

면접용 답변

시스템 콜(System Call)은 사용자 모드에서 커널 모드로 진입하기 위한 인터페이스입니다. 사용자 프로그램이 입출력, 파일 처리, 메모리 관리 등 운영체제의 자원에 접근하려 할 때, 시스템 콜을 통해 커널에게 요청을 전달합니다.

시스템 콜이 호출되면 사용자 모드에서 커널 모드로 전환되고, 운영체제가 요청된 작업을 수행한 뒤 다시 사용자 모드로 복귀합니다. 경우에 따라 문맥 교환이 발생하며, 이는 시스템 콜의 오버헤드로 작용할 수 있습니다.

개념 설명

시스템 콜(System Call)

  • 사용자 프로그램이 운영체제 커널의 기능을 요청하는 인터페이스

  • 입출력, 프로세스 생성, 메모리 할당 등은 커널만 수행 가능 → 시스템 콜을 통해 요청

  • 예: read(), write(), fork(), exec()

시스템 콜 호출 시 동작 흐름

  1. 사용자 코드에서 시스템 콜 함수 호출 (read(), write() 등)

  2. 라이브러리에서 시스템 콜 번호와 인자 준비

  3. syscall 명령어로 커널 모드로 전환

  4. 커널이 해당 시스템 콜 핸들러 실행

  5. 결과를 사용자 영역으로 반환하고 사용자 모드로 복귀

시스템 콜의 특징

  • 사용자 모드 → 커널 모드 전환 발생

  • 보안과 안정성 확보: 직접 자원 접근 불가, 반드시 커널을 통해 우회 접근

  • 커널이 제공하는 제한된 기능만 사용 가능

사용자 모드 vs 커널 모드

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

접근 범위

제한적 (하드웨어 직접 접근 불가)

모든 자원에 접근 가능 (디스크, 메모리, CPU 등)

권한

낮음

높음

안정성

높은 편 (오류가 시스템 전체에 영향 주지 않음)

낮을 수 있음 (커널 오류는 시스템 전체 영향)

전환 방식

시스템 콜 또는 인터럽트로만 진입 가능

커널에서 사용자 모드로 전환 후 애플리케이션 실행

예시 작업

변수 계산, 로직 처리, UI 등 애플리케이션 로직

입출력 처리, 메모리 할당, 프로세스 스케줄링 등

커널 모드에서만 가능한 작업: 시스템 콜 처리, 하드웨어 제어, 메모리 보호 설정 등


추가 질문

  • 시스템 콜 오버헤드를 줄이기 위한 방법은?

  • 시스템 콜 인터럽트와 일반 인터럽트의 차이점은?

  • 사용자 모드에서 직접 커널에 접근하는 것이 막혀있는 이유는 무엇일까요?

Last updated