[OS] 시스템 콜(System Call)

2025. 8. 14. 23:59·Computer Science/운영체제

시스템 콜(System Call)의 개념, 동작과 종류에 대해 알아보자!

 

시스템 콜(System Call) 개념

 

 시스템 콜(System Call)은 서비스를 호출하는, 즉 커널에 접근하기 위한 인터페이스이다.

 

[Fit.1] 운영체제 구조

 

user mode는 시스템 콜을 이용하여 kernel mode에서의 기능을 수행할 수 있다.

C와 C++ 같은 고급 언어로 작성되는 API 함수를 호출하면 → API는 내부적으로 시스템 콜을 호출하여 OS 커널 기능을 수행한다.

 

❓ 왜 시스템 콜을 직접 호출하지 않고 API를 이용하여 간접적으로 호출할까?

❗️시스템 콜은 하드웨어와 직접 상호작용하기 때문에, API 함수가 시스템 콜 호출을 추상화한다면 프로그래머가 함수 호출 만으로 시스템 콜을 수행할 수 있다. 따라서 시스템 콜에 대한 변경이나 에러 처리도 유연하게 처리할 수 있으므로 유지보수가 쉽다.

 

참고로 OS가 사용하는 API는 제각기다! (호출하는 함수 이름이 다르다.)

  • 윈도우: Win32 API
  • POSIX 기반 시스템(UNIX, Linux, Mac OS X): POSIX API
  • JVM: Java API

 


 

시스템 콜(System Call) 동작

[Fit.2] 시스템 콜 인터페이스

 

다음은 시스템 콜이 동작하는 과정이다!

시스템 콜 인터페이스(System Call Interface)는 테이블에 커널이 정의한 "인덱싱 된 시스템 콜 번호"를 가진다.

 

예를 들어 open()을 호출하면

→ 시스템 콜 인터페이스는 테이블에서 open()에 해당하는 시스템 콜 번호인 i번을 찾아

→ 커널 내부의 서비스를 실행한다.

→ 실행을 마치면 리턴 값(파일 디스크립터 번호)과 상태 정보(성공 or 에러 코드 값)를 유저 프로그램으로 return 한다.

 

[Fit.3] 파라미터 전달

 

만약 커널로 데이터도 함께 전달하고 싶다면

레지스터에 값 또는 주소를 담은 후, 커널 내부의 서비스에서 그 값을 읽거나 주소를 참조하여 데이터를 처리한다.

  • 값을 담는 경우: 레지스터에 들어갈 수 있는 크기(8바이트 이내)의 값
  • 주소를 담는 경우: 레지스터에 들어갈 수 없는 크기의 값.
        ⇒ 값을 메모리(스택 or 힙)에 담고, 메모리의 주소를 레지스터에 담는다.

 


 

시스템 콜(System Call) 종류

다음은 커널 기능을 수행할 수 있는 시스템 콜의 종류이다.

 

1. 프로세스 제어 (Process Control)

  • 끝내기(exit), 중지 (abort)
  • 적재(load), 실행(execute)
  • 프로세스 생성(create process) - fork
  • 프로세스 속성 획득과 속성 설정
  • 시간 대기 (wait time)
  • 사건 대기 (wait event)
  • 사건을 알림 (signal event)
  • 메모리 할당 및 해제

2. 파일 조작 (File Manipulation)

  • 파일 생성 / 삭제 (create, delete)
  • 열기 / 닫기 / 읽기 / 쓰기 (open, close, read, wirte)
  • 위치 변경 (reposition)
  • 파일 속성 획득 및 설정 (get file attribute, set file attribute)

3. 장치 관리 (Device Manipulation)

  • 하드웨어의 제어와 상태 정보를 얻음 (ioctl)
  • 장치를 요구(request device), 장치를 방출 (relese device)
  • 읽기 (read), 쓰기(write), 위치 변경
  • 장치 속성 획득 및 설정
  • 장치의 논리적 부착 및 분리

4. 정보 유지 (Information Maintenance)

  • getpid(), alarm(), sleep()
  • 시간과 날짜의 설정과 획득 (time)
  • 시스템 데이터의 설정과 획득 (date)
  • 프로세스 파일, 장치 속성의 획득 및 설정

5. 통신 (Communication)

  • pipe(), shm_open(), mmap()
  • 통신 연결의 생성, 제거
  • 메시지의 송신, 수신
  • 상태 정보 전달
  • 원격 장치의 부착 및 분리

6. 보호 (Protection)

  • chmod()
  • umask()
  • chown()

 

:)

 

출처

https://velog.io/@gang_shik/%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%BD%9CSystem-Call

https://brightstarit.tistory.com/13

https://didu-story.tistory.com/311

'Computer Science > 운영체제' 카테고리의 다른 글

[OS] 메모리 관리- 페이징(Paging)과 세그먼테이션(Segmentation)  (2) 2025.08.21
[OS] 프로세스 동기화(Process Synchronization)  (5) 2025.08.03
[OS] IPC(Inter-Process Communication)  (4) 2025.07.31
[OS] GC(Garbage Collection, 가비지 컬렉션)  (1) 2025.07.21
[OS] 프로세스(Process) vs 스레드(Thread)  (0) 2025.06.19
'Computer Science/운영체제' 카테고리의 다른 글
  • [OS] 메모리 관리- 페이징(Paging)과 세그먼테이션(Segmentation)
  • [OS] 프로세스 동기화(Process Synchronization)
  • [OS] IPC(Inter-Process Communication)
  • [OS] GC(Garbage Collection, 가비지 컬렉션)
jjangsudiary
jjangsudiary
jjangsudiary 님의 블로그 입니다.
  • jjangsudiary
    jjangsudiary 님의 블로그
    jjangsudiary
  • 전체
    오늘
    어제
    • 분류 전체보기 (81) N
      • 이모저모 (0)
        • 회고 (0)
      • Development (17) N
        • 개발 공부 (14) N
        • 프로젝트 (2)
      • Android (10)
        • Compose (1)
      • AI (15)
      • Computer Science (25)
        • 네트워크 (8)
        • 데이터베이스 (10)
        • 운영체제 (6)
        • 자료구조 (0)
        • 컴퓨터구조 (1)
      • Java (9)
        • 디자인패턴 (2)
      • Spring (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    파이썬
    Python
    운영체제
    머신러닝
    백준
    os
    TensorFlow
    database
    baekjoon
    인공지능
    자바
    CS
    딥러닝
    코딩 테스트
    db
    안드로이드
    android
    프로그래머스
    Ai
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
jjangsudiary
[OS] 시스템 콜(System Call)
상단으로

티스토리툴바