프로세스 생성
프로세스 복사
프로세스들은 각자 고유한 번호인 프로세스 id, PID(Process IDentifier)갖게 된다.
UNIX는 부팅 시에 커널에 초기 프로세스 3개가 생성되고, PID는 0, 1, 2입니다.
그중에서 PID 1 프로세스가 init 프로세스인데,
이 프로세스는 모든 프로그램 프로세스의 조상입니다.
즉, 모든 프로그램은 init 프로세스가 복제된 것입니다.
프로세스는 fork() / exec() 시스템 콜에 의해 복제됩니다.
fork() / exec()는 Unix에서 사용됨
프로세스는 프로그램 코드 + PCB+ VMS 로 구성
fork() 시스템 콜이 실행되면, 해당 프로세스와 거의 똑같은 프로세스가 하나 복제
결과적으로, 원본 프로세스는 부모 프로세스, 복제된 프로세스는 자식 프로세스가 되며,
fork() 이후부터 다시 순서대로 코드가 실행
이들은 부모 자식 관계를 나타내기 위해 부모 - 자식 PID를 가리키는
PPID(Parent PID), CPID(Child PID) 데이터를 갖는다.
즉, 자식 프로세스는 PID, 가상 메모리는 별 할당 받음 다르고 나머지는 부모 프로세스와 전부 동일
fork() 같이 불필요한 자원을 낭비하지 않기 위해 exec() 시스템 콜이 호출
exec()은 해당 프로세스에 실행될 프로세스 코드를 덮어 버린다.
그러면 fork()와 다르게 자식 프로세스를 위해 별도의 공간을 할당할 필요도 없고,
PID도 그대로 사용하여 프로세스의 text, data 영역만 덮어 씌워주고, 코드를 처음부터 다시 실행, 프로그램 카운터가 0이 된다.
fork()는 거의 동일한 프로세스가 하나 더 생성되는 것이고 (원래 프로세스 + 새로운 프로세스),
exec()은 원래 프로세스는 사라지고 새로운 프로세스만 남게 됩니다. (새로운 프로세스)
fork()와 exec()은 함께 사용할 수도 있고 단독으로 사용할 수도 있는데, 상황에 맞게 사용하면 됩니다.
원래 프로그램은 실행 중인 상태로 놔두고 다른 작업을 하고 싶다면 fork(), exec()을 함께 사용하고,
그게 아니라면 둘 중에 하나를 알맞게 사용하면 됩니다.

| 7. Process간 통신 / 공유 자원과 임계 구역 해결 방법 (0) | 2023.06.30 |
|---|---|
| 6. 멀티스레드와 동기화 기본 / CPU스케줄링 개요 (0) | 2023.06.29 |
| 4. 프로세스와 스레드 / 프로세스 휴식, 보류 상태와 문맥 (0) | 2023.06.27 |
| 3. CPU 예측이 가져올 수 있는 문제(보안사고)/프로세스와 스레드 (0) | 2023.06.26 |
| 2. DMA와 고성능 소켓/CPU의 예측 (0) | 2023.06.25 |