[운영체제] 프로세스 관리

서지혜·2023년 7월 13일
0

TIL

목록 보기
13/22

🧭 CS Study - 운영체제

🚩 주제 : 프로세스 관리(Process Management)

🎥 강의 : KOCW 운영체제 강의 - 이화여자대학교 반효경 교수님

자식 프로세스(Child Process)

부모 프로세스(Parent Process)는 자식 프로세스를 생성한다. 보통의 경우, 자식 프로세스는 부모 프로세스 복제 생성을 통해 탄생한다. 부모 프로세스의 Program Counter값, code, data, stack 등을 복제한다.
한 부모 프로세스는 자식 프로세스를 여러개 만들 수 있다. 그러므로 자식 프로세스와 부모 프로세스는 트리 구조를 이루게 된다.
프로세스는 생성할 때 자원을 필요로 하는데 이는 운영체제로부터 할당받는다. 자식 프로세스는 자원을 부모와 공유할 수도 있고 그렇지 않을 수도 있다.

자식 프로세스가 생성될 때는 부모 프로세스의 주소공간을 복사해서 생성한다. 부모의 자원 데이터도 일단 복사한다. 그 뒤에 복제된 공간에는 새로운 프로그램을 올린다. fork() 시스템콜은 이러한 역할을 하는 시스템콜이다.

자식 프로세스가 종료될 때는 자식 프로세스가 부모 프로세스에게 데이터를 보내어 종료한다. 보통의 경우 자식 프로세스가 죽은 뒤에 부모 프로세스가 죽는다.

부모/자식 프로세스 자원 공유

자식 프로세스가 부모 프로세스의 주소공간을 복제하니까 메모리에는 복제된 내용이 올라간다. 이는 자원이 낭비되는 것이다.(같은 값의 데이터가 메모리에 올라가니까..) 그래서 리눅스에서는 일단 자식 프로세스와 부모 프로세스가 공유할 수 있는 자원은 공유한다. 그 뒤에 자원의 값이 서로 달라져야할 때 메모리 공간 일부를 카피해서 자식 프로세스가 그 자원을 온전히 갖게 된다.
이를 Copy-on-wirte(COW)라고 한다. 이는 Wirte가 발생했을 때 Copy하겠다! 는 의미이다. COW의 규칙은 일단 복제해두고 새로운게 wirte되면 덮어 씌우는 것이다.

프로세스 관련 시스템콜

fork()

  • 새로운 자식 프로세스를 생성하는 시스템콜이다.
  • 자식 프로세스는 부모 프로세스의 코드에서 fork()가 마지막으로 실행된 부분임을 알기 때문에(Program Counter를 자식 프로세스가 복제하기 때문에) 그 아래의 코드부터 실행한다.(다시 위에서 부터 실행하지 않음)
  • 자식 프로세스는 fork() 결과 값으로 0을 얻고 부모 프로세스는 fork() 결과 값으로 자식 프로세스의 pid를 얻는다. 그 점을 이용하여 자식 프로세스와 부모 프로세스가 다른일을 하도록 코드를 작성 할 수 있다.

exec()

  • 기존 프로그램에서 다른 프로그램으로 변경되는 시스템콜이다.
  • 메모리 이미지가 새로운 프로그램으로 대체된다.
  • exec() 후에는 다시 원래의 프로세스로 돌아올 수 없다.

wait()

  • 프로세스를 blocked 상태로 바꾸는 시스템콜이다.
  • 자식 프로세스가 종료되기를 기다리면서 부모 프로세스가 blocked 상태가 된다.
  • 자식 프로세스가 종료되면 부모프로세스가 ready 상태가 된다.
  • 자식 프로세스가 일을 다 수행하고 종료될 때까지 부모 프로세스가 기다려야하는 경우에 사용한다.

exit()

  • 프로그램이 끝날 때 사용하는 시스템콜이다.
  • 프로그램이 자발적으로 종료될 때, 마지막 코드 실행 후에 exit() 시스템콜을 실행한다.

** 비자발적인 종료
: 부모 프로세스가 자식 프로세스를 강제로 종료시킬 때
: 키보드로 kill, break를 입력한 경우
: 부모 프로세스가 종료되는 경우(부모 프로세스가 종료되어야 할 때는 부모프로세스가 종료되기 이전에 자식 프로세스들이 먼저 종료된다.)

프로세스 간 협력

프로세스의 동작 방식은 아래와 같이 나눌 수 있다.

  • 독립적 프로세스(Independent Process) : 보통의 경우, 프로세스들은 각자의 주소 공간을 가지고 동작하기 때문에 하나의 프로세스는 다른 프로세스에 영향을 미치지 못한다.
  • 협력 프로세스(Cooperation Process) : 프로세스가 협력해야 할 경우, 프로세스들은 서로 정보를 주고 받으며 협력한다.

IPC(Interprocess Communication)

  • 프로세스 사이의 메세지를 전달하는 방법이다.
  • 커널을 통하는 방법과 주소 공간을 공유하는 방법이 있다.

message passing

  • 커널을 통해 메시지가 전달된다.
  • Direct Communication : 통신하려는 프로세스의 이름을 명시한다.
  • Indirect Communicaton : mailbox(port)를 통해 메시지를 전달한다.

shared memory

  • 서로 다른 프로세스들이 주소 공간의 일부를 공유하는 shared memory 구조가 있다.

**thread는 이미 주소공간을 공유하기 때문에 협력이 편리하다.

profile
개발자가 되고 싶은 감자

0개의 댓글

관련 채용 정보