System Calls in Linux Kernel

리눅스

목록 보기
1/8

1️⃣ System Call

시스템 호출이란 사용자 프로그램이 실행 중인 운영체제의 커널(kernel)에 서비스를 요청하는 프로그래밍적 방법

  • 사용자 프로그램은 직접 커널 자원에 접근할 수 없기 때문에
  • 운영체제가 제공하는 시스템 호출 인터페이스를 통해서만 요청을 보낼 수 있다

👉 프로세스와 운영체제 사이의 인터페이스 역할


✔ System Call의 특징

  • 사용자 수준(user-level) 프로세스가 운영체제 서비스를 요청할 수 있게 한다
  • 시스템 호출은 트랩(trap)의 특별한 형태이다
  • 트랩은 소프트웨어 인터럽트이다

✔ System Call 동작 과정

  1. 사용자 모드(User Mode)에서 시스템 호출 발생
  2. CPU가 커널 모드(Kernel Mode)로 전환
  3. 커널이 요청된 작업 처리
  4. 다시 사용자 모드로 복귀

📌 중요 포인트
시스템 호출이 발생하면 반드시 User Mode → Kernel Mode → User Mode 전환이 일어난다.


2️⃣ 인터럽트(Interrupt)

✔ 인터럽트란?

현재 실행 중인 작업을 중단하고, 즉시 처리해야 할 이벤트가 발생했음을 알리는 신호

  • 인터럽트는 프로세서(CPU)에 현재 실행 흐름을 바꾸도록 요청한다
  • 주로 하드웨어 장치에 의해 발생한다

✔ 인터럽트 처리 과정

  1. 현재 실행 중인 작업(프로세스) 중단
  2. 현재 상태(Context) 저장
  3. 인터럽트 핸들러(Interrupt Handler) 실행
  4. 인터럽트 처리 완료 후
  5. 중단되었던 작업 재개

TrapInterrupt
트랩은 사용자 프로그램이 운영체제에게 즉시 어떤 기능을 수행하도록 지시하기 위해 발생시키는 신호이다.인터럽트는 즉각적인 처리가 필요한 이벤트가 발생했음을 알리기 위해 하드웨어가 CPU에 보내는 신호이다.
동기적(synchronous) 처리 방식이다.비동기적(asynchronous) 처리 방식이다.
모든 트랩은 인터럽트이다.모든 인터럽트가 트랩인 것은 아니다.
사용자 프로그램의 명령어에 의해 생성된다.하드웨어 장치에 의해 생성된다.
소프트웨어 인터럽트라고도 불린다.하드웨어 인터럽트라고도 불린다.
운영체제 내의 특정 기능을 실행하며, 제어를 트랩 핸들러(trap handler)에게 넘긴다.CPU가 특정 인터럽트 핸들러(interrupt handler) 루틴을 실행하도록 강제한다.

3️⃣ 트랩(Trap)

✔ 트랩이란?

동기적(synchronous) 소프트웨어 인터럽트

  • 트랩은 사용자 프로세스에 의해 의도적으로 또는 오류로 발생한다
  • 운영체제 기능을 호출하거나, 예외 상황을 처리하기 위해 사용된다

✔ 트랩 발생 원인

1. 명령어 오류

  • 0으로 나누기 (division by zero)
  • 잘못된 메모리 접근 (illegal memory access)

2. 시스템 호출

  • 사용자 프로그램이 운영체제에 서비스 요청(system call)을 할 때
  • 이때도 내부적으로 트랩이 발생한다.

✔ 트랩 예시: printf()

printf("%s\n", str);
  • printf()는 사용자 공간(User Space)의 C 라이브러리 함수
  • 내부적으로 write() 시스템 호출을 사용
  • write() 시스템 호출이 실제로 출력 장치에 데이터를 전달

즉,

printf() → write() → 시스템 호출 → 트랩 발생 → 커널 처리

4️⃣ 시스템 호출의 주요 분류 (6가지)

분류설명
프로세스 제어 (Process Control)• 프로세스 생성 / 종료
• 로드(load), 실행(execute)
• 프로세스 속성 설정 / 조회
• 시간 대기, 이벤트 대기
• 메모리 할당 및 해제
파일 관리 (File Management)• 파일 생성 / 삭제
• 파일 열기 / 닫기
• 읽기 / 쓰기 / 위치 재설정
• 파일 속성 설정 / 조회
장치 관리 (Device Management)• 장치 요청 / 해제
• 장치 읽기 / 쓰기
• 장치 속성 설정 / 조회
• 장치 논리적 연결 / 분리
정보 유지 관리 (Information Maintenance)• 시간 / 날짜 설정 및 조회
• 시스템 데이터 관리
• 프로세스, 파일, 장치 속성 관리
통신 (Communication)• 통신 연결 생성 / 삭제
• 메시지 송수신
• 상태 정보 전달
• 원격 장치 연결 / 분리
보호 (Protection)• 파일 접근 권한 설정 / 조회

5️⃣ 리눅스 시스템 호출 예제

fork()

  • 호출한 태스크의 모든 상태를 복사
  • 완전히 독립적인 새로운 프로세스 생성

📌 특징

  • 부모 프로세스와 자식 프로세스는 서로 다른 주소 공간
  • 상태를 공유하지 않음

clone()

  • 호출한 태스크의 일부 상태만 공유
  • 주로 스레드 생성에 사용

📌 특징

  • 주소 공간, 파일 테이블 등 일부 자원 공유 가능
  • clone_flags를 통해 공유 범위 제어

✨ 정리 요약

개념특징
System Call사용자 프로그램이 커널 서비스 요청
Interrupt하드웨어 중심, 비동기
Trap소프트웨어 중심, 동기
fork()모든 상태 복사 → 프로세스
clone()일부 상태 공유 → 스레드

0개의 댓글