티끌모아 태산

프로세스(Process)(4) 본문

CS 지식/운영체제

프로세스(Process)(4)

goldpig 2023. 8. 2. 11:22
728x90

프로세스의 생성

  시스템이 부팅된 후 최초의 프로세스는 운영체제가 직접 생성하지만 그 다음부터는 이미 존재하는 프로세스가 다른 프로세스를 복제 생성하는 방식이다. 여기서 새로운 프로세스를 생성하는 프로세스를 부모 프로세스라고 하고 생성된 프로세스를 자식 프로세스라고 한다. 프로세스가 수행되는 모델은 보통 2가지가 있다.

  • 부모와 자식이 공존하며 수행되는 모델: 부모와 자식이 CPU를 획득하기 위해 경쟁하는 관계
  • 부모가 자식이 종료될 때까지 기다리는(wait) 모델: 자식 프로세스가 종료될 때까지 부모 프로세스는 아무 일도 하지 않고 봉쇄 상태에 있다가, 자식 프로세스가 종료되면 부모 프로세스가 봉쇄 상태에서 준비 상태가 되어 다시 CPU를 획들할 권한이 된다. 

  예를들어, 유닉스에서는 fork() 시스템 콜을 통해 새로운 프로세스를 생성할 수 있다. fork() 시스템 콜은 자식 프로세스를 생성할 때 부모 프로세스의 내용을 그대로 복제 생성하게 된다. 즉 프로세스의 ID를 제외한 모든 정보 그대로 복사하는 방법이다. 따라서 부모와 자식은 주소 공간을 독립적으로 갖더라도 동일한 내용을 가지게 된다. 그러므로 자식 프로세스가 독자적인 프로그램을 수행하기 위해서는 exec() 시스템 콜을 통해 새로운 프로그램으로 기존의 주소 공간을 덮어씌우게 된다. 

  좀 더 구체적으로, 프로세스가 fork() 시스템 콜을 하게 되면 CPU의 제어권이 커널로 넘어가게 되고, 커널은 fork() 시스템 콜을 호출한 프로세스를 복제해 자식 프로세스를 생성하게 된다. 그럼 구별은 어떻게 하는가? 그것은 fork() 함수의 결과 값으로 원본 프로세스는 양수를 주고 복제본에게는 0을 준다는 점이다.

  • fork() 시스템 콜: 기존 프로세스와 동일한 프로세스를 생성
  • exec() 시스템 콜: 새롭게 수행시키려는 프로세스를 자식 프로세스의 주소 공간에 덮어 씌운다. 
  • wait() 시스템 콜: 자식 프로세스가 종료되기를 기다리며 부모 프로세스가 봉쇄 상태에 머물게 한다. 즉 아무일도 하지 않고 수면 상태에 이르는 것. 따라서 자식 프로세스가 종료되면 그제서야 준비 큐에 재진입해 CPU를 얻을 권한이 생기게 된다.

프로세스간 협력

  프로세스는 각각 독립적인 주소 공간을 가지고 수행되며 한 프로세스가 다른 프로세스의 주소 공간(코드, 데이터, 스택)을 참조하는 것은 허용되지 않는다. 그러므로 프로세스들은 서로의 수행에 원칙적으로 영향을 미칠 수 없다. 하지만 경우에 따라서는 프로세스 수행의 효율성을 증대 시키기 위해 프로세스들간에 협력을 할 수 있다. 협력을 통해 정보를 공유하고 처리 속도가 향상될 수 있는 등 몇몇 측면에서 효과 적일 수 있다. 

프로세스간에 협력을 하기 위해서는 매커니즘이 필요한데 대표적인 매커니즘이 IPC(Inter-Process-Communication)이다. IPC란 하나의 컴퓨터 안에서 실행 중이 서로 다른 프로세스간에 발생하는 통신을 의미한다. IPC는 프로세스간 통신과 동기화를 이루기 위한 매커니즘으로 대표적인 방식은 다음과 같다.

  • 메시지 전달(message passing): 프로세스간 공유 데이터를 일체 사용하지 않고 메시지를 주고 받으면서 통신하는 방법.
  • 공유 메모리(shared memory): 주소 공간의 일부를 공유하는 방식이다. 이게 가능한 이유는 운영체제는 공유 메모리를 사용하는 시스템 콜을 지원해 서로 다른 프로세스들이 그들의 주소 공간 중 일부를 공유할 수 있도록 한다. 공유 메모리 방식은 프로세스간 통신을 수월하게 만드는 인터페이스를 제공하지만 서로의 데이터에 일관성 문제가 유발 될 수 있다. 

이 두 방식의 차이점은 공유 데이터의 사용 유무이다.

728x90

'CS 지식 > 운영체제' 카테고리의 다른 글

CPU 스케줄링(1)  (0) 2023.08.16
프로세스(Process)(3)  (0) 2023.08.01
프로세스(Process)(2)  (0) 2023.07.31