본문 바로가기
Quality control (Univ. Study)/Operating System

OS (fork)

by 생각하는 이상훈 2022. 11. 10.
728x90

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에게는 childpidreturn합니다.

 

따라서 위의 코드를 보면 먼저 child가 실행되어서 x:0이 먼저 출력되고 그 다음에 부모가 실행되어 x의 값에 4770 return합니다. 이것으로 child pid4770번임을 알 수 있습니다.

 

 

과정대로 진행을 해보니 ./5ex2에 해당하는 pid4821~4828 8개이다. Fork를 세번 진행하여서 2^3=8 8개가 나왔다고 볼 수 있다.

 

 

세번의 출력까지 기다려보았는데 프로세스의 출력 순서가 매번 바뀌는 것을 알게 되었다.

 

 

5ex4 file을 실행시키니 5ex5가 실행되었습니다.

 

 

ls 명령어에 -a 옵션을 걸어줬습니다. -a옵션은 숨겨진 파일이나 디렉토리도 보여줍니다.

 

 

Compile 할떄 -lpthread 옵션을 넣어주어 pthread_createfork와 같지만 body를 복사하지 않고 실행을 했습니다.

 

Fork와 다르게 pthread를 이용할때는 새로운 body를 형성하지 않기 때문에 parenty의 값이 초기화 되지 않고 더해진 모습을 볼 수 있습니다.


728x90

'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