티스토리 뷰

부모 프로세스에서 Fork()시스템 콜을 호출하게 되면 호출 직전까지의 정보들이 자식 프로세스에게 거의 그대로 복제 된다.

이때 스택과 힙 영역이 복제 되고 PC값도 복제 된다.


프로세스 별로 또한 파일 디스크립터 테이블을 가지고 있다.

27번 fd : 어떤 소켓

28번 fd : 또다른 어떤 소켓

이런식으로 정리가 되어 있는 테이블이다.


부모 프로세스가 fork를 호출하는 시기는 accept() 시스템 콜을 해서 커넥트 소켓이 생성된 다음이다. 이 커넥트 소켓의 fd가 27번이라고 하면

자식 프로세스의 파일 디스크립터 테이블에도  27번에 그 소켓에 대한 링크 정보가 복제가 될것이다. 그렇게 되면


27번 번호표를 받은 그 소켓을 가리키는 번호가 2개가 된 것이다. 

부모와 자식 프로세스에서 그 소켓의 번호(27번)는 같지만 부모에서의 27번과 자식에서의 27번은 다른 fd라는것을 알아야 한다.


왜냐하면 파일 디스크립터 테이블은 프로세스당 할당이 되기 때문이다.


소켓을 가리키는 파일 디스크립터의 개수를 Reference Count라고 한다.

다시한번 말하지만 서로 다른 프로세스에서 같은 소켓을 가리키는 파일디스크립터의 숫자가 똑같다고 해서 레퍼런스 카운트가 1이 되는게 아니고 2가 맞다.

'컴퓨터 공학과 졸업 > 소켓 프로그래밍' 카테고리의 다른 글

Concurrent 서버 2  (0) 2017.10.17
TCP 3 Way Handshaking 상태표  (0) 2017.10.16
소켓 프로그래밍 교재  (0) 2017.10.15
Concurrent 서버  (0) 2017.10.15
fork시스템콜  (0) 2017.10.15
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함