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

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

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

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

답변1

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

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

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

답변2

이는 부분적으로 역사적인 이유 때문이기도 하고, 부분적으로는 이런 방식이 더 의미가 있기 때문입니다.

멀티

멀티최초로 도입한 운영체제계층적 파일 시스템오늘날 우리가 알고 있듯이 디렉토리를 포함할 수 있는 디렉토리를 사용합니다. 인용“보조 스토리지를 위한 범용 파일 시스템”RC Daley 및 PG Neumann 작성:

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

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

언제든지 사용자는 자신의 작업 디렉터리라고 하는 특정 디렉터리에서 작업 중인 것으로 간주됩니다. 항목 이름을 지정하기만 하면 작업 디렉토리의 항목이 가리키는 파일에 효과적으로 액세스할 수 있습니다. 한 번에 두 명 이상의 사용자가 동일한 작업 디렉터리를 가질 수 있습니다.

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

Multics는 또한 단일 스토리지 풀을 갖는 원칙을 따랐습니다. 이 논문에서는 이 측면을 다루지 않습니다. 단일 스토리지 풀은 당시의 하드웨어와 잘 어울렸습니다. 이동식 스토리지 장치가 없었고 적어도 사용자가 관심을 가질 만한 스토리지 장치가 없었습니다. Multics에는 별도의 백업 스토리지 풀이 있었지만 이는 사용자에게 투명했습니다.

유닉스

Unix는 Multics에서 많은 영감을 얻었지만 단순성을 목표로 삼은 반면 Multics는 유연성을 목표로 했습니다.

단일 계층 파일 시스템은 Unix에 적합했습니다. Multics와 마찬가지로 스토리지 풀은 일반적으로 사용자와 관련이 없습니다. 그러나 이동식 장치가 있었고 Unix는 다음을 통해 이를 사용자에게 노출했습니다.mount그리고umount명령("수퍼유저", 즉 관리자에게 예약됨) ~ 안에“유닉스 시분할 시스템”, Dennis Ritchie와 Ken Thompson은 다음과 같이 설명합니다.

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

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

윈도우

Windows는 그 조상을 두 가지 계보로 거슬러 올라갑니다.VMS, 원래는 다음을 위해 설계된 운영 체제입니다.VAX미니컴퓨터, 그리고CP/M, 초기 Intel 마이크로컴퓨터용으로 설계된 운영 체제입니다.

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

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

언제MS-DOS2.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. 따라서 /home별도의 드라이브이며 Windows의 경우와 동일합니다 E:.

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

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

외부 드라이브는 두 시스템 모두 거의 동일한 방식으로 마운트됩니다. D:Windows와 Linux의 경우 를 말해보세요 /mnt/cdrom. 이들 각각은 디렉토리이므로 실제로 차이점을 알 수 없습니다. Windows에서 드라이브에 CDROM을 넣으면 D:Linux에서와 마찬가지로 디스크가 마운트됩니다.

관련 정보