운영체제 - 프로세스(2)

프로세스의 생성과 종료

  • 대부분의 운영체제에서 프로세스는 고유 프로세스 식별자(pid)를 가지고 있음
  • 시스템 부팅 시 pid가 1인 부팅 프로세스(systemd, init process)가 무조건 실행되고, 트리 형태로 보았을 때 모든 프로세스는 pid가 1인 프로세스의 깊이 n의 자식 프로세스 형태로 생성된다.

프로세스 할당

  • fork() 시스템 콜이 부모 프로세스를 기준으로 새로운 자식 프로세스 생성
  • 두 프로세스 중 하나가 exec() 시스템 콜을 사용해 자신의 메모리 공간을 새로운 프로그램으로 교체()
  • exec() 시스템 콜은 바이너리 파일 (코드 영역)을 메모리에 적재
  • 자식 프로세스가 종료될 때까지 부모 프로세스는 wait() 시스템 콜로 대기 상태

프로세스 종료

exit

wait() 시스템 콜로 대기하던 부모 프로세스는 자식 프로세스가 모두 끝나면 exit() 시스템 콜을 운영체제에 날려 리소스 할당 해제를 요청

abort

자식이 할당된 리소스를 초과하거나, 자식 task가 더 이상 필요하지 않은 경우 abort() 시스템 콜로 부모 프로세스에서 강제로 자식 프로세스를 종료시킬 수 있다.

orphan process

자식 프로세스가 아직 남아있는데 부모 프로세스가 먼저 종료되는 경우, 자식 프로세스는 고아 프로세스가 된다.

이 경우 운영체제에서 init process(pid 1)를 고아 프로세스의 부모 프로세스로 지정해 고아 프로세스가 되는 것을 방지한다.

프로세스 간 통신

  • 프로세스 간에는 독립적인 메모리 영역을 가지고 있지만, 부득이하게 영역을 공유해야 하는 경우가 발생함
  • 이런 경우 프로세스 간 통신 기법 (IPC) 기법을 통해 통신한다.

통신 방식

Pipe

  • 2개의 프로세스가 연결되면, 하나의 프로세스에서 데이터를 쓰고 다른 프로세스에서 데이터를 읽는 방식
  • 한쪽 방향으로만 통신이 가능하기 때문에 반이중 통신 (half - duplex) 통신이라고 하기도 한다. 만약 송신 / 수신을 모두 원한다면 2개의 pipe를 구현해야 한다.

메시지 전달

  • 통신 연결(send(), receive() 시스템 콜)을 통해서 프로세스 간 메시지를 주고받는 방식.

  • Pipe 방식과 다르게 양방향 송수신이 가능하다.

  • 직접 pid를 명시하는 직접 통신, 메일함 또는 port를 통하는 간접 통신으로 나뉜다.


패스트캠퍼스 챌린지 4일! 내일이면 금요일이구나~~
오늘도 집오자마자 부랴부랴 작성완료!

https://bit.ly/3FVdhDa
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

profile
Devops, AWS에 관심있어요.

0개의 댓글