본문 바로가기

나름컴공이라공/Linux Kernel

Linux Kernal Internal > Ch5 파일시스템과 가상 파일시스템(2)

☆★☆2016.01.14 작성☆★☆
☆★☆참고책 _리눅스 커널 내부구조(저자_백승재, 최종무)☆★☆

 

3. FAT 파일시스템

* 파일시스템이 관리하는 데이터 : 메타데이터, 유저 데이터

* FAT 파일시스템 - 메타데이터 : FAT table, directory entry, super block

* 디렉터리 엔트리(Directory entry)

 

- name 필드 : 파일의 이름과 확장자를 담는 필드(msdos 파일시스템의 11자 이름 제약)

- 파일 속성, 시간정보, 파일 크키(size), FAT 구조를 이요해 데이터 블록을 인덱싱하기 위해 첫 데이터 블록의 번호를 담는 start 변수...

-> 다른 파일시스템의 디렉터리 엔트리도 비슷(디렉터리 구조체 선언, 파일생성시 구조체 내용 채워서 디스크에 저장)

 

* 파일 접근

- 상대 경로 : 파일의 이름이 현재 디렉터리 위치를 기준으로 시작

- 절대 경로 : '/'(root)에서부터 시작되는 경로

-> 리눅스는 사용자 태스크의 작업 디렉터리를 항상 task_struct에 유지하기 때문에 상대 경로와 절대 경로 변환 가능

<디렉터리 계층구조와 메타데이터의 예_FAT>

① '/'의 엔트리를 읽고, 첫번째 데이터 블록이 6임을 알 수 있다

② 블록에서 'home'을 찾아, 데이터 블록 번호 11을 확인한다

③ 11 블록으로 가서 'member' 디렉터리 데이버 블록 번호가 20임을 확인한다

④ 20 블록으로 가서 'defg' 디렉터리 엔트리가 데이터 블록 번호 43임을 알 수 있다

⑤ 43 블록으로 가면 사용자가 요청한 'hjy.txt' 파일의 데이터 블록 번호가 48번부터 1개라는 것을 알 수 있다

(status : d(directory) / f(file))

 

* 슈퍼 블록(super block)

->'/' 디렉터리 엔트리 번호를 알 수 있는 방법?

- 파일시스템은 최상위 디렉터리가 위치하고 있는 곳 정보를 자신이 관리하는 공간의 맨 앞에 적어둠

- 디스크 사용 시점에서 디스크의 맨 앞부분만 읽으면 디렉터리의 위치를 알 수 있음

 

4. inode 구조

- 리눅스 디폴스 파일시스템인 ext 계열 파일시스템이 채택하는 구조

 

(그림참조 및 수정) http://atsequence.tistory.com/8

 

- i_blocks 필드 : 이 파일이 몇 개의 데이터 블록을 가지고 있는지 나타냄

- i_mode : 이 inode가 관리하는 파일의 속성 및 접근 제어 정보 유지

파일에 관계된 접근 및 실행 권한을 저장하는 16bit 크기의 플래그로 구성

상위 4bit는 파일의 유형(소켓, 링크 파일, 정규 파일, 블록 장치 파일, 디렉터리, 문자 장치 파일, 선입선출파이프)

- i_links_count : 이 inode가 가리키는 파일 수, 링크 수를 의미

- i_uid, gid : 이 파일을 생성한 소유자의 user id와 group id를 의미

- i_atime : 파일 접근 시간

- i_ctime : 파일 생성 시간

- i_mtime : 파일 수정 시간

- 하단의 15개 엔트리의 i_block[]필드

-> 12개 직접 블록

: 실제 파일의 내용을 담고 있는 디스크의 데이터 블록을 가리키는 포인터

-> 3개 간접 블록

: 디스크 블록을 가리키는 포인터들을 갖는 인덱스 블록을 가리키는 포인터(단일, 이중, 삼중 간접 블록)