티스토리 뷰

fork시스템 콜을 호출하기 전까지 부모 프로세스가 열어놨던 파일들의 정보를 그대로 자식에게도 카피 한다. 

fork가 호출되면 부모의 context도 복제될 뿐만 아니라 PCB의 내용도 거의 그대로 복제 된다. 

부모와 자식의 오픈 파일 테이블을 열어보면 각 프로세스가 파일 디스크립터 번호 몇번을 사용한다는것만 알지 특정fd에 해당하는 소켓이 몇개의 프로세스가 오픈해서 쓰고있는지는 모르니까 이걸 표시할 필요가 있다 . 

공유 되어 있는 파일들을 몇개의 어떤 프로세스들이 공유하고 있는지를 커널이 별도로 보관,관리할 필요가 있다.


커널의 오픈파일테이블을 보게 되면 특정 파일이 몇개의 프로세스가 현재 오픈해서 쓰고있는지를 표시해 놓았다. (reference count라고 불린다.) 


부모 프로세스가 열고 있던 소켓에 대한 레퍼런스 카운트가 fork시스템 콜을 호출하고 나면 1이 증가 되어 있다. (1->2로 증가됨)

부모가 한번더 fork로 자식 프로세스를 생성하면 2->3으로 늘어날 것이다.


부모 프로세스의 코드를 자식프로세스가 그대로 복사 하지는 않고 Program counter값만 복사해서 코드를 공유하게 된다.


fork시스템 콜은 부모 프로세스에게도 리턴되고 자식 프로세스에게도 리턴된다.

자식 프로세스에서 fork가 리턴 되면 0이 리턴되고

부모 프로세스에서 fork가 리턴 되면 자식프로세스의 프로세스 아이디가 리턴된다.

자식 프로세스는 부모 프로세스의 pid를 가지고 있지만 부모 프로세스는 자식 프로세스들의 pid를 갖고 있지 않기 때문에 자식은 fork로 0을 리턴하고 부모는 자식 프로세스의 아이디가 리턴 되는것이다.







댓글
최근에 올라온 글
최근에 달린 댓글
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
글 보관함