Copy-On-Write는 페이지 폴트를 기반으로 하지 않습니까?

Copy-On-Write는 페이지 폴트를 기반으로 하지 않습니까?

운영 체제 개념

fork()부모 프로세스와 자식 프로세스가 처음에 동일한 페이지를 공유하도록 허용하여 작동하는 쓰기 중 복사라는 기술을 사용할 수 있습니다. ...기록 중 복사를 사용하여 페이지가 복사되도록 결정할 때 사용 가능한 페이지가 할당된 위치를 기록하는 것이 중요합니다.많은 운영 체제에서는 이러한 요청에 대해 무료 페이지 풀을 제공합니다. 이러한 여유 페이지는 일반적으로 프로세스의 스택이나 힙을 확장해야 하거나 쓰기 중 복사를 위해 페이지를 관리해야 할 때 할당됩니다.운영 체제는 일반적으로 요청 시 0 채우기라는 기술을 사용하여 이러한 페이지를 할당합니다. 요구에 따라 제로화되는 페이지는 할당되기 전에 제로화되어 이전 내용이 지워집니다.

Copy-On-Write는 페이지 폴트를 기반으로 하지 않습니까? (나는 그렇게 생각하지 않는다)

쓰기 중 복사와 페이지 폴트가 동일한 여유 페이지 풀을 공유합니까? 그렇지 않다면 왜 그렇습니까? (나는 그렇게 생각하지 않는다)

malloc()페이지 폴트를 기반으로 구현 됩니까 ? (그렇다고 생각합니다. 하지만 해당 풀이 페이지 폴트에 의해 사용되지 않는 경우 쓰기 중 복사와 동일한 사용 가능한 페이지 풀을 공유하는 이유는 확실하지 않습니다.)

감사해요.

답변1

(태그가 붙어있으니까, 나는 이런 맥락에서 대답했습니다. 이 중 어느 것도 Linux에만 국한된 것은 아닙니다. )

Copy-On-Write는 페이지 폴트를 기반으로 하지 않습니까?

페이지 폴트를 기반으로 합니다. "복사" 페이지는 읽기 전용으로 표시됩니다. 프로세스가 쓰기를 시도하면 CPU에 결함이 발생하고 커널은 쓰기를 다시 시작하기 전에 페이지를 복사합니다.

쓰기 중 복사와 페이지 폴트가 동일한 여유 페이지 풀을 공유합니까? 그렇지 않다면 왜 그렇습니까?

예, 그렇습니다.

malloc()페이지 폴트를 기반으로 구현 됩니까 ?

malloc()주소 공간이나 할당된 페이지 자체를 조작하지 않으며 전적으로 C 라이브러리에 의해 처리됩니다. 힙에 메모리를 할당하는 데 사용되는 함수는 다음과 같습니다.brk(), 예, 페이지 오류에 의존합니다. 할당된 페이지가 존재하지 않는 것으로 표시됩니다. 이는 페이지가 메모리에서 액세스 가능한지 여부를 추적하기 위해 커널과 MMU에서 사용하는 해당 페이지 테이블 항목의 "존재" 비트에 의존합니다. 존재하지 않는 페이지에 액세스하면 오류가 발생하고 커널은 페이지를 할당하고 잘못된 명령을 다시 시작합니다.

답변2

Copy on Write(Memory Management Unit) 생성을 기반으로 implicit interrupt구현 됩니다. MMU페이지 오류의 예시적인 원인은 다음과 같습니다.

A page fault역시 암시적 인터럽트에 의해 생성되지만 MMU둘은 다릅니다. 페이지 오류의 원인 중 일부는 다음과 같습니다.

잘못된 메모리 액세스:page faultA는 사용자 프로세스에 필요한 페이지가 메모리에 없을 때 발생합니다. 이는 Page fault프로세스가 할당되지 않은 가상 주소(보통 가상 주소라고 함)에 액세스하려는 경우 segmentation fault발생할 수 있습니다 . 또는 페이지가 교체된 경우에도 이런 일이 발생할 수 있습니다.

쓰기 시 복사:a의 한 가지 이유 page faultCopy On writefork() 시스템 호출 중에 운영 체제가 하위 프로세스와 상위 프로세스에 동일한 메모리를 할당하고 메모리를 읽기 전용으로 표시하기 때문입니다. 이렇게 하면 복사 손실이 크게 줄어듭니다. 아이가 exec나중에 전화한다고 가정해 보세요 fork. 기록 중 복사를 사용하지 않으면 이 기간 동안 복제된 페이지 전체가 플러시됩니다 exec. 페이지 부재는 부모나 자식이 해당 페이지에 쓰려고 할 때 발생합니다. 그런 다음 운영 체제는 새 페이지를 할당하고 읽기 전용 제한을 제거합니다.

필요에 따라 복사합니다.a의 또 다른 이유 page faultcopy on demand사용자 프로세스가 가상 주소 범위 내에서 새 페이지를 요청할 때 운영 체제가 해당 물리적 ​​주소를 할당하지 않고 가상 주소를 할당할 수 있기 때문입니다. 프로세스가 페이지에 액세스하려고 하면 페이지 폴트가 발생합니다. 그런 다음 운영 체제는 가상 페이지에 해당하는 물리적 페이지를 할당합니다.

그래서,페이지 결함으로 인해 새 페이지 할당이 필요하지 않을 수 있습니다.(오류로 인해 생성된 경우) 그러나 페이지 부재로 인해 새 페이지가 필요한 경우 해당 페이지는 페이지가 기록될 때 서버에 복사되는 동일한 페이지 풀에서 제공됩니다.

malloc구현은 그것과 아무 관련이 없습니다 copy on write.

노트운영 체제는 Copy on Write및 없이도 작동 할 수 있습니다 Copy on Demand. 효과는 그리 좋지는 않지만. 하지만 page fault운영 체제는 "페이징" 메커니즘을 지원해야 합니다.

관련 정보