Navigation/Terminology

Design a file system! What are your design goals?

file system을 디자인하는 것은 만족시키고자 하는 많은 고레벨의 디자인 목표가 있기 때문에 매우 어렵습니다.  완전할 수 없는 이상적인 목표는 다음과 같습니다.

  • 신뢰성이 있고 견고합니다(심지어  hardware failure나 전력 부족으로 불완전한 쓰기가 발생했을 때에도).
  • 접근 (보안) 제어
  • Accounting and quotas
  • indexing과 검색
  • 버전 관리 및 백업 능력
  • 암호화
  • 자동 압축
  • 고성능(메모리 내 캐싱)
  • 스토리지 중복 제거의 효과적인 사용

모든 파일 시스템이 이런 목표를 기본적으로 지원하지는 않습니다. 예를 들어, 많은 파일시스템들은 잘 사용되지 않는 파일을 자동으로 압축하지 않습니다.

 

What are ., .., and ...?

표준 unix file system에서,

  • .은 현재 디렉토리를 의미합니다.
  • ..은 상위 디렉토리를 의미합니다.
  • ...은 어떠한 디렉토리에서도 유효한 표현이 아닙니다.(2개 상위의 디렉토리를 의미하지 않습니다.) 하지만 디스크의 파일 이름일 수는 있습니다.

 

What are absolute and relative path?

절대 경로는 디렉토리 트리의 root 노드에서 시작하는 경로입니다. 상대 경로는 디렉토리 트리의 현재 위치에서 시작하는 경로입니다.

 

What are some examples of relative and absolute path?

만약 홈 디렉토리에서 시작한다면( 줄여서 "~" 로 씁니다), Desktop/cs241은 상대 경로가 될 것입니다. 절대 경로는 /Users/[name]/Desktop/cs241과 같은 형태일 것입니다.

 

How do I simplify a/b/../c./?

..이 부모 폴더이고 .이 현재 폴더라는 사실을 기억해 주세요.

a/b../c./의 예를 살펴봅시다.

  • 1단계: cd a(in a)
  • 2단계: cd b(in a/b)
  • 3단계: cd ..(in a - ..이 상위 폴더이므로)
  • 4단계: cd c(in a/c)
  • 5단계: cd .(in a/c - .이 현재 폴더이므로) 

그러므로 위의 예는 a/c로 요약될 수 있습니다.

 

So what's a File System?

file system은 디스크에 정보가 어떻게 구성되어지는지를 알려줍니다. 파일에 접근할 때마다 파일 시스템은 어떻게 파일을 읽을 지 지시합니다. 다음 그림은 파일시스템의 샘플 이미지입니다.

복잡해 보이지만, 하나씩 설명해 보겠습니다.

  • Superblock: 이 블록은 파일 시스템의 메타데이터를 담고 있습니다. 얼마나 큰지, 최근 수정된 시간은 언제인지, inode의 수, 첫 inode의 시작, 데이터 블록의 수, 첫 데이터 블록의 시작 등을 담고 있습니다.
  • Inode: inode는 파일을 의미합니다.
  • Disk blocks: 데이터가 저장되는 곳입니다. 파일의 실제 내용물입니다.

How does inode store the file contents?

아래는 Wikipedia에서 가져왔습니다.

...더보기

In a Unix-style file system, an index node, informally referred to as an inode, is a data structure used to represent a filesystem object, which can be one of various things including a file or a directory. Each inode stores the attributes and disk block location(s) of the filesystem object's data. Filesystem object attributes may include manipulation metadata (e.g. change, access, modify time), as well as owner and permission data (e.g. group-id, user-id, permissions).

파일의 첫 번째 몇 바이트를 읽기 위해서, 처음 direct block 을 가리키는 첫 direct block pointer를 따라가 첫 몇 바이트를 읽습니다. 쓰기 또한 같은 프로세스를 거칩니다. 만약 전체 파일을 읽고싶다면 크기가 다 떨어질때까지 direct block을 계속 읽으면 됩니다. 

 

Why make disk blocks the same size as memory pages?

가상 메모리를 지원하기 위해서 메모리에 페이지를 넣거나 뺄 수 있습니다.

What information do we want to store for each file?

  • 파일 이름
  • 파일 크기
  • 생성된 시간, 마지막 수정 시간, 마지막 접근 시간
  • 허가
  • 경로
  • checksum
  • file data(inode)

What are the traditional permissions: user - group - other permissions for a file?

일부 공통 파일 허가는 아래와 같이 되어 있습니다:

  - 755: rwx r-x r-x

user : rwx, group: r-x, others: r-x

사용자는 읽고 쓰거나 실행이 가능하지만, 그룹과 다른 사람들은 읽고 실행만 가능합니다.

  - 644: rw- r-- r--

user: rw-, group: r--, others: r--

사용자는 읽고 쓰기가 가능합니다. 그룹과 다른 사람은 읽기만 가능합니다.

 

What are the the 3permission bits for a regular file for each role?

  • Read(most significant bit)
  • Write(2nd bit)
  • Execute(least significant bit)

What do "644" "755" mean?

위 예들은 octal format의 허가의 예시입니다. 각각의 octal 숫자는 다른 role에 부여됩니다.(user, group, world)

위 허가는 다음과 같이 읽을 수 있습니다.

  • 644 - user: R/W, group: R, world: R
  • 755 - user: R/W/X, group: R/X, world: R/X

How many pointers can you store in each indirection table?

디스크를 4KB 블록으로 나누고 2^32 블록들로 어드레싱할 수 있다고 가정합시다. 이 때 최대 디스크 크기는 4KB * 2^32이므로 약 16TB입니다.

각각의 디스크 블록은 4KB를 저장하고 각각의 포인터가 4바이트(32비트)필요하다고 한다면 한 디스크 블록에는 1024개의 포인터가 존재합니다.

double indirect block은 1024개의 포인터가 1024개의 indirection table을 가리킵니다. 이 경우 double-indirect block은 1024 * 4MB인 4GB의 데이터를 지정할 수 있습니다.

만약 세번의 indirection block이라면 4TB의 데이터를 참조할 수 있습니다.

'Angrave System Programming > File Systems' 카테고리의 다른 글

File System: Permissions  (0) 2019.05.08
File System: Files are inodes  (0) 2019.05.08
Posted by 몰랑&봉봉
,