여러 프로세스를 통해 동시에 파일 업데이트를 수행하고 싶습니다. 이러한 프로세스는 모두 병렬 쓰기를 위해 파일을 엽니다.
사용된 약어:
f
: 문서,p[i]
: 프로세스i
,b[i]
i
: 프로세스에 의해 열린 FD 버퍼입니다i
.
질문:
- 파일이 열리고 스트림이 설정되면
fpath
내부적으로 inode 번호로 변환됩니까? inode는 파티션 내에서만 고유하다는 것을 읽었습니다. - 동일한 파일이 병렬로 열릴 때 Linux는 쓰기를 어떻게 관리합니까?
- 가득 차면
b[1]
플러시됩니다. 이는 모든 사람p[i]
이 파일의 변경 사항을 보기 시작한다는 의미입니까 ? 이런 일은 일어나지 않을 것입니다. 그러면 버퍼의 내용이 새로 고쳐지는 위치는 어디입니까? COW가 발생하면 Linux가 디스크에 더티 페이지의 복사본을 생성한다는 의미입니까? 아니면 MVCC와 비슷한 것이 있습니까? (모든 페이지를 복사하는 대신 더티 페이지만 다시 작성한다고 가정합니다. 그렇지 않으면 대용량 파일을 수정하는 것이 번거로울 수 있기 때문입니다.) - 실험적으로
vi
편집기를 사용하여 파일을 열어보았습니다. 터미널과 편집기를 사용하여 파일을 삭제하고 파일에 텍스트를 추가한 후 저장했습니다. 파일이 다시 생성되었습니다. 또 다른 경우에는 파일을 편집하지 않고 편집기에서 닫으면 파일이 더 이상 존재하지 않습니다. COW가 작동하는 것 같습니다. 그런데 두 번째 경우에는 파일이 삭제되었기 때문에 COW는 파일의 메모리 페이지를 사용하여 파일을 다시 생성합니까? 파일 크기가 10GB인데 바로 메모리에 들어가지 않으면 어떻게 되나요?