MAKE IT SIMPLE

프로세스 매니지먼트 - (3) 본문

컴퓨터 공학/운영체제

프로세스 매니지먼트 - (3)

punchlips 2022. 2. 17. 19:12

1. 프로세스는 어떻게 생성되고 실행되니

 

- 프로세스는 프로세스 생성 시스템 콜(fork())을 통해 새로운 프로세스들을 생성할 수 있다

  • 부모 프로세스 :  다른 프로세스를 생성하는 프로세스
  • 자식 프로세스 : 다른 프로세스에 의해 생성된 프로세스

 

이때 생성된 새로운 프로세스의 주소 공간(Address Space)은 일반적으로 부모 프로세스를 카피해서 만들어지게 된다
  • 부모의 공간을 그대로 복사 = 완전히 같은 복사본 (효율성을 위해 몇 OS 에서는 자식이 부모의 주소 공간을 공유)
  • 부모 프로세스와는 다른 새로운 프로그램 - exec() (덮어쓰기)

 

int main() {
	int pid;
    pid = fork(); ------------ 복제 일어남 -------------->
    
    if(pid == 0) {
    	
        printf("\n Hello, I am child!\n");
        execlp(“/bin/date”, “bin/date” , (char*) 0);
        
    } else if(pid > 0) {
    	
        wait();
        printf("\n Hello, I am parent!\n");
    }

}

1) fork()에서 부모 프로세스는 자신을 복제해 자식 프로세스를 생성

2) 자식 프로세스는 memoryregister, pc등 전부 복사해 오기 때문에 main 시작 절이 아닌pork(); 이후부터 수행 됨.

3) 부모 프로세스에서는 pork()수행 후 자식 프로세스 pid를 리턴 해 pid는 양수가 됨.

4) 자식 프로세스는 pid0

5) 자식 프로세스는 excelp()을 만나면 자식 프로세스의 내용이 “bin/date”의 내용으로 변경 되고, 다시 main 시작 절부터 함수가 호출된다.

6) wait() : 부모 프로세스가 wait() 시스템 콜을 호출하면, 커널은 자식 프로세스가 종료될 때 까지 부모 프로세스를 sleep 시킨다(block) -> 자식 프로세스가 종료 되면 커널은 부모 프로세스를 깨운다.(ready 상태) ex ) Linux

 

※ 주소 공간이란

 Process Address Space
Code Segment
 
 
 프로그램의 코드가 저장되어있다.
읽기만 가능하다.
 Data Segment
 전역 변수(global variables) 같은 데이터가 저장되어 있다.
 읽고 쓰기가 가능하다.
 Stack Segment
 
 
 함수(function) 나 지역 변수(local variables)가 저장되어 있다.
 읽고 쓰기가 가능하다.

 

**프로세스의 부모 - 자식 관계는 트리 형태(계층 구조)를 가지게 된다
 

 

 

▷ 프로세스의 자원(CPU, Memory 등)의 공유
 
- 생성된 프로세스는 운영체제로부터 직접 자원을 제공받거나 부모 프로세스의 자원의 일부를 한정적으로 사용할 수 있다.
 
  • 전혀 공유하지 않는 모델(*)
  • 일부를 공유하는 모델 - Linux
  • 부모와 자식이 모든 자원을 공유하는 모델 (copy X)

 

▷ 프로세스의 실행 방식
 
  • 부모 프로세스가 자식 프로세스들과 병행되어 같이 실행된다.
  • 자식 프로세스들이 모두 종료될 때까지 대기한다(*) - wait()
 
※ 프로세스 생성 및 실행 관련 System Call(Unix)
fork()
현재 프로세스에서 새 프로세스 하나를 생성한다
exec()
프로세스의 메모리 공간을 새 프로그램으로 교체한다(일반적으로 fork() 이후 호출된다)
- exec() 시스템 콜을 포함한 기존의 프로그램을 지우고, 새 binary file을 메모리에 탑재한다.
wait()
자식 프로세스가 종료될때까지 부모 프로세스를 대기시킨다

 

 


 

 

2. 프로세스의 종료

 

※  프로세스 종료 관련 System Call(Unix)
exit()
마지막 명령 수행 후 프로세스를 정상적으로 종료하면서, 사용한 리소스를 반납한다
abort()
부모 프로세스가 자식의 수행을 종료시키며,  리소스를 정리하지 않는다.
  • 자식 프로세스가 할당 자원의 한계치를 넘어서는 경우
  • 자식 프로세스에게 할당된 task가 없거나 더 이상 필요하지 않은 경우
  • 부모 프로세스가 종료되는 경우
    -
    운영체제는 부모 프로세스가 종료하는 경우 자식이 더 이상 수행되도록 두지 않는다
    - 단계적인 종료 ( 손자/손녀 -> 자식 -> 부모)



assert()
파라미터로 들어온 표현식이 거짓이면 abort()를 호출한다

 

 


 

 

3. 프로세스 간 협력

 

1) 독립적 프로세스

 - 프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함

2) 협력 프로세스

- 프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음

3) 프로세스 간 협력 메커니즘

  • Message passing : Memory protection을 위해 커널을 통해 메시지 전달

    -> direct communication와 indirect communication 방식이 있다.

    => 안전하고 동기화 걱정이 없다.

  • Shared Memory : 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 메커니즘이 있다. 

   -> shared memory 최초 사용시 system call을 통해 커널에게 shared memory를 구성하게 해야 함.

   => 성능이 좋지만 동기화 문제가 발생한다.

'컴퓨터 공학 > 운영체제' 카테고리의 다른 글

DeadLock - (5)  (0) 2022.05.09
프로세스 동기화 - (4)  (0) 2022.05.09
컴퓨터 시스템과 System Call - (2)  (0) 2022.02.10
운영체제(OS)란 - (1)  (1) 2022.01.11
Comments