Linux 파일 시스템이 단일 디렉터리 트리로 설계된 이유는 무엇입니까?

Linux 파일 시스템이 단일 디렉터리 트리로 설계된 이유는 무엇입니까?

Linux가 단일 디렉토리 트리로 설계된 이유를 설명할 수 있는 사람이 있습니까?

C:\Windows에서는 , 및 와 같은 여러 드라이브를 가질 수 있지만 D:\Unix에서는 루트가 하나만 있습니다. 특별한 이유가 있나요?

답변1

Unix 파일 시스템은 Windows보다 수년 앞서기 때문에 "Windows는 왜 각 장치에 대해 별도의 지정자를 사용합니까?"라는 질문을 다시 표현할 수 있습니다.

계층적 파일 시스템의 장점은 모든 파일이나 디렉터리를 루트 디렉터리의 하위 디렉터리로 찾을 수 있다는 것입니다. 데이터를 새 장치나 네트워크 장치로 이동해야 하는 경우 파일 시스템의 위치는 동일하게 유지될 수 있으며 응용 프로그램에는 차이가 없습니다.

정적 운영 체제를 갖춘 시스템과 I/O 요구 사항이 높은 애플리케이션이 있다고 가정해 보겠습니다. /usr을 읽기 전용으로 마운트하고 SSD 드라이브에 /opt(애플리케이션이 있는 경우)를 배치할 수 있습니다. 파일 시스템 계층 구조는 변경되지 않습니다. Windows에서는 특히 C:\Program Files\ 아래에 위치해야 하는 응용 프로그램의 경우 훨씬 더 어렵습니다.

답변2

이는 부분적으로는 역사적인 이유 때문이고 부분적으로는 더 합리적이기 때문입니다.

멀티플렉스 시스템

멀티플렉스 시스템처음으로 소개합니다계층적 파일 시스템오늘날 우리가 알고 있듯이 디렉터리에는 디렉터리가 포함될 수 있습니다. 인용하다"보조 저장소를 위한 범용 파일 시스템"저자: RC Daley 및 PG Neumann:

이 기사의 2부에서는 시스템을 유연하게 사용할 수 있는 파일 계층 구조를 소개합니다. 이 구조에는 다양성을 보장하기에 충분한 기능이 포함되어 있습니다. (…)

이해를 돕기 위해 파일 구조는 파일 트리로 생각할 수 있으며 그 중 일부는 디렉터리입니다. 즉, 한 가지 예외를 제외하고 모든 파일(예: 모든 디렉터리)은 정확히 하나의 디렉터리에 있는 정확히 하나의 분기를 직접 가리키는 자신을 찾습니다. 예외는 트리의 맨 아래에 있는 루트 디렉터리 또는 루트입니다. 디렉토리의 루트를 명시적으로 가리키지는 않지만 파일 시스템에 알려진 가상의 분기는 암시적으로 루트를 가리킵니다. (…)

언제든지 사용자는 디렉터리(작업 디렉터리라고 함)에서 작업 중이라고 합니다. 그는 단순히 항목 이름을 지정함으로써 작업 디렉토리의 항목이 가리키는 파일에 효과적으로 액세스할 수 있습니다. 여러 사용자가 동시에 동일한 작업 디렉터리를 가질 수 있습니다.

다른 많은 측면과 마찬가지로 Multics는 유연성을 추구합니다. 사용자는 파일 시스템의 하위 트리에서 작업하고 나머지는 무시할 수 있으며 여전히 디렉터리를 활용하여 파일을 구성할 수 있습니다. 디렉토리는 액세스 제어에도 사용됩니다. READ 속성을 사용하면 사용자가 디렉토리에 있는 파일을 나열할 수 있고 EXECUTE 속성을 사용하면 사용자가 디렉토리에 있는 파일에 액세스할 수 있습니다(이는 다른 많은 기능과 마찬가지로 UNIX에 존재합니다).

Multics는 또한 단일 스토리지 풀의 원칙을 따릅니다. 이 글에서는 이 부분에 대해 자세히 다루지 않습니다. 단일 스토리지 풀은 당시의 하드웨어와 거의 일치했습니다. 적어도 사용자가 관심을 가질 만한 이동식 저장 장치는 없었습니다. Multics에는 별도의 백업 스토리지 풀이 있지만 이는 사용자에게 투명합니다.

유닉스

Unix는 Multics에서 많은 영감을 얻었지만 Multics의 목표는 단순성인 반면 Multics의 목표는 유연성입니다.

단일 계층 파일 시스템은 Unix에 적합합니다. Multics와 마찬가지로 스토리지 풀은 일반적으로 사용자에 구애받지 않습니다. 그러나 이동식 장치가 존재하며 Unix는 통과합니다.mount그리고umount명령("수퍼유저", 즉 관리자용으로 예약됨) 존재하다"UNIX 시분할 시스템", Dennis Ritchie와 Ken Thompson은 다음과 같이 설명합니다.

파일 시스템의 루트는 항상 동일한 장치에 저장되지만 전체 파일 시스템 계층 구조가 해당 장치에 있을 필요는 없습니다. 기존 일반 파일의 이름과 관련 스토리지 볼륨(예: 디스크 패키지)이 자체 디렉터리 계층 구조를 포함하는 별도의 파일 시스템을 가져야 하는 특수 파일의 이름이라는 두 가지 매개변수가 있는 마운트 시스템 요청이 있습니다. 마운트의 효과는 이전 일반 파일에 대한 참조를 이동식 볼륨에 있는 파일 시스템의 루트 디렉터리에 대한 참조로 변경하는 것입니다. 실제로 마운트는 계층 트리(일반 파일)의 리프를 완전히 새로운 하위 트리(이동식 볼륨에 저장된 계층)로 대체합니다. 일단 마운트되면 이동식 볼륨의 파일과 영구 파일 시스템의 파일 간에 사실상 차이가 없습니다. 예를 들어, 설치에서 루트 디렉터리는 한 디스크 드라이브의 작은 파티션에 있고 사용자 파일이 포함된 다른 드라이브는 시스템 초기화 시퀀스에 의해 마운트됩니다. 마운트 가능한 파일 시스템은 해당 특수 파일을 작성하여 생성됩니다. 유틸리티를 사용하여 빈 파일 시스템을 생성하거나 단순히 기존 파일 시스템을 복사할 수 있습니다.

계층적 파일 시스템은 여러 저장 장치를 관리하는 복잡성을 커널로 중앙 집중화할 수 있다는 장점도 있습니다. 이는 커널이 더 복잡하지만 모든 애플리케이션이 더 간단하다는 것을 의미합니다. 커널은 하드웨어 장치에 관심을 가져야 하지만 대부분의 애플리케이션은 그렇지 않기 때문에 이것이 더 자연스러운 디자인입니다.

윈도우

Windows의 조상은 두 가지 계보로 거슬러 올라갑니다.가상 관리 시스템, 원래 설계된 운영 체제VAX미니컴퓨터, 그리고CP/M, 초기 Intel 마이크로컴퓨터용으로 설계된 운영 체제입니다.

VMS에는 분산 계층 파일 시스템이 있습니다.문서 11. 문서 11에서는파일의 전체 경로노드 이름, 노드의 계정 이름, 장치 이름, 디렉터리 트리 경로, 파일 이름, 파일 유형 및 버전 번호가 포함됩니다. VMS는 강력한논리적 이름기능을 사용하면 특정 디렉터리에 대한 바로 가기를 정의할 수 있으므로 사용자는 디렉터리의 "실제" 위치에 대해 신경 쓸 필요가 거의 없습니다.

CP/M은 64kB RAM과 플로피 디스크 드라이브를 갖춘 컴퓨터용으로 설계되었기 때문에 단순성을 추구했습니다. 디렉터리는 없지만 파일 참조에는 드라이브 표시( A:또는 B:)가 포함될 수 있습니다.

언제운영 체제2.0에는 CP/M을 따르는 MS-DOS 1과 호환되는 구문을 사용하는 디렉터리가 도입되었습니다. 따라서 경로는 단일 문자 이름을 가진 드라이브에 루트로 지정됩니다. (또한 슬래시 문자는 VMS 및 CP/M에서 /명령줄 옵션을 시작하는 데 사용되므로 디렉터리 구분 기호로 다른 문자를 사용해야 합니다. 이것이 일부 내부 구성 요소도 슬래시를 지원하지만 DOS 및 이후 버전의 Windows에서 백슬래시를 사용하는 이유입니다. ).

Windows는 DOS 및 VMS 방법과의 호환성을 유지하므로 관련성이 떨어지더라도 드라이브 문자 개념을 유지합니다. 오늘날 Windows에서는 내부적으로 다음을 사용합니다.노스캐롤라이나대학교길(원래 개발된Microsoft 및 IBM 제공운영 체제/2, 관련 조상 포함). 이는 고급 사용자를 위해 예약되어 있지만(아마 기록의 무게로 인해) Windows에서는 다음을 통한 설치를 허용합니다.재분석 지점.

답변3

단일 디렉터리 트리를 사용하는 데에는 보안 문제가 없습니다.

Unix를 설계한 사람들은 사용자가 어떤 물리적 장치에 특정 리소스가 포함되어 있는지 알아야 하는 운영 체제에 대한 광범위한 경험을 갖고 있었습니다. 운영 체제의 목적 중 하나는 실제 하드웨어 위에 추상적인 머신을 생성하는 것이기 때문에 리소스의 물리적 위치를 기준으로 주소를 지정하는 것이 훨씬 간단할 것이라고 판단하고 모든 것을 이름 트리에 넣기로 결정했습니다.

그건 단지 그 뒤에 숨은 천재의 일부일 뿐이에요유닉스 디자인.

답변4

*nix와 Windows 모두 해당 드라이버가 설치되어 있습니다. Windows에서는 기본적으로 알파벳 오름차순으로 정렬되는 마운트 지점에 자동으로 설치됩니다. 이러한 기본값은 다음과 같습니다.

  • A:그리고 B:=> 플로피 디스크
  • C:=> 첫 번째 하드 디스크의 첫 번째 파티션
  • D:=> 다른 파티션이 없으면 다음 파티션이나 다음 하드 드라이브 또는 CD/DVD 드라이브.

각 마운트 지점은 디렉터리입니다.

*nix에서는 마운트 지점이 사용자에 의해 결정됩니다. 예를 들어, 한 파티션을 로 마운트 /하고 다른 파티션을 /home. 따라서 Windows 용어 /home와 동일한 별도의 드라이브입니다 .E:

Windows와 *nix 두 경우 모두 마운트 지점은 별도의 디렉터리입니다. 유일한 차이점은 *nix에서는 이러한 개별 디렉토리가 의 하위 디렉토리인 반면 /, C:Windows에서는 각 마운트 지점 /My Computer.

사용자 관점에서 볼 때 가장 큰 장점은 마운트가 완전히 투명하다는 것입니다. 디렉토리가 /home실제로 별도의 파티션에 있다는 것을 알 필요는 없습니다 . 일반 디렉토리로 사용할 수 있습니다. 대신, DOS에서는 마운트 지점 이름으로 명시적으로 호출해야 합니다.E:\home

외부 드라이브는 두 시스템 모두에서 거의 동일한 방식으로 설치됩니다. 예를 들어 D:Windows와 /mnt/cdromLinux가 있습니다. 이것들은 모두 동일한 디렉토리이며 실제로 차이점을 볼 수 없습니다. Windows에서 CDROM을 드라이브에 넣으면 D:Linux에서와 마찬가지로 디스크가 마운트됩니다.

관련 정보