MAKE IT SIMPLE
프로세스 매니지먼트 - (3) 본문
1. 프로세스는 어떻게 생성되고 실행되니
- 프로세스는 프로세스 생성 시스템 콜(fork())을 통해 새로운 프로세스들을 생성할 수 있다
-
부모 프로세스 : 다른 프로세스를 생성하는 프로세스
-
자식 프로세스 : 다른 프로세스에 의해 생성된 프로세스
-
부모의 공간을 그대로 복사 = 완전히 같은 복사본 (효율성을 위해 몇 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) 자식 프로세스는 memory와 register, pc등 전부 복사해 오기 때문에 main 시작 절이 아닌pork(); 이후부터 수행 됨.
3) 부모 프로세스에서는 pork()수행 후 자식 프로세스 pid를 리턴 해 pid는 양수가 됨.
4) 자식 프로세스는 pid가 0
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)가 저장되어 있다.
|
읽고 쓰기가 가능하다.
|

-
전혀 공유하지 않는 모델(*)
-
일부를 공유하는 모델 - Linux
-
부모와 자식이 모든 자원을 공유하는 모델 (copy X)
-
부모 프로세스가 자식 프로세스들과 병행되어 같이 실행된다.
-
자식 프로세스들이 모두 종료될 때까지 대기한다(*) - wait()
fork()
|
현재 프로세스에서 새 프로세스 하나를 생성한다
|
exec()
|
프로세스의 메모리 공간을 새 프로그램으로 교체한다(일반적으로 fork() 이후 호출된다)
- exec() 시스템 콜을 포함한 기존의 프로그램을 지우고, 새 binary file을 메모리에 탑재한다.
|
wait()
|
자식 프로세스가 종료될때까지 부모 프로세스를 대기시킨다
|
2. 프로세스의 종료
exit()
|
마지막 명령 수행 후 프로세스를 정상적으로 종료하면서, 사용한 리소스를 반납한다
|
abort()
|
부모 프로세스가 자식의 수행을 종료시키며, 리소스를 정리하지 않는다.
|
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 |