운영체제 기본/Linux/파일시스템/ext4의 파일 읽기: 두 판 사이의 차이

잔글 관리자님이 운영체제 기본/Linux의 파일시스템/ext4의 파일 읽기 문서를 운영체제 기본/Linux/파일시스템/ext4의 파일 읽기 문서로 이동했습니다: Linux 각론 제목을 계층형 경로로 통일
잔글 Linux 각론 경로 변경에 따른 본문·목차·틀 링크 갱신
 
1번째 줄: 1번째 줄:
{{이전 다음 문서
{{이전 다음 문서
|이전=← 이전 문서<br />[[운영체제 기본/Linux의 파일시스템/VFS와 파일 객체|VFS와 파일 객체]]
|이전=← 이전 문서<br />[[운영체제 기본/Linux/파일시스템/VFS와 파일 객체|VFS와 파일 객체]]
|목차=[[운영체제 기본/Linux의 파일시스템|파일시스템 목차]]
|목차=[[운영체제 기본/Linux/파일시스템|파일시스템 목차]]
|다음=다음 문서 →<br />[[운영체제 기본/Linux의 파일시스템/procfs의 파일 읽기|procfs의 파일 읽기]]
|다음=다음 문서 →<br />[[운영체제 기본/Linux/파일시스템/procfs의 파일 읽기|procfs의 파일 읽기]]
}}
}}


95번째 줄: 95번째 줄:


== VFS와 ext4 읽기 경로 ==
== VFS와 ext4 읽기 경로 ==
ext4는 블록 장치에 파일의 내용과 메타데이터를 저장하는 파일시스템이다. inode는 파일의 크기, 종류와 데이터 위치를 관리하는 파일별 객체다. 경로를 찾아 파일을 여는 과정이 끝나면, VFS의 열린 파일 객체인 <code>struct file</code>이 해당 inode와 파일 연산을 가리킨다. 파일 디스크립터가 이 객체로 이어지는 과정은 [[운영체제 기본/Linux의 파일시스템/VFS와 파일 객체|VFS와 파일 객체]]에서 다룬다.
ext4는 블록 장치에 파일의 내용과 메타데이터를 저장하는 파일시스템이다. inode는 파일의 크기, 종류와 데이터 위치를 관리하는 파일별 객체다. 경로를 찾아 파일을 여는 과정이 끝나면, VFS의 열린 파일 객체인 <code>struct file</code>이 해당 inode와 파일 연산을 가리킨다. 파일 디스크립터가 이 객체로 이어지는 과정은 [[운영체제 기본/Linux/파일시스템/VFS와 파일 객체|VFS와 파일 객체]]에서 다룬다.


ext4 일반 파일의 <code>ext4_file_operations</code>에는 다음 읽기 함수가 등록되어 있다.<ref name="ext4-file">[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/ext4/file.c?h=v6.12 Linux v6.12 fs/ext4/file.c]의 ext4_file_operations, ext4_file_read_iter, ext4_file_mmap, ext4_file_vm_ops.</ref>
ext4 일반 파일의 <code>ext4_file_operations</code>에는 다음 읽기 함수가 등록되어 있다.<ref name="ext4-file">[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/ext4/file.c?h=v6.12 Linux v6.12 fs/ext4/file.c]의 ext4_file_operations, ext4_file_read_iter, ext4_file_mmap, ext4_file_vm_ops.</ref>
106번째 줄: 106번째 줄:


== 페이지 캐시 조회와 데이터 적재 ==
== 페이지 캐시 조회와 데이터 적재 ==
페이지 캐시는 파일 내용의 일부를 메모리에 보관한다. <code>filemap_read()</code>는 <code>file->f_mapping</code>으로 접근하는 캐시에서 읽을 범위를 확보한다. 요청한 내용이 이미 준비되어 있으면 해당 데이터를 사용자 버퍼로 복사하며, 그 데이터를 얻기 위한 장치 읽기는 필요하지 않다. 캐시를 관리하는 메모리 단위인 folio의 상태와 검색 방식은 [[운영체제 기본/Linux의 파일시스템/페이지 캐시|페이지 캐시]]에서 설명한다.
페이지 캐시는 파일 내용의 일부를 메모리에 보관한다. <code>filemap_read()</code>는 <code>file->f_mapping</code>으로 접근하는 캐시에서 읽을 범위를 확보한다. 요청한 내용이 이미 준비되어 있으면 해당 데이터를 사용자 버퍼로 복사하며, 그 데이터를 얻기 위한 장치 읽기는 필요하지 않다. 캐시를 관리하는 메모리 단위인 folio의 상태와 검색 방식은 [[운영체제 기본/Linux/파일시스템/페이지 캐시|페이지 캐시]]에서 설명한다.


캐시에 없다고 해서 매번 <code>read_folio</code>만 호출되는 것은 아니다. <code>filemap_get_pages()</code>는 먼저 동기 선행 읽기를 시도할 수 있다. 선행 읽기인 readahead는 요청 범위와 이어질 것으로 예상되는 범위를 미리 읽는 동작이다. 이미 캐시에 있지만 읽기 작업이 진행 중이라면 완료를 기다릴 수도 있다. 필요한 데이터가 여전히 준비되지 않은 경우에는 단일 folio 읽기 경로를 사용한다. 캐시 적중 중에도 선행 읽기 표시를 만나면 뒤쪽 범위에 대한 추가 읽기를 시작할 수 있다.<ref name="ext4-filemap"/>
캐시에 없다고 해서 매번 <code>read_folio</code>만 호출되는 것은 아니다. <code>filemap_get_pages()</code>는 먼저 동기 선행 읽기를 시도할 수 있다. 선행 읽기인 readahead는 요청 범위와 이어질 것으로 예상되는 범위를 미리 읽는 동작이다. 이미 캐시에 있지만 읽기 작업이 진행 중이라면 완료를 기다릴 수도 있다. 필요한 데이터가 여전히 준비되지 않은 경우에는 단일 folio 읽기 경로를 사용한다. 캐시 적중 중에도 선행 읽기 표시를 만나면 뒤쪽 범위에 대한 추가 읽기를 시작할 수 있다.<ref name="ext4-filemap"/>
144번째 줄: 144번째 줄:


{{이전 다음 문서
{{이전 다음 문서
|이전=← 이전 문서<br />[[운영체제 기본/Linux의 파일시스템/VFS와 파일 객체|VFS와 파일 객체]]
|이전=← 이전 문서<br />[[운영체제 기본/Linux/파일시스템/VFS와 파일 객체|VFS와 파일 객체]]
|목차=[[운영체제 기본/Linux의 파일시스템|파일시스템 목차]]
|목차=[[운영체제 기본/Linux/파일시스템|파일시스템 목차]]
|다음=다음 문서 →<br />[[운영체제 기본/Linux의 파일시스템/procfs의 파일 읽기|procfs의 파일 읽기]]
|다음=다음 문서 →<br />[[운영체제 기본/Linux/파일시스템/procfs의 파일 읽기|procfs의 파일 읽기]]
}}
}}


{{운영체제 기본 둘러보기}}
{{운영체제 기본 둘러보기}}