리 눅 스 작성 시 복사 기술(copy-on-write)필수 편
3596 단어 타임 카피copy-on-write
Liux 프로그램 에서 fork()는 부모 프로 세 스 와 똑 같은 하위 프로 세 스 를 만 들 수 있 습 니 다.그러나 하위 프로 세 스 는 그 후에 exec 시스템 으로 호출 됩 니 다.효율 적 인 고려 에서 Liux 에'쓰기 시 복사'기술 을 도입 하 였 습 니 다.즉,프로 세 스 공간의 각 단락 의 내용 이 변화 할 때 만 부모 프로 세 스 의 내용 을 하위 프로 세 스에 복사 하 는 것 입 니 다.
그러면 하위 프로 세 스 의 물리 적 공간 에 코드 가 없 는데 어떻게 명령 을 가 져 와 exec 시스템 호출 을 실행 합 니까?
fork 이후 exec 이전 두 프로 세 스 는 같은 물리 공간(메모리 구역)을 사 용 했 습 니 다.하위 프로 세 스 의 코드 세그먼트,데이터 세그먼트,스 택 은 모두 부모 프로 세 스 를 가리 키 는 물리 공간 입 니 다.즉,이들 의 가상 공간 이 다 르 고 이에 대응 하 는 물리 공간 은 하나 입 니 다.부자 프로 세 스 에서 해당 구간 을 변경 하 는 행위 가 발생 했 을 때 하위 프로 세 스 에 해당 하 는 구간 에 물리 적 공간 을 분배 합 니 다.exec 때 문 이 아니라면 커 널 은 하위 프로 세 스 의 데이터 세그먼트,스 택 세그먼트 에 해당 하 는 물리 적 공간 을 분배 합 니 다(이로써 둘 다 각자 의 프로 세 스 공간 이 있 고 서로 영향 을 주지 않 습 니 다).코드 세그먼트 는 부모 프로 세 스 의 물리 적 공간 을 계속 공유 합 니 다(이들 의 코드 는 완전히 같 습 니 다).만약 에 exec 때 문 이 라면 이들 이 실행 하 는 코드 가 다 르 기 때문에 서브 프로 세 스 의 코드 세그먼트 도 단독 물리 공간 을 분배 합 니 다.
인터넷 에서 볼 수 있 는 또 하나의 세부 적 인 문 제 는 fork 이후 커 널 은 하위 프로 세 스 를 대기 열 앞 에 배치 하여 부모 프로 세 스 가 실 행 될 때 복사 되 지 않도록 하 는 것 입 니 다.그 다음 에 하위 프로 세 스 는 exec 시스템 호출 을 실행 하여 무의미 한 복사 로 인해 효율 이 떨 어 집 니 다.
COW 상술
현재 부모 프로 세 스 P1 이 있 습 니 다.이것 은 주체 입 니 다.그러면 영혼 도 있 고 몸 도 있 습 니 다.현재 가상 주소 공간(해당 하 는 데이터 구조 표시)에 본문 세그먼트,데이터 세그먼트,더미,스 택 등 네 부분 이 있 습 니 다.이에 따라 커 널 은 이 네 부분 에 자신의 물리 블록 에 배분 해 야 합 니 다.즉,본문 블록,데이터 블록,블록,스 택 블록 입 니 다.어떻게 분배 하 는 지 에 대해 서 는 내 핵 이 하 는 일이 라 자세히 말 하지 않 는 다.
1.현재 P1 은 fork()함수 로 프로 세 스 를 위 한 하위 프로 세 스 P2 를 만 듭 니 다.
커 널:
(1)P1 의 본문 세그먼트,데이터 세그먼트,더미,스 택 등 네 부분 을 복사 합 니 다.내용 이 같 음 을 주의 하 십시오.
(2)이 네 부분 에 물리 블록 을 분배 합 니 다.P2 의:본문 세그먼트(P1 의 본문 세그먼트 의 물리 블록,사실은 P2 에 본문 세그먼트 블록 을 분배 하지 않 고 P2 의 본문 세그먼트 가 P1 의 본문 세그먼트 블록 을 가리 키 게 합 니 다),데이터 세그먼트(P2 자신의 데이터 세그먼트,이에 대응 하 는 블록 을 분배 합 니 다),더미(P2 자신의 블록),스 택(P2 자신의 스 택 블록).아래 그림 에서 보 듯 이 왼쪽 에서 오른쪽으로 큰 방향 화살 표 는 복사 내용 을 표시 합 니 다.
2.쓰기 시 복사 기술
쓰기 시 복사 기술:커 널 은 새로 생 성 된 하위 프로 세 스 에 만 가상 공간 구 조 를 만 듭 니 다.부모 프로 세 스 의 가상 공간 구 조 를 복사 하지만 이 세그먼트 에 물리 적 메모 리 를 할당 하지 않 습 니 다.부모 프로 세 스 의 물리 적 공간 을 공유 합 니 다.부모 프로 세 스 에서 해당 하 는 세그먼트 의 줄 을 변경 할 때 하위 프로 세 스 에 해당 하 는 세그먼트 에 물리 적 공간 을 분배 합 니 다.
3. vfork
vfork 의 방법 은 더욱 간단 하고 거 칠 며 커 널 은 하위 프로 세 스 의 가상 주소 공간 도 만 들 지 않 고 부모 프로 세 스 의 가상 공간 을 직접 공유 합 니 다.물론 이 방법 은 부모 프로 세 스 의 물리 적 공간 을 배 를 따라 공유 합 니 다.
총결산
전통 적 인 fork()시스템 호출 은 새로 만 든 프로 세 스에 모든 자원 을 직접 복사 합 니 다.이러한 실현 은 너무 간단 하고 효율 이 낮 습 니 다.복사 한 데 이 터 는 공유 되 지 않 을 수도 있 습 니 다.더 나 쁜 경 우 는 새 프로 세 스 가 새로운 이미 지 를 즉시 실행 하려 고 한다 면 모든 복사 가 헛 될 것 입 니 다.
Linux 의 fork()사용 시 복사(copy-on-write)페이지 가 실 현 됩 니 다.글 을 쓸 때 복사 하 는 것 은 데 이 터 를 복사 하거나 면제 할 수 있 는 기술 이다.커 널 은 이 때 전체 주소 공간 을 복사 하지 않 고 부모 프로 세 스 와 하위 프로 세 스 가 복사 본 을 공유 하도록 합 니 다.기록 이 필요 할 때 만 데 이 터 를 복사 하여 각 프로 세 스 가 각자 의 복사 본 을 가지 게 합 니 다.자원 복 제 는 기록 이 필요 할 때 만 진행 되 고 그 전에는 읽 기 전용 으로 만 공유 된다 는 것 이다.이 기술 은 주소 공간의 페이지 복사 가 실제 기록 이 발생 할 때 까지 연기 되 었 다.
페이지 가 전혀 기록 되 지 않 는 상황 에서 예 를 들 어 fork()이후 exec()를 즉시 호출 하면 복사 할 필요 가 없습니다.fork()의 실제 비용 은 부모 프로 세 스 의 페이지 표를 복사 하고 하위 프로 세 스에 유일한 프로 세 스 설명 자 를 만 드 는 것 입 니 다.일반적인 상황 에서 프로 세 스 가 생 성 된 후에 실행 가능 한 파일 을 바로 실행 합 니 다.이러한 최 적 화 는 전혀 사용 하지 않 는 데 이 터 를 대량으로 복사 하 는 것 을 피 할 수 있 습 니 다(주소 공간 은 항상 수 십 조 의 데 이 터 를 포함 합 니 다).유 닉 스 는 프로 세 스 의 빠 른 실행 능력 을 강조 하기 때문에 이 최적화 가 매우 중요 합 니 다.주:Linux COW 와 exec 는 필연 적 인 관계 가 없습니다.
이상 의 이 상세 한 이 야 기 는 리 눅 스 가 쓸 때 복사 기술(copy-on-write)의 필수 편 은 바로 편집장 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
리 눅 스 작성 시 복사 기술(copy-on-write)필수 편페이지 가 전혀 기록 되 지 않 는 상황 에서 예 를 들 어 fork()이후 exec()를 즉시 호출 하면 복사 할 필요 가 없습니다.fork()의 실제 비용 은 부모 프로 세 스 의 페이지 표를 복사 하고 하위 프...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.