Fork
Fork의 과정을 5ex1.c에서 실행하였다.
Fork는 다음과 같은 과정을 통해 실행이 된다.
5ex1 running -> fork -> mov eax,2 , INT 128 -> system call: -> sys_fork -> do_fork
이를 정리하면 다음과 같다.
1. body를 복사합니다.
2. 프로세스 디스크립터를 복사합니다.
3. child에 대한 정보를 조정합니다.
4. child에게는 NULL값을 return하고 parent에게는 child의 pid를 return합니다.
따라서 위의 코드를 보면 먼저 child가 실행되어서 x:0이 먼저 출력되고 그 다음에 부모가 실행되어 x의 값에 4770를 return합니다. 이것으로 child의 pid는 4770번임을 알 수 있습니다.
과정대로 진행을 해보니 ./5ex2에 해당하는 pid는 4821~4828 8개이다. Fork를 세번 진행하여서 2^3=8 8개가 나왔다고 볼 수 있다.
세번의 출력까지 기다려보았는데 프로세스의 출력 순서가 매번 바뀌는 것을 알게 되었다.
5ex4 file을 실행시키니 5ex5가 실행되었습니다.
ls 명령어에 -a 옵션을 걸어줬습니다. -a옵션은 숨겨진 파일이나 디렉토리도 보여줍니다.
Compile 할떄 -lpthread 옵션을 넣어주어 pthread_create로 fork와 같지만 body를 복사하지 않고 실행을 했습니다.
Fork와 다르게 pthread를 이용할때는 새로운 body를 형성하지 않기 때문에 parent가 y의 값이 초기화 되지 않고 더해진 모습을 볼 수 있습니다.
'Quality control (Univ. Study) > Operating System' 카테고리의 다른 글
OS (File System) (0) | 2022.11.18 |
---|---|
OS (pthread) (0) | 2022.11.13 |
OS(process id) (1) | 2022.11.05 |
OS(interrupt) (0) | 2022.11.05 |
OS(system_call) (0) | 2022.10.11 |