System Call

이연희·2022년 4월 27일
0

OS

목록 보기
4/10
post-custom-banner

System Call

개념

시스템 콜은 운영체제에게 어떠한 기능 수행을 요청하는 수단이다. 파일을 읽고 쓰거나 화면에 메세지를 출력하는 부분에 있어서 커널 모드를 사용하는데, 시스템 콜은 이런 커널 영역의 기능을 사용자 모드가 사용 가능하게 한다. 즉 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 사용할 수 있게 한다.

목적

  1. 추상화된 하드웨어 인터페이스를 유저 프로세스에게 제공한다.
  2. 시스템의 보안과 안전성을 보장한다.
  3. 가상화된 유저 프로세스와 시스템이 소통할 수 있는 유일하고 공통적인 소통수단이다.

동작

  • 운영체제는 시스템 콜 인터페이스 제공한다.
  • 시스템 콜에 할당된 번호래 따라 시스템 콜 인터페이스는 색인되는 테이블을 유지한다.
  • 시스템 콜 인터페이스는 필요한 시스템 콜을 부르고 시스템 콜의 상태와 반환 값을 돌려준다.
  • 따라서 사용자는 시스템 콜이 어떻게 구현되고 실행 중 무슨 작업을 하는지 알 필요가 없다.
  1. 사용자 프로세스가 시스템 콜을 요청하면 커널 모드로 변경된다.
  2. 커널은 각각 시스템 콜을 구분하기 위해 고유번호를 할당하고, 번호에 해당하는 제어루틴을 커널 내부에 정의한다.
  3. 커널은 요청받은 시스템 콜에 대응하는 번호를 확인한다.
  4. 커널은 그 번호에 맞는 서비스 루틴을 호출한다.
  5. 서비스 루틴을 모두 처리하고 나면 커널 모드에서 사용자 모드로 전환된다.

기능

  1. 사용자 모드에 있는 응용 프로그램이 커널의 기능을 사용할 수 있도록 한다.
  2. 시스템 호출시 사용자 모드에서 커널 모드로 변경된다.
  3. 커널에서 시스템 호출을 처리하면 커널 모드에서 사용자 모드로 돌아가 작업을 계속 진행한다.

유형

프로세스 제어(Process Control)

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

파일 조작(File Manipulation)

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

장치 관리(Device Management)

  • 장치를 요구(request devices), 장치를 방출(release device)
  • 읽기, 쓰기, 위치 변경
  • 장치 속성 획득, 장치 속성 설정
  • 장치의 논리적 부착(attach) 또는 분리(detach)

정보 유지(Information Maintenace)

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

통신(Communication)

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

매개변수 전송

  1. 레지스터를 통한 전송: 매개변수를 CPU 레지스터 내에 직접 전달한다. 이 경우에 매개변수의 갯수가 CPU 내의 총 레지스터 개수보다 많을 수 있기 때문에 권장하지 않는 방법이다.
  2. 블록 또는 테이블을 통한 전송: 매개변수를 메모리 내의 블록이나 테이블에 저장하고 해당 메모리의 주소가 레지스터에 전달된다.
  3. 스택을 통한 전송: 매개변수는 프로그램에 의해 스택(stack)으로 전달(push)될 수 있다. 매개변수는 프로그램에 의해 스택에 넣어지고 운영체제에 의해 꺼내진다.

💡 전달되는 매개변수들의 개수나 길이를 제한하지 않는 이유로 2) 블록 또는 테이블을 통한 매개변수 전송 방법이 많이 사용된다.

fork(), exec(), wait()

🔹 fork() 시스템 호출

  • 개념: 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수

  • 목적: 빠른 자식 프로세스 실행

  • 프로세스를 복사할 때 기존의 프로세스는 부모 프로세스가 되고 새로 생긴 프로세스는 자식 프로세스가 된다. 두 프로세스는 부모-자식 관계로 연결된다.

🔻 동작과정

  • 프로세스 구분자(PID)가 바뀐다. 주민번호의 개념과 같다.

  • 부모 프로세스 구분자(PPID)와 자식 프로세스 구분자(CPID)가 바뀐다. 그림에서 fork()된 자식 프로세스에서 PPID는 부모 프로세스의 PID인 326이고, CPID는 -1이다.

🔻 장점

  • 기존 메모리에서 복사하기 때문에 자식 프로세스의 생성 속도가 빠르다.

  • 부모 프로세서가 사용하던 모든 자원을 추가 작업 없이 자식 프로세스에 상속할 수 있다. 즉, 추가 작업 없이 자원을 상속할 수 있다.

  • 부모 프로세스와 자식 프로세스가 자식 프로세스 구분자(CPID)와 부모 프로세스 구분자(PPID)로 연결되어 있다. 따라서 자식 프로세스를 종료하면 프로세스가 사용하던 메모리 영역, 파일, 하드웨어를 부모 프로세스가 정리 할 수 있다.

🔹 exec() 시스템 호출

  • 개념: 기존의 프로세스를 새로운 프로세스로 전환하는 함수이다. 프로세스는 그대로 둔 채 내용만 바꾸는 시스템 호출이고, 호출시 현재의 프로세스가 완전히 다른 프로세스로 전환된다.

  • 목적: 프로세스의 구조체를 재활용하기 위함이다.

🔻 동작과정

  • 코드 영역에 있는 기존의 내용을 지우고 새로운 코드로 바꾼다.

  • 데이터 영역이 새로운 변수로 채워지고 스택 영역이 리셋된다.

  • 각종 프로세스 구분자(PID,PPID,CPID)를 제외하고 프로세스의 내용을 새로운 것으로 바꾼다.

🔻 장점

  • 이미 만들어진 프로세스 제어 블록, 메모리 영역, 부모-자식 관계를 활용할 수 있어서 편리하다.

  • 새로운 코드 영역만 가져오면 되기 때문에 운영체제의 작업이 수월하다.

🔹 wait() 시스템 호출

-개념: 자식 프로세스의 종료되기 전까지 부모 프로세스를 대기시키는 시스템 콜이다.

-목적: 좀비 프로세스를 회수하고 고아 프로세스가 되는 것을 방지한다.

profile
공부기록
post-custom-banner

0개의 댓글