OS는 변수 같은 거 모름 (디버깅 정보 같은 건 예외). 그냥 메모리를 복사하는 거임. 단, 메모리만 복사하는 건 아니고 file descriptor 같은 거도 같이 복사함. 그리고 만약 fork하려는 프로세스에 쓰레드가 딸려 있으면 어떡하냐? 그건 좀 골치 아픔. 하지만 학부 OS 강의 수준에서는 몰라도 됨.
익명(211.178)2021-04-20 21:18
답글
그리고 부모 프로세스랑 어차피 같은 값을 가지는 페이지라면, 복사하는 게 의미 없음. 그래서 그 페이지에 다른 값을 쓰기 전까지는 물리 페이지를 공유함
익명(211.178)2021-04-20 21:19
답글
그리고 각 프로세스마다 커널이 관리해야 되는 자료구조가 있는데 (task_struct, 커널 스택, 페이지 테이블 등) 얘네도 커널 내부적으로 복사됨.
익명(211.178)2021-04-20 21:20
변수 이름따위는 코딩할 때만 유효한거고 그냥 아예 딥카피 때린다고 보면 됨. 파일 디스크립터부터 메모리값 등등 전부
아예 똑같은 프로그램을 두 개 실행시키는데 한쪽 상태를 그대로 복사해서 들고 온다고 보면 된다.
나뉘어지는 순간 아예 서로 다른 프로세스임
익명(121.132)2021-04-20 21:20
답글
시스템 콜 clone 에 대해 검색해보셈 fork, pthread 등등 프로세스(커널쪽에선 전부 태스크라는 개념으로 같이 관리함) 생성되는 건 전부 clone 이고 그냥 clone 에서 뭘 복제할 건지 선택하는 인자에서 태스크의 성격이 달라짐
copy on write 이라 읽기에만 쓰면 그대로, 쓰기하면 복사
OS는 변수 같은 거 모름 (디버깅 정보 같은 건 예외). 그냥 메모리를 복사하는 거임. 단, 메모리만 복사하는 건 아니고 file descriptor 같은 거도 같이 복사함. 그리고 만약 fork하려는 프로세스에 쓰레드가 딸려 있으면 어떡하냐? 그건 좀 골치 아픔. 하지만 학부 OS 강의 수준에서는 몰라도 됨.
그리고 부모 프로세스랑 어차피 같은 값을 가지는 페이지라면, 복사하는 게 의미 없음. 그래서 그 페이지에 다른 값을 쓰기 전까지는 물리 페이지를 공유함
그리고 각 프로세스마다 커널이 관리해야 되는 자료구조가 있는데 (task_struct, 커널 스택, 페이지 테이블 등) 얘네도 커널 내부적으로 복사됨.
변수 이름따위는 코딩할 때만 유효한거고 그냥 아예 딥카피 때린다고 보면 됨. 파일 디스크립터부터 메모리값 등등 전부 아예 똑같은 프로그램을 두 개 실행시키는데 한쪽 상태를 그대로 복사해서 들고 온다고 보면 된다. 나뉘어지는 순간 아예 서로 다른 프로세스임
시스템 콜 clone 에 대해 검색해보셈 fork, pthread 등등 프로세스(커널쪽에선 전부 태스크라는 개념으로 같이 관리함) 생성되는 건 전부 clone 이고 그냥 clone 에서 뭘 복제할 건지 선택하는 인자에서 태스크의 성격이 달라짐
copy on write라 쓰기전엔 복사안함
symbol table이 binary에 있지않음? - dc App