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

mmap 파일 메모리 매핑 각론을 연결; 페이지 캐시 상세 확장은 보류
코드 앞의 불필요한 자기해설을 직접적인 참조 관계 설명으로 정리
18번째 줄: 18번째 줄:
<code>current</code>는 현재 실행 중인 태스크를 나타낸다. <code>current->files</code>로 접근하는 <code>files_struct</code>에 파일 디스크립터 테이블이 연결되어 있고, <code>fdtable.fd</code>는 <code>struct file</code> 포인터의 배열이다. 같은 fd 값도 어느 테이블에서 찾는지에 따라 다른 열린 파일을 가리킬 수 있다.
<code>current</code>는 현재 실행 중인 태스크를 나타낸다. <code>current->files</code>로 접근하는 <code>files_struct</code>에 파일 디스크립터 테이블이 연결되어 있고, <code>fdtable.fd</code>는 <code>struct file</code> 포인터의 배열이다. 같은 fd 값도 어느 테이블에서 찾는지에 따라 다른 열린 파일을 가리킬 수 있다.


이 관계를 설명용 의사 코드로 줄이면 다음과 같다. 실제 소스의 연속된 인용이 아니며, 그대로 커널에 넣어 사용할 코드도 아니다.
파일 디스크립터 테이블의 참조 관계:


<pre>
<pre>
45번째 줄: 45번째 줄:
</pre>
</pre>


<code>ksys_read()</code>는 얻은 객체를 <code>vfs_read()</code>에 넘긴다. <code>vfs_read()</code>는 접근 모드, 사용자 버퍼 등에 관한 검사를 거쳐 읽기 구현을 선택한다. 분기만 뽑은 설명용 의사 코드는 다음과 같다.
<code>ksys_read()</code>는 얻은 객체를 <code>vfs_read()</code>에 넘긴다. <code>vfs_read()</code>는 접근 모드, 사용자 버퍼 등에 관한 검사를 거쳐 읽기 구현을 선택한다.


<pre>
<pre>