하위 디렉터리의 파일 디렉터리 항목은 어디에 저장됩니까?

하위 디렉터리의 파일 디렉터리 항목은 어디에 저장됩니까?

이 질문이 다른 곳에서도 정확히 중복된다면 용서해 주세요. 하지만 지금까지 SE나 다른 사이트에서 찾은 모든 답변은 일반적으로 이 질문에 구체적으로 답변하지 않습니다. 저는 대학에서 운영 체제 과정을 수강하고 있기 때문에 파일 시스템 전반에 대해 처음 접합니다.

내가 아는 한, 대부분의 파일 시스템에는 파일 디렉터리 항목을 포함하는 루트 디렉터리가 있습니다. 이러한 항목에는 파일 이름에서 inode 번호로의 매핑이 포함되어 있으며 길이가 가변적입니다.

~에 따르면이 답변, 항목은 다음과 같은 선형 방식으로 저장되는 것 같습니다.

나는 inode가 무엇인지, 목차(TOC) 항목을 사용하여 물리적 디스크에 있는 파일의 데이터 블록 번호에 어떻게 매핑되는지 완전히 이해할 수 있습니다.


그러나 내 질문은 다음과 같습니다.하위 디렉터리 파일 디렉터리 항목은 어떻게, 어디에 저장됩니까?

나는 그것들이 루트 디렉토리와 같은 위치에 저장되어 있지만 오프셋에 저장되어 있다고 생각합니다. 그러나 inode에서 이 오프셋을 검색하는 방법을 상상할 수 없습니다.

그래서 하위 디렉터리의 디렉터리 항목이 실제로 루트 디렉터리의 항목과 함께 저장되는 것이 아니라 디스크의 데이터 영역에 저장되는 것 같은 느낌이 듭니다.

그렇다면 한 디렉터리에서 다른 디렉터리로 이동하려면 임의의 위치에서 디스크를 읽어야 하는데, 이는 제가 보기에는 약간 비효율적입니다.

그럼에도 불구하고 하위 디렉터리의 파일 디렉터리 항목 위치에 대한 나의 오해를 간략하게 설명하고 싶습니다.

도움을 주셔서 감사합니다.

답변1

디렉터리는 일반적으로 파일로 구현됩니다. 여기에는 inode와 데이터 영역이 있지만 물론 일반적으로 특수 시스템 호출을 통해 (적어도 쓰기를 위해) 액세스됩니다. 일부 시스템에서는 허용됩니다.읽다일반적인 read(2)시스템 호출이 포함된 디렉토리(Linux에는 시스템 호출이 없으며 FreeBSD는 지난 번 확인했을 때 했습니다). 디렉토리 파일의 데이터 영역에는 디렉토리 항목이 포함됩니다. 에서 ext4루트 디렉토리에는 inode 번호 2로 고정된 inode도 있습니다(시도해 보십시오 ls -lid /).

디렉토리를 파일처럼 동작하게 하면 파일에 블록을 할당하는 기능이 항상 존재해야 하므로 디렉토리 항목 등을 위한 공간을 할당하기가 쉽습니다. 또한 필요에 따라 동일한 데이터 블록을 사용하므로 파일 데이터와 디렉터리 목록 사이에 미리 공간을 할당할 필요가 없습니다.

디렉토리 항목이 저장되는 내부 구조는 파일 시스템마다 다르며 ext2예를 들어 및 ext4. 최신 시스템은 선형 목록 대신 트리를 사용하여 조회 속도를 높입니다. 바라보다여기. 고귀한 사람들이라도FAT 파일 시스템디렉토리는 파일로 저장되지만 적어도 이전 FAT에서는 루트 디렉토리가 특별합니다. (물론 FAT의 디렉토리 항목 구조는 Unix 파일 시스템의 구조와 다릅니다.)

그렇다면 한 디렉터리에서 다른 디렉터리로 이동하려면 임의의 위치에서 디스크를 읽어야 하는데, 이는 제가 보기에는 약간 비효율적입니다.

예. 그러나 자주 액세스되는 디렉터리 항목(또는 기본 데이터 블록)은 최신 운영 체제에서 캐시될 가능성이 높습니다.

모든 디렉터리의 내용을 중앙 집중식으로 저장하려면 큰 영역을 미리 할당해야 하며 여전히 디렉터리 데이터 영역 내에서 디스크 조회가 필요합니다.

답변2

일반적인 해결책은 루트 디렉터리의 일부 inode가 디렉터리이기도 한 항목을 가리키는 것입니다. 여러 면에서 파일과 비슷하지만 파일 유형에 따라 파일 시스템이 이를 디렉터리로 해석하도록 지시합니다.

cat(오리지널 Unix와 같은 아주 오래된 튜토리얼에서는 디렉토리도 가질 수 있다는 말을 듣게 됩니다 . 이는 일반적으로 더 이상 사실이 아닙니다.)

즉, 각 디렉토리는 inode 포인터의 간단한 선형 목록입니다. 그 중 일부는 디렉터리 트리(파일)의 리프 노드를 가리키고 다른 일부는 내부 노드(다른 디렉터리)를 가리킵니다. 루트 디렉터리의 유일한 특별한 점은 루트 디렉터리가 자신의 상위 디렉터리라는 것과 시스템이 여기서부터 트리 탐색을 시작하도록 지시하는 트리 외부의 무언가가 있다는 것입니다.

관련 정보