코드가 fd = open("/dev/sdXY", ...)
및 pwrite(fd, ...)
/pread(fd, ...)
과 같은 경우 I/O 작업을 수행하여 버퍼 또는 디스크 캐시를 건너 뛰시겠습니까? /dev/sdXY은 마운트되지 않은, 포맷 된 디스크 파티션 (ext4, ufs 등)입니다.pread/pwrite, 버퍼 및 디스크 캐시
나는 작업중인 응용 프로그램에서 인접한 파일 저장소를 부여 할 필요가 있기 때문에 내가 설명하는 것과 같은 일을 수행하는 유일한 방법이라고 읽어야합니다. 그러나 버퍼, 디스크 캐시 또는 기타 유용한 기능을 잃어 버리면 인접한 저장소에 대한 필요성을 제거 할 수 있습니다.
파티션이 이미 파일 시스템으로 포맷되었으므로 저수준 항목을 다시 구현해야하는지 혼란 스럽습니다. 나는 이것이 RAW 디스크/파티션의 경우 일 것이라고 읽었습니다. 이미 블록이 자유롭거나 사용 중인지, 파일 및 폴더 구조 등을 처리해야 할 필요가 있음을 이미 알고 있습니다. 이미이 작업을하고 있습니다.
또 다른 질문 : 약 fopen()
/fread()
/fwrite()
및 C++의 파일 스트림에 대해서 읽었을 때 버퍼에 대해서만 보았습니다. 이 스트림들과 f*
계열의 함수들만이 open/write/read/pwrite/pread /와 달리 일종의 버퍼를 가지고있는 것이 맞습니까? 이 버퍼가 디스크 캐시와 다른가요?
마지막 하나 : HDD 캐시가 자체 드라이브 또는 파일 시스템 (ext4, ufs 등)으로 처리됩니까?
감사합니다. 나는 블록이 좋지 않거나, 사용 중이거나, 파일과 폴더 구조가 나쁜 것만을 처리하는 것이 필요할 것이라고 생각했다. 다시 구현하려면 무엇이 더 필요합니까? –
잠시 바쁘게 지내기에 충분합니다. 잠시 바쁘게 할 것입니다. 나는 ext4 파일 시스템을 연구해야만 걱정할 것이있다. _ [... 30 초의 Cogitation 경과 ...] _ 그러나 저널 파일 시스템이라고 생각합니다. 따라서 저널링이 어떻게 작동하는지, 그리고 파일의 연속성을 엉망으로 만들지 않고 수동으로 할당 된 파일을 변경하는 방법을 알아야합니다. 할당 된 공간. 나는 진지한 의문을 갖고있다. 이제는 그것에 대해서 생각해도 그것이 가능하다. –
하드 드라이브 자체에 캐시가있을 수 있습니다. 다른 모든 버그는 있지만 무시할 수 있습니다. HDD는 그러한 캐시가 없다고 생각하는 것보다 더 나은 성능을 발휘할 수 있다는 점을 제외하면 그러한 캐시가없는 것처럼보아야합니다. 데이터가 HDD 캐시에 있고 실제로 디스크에 있지 않아도 쓰기가 완료되면 HDD에 기록 된 내용은 모두 안전해야합니다. –