Process Creation
프로세스 관련 System calls
- fork : 프로세스 생성
- exec : 기억장소에 새로운 프로그램으로 대치
- wait : 동기화 관련
- exit : 프로세스 종료
Fork 함수와 Exec 함수
프로세스의 생성 (fork)
- 호출한 프로세스와 동일한 프로세스를 새로 생성하여 새로운 프로세스 ID할당
- 부모(parent) 프로세스 : fork를 호출한 프로세스
- 자식(child) 프로세스 : fork에 의해 생성되는 프로세스
프로그램의 실행 (exec)
- 호출한 프로세스를 새로운 프로세스로 변경한다.
- 호출 후의 프로세스 ID는 변하지 않는다.
- 새로운 프로그램의 내용이 실행된다.
프로세스의 생성 (Fork)
1. 새로운 프로세스를 생성
- 부모(parent) 프로세스와 자식(child) 프로세스
2. 리턴 값
- 성공한 경우 : 자식 프로세스의 PID(부모), 0(자식)
- 실패한 경우 : -1, errno에 에러의 내용을 저장
3. 에러 값
- EAGAIN : 시스템에서 허용하는 최대 프로세스의 수를 초과
- ENOMEM : 새로운 프로세스를 위한 스왑 공간 부족
4. fork 성공
- 생성된 자식 프로세스와 부모 프로세스와 동일한 프로그램
- fork 호출 다음 문장부터 동시에 실행
5. 자식과 부모는 fork 함수의 리턴 값으로 구분한다.
- 부모 프로세스 : 생성된 자식 프로세스의 PID
- 자식 프로세스 : 0
Fork 함수의 일반적인 용도
- 동일한 프로그램의 실행
같은 프로그램을 복제하여 부모와 자식이 각각 다른 코드 부분을 동시에 실행해야 하는 경우
- 새로운 프로그램의 실행
자식 프로세스는 fork 후에 exec 함수를 호출하여 새로운 프로그램을 실행한다. ex)쉘 (shells)
쉽게 이해해보자.
결론부터 말하면, 부모 프로세스를 통해 생성된 자식 프로세스들은 복제와 옷 갈아입기를 통해 실행된다.
조금 더 정확하게, 부모 프로세스는 fork를 통해 자신의 복사본을 자식 프로세스로 생성하고,
만들어진 복사본(자식 프로세스)은 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체한다.
fork와 exec에 대해 더 자세히 알아보자.
fork와 exec는 시스템 호출이다.
위에 말했듯이, 부모 프로세스는 fork를 통해 자기 자신 프로세스의 복사본을 만드는 시스템 호출이고,
자식 프로세스는 부모 프로세스의 복사본이기 때문에 부모 프로세스의 자원들(메모리 내의 내용, 열린 파일의 목록 등)이 자식 프로세스에 상속된다.
fork를 통해 복사본이 만들어진 뒤에 자식 프로세스는 exec 시스템 호출을 통해 새로운 프로그램으로 전환된다.
즉, 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출이다. 이는 자식 프로세스가 새로운 옷으로 갈아입었다고 볼 수도 있다.
exec를 호출하면 코드 영역과 데이터 영역의 내용이 실행할 프로그램의 내용으로 바뀌고, 나머지 영역은 초기화된다.
WAIT 함수와 WAITPID 함수
- 종료된 자식 프로세스가 있으면 종료 상태 값을 statloc에 저장, 리턴 값은 종료된 자식 프로세스의 PID
- 자식 프로세스가 여럿인 경우 그 중 하나만 종료해도 리턴한다.
- 자식 프로세스가 없을 경우에는 -1을 리턴한다.
- 시그널에 의해서도 리턴되며 errno에 EINTR 값을 저장한다.
- waitpid 함수는 특정 자식 프로세스를 지정하여 기다릴 수 있으며, 단순 대기(blocking)를 방지하는 옵션이 가능하다.
'🖥️ Computer Science > Operating System' 카테고리의 다른 글
[운영체제] Concurrency: Mutual Exclusion and Synchronization - 2 (0) | 2024.04.27 |
---|---|
[운영체제] Concurrency: Mutual Exclusion and Synchronization - 1 (2) | 2024.04.19 |
[운영체제] Threads, SMP, Microkernels (1) | 2024.04.09 |
[운영체제] Process Description and Control - 3 (0) | 2024.04.03 |
[운영체제] Process Description and Control - 2 (0) | 2024.03.27 |