Nnnnnnnnn
Process Management 본문
Process Management
프로세스 생성
- 부모 프로세스가 자식 프로세스 생성. OS가 할일인데 바빠서 부모가 알아서 process를 생성한다.
- 프로세스의 트리(계층 구조)형성
- 프로세스는 자원을 필요로 함 : 운영체제로 부터 받는다. 부모와 공유한다.
- 자원의 공유 : 부모와 자식이 모든 자원을 공유하는 모델, 일부를 공유하는 모델, 전혀 공유하지 않는 모델.
- 수행 : 부모와 자식은 공존하며 수행되는 모델. 자식이 종료될 때까지 부모가 기다리는(Wait) 모델.
주소 공간(Address Space)
- 자식은 부모의 공간을 복사함(Binary and OS data)
- 자식은 그 공간에 새로운 프로그램을 올림
유닉스의 예
- fork() 시스템 콜이 새로운 프로세스를 생성 : 부모를 그대로 복사(OS data except PID+binary), 주소공간 할당
- fork 다음에 이어지는 exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림
프로세스 종료
- 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려준다(exit) : 자식이 부모에게 output data를 보낸다(via wait), 프로세스의 각종 자원들이 운영체제에 반납된다.
- 부모 프로세스가 자식 수행을 종료시킨다(abort) : 자식이 할당 자원의 한계치를 넘어선다. 자식에게 할당된 태스크가 더 이상 필요하지 않다. 부모가 종료(exit)하는 경우 - 운영체제는 부모 프로세스가 종료하는 경우 자식이 더 이상 수행되도록 두지 않는다. 단계적인 종료.
fork()
- A process is created by the fork() system call - Creates a new address space that is a duplicate of the caller.
pid>0 : parent pid==0 : child
exec()
- A process can execute a different program by the exec() system call
ex) 만약 fork a 와 fork b를 하고, 다음 순서가 a, execlp(c), b 라면 a를 복사만 한 후에, c가 실행된다. 부모라도 b로 못가고 b가 c로 되는 것이다.
wait()
- 프로세스 A가 wait() 시스템 콜을 호출하려면 커널은 child가 종료될 때까지 프로세스 A를 sleep 시킨다.(block 상태)
- Child process가 종료되면 커널은 프로세스 A를 깨운다.(ready 상태)
exit()
- 자발적 종료 : 마지막 statement 수행 후 exit() 시스템 콜을 통해 프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어줌.
- 비자발적 종료 : 부모 프로세스가 자식 프로세스를 강제 종료시킴, (자식 프로세스가 한계치를 넘어서는 자원 요청을 하거나 자식에게 할당된 태스크가 더 이상 필요하지 않는 경우) 키보드로 kill, break 등을 명령한 경우, 부모가 종료하는 경우(부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨)
Process간 협력
- 독립적 프로세스(Independent Process) : 프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못한다.
- 협력 프로세스(Cooperating Process) : 프로세스 협력 매커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있다.
- 프로세스 간 협력 매커니즘(IPC : Interprocess Communication)
1. 메세지를 전달하는 방법 : message passing - 커널을 통해 메시지 전달
2. 주소 공간을 공유하는 방법 : shared memory - 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 매커니즘이 있음. share시킬때 커널에서 허락을 해줘야 한다. 그 이후에는 신경을 쓰지 않는다. thread - thread는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵지만 동일한 process를 구성하는 thread들 간에는 주소 공간을 공유하므로 협력이 가능. shared memory의 경우 한쪽 사용시 다른 프로세스는 사용하지 못한다. 권한, 보안 문제.
Message Passing : 프로세스 사이에 공유 변수를 일체 사용하지 않고 통신하는 시스템. Direct Communication의 경우 통신하려는 프로세스의 이름을 명시적으로 표시한다. Indirect Communication의 경우 Mailbox(또는 port)를 통해 메시지를 간접 전달한다. Mailbox는 커널에 존재한다. 주소없이 편지만 던지고 해당 프로세스가 주워가는 방식이다.
'OS' 카테고리의 다른 글
Process Synchronization (0) | 2018.02.24 |
---|---|
CPU Scheduling (0) | 2018.02.23 |
Process (0) | 2018.02.22 |
컴퓨터 시스템의 구조-2 (0) | 2018.02.05 |
컴퓨터 시스템의 구조-1 (0) | 2018.02.05 |