이 영역을 누르면 첫 페이지로 이동
Coding Groot 블로그의 첫 페이지로 이동

Coding Groot

페이지 맨 위로 올라가기

Coding Groot

코딩 블로그

시스템 콜

  • 2025.03.20 01:42
  • Programming
글 작성자: Coding Groot

System call

왜 필요할까?

가장 단순하게 어떤 프로세스든지 I/O나 다른 장치에 관한 여러 작업을 원하는 대로 두면 어떨끼?

모든 프로그램은 디스크 전체를 덮어쓰거나 파일에 접근할 수 있게 된다. 파일 권한 확인하는 코드도 높은 가능성으로 무용지물이 되어버릴 가능성이 크다. 그래서 우리는 제한된 모드인 User mode와 kernal 모드로 프로세서의 모드를 나눠서 사용한다!

User mode

User mode는 실행되느 코드가 할 수 있는 것이 제한된 모드이다. 예를 들어, I/O 요청을 할 수 없다. 만약 User mode에 있는데 I/O 요청을 날리면 프로세서가 예외를 발생시키고 OS가 프로세스를 종료시킬 가능성이 높다.

Kernal mode

커널 모드는 OS(Kernal)이 실행되는 모드이다. 여기서 제한된 명령을 실행시킬 수 있다.

System Call

그럼 애플리케이션 단에서 우리는 디스크에서 파일을 읽는 것과 같은 제한된 명령을 어떻게 사용할 수 있을까?

System Call이다!

System Call은 커널이 파일 시스템에 접근하거나, 프로세스를 생성 및 삭제하거나, 다른 프로세스와 통신하거나, 더 많은 메모리를 할당하는 등의 중요한 기능은 사용자 프로그램에 노출한다.

이 System Call 사용해서 사용자 프로그램도 제약을 우회하여 하드웨어에 접근하거나 중요한 시스템 리소스를 관리하는 작업을 수행할 수 있다.

이처럼 System Call을 통해 커널이 사용자 프로그램에 안전하게 시스템 리소스를 사용할 수 있게 된다.

System Call이 실행되려면?

System Call을 실행하려면 Trap 명령어를 실행해야 한다. Trap 명령어는 동시에 커널로 점프하고 권한 수준을 커널 모드로 높인다. 커널로 들어오면, 시스템은 이제 필요한 특권 작업을 수행할 수 있으며(허용된 경우), 호출 프로세스를 위해 필요한 작업을 수행한다. 작업이 끝나면 OS는 특수한 리턴 프롬 트랩(return-from-trap) 명령어를 호출하여 호출한 사용자 프로그램으로 돌아가면서 동시에 권한 수준을 사용자 모드로 낮춘다.

뭘 실행시키지?

일단 Trap이 발생하여 커널 모드까지 왔다. 근데 여기서 뭘 해야 할지 어떻게 알까?

해결책 1. 점프할 주소를 지정해준다. (Bad)

프로시저를 호출할 때처럼 점프할 주소를 지정할 수는 없다!

프로그램 내에서 특정 함수나 코드 블록을 실행하기 위해 해당 코드의 시작 주소로 점프할 수 있게 되면 프로그램이 커널 내부의 임의의 위치로 점프할 수 있게 되어 매우 큰 문제가 될 수 있다.

해결책 2. 안전한 주소들을 모아둔 Trap Table을 참조한다 (Good)

대신, System Call이 발생하면 Trap Table이 사용된다. 이것은 OS가 부팅될 때 설정하는 테이블이다.

OS는 부팅될 때 커널 모드로 동작하는데 이 테이블에 각 인터럽트와 예외 상황, 그리고 System Call에 대응하는 핸들러(특정 코드의 시작 주소)를 정의해둔다.

System Call을 할 때 프로세서는 사용자 프로그램이 지정한 주소로 점프하는 방식이 아니라 트랩 테이블에 정의된 안전한 위치로 점프하여 커널 코드가 실행되도록 한다.

호출 과정

  1. [준비 단계] 부팅 시에 Trap Table 설정
  2. System Call 명령어 실행
  3. 커널 모드 전환 및 핸들러 실행
  4. 시스템 호출 종료 후 사용자 모드 복귀

면접 질문 예상해보기

System Call이란 무엇이며, 왜 필요한가요?

System Call은 사용자 프로그램이 운영체제의 커널 기능에 접근할 수 있도록 하는 인터페이스입니다. 일반적으로 사용자 프로그램은 사용자 모드에서 실행되는데 이 모드에서는 파일 시스템 접근, 네트워크 통신, 프로세스 관리 등의 작업을 직접적으로 수행할 수 없습니다. 이때 우리는 시스템 호출로 이러한 작업을 요청할 수 있습니다.

System Call이 필요한 이유는
첫째로 보안을 유지하기 위해서입니다. 사용자 모드에서는 직접 하드웨어를 조작할 수 없도록 하고 시스템의 안정성과 보안을 보호합니다.
둘째로 운영체제의 자원을 효율적으로 관리하기 위해서입니다. System Call을 통해 운영체제가 자원에 대한 접근을 제어하고 여러 프로그램이 동일한 자원을 충돌 없이 사용할 수 있도록 해줍니다.

반응형

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 프로세스 맛보기

    프로세스 맛보기

    2025.03.20
  • 꼬리 재귀

    꼬리 재귀

    2025.03.20
  • 캐시

    캐시

    2025.03.20
  • 폰 노이만 구조의 특징

    폰 노이만 구조의 특징

    2025.03.20
다른 글 더 둘러보기

정보

Coding Groot 블로그의 첫 페이지로 이동

Coding Groot

  • Coding Groot의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록
  • 소개
  • 블로그 저작권

카테고리

  • 분류 전체보기 (182)
    • Git (23)
      • Git Tutorial (9)
      • Git Note (7)
      • Git Lecture (7)
    • Programming Language (1)
      • C (2)
      • C Sharp (5)
      • Java (4)
      • JavaScript (7)
      • Julia (5)
      • Python (4)
    • Programming (8)
      • Algorithm (2)
      • Compiler (5)
      • Data Structure (0)
      • Web (12)
      • NestJS (2)
    • DevOps, Infra (36)
      • Apple (6)
      • Cloud (15)
      • Database (1)
      • Network (4)
      • Linux (8)
    • Game Programming (11)
      • Unity Tutorial (5)
      • Unity Note (6)
    • Hardware Design (1)
      • Digital Circuit (1)
    • Note (49)
      • Coffee (2)
      • Retrospect (15)
      • Reading List (14)
    • Mathematics (1)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • git
  • tutorial
  • 서평
  • 회고
  • Github
  • aws
  • 한빛미디어
  • javascript
  • 전체 보기…

정보

Coding Groot의 Coding Groot

Coding Groot

Coding Groot

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기

나의 외부 링크

  • GitHub
  • SlideShare
  • 유니티 2020 수업
  • TIL Blog
  • 모도코

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. Copyright © Coding Groot.

티스토리툴바