Unix FFS에서 파일을 생성하려면 왜 최소 5개의 독립 디스크 I/O가 필요합니까?

Unix FFS에서 파일을 생성하려면 왜 최소 5개의 독립 디스크 I/O가 필요합니까?

존재하다로그 구조의 파일 시스템 설계 및 구현, 그것은 말한다 :

Unix FFS에서 새 파일을 생성하려면 최소 5개의 개별 디스크 I/O가 필요하며 각 I/O 앞에는 검색이 옵니다. 파일 속성과 파일 데이터, 디렉터리 데이터 및 디렉터리 속성에 대한 두 가지 서로 다른 액세스가 각각 한 번씩 액세스됩니다.

"파일 속성에 대한 두 가지 다른 액세스"란 무엇입니까? inode가 생성될 때 한 번만 계산할 수 있습니다.

답변1

Remzi Arpaci-Dusseau 교수의 책운영 체제: 세 가지 간단한 부분가지다화법파일 생성 정보:

예를 들어, 파일이 생성될 때 어떤 데이터 구조를 업데이트해야 하는지 생각해 보세요. 이 예에서는 사용자가 새 파일을 생성 /foo/bar.txt하고 파일이 한 블록 길이(4KB)라고 가정합니다. 파일이 새 파일이므로 새 inode가 필요합니다. 따라서 inode 비트맵과 새로 할당된 inode가 모두 디스크에 기록됩니다. 이 파일에도 데이터가 있으므로 할당해야 합니다. 따라서 데이터 비트맵과 데이터 블록은 (결국) 디스크에 기록됩니다. 따라서 현재 실린더 그룹에 최소 4번의 쓰기가 발생합니다(이러한 쓰기가 발생하기 전 일정 시간 동안 메모리에 버퍼링될 수 있음을 기억하세요). 하지만 그게 전부는 아닙니다! 특히 새 파일이 생성되면 해당 파일도 파일 시스템 계층 구조에 배치되어야 합니다. 즉, 디렉터리를 업데이트해야 합니다. 특히 bar.txt다음 항목을 추가하려면 상위 디렉토리 foo를 업데이트해야 합니다 . 이 업데이트는 기존 데이터 블록에 적합 foo하거나 (관련 데이터 비트맵과 함께) 새 블록을 할당해야 할 수도 있습니다. foo또한 업데이트 시간 필드(예: 마지막 수정 시간)뿐만 아니라 디렉터리의 새 길이를 반영하도록 inode 도 업데이트되어야 합니다. 전반적으로 새 파일을 만드는 것만으로도 많은 작업이 소요됩니다! 다음에 이 작업을 수행할 때 더 감사해야 할 수도 있고, 모든 작업이 얼마나 순조롭게 진행되었는지 적어도 놀라게 될 수도 있습니다.

두 가지를 비교하면 작성자가 파일 속성 액세스 내에 데이터 블록 업데이트를 포함했다고 추측합니다(파일 속성이 "inode"를 의미한다고 명시적으로 명시하고 있지만 데이터 위치를 파일 속성으로 취급하는 것이 비합리적이지는 않은 것 같습니다). 어쨌든 그들은 디스크 액세스 횟수를 과소평가하는 것 같습니다. Arpaci-Dusseau 교수의 설명에 따르면 최소 6회가 소요됩니다.

  1. 인덱스 노드 비트맵
  2. 인덱스 노드
  3. 데이터 비트맵
  4. 파일 데이터
  5. 디렉토리 데이터
  6. 디렉터리 속성

관련 정보