저는 Linux 시스템 프로그래밍 2판을 읽기 시작했고 파일 테이블(예: "프로세스당 열려 있는 파일 목록")에 대해 궁금해졌습니다. 파일 테이블은 SQL db의 테이블처럼 fds를 기본 키로 사용합니까? 그렇다면 중복된 항목이 있다는 의미입니까, 아니면 별도의 테이블로 분할하여 정규화해야 합니까?
아니면 직접적인 C/어셈블리를 다루기 때문에 완전히 다르게 작동합니까? 그렇다면 어떤 데이터 구조가 사용됩니까?
이 하위 시스템은 소스 코드의 어디에 정의되어 있나요? 내가 이렇게 하는 대부분의 이유는 C와 Linux를 더 잘 이해하기 위해서입니다. 어디서 찾을 수 있는지 안다면 더 나은 아이디어를 얻을 수 있을 것입니다.
답변1
이것은 C이기 때문에 "테이블"은 아마도 "구조체 배열"의 약어일 것입니다.
당신은 읽고 싶을 수도 있습니다"리눅스 커널 이해"또는"리눅스 커널 개발".
또는 어려운 방법을 사용하여 소스 코드를 읽는 것이 좋은 시작점이 될 수 있습니다.
include/linux/fdtable.h
그리고
include/linux/fs.h
.
답변2
각 프로세스에 대해 열린 파일 목록 각 프로세스를 다음과 같이 표현합니다.task_struct
객체에는 다음을 가리키는 멤버가 있습니다.files_struct
파일 정보 개체를 열고 files_struct
유지합니다 .fdtable
포함:
- 열린 파일 설명자 배열(
open_fds
멤버) - 내부 배열
struct file
객체는fds
하위 수준 블록에 대한 유용한 정보를 (멤버에) 보유합니다.struct inode
더 나은 이해를 위해 fdtable
읽을 수 있습니다fdget()
또는 동일한 C 파일의 다른 유사한 함수, 주어진 파일 설명자(사용자 애플리케이션의 정수) struct file
에서 올바른 객체를 찾기 위해 많은 파일 I/O 시스템 호출(예: , 또는 )에 의해 호출됩니다.fdtable
fdget()
fchown()
preadv()
ftruncate()
모든 링크는 버전 6.0 커널 코드에 대한 것입니다.