[운영 체제] Chapter 4 | Process Management 1&2

피망이·2024년 4월 15일

프로세스 생성(Process Creation)

  • 부모 프로세스(Parent process)가 자식 프로세스(children process) 생성한다.

    • 프로세스의 문맥(context)를 모두 복사하는 것이다.
  • 프로세스는 자원을 필요로 한다.

    • 운영체제로부터 받고, 부모와 공유한다.

      • 한 번 생성되면 서로 경쟁하는 관계에 놓인다.

      • 프로그램 카운터 위치만 복사해서 공유 → 복제 순으로 진행한다.

        • copy-on-write(COW) : write가 발생했을 때 그 때 copy

  • 주소 공간(Address space)

    • 자식은 부모의 공간을 복사한다. (binary and OS data)
  • fork() : 시스템 콜이 새로운 프로세스를 생성하는 것이다.

    • 직접 복사하는 것이 아닌 운영 체제에게 요청하는 것
    • 부모를 그대로 복사한다. (OS data except PID + binary)
  • fork 다음에 이어지는 exec() : 시스템 콜을 통해 새로운 프로그램을 메모리에 올린다.

    • 새로운 인생을 사는 것

프로세스 종료(Process Tremination)

  • exit : 프로세스가 운영체제에게 시스템 콜을 넣어준다.

    • 자식이 부모에게 output data를 보낸다. → 자식이 먼저 죽는다. (via wait)
    • 자발적으로 프로세스를 종료시키고 싶을 때 사용한다.
  • abort : 부모 프로세스가 자식의 수행을 종료시킨다.

    • 자식이 할당 자원의 한계치를 넘어서거나 더 이상 필요하지 않을 때 죽인다.(kill)
    • 자식이 먼저 모두 죽고 부모가 죽는다.
    • 비자발적으로 프로세스를 종료시키고 싶을 때 사용한다.


fork() 시스템 콜

  • fork() 이후 자식 프로세스 하나 만들어진다.

    • 프로그램 카운터가 fork()를 가리키고 있었을 것이므로, fork() 다음 줄부터 실행한다.

      • main() 함수의 시작부터 실행되는 것이 아니다!
    • 부모는 fork()의 결과값이 양수 > 0, 자식은 fork()의 결과값이 0이다.

      • pid가 > 0이면 부모, == 0이면 자식이다.

exec() 시스템 콜

  • exec() 시스템 콜은 프로그램을 새로운 프로세스로 태어나게 하는 역할을 해준다.

    • execlp() : 기억을 잊고 새로운 프로그램을 덮어 씌워 실행시킨다.

      • Linux) "bin/date"는 현재 날짜를 출력해주는 프로그램이다.

wait() 시스템 콜

  • wait() 시스템 콜을 호출하면 block 상태로 만들어 ready하게 만든다.

    • 부모 프로세스를 잠들게 하고 자식 프로세스가 완료될 때 다시 깨운다.
  • 리눅스 명령어에 프로그램 이름을 넣으면 프로그램이 자식 프로세스가 되어 실행된다.

    • 자식 프로세스가 끝날 때까지 잠시 기다린 뒤, 새로운 커맨드를 받기 위한 상태로 돌아온다.

exit() 시스템 콜

  • 자발적 종료와 비자발적 종료가 있다.

    • 전자는 exit()을 후자는 kill, break 등을 친 경우에 해당한다.
    • 부모 프로세스를 종료하면 자식들이 먼저 종료되고 난 후 부모가 종료된다.

Summary

프로세스 간 협력

  • Interprocess Communication(IPC)

    • Message passing
    • Shared memory
      cf. thread는 하나의 프로세스이므로 협력으로 보기는 어려우나, 주소 공간을 공유한다는 측면에서는 비슷할 수 있다.

  • Massage passing : 메시지를 전달하는 방법

    • 운영체제 커널을 통해 전달한다.
    • Direct와 Indirect가 있다.

  • Shared memory

    • 운영 체제에게 shared memory를 쓴다는 요청을 한다.
    • 서로 독립적인 주소를 갖지만 일부 주소 공간의 메모리를 공유한다.


profile
물리학 전공자의 프로그래밍 도전기

0개의 댓글