본문 바로가기
KraftonJungle2기/Today I Learned

[TIL] OS - System Call

by SooooooooS 2023. 6. 7.
728x90

1. 운영체제 서비스(Operating System Service)

  • 사용자에게 도움을 주기 위한 기능
    • 사용자 인터페이스(User Interface)
    • 프로그램 수행(Program Execution)
      • 프로그램을 메모리에 적재(load)해 구동(Run)하고 실행(Execute)할 수 있어야 한다.
      • 정상적이든 비정상적이든 실행을 끝낼 수 있어야 한다.
    • 입출력 연산(I/O Operation)
      • 수행 중인 프로그램은 입출력을 요구할 수 있다.
      • 효율과 보호를 위해 사용자들이 직접 제어를 할 수 없으므로 운영체제가 수단 제공
    • 통신(Communication)
      • 동일한 컴퓨터에[서 수행되고 있는 프로세스들 사이에서의 통신
      • 네트워크에 의해 함께 묶여있는 서로 다른 컴퓨터 사이에서의 통신
      • 공유메모리, 메시지 전달 기법을 사용하여 구현
    • 오류 탐지(Error Detection)
      • 올바르고 일관성있는 계산을 보장하기 위해 각 유형의 오류에 대한 적절한 조치 필요
      • 디버깅
  • 시스템 자체의 효율적인 동작을 보장하기 위한 기능
    • 자원 할당(Resource Allocation)
      • 다수의 작업이 동시에 실행될 때, 그들 각각에 자원을 할당
    • 기록 작성(Logging)
    • 보호(Protection)와 보안(Security)
      • 보호 : 시스템 자원에 대한 모든 접근이 통제되도록 보장
      • 보안 : 시스템에게 자기 자신임을 인증하도록 하여 외부 장치들의 부적합한 접근 시도 제지

2. System Call

운영체제에 의해 사용 가능하게 된 서비스에 대한 인터페이스 제공

1. 응용 프로그램 인터페이스(API)

각 함수에 전달되어야 할 매개변수들과 프로그래머가 기대할 수 있는 반환 값을 포함하여 응용프로그래머가 사용할 수 있는 함수의 집합을 명시
ex)POSIX API, Java API 등
  • API를 구성하는 함수들은 통상 응용 프로그래머를 대신하여 실제 시스템콜을 호출한다.
  • 프로그래머가 직접 호출하지 않고 API를 선호하는 이유
    • API 사용법이 훨씬 쉽다.
    • 구현에 대한 자세한 내용을 숨길 수 있다.
    • 같은 API를 지원하는 어느 시스템에서건 컴파일되고 실행된다는 것을 기대할 수 있는 호환성 관련 이점도 있다.

2. 시스템 콜 인터페이스

운영체제가 제공하는 시스템 콜에 대한 연결고리 역할을 한다.
API 함수의 호출을 가로채어 필요한 운영체제 시스템 콜을 호출한다.

https://rebro.kr/171

  • i = 각 시스템 콜에 할당된 번호
  • 위의 할당된 번호에 따라 알맞은 ISR(Interrupt Service Routine)의 주소를 저장한 테이블을 가진다.
  • 호출자는 시스템 콜이 어떻게 구현되고 실행 중에 무슨 작업을 하는지 자세하게 알 필요가 없다.
  • 단지, API를 준수하고 시스템 콜의 결과로서 운영체제가 무엇을 할 것인지만 이해하면 된다.

3. 운영체제에 매개 변수를 전달하기

  • 레지스터 내에 전달
    • 가장 간단한 방법이지만 
    • 매개변수를 사용 가능한 레지스터의 수만큼만 전달할 수 있다.
  • 메모리 내의 블록이나 테이블 저장
    • 메모리에 저장한 후 그 주소를 레지스터 내에 전달
  • 스택에 저장
    • 프로그램에 의해 스택에 push
    • 운영체제에 의해 스택에서 pop

4. 시스템 콜의 유형

  • process control(프로세스 제어)
    • 실행 중인 프로그램은 수행을 정상적으로 또는 비정상적으로 멈출 수 있어야 한다.
    • 한 프로그램을 실행하고 있는 프로세스가 다른 프로그램을 Load하고 Execute할 수 있다.
  • file manipulation(파일 조작)
    • Create
    • Delete
    • Open
    • Read
    • Write
  • device management(장치 관리)
    • 메인 메모리, 디스크, 파일 등  자원을 필요로 할 수 있다.
  • information maintenance(정보 유지)
  • communication(통신)
    • 메시지 전달 모델
      • 통신하는 두 프로세스가 정보를 교환하기 위해 서로 메시지를 주고 받는다.
      • 연결이 되어있는 상태에서 통신한다.
      • Client-Server
    • 공유 메모리 모델
      • 프로세스는 다른 프로세스가 소유한 메모리에 접근하기 위해 사용

3. ELF

C 파일 실행

1. Linker

컴파일러에 의해 생성된 재배치 가능 목적 파일(main.o)을 하나의 이진 실행파일(main)로 결합
라이브러리도 이때 포함된다.

2. Loader

이진 실행 파일을 메모리에 적재한다.

3. ELF

Executable and Linkable Format
UNIX 및 Linux의 표준 형식
  • 목적 파일 및 실행 파일은 일반적으로 표준화된 형식을 가진다.
  • file main.o = ELF 재배치 가능 파일
  • file main = ELF 실행 파일

https://ko.wikipedia.org/wiki/ELF_파일_형식
실행 시 호출되는 시스템콜에 대한  간단한 그림


핀토스 프로젝트에 들어가고 부터 너무 구현에만 시간을 쓴거 같다.

핀토스 1주차 때의 경험을 바탕으로 구현에만 치중하지 않고 개념에도 비중을 두어야 겠다는 생각이 들었다.

매일을 무리더라도 개념에 대한 정리는 꼭 잊지 않고 해야겠다.

728x90