운영체제 기본/Linux/파일 시스템 콜/read와 write: 두 판 사이의 차이

잔글 Linux 각론 경로 변경에 따른 본문·목차·틀 링크 갱신
Linux 계층형 경로에 맞춰 문서 링크 갱신
52번째 줄: 52번째 줄:
읽을 데이터가 캐시에 준비되어 있으면 장치 읽기 없이 복사할 수 있다. 준비되지 않았다면 파일시스템을 통해 데이터를 가져오며, 그동안 요청한 스레드가 기다릴 수 있다.<ref name="filemap">[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/mm/filemap.c?h=v6.12 Linux v6.12 mm/filemap.c], generic_file_read_iter, filemap_read, generic_perform_write.</ref> 일반적인 버퍼드 쓰기는 메모리의 파일 데이터를 수정하고 라이트백으로 나중에 장치에 반영할 수 있으므로, 성공한 <code>write()</code>가 곧 전원 손실에도 보존되는 저장 완료를 의미하지는 않는다. 동기식 쓰기 플래그와 <code>fsync()</code>는 이 완료 조건에 관여한다. 자세한 캐시 흐름은 [[운영체제 기본/Linux/파일시스템/페이지 캐시|페이지 캐시]], ext4의 블록 읽기는 [[운영체제 기본/Linux/파일시스템/ext4의 파일 읽기|ext4의 파일 읽기]]에서 이어진다.<ref name="ext4"/>
읽을 데이터가 캐시에 준비되어 있으면 장치 읽기 없이 복사할 수 있다. 준비되지 않았다면 파일시스템을 통해 데이터를 가져오며, 그동안 요청한 스레드가 기다릴 수 있다.<ref name="filemap">[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/mm/filemap.c?h=v6.12 Linux v6.12 mm/filemap.c], generic_file_read_iter, filemap_read, generic_perform_write.</ref> 일반적인 버퍼드 쓰기는 메모리의 파일 데이터를 수정하고 라이트백으로 나중에 장치에 반영할 수 있으므로, 성공한 <code>write()</code>가 곧 전원 손실에도 보존되는 저장 완료를 의미하지는 않는다. 동기식 쓰기 플래그와 <code>fsync()</code>는 이 완료 조건에 관여한다. 자세한 캐시 흐름은 [[운영체제 기본/Linux/파일시스템/페이지 캐시|페이지 캐시]], ext4의 블록 읽기는 [[운영체제 기본/Linux/파일시스템/ext4의 파일 읽기|ext4의 파일 읽기]]에서 이어진다.<ref name="ext4"/>


procfs의 <code>/proc/uptime</code>은 같은 VFS 읽기 인터페이스에서 커널 상태로 문자열을 만든다. 키보드 이벤트를 읽는 장치 파일은 이벤트가 올 때까지 기다릴 수 있다. 따라서 fd와 반환 형식은 공통이어도, 데이터의 출처와 대기 조건은 대상의 구현에 달려 있다. 각각 [[운영체제 기본/Linux/파일시스템/procfs의 파일 읽기|procfs의 파일 읽기]], [[운영체제 기본/x86-64 Linux의 i8042 키보드 입력/evdev와 프로세스 깨우기|evdev와 프로세스 깨우기]]에서 비교할 수 있다.
procfs의 <code>/proc/uptime</code>은 같은 VFS 읽기 인터페이스에서 커널 상태로 문자열을 만든다. 키보드 이벤트를 읽는 장치 파일은 이벤트가 올 때까지 기다릴 수 있다. 따라서 fd와 반환 형식은 공통이어도, 데이터의 출처와 대기 조건은 대상의 구현에 달려 있다. 각각 [[운영체제 기본/Linux/파일시스템/procfs의 파일 읽기|procfs의 파일 읽기]], [[운영체제 기본/Linux/x86-64/i8042 키보드 입력/evdev와 프로세스 깨우기|evdev와 프로세스 깨우기]]에서 비교할 수 있다.


== 짧은 읽기와 짧은 쓰기 ==
== 짧은 읽기와 짧은 쓰기 ==