본문 바로가기
Computer Science/OS

[OS] 프로세스 관리 (2)

by soobaaaam 2021. 12. 16.
728x90

<프로세스와 관련한 시스템콜>

 

1. fork() 시스템콜

출처 : 이화여자대학교 반효경 교수님 '운영체제' 강의

 fork()는 새로운 프로세스를 만들어달라는 요청이다.

 fork를 하게 되면 fork가 이루어진 그다음 시점부터 자식 프로세스가 실행을 하게 된다.

 그 이유는, 자식 프로세스가 부모 프로세스의 context(정확히는 Program Counter)를 복제해서 main함수의 시작 부분이 아닌, pid = fork(); 부분부터 실행해야 하기 때문이다.

 

2. exec() 시스템콜

출처 : 이화여자대학교 반효경 교수님 '운영체제' 강의

 exec()는 어떤 프로그램을 완전히 새로운 프로세스로 태어나게 하는 역할을 한다.

 exec를 실행하면 main 함수 처음부터 돌아가 실행하게 된다.

 그러나 반드시 자식 프로세스를 만들어서 exec를 해야 하는 것은 아니다. 즉, 위 코드에서 pid = fork(); 부분이 없어도 된다.

 

3. wait() 시스템콜

출처 : 이화여자대학교 반효경 교수님 '운영체제' 강의

 자식 프로세스를 만든 다음에 wait() 시스템콜을 하게 된다.

 그러면 부모 프로세스는 자식 프로세스가 종료되기를 기다리면서 block 상태가 된다.

 이후 자식 프로세스가 종료되면 부모 프로세스가 block 상태에서 ready 상태로 바뀌면서 CPU를 얻는다.

 

4. exit() 시스템콜

 

 exit() 시스템콜은 프로그램을 종료시킬 때 호출하는 시스템콜이다.

 exit() 시스템콜이 발생하는 경우는 두 가지가 있다.

  • 자발적 종료 : 마지막 문장을 실행한 후에 exit() 시스템콜을 호출한다.
  • 비자발적 종료 : 부모 프로세스가 자식 프로세스를 강제 종료하는 경우가 대표적이다(한계치를 넘어서는 자원을 요청하는 경우 or 할당된 일이 더 이상 필요하지 않은 경우). 사람이 키보드로 강제 종료하는 경우나 부모 프로세스가 종료하는 경우에도 비자발적 종료에 해당한다.

 

<프로세스 간 협력>

 

1. 독립적 프로세스

 프로세스는 독립적이다.

 부모 프로세스는 자식 프로세스를 만들어도 본인의 code, data, stack을 직접 만들고 메모리나 CPU를 더 얻기 위해 서로 경쟁한다. 즉, 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못한다.

 

2. 협력 프로세스

경우에 따라서 프로세스들이 서로 협력을 해야 더 효율적으로 실행되는 경우가 있다.

 

3. 프로세스 간 협력 메커니즘 (IPC : Inter Process Communication)

출처 : 이화여자대학교 반효경 교수님 '운영체제' 강의

 

  3.1. 메시지를 전달하는 방법(message passing) 

: 프로세스 A가 프로세스 B에게 메시지를 전달하고 그것을 보고 영향을 받아 프로세스 B가 실행된다. 메시지는 커널을 통해 전달된다. message passing 방법은 프로세스의 이름을 명시적으로 표시하느냐의 유무로 Direct Communication과 Indirect Communication으로 나뉜다.

 

 3.2. 주소 공간을 공유하는 방법(shared memory)

: 프로세스는 원칙적으로 독자적인 주소 공간을 가지고 있으나 일부 주소공간을 두 프로세스가 공유하는 경우도 있다.

 


* 본 글은 이화여자대학교 반효경 교수님 강의 '운영체제와 정보기술의 원리(반효경 지음)' 서적에 기반하여 작성하였습니다.