커널이 intterupted되지 않는다면, 특정 크기 (PIPE_BUF, 4096Bytes가되도록 saied)가 원자 적으로 기록된다는 것을 알고 있습니다. 이는 블록을 읽으려는 다른 프로세스를 의미합니다.Linux Syscall write : 커널이 데이터 쓰기 순서를 보장합니까?
그러나 나는 커널이 작업을 수행하는 동안 더 많은 데이터 블록 (예 : "abc ... [x bytes] ... xyz")을 저장 장치에 쓰면, 커널은 abc를 먼저 쓰고 xyz는 마지막으로 쓸 것인가?
그렇지 않으면 쓰기 작업이 완료되기 전에 "* ... [x bytes] ... xyz"을 읽는 다른 프로세스가 발생할 수 있습니다. 그것은 많은 응용 프로그램에 대한 재앙입니다.
누군가가 구현을 알고 있습니까? 아니면 커널 소스에서 대답을 찾을 수 있습니까?
답장을 기다리십시오! 감사!
[업데이트 2011년 11월 12일]
나는 소스 코드에 보였다,하지만 난 그것을 충분히 이해할 수 없다. I가 호출 체인 발견 "기록 -> vfs_write -> do_sync_write [루프] -> generic_file_aio_write [inode_mutex] -> __generic_file_aio_write -> ... -> generic_perform_write -> ... - (N, 내지)> __copy_from_user
__copy_from_user는 아키텍처 의존적 인 asm 코드로 구현 된 매크로/함수이며, 지금은 이해할 수 없습니다.하지만 대부분의 사람들이 생각해야 할 코더가 그것을 수행 할 것이라고 생각합니다 ...
희망 더 furthur 해명 ~에 대한
"내 데이터를 먹어 라"를 시작으로 살펴보십시오. http://flamingspork.com/talks/ –
감사합니다. 프레젠테이션을 읽었습니다. 그것은 실용적이고 많은 문제를 묘사하지만, 충분히 깊지는 않습니다. – felix021