열린 파일 테이블은 어떻게 구성되어 있나요?

열린 파일 테이블은 어떻게 구성되어 있나요?

저는 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 시스템 호출(예: , 또는 )에 의해 호출됩니다.fdtablefdget()fchown()preadv()ftruncate()

모든 링크는 버전 6.0 커널 코드에 대한 것입니다.

관련 정보