☆★☆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개 간접 블록
: 디스크 블록을 가리키는 포인터들을 갖는 인덱스 블록을 가리키는 포인터(단일, 이중, 삼중 간접 블록)
'나름컴공이라공 > Linux Kernel' 카테고리의 다른 글
Linux Kernal Internal > Ch5 파일시스템과 가상 파일시스템(4) (0) | 2019.07.19 |
---|---|
Linux Kernal Internal > Ch5 파일시스템과 가상 파일시스템(3) (0) | 2019.07.19 |
Linux Kernal Internal > Ch5 파일시스템과 가상 파일시스템(1) (0) | 2019.07.19 |
Linux Kernal Internal > Ch3 태스크 관리(3) (0) | 2019.07.19 |
Linux Kernal Internal > Ch3 태스크 관리(2) (0) | 2019.07.19 |