Home [ostep] 프로세스 API
Post
Cancel

[ostep] 프로세스 API

  • 유닉스 프로세스 생성
    • fork(), exec() 시스템 콜
    • wait():

fork() 시스템 콜

  • 생성된 프로세스가 호출한 프로세스의 복사본

  • 완전 동일하지는 않음
    • 각자 다른 주소공간, 레지스터, PC값
    • fork() 시스템 콜의 반환 값이 서로 다름
      • 자식 프로세스: 0
      • 부모 프로세스: 생성된 자식의 PID
  • 부모 프로세스, 자식 프로세스 실행 순서
    • CPU 스케줄러가 선택
    • 비결정성: 멀티쓰레드 프로그램 다양한 오류의 원인

wait() 시스템 콜

  • wait 시스템 콜은 자식 프로세스가 종료될 때까지 리턴하지 않음
  • 부모가 먼저 실행되더라도 자식 종료 후 wait()가 리턴함

exec() 시스템 콜

  • 다른 프로세스 실행
    • 실행파일의 이름과 인자
      • 실행파일의 코드 + 정적 데이터를 읽어 형재 프로세스의 코드 세그멘트와 정적 데이터 부분을 덮어씀
  • 주소공간들로 새로운 프로그램의 실행을 위해 다시 초기화됨
    • 새로운 프로세스를 생성하지는 않음
    • 현재 실행중인 프로그램을 다른 실행 중인 프로그램으로 대체함
    • 이전 코드는 리턴하지 않음

이런 API 존재이유: 프로세스를 생성하고 조작하는 강력한 방법

  • unix 쉘을 구현하기 위해서는 fork 와 exec를 분리해야함
    • 쉘이 fork를 호출하고 exec를 호출하기전에 코드를 실행하기 위함
      • 실행하는 코드: 프로그램 환경설정, 다양한 기능을 준비
  • 한 프로세스의 출력은 자연스럽게 다음 프로세스의 입력으로 사용 가능, 명령어 체인 형성됨

핵심 질문

  • 프로세스를 생성하고 제어하는 방법?
    • OS가 어떤 인터페이스를 제공해야?
    • 이 인터페이스는 어떻게 설계?

출처

http://ostep.org/Korean/05-cpu-api.pdf

This post is licensed under CC BY 4.0 by the author.

[C++] 참고할만한 링크 목록

[C++] emc++ 02: Modern C++