일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- GraphQL
- 프로세스
- 포인터
- 컨테이너
- Machine Learning
- C
- 웹팩
- RT scheduling
- 프로그래머스
- 큐
- 이진탐색
- 자료구조
- APOLLO
- pytorch
- 배열
- 해시테이블
- 코딩테스트
- 연결리스트
- 자바스크립트
- 스택
- 프론트엔드
- RxJS
- alexnet
- 연결 리스트
- 타입스크립트
- 릿코드
- vue3
- 알고리즘
- cors
- 브라우저
- Today
- Total
프린세스 다이어리
[OS] inode 구조와 파일 데이터를 연결하는 방법 본문
리눅스 시스템에서는 inode 방식을 사용하는 ext 파일 시스템을 주로 사용한다. inode 블록에는 파일의 권한, 소유자, 사이즈, 생성시간 등의 메타데이터를 담고 있다.
1. inode 블록에 담긴 정보들
1-1. 파일 내용 출력해보기
$ cat data.rtf
desktop 디렉터리에 텍스트 편집기로 급조한 파일을 저장해 놓고, cat 명령어로 data.rtf의 내용을 화면에 출력해 보았다.
cat 명령어를 사용하여 파일에 접근하면, 먼저 그 파일에 해당하는 inode 번호를 찾는다. inode 번호를 찾아 inode 블록에 접근하고, 그 내용에 접근하고, 그리고 데이터를 읽어서 화면에 출력해 준다.
1-2. 파일 메타데이터 출력해보기
$ ls -al data.rtf
이제 desktop 디렉터리의 data.rtf 파일의 메타데이터를 화면에 출력해 보았다.
각각 파일의 허가권, 소유권, 사이즈, 파일 생성 시간 등의 정보가 출력이 된다. 이 내용은 inode 블록에 있는 정보다. rw-는 읽기, 쓰기 권한을 의미한다. 참고링크
1-3. inode 구조체의 구성
- mode: 권한
- owner info: 사용자 정보
- size: 파일 사이즈
- timestamps: 파일 생성 시간
- direct blocks: 12개의 주소 공간 포함, 각 공간이 실제 데이터 블록의 주소를 가리킴
- indirect blocks, double indirect blocks, triple indirect blocks: 데이터 블록의 주소를 가리키고 있는 direct blocks를 가리킴
direct blocks에서는 12개의 data 블록을 가리키고 있다. 하나의 data 블록은 1~4KB 정도 사이즈인데, 그러면 도합 48KB 사이즈밖에 가리키지 못하는 걸까? 4GB짜리 영화 한 편을 이렇게 4KB 단위로 쪼개서 주소를 가리키게 한다면 inode 자체의 용량도 어마어마하게 될 것이다. 이를 해결하는 것은 indirect blocks, double indirect blocks, triple indirect blocks이다.
2. inode의 파일 데이터 쪼개서 가리키는 방법
그림에서 Single indirect blocks는 direct blocks 들을 가리키는 indirect block을 가리킨다. 사이즈가 커진 파일을 모두 4KB의 데이터 블록으로 나누어 그 주소를 모두 inode에서 바로 참조하게 하면 비효율적이기 때문에, direct blocks 블록의 주소들을 각각 가리키고 있는 indirect block을 가리키는 것이다. 그 direct block들은 각자 파일 데이터 블록들을 다시 가리킨다.
Double, Triple indirect blocks도 마찬가지로 두 단계, 세 단계로 블록을 가리키게 된다. 그림에서는 블록들이 각각 512개로 나와 있지만 만약 indirect block에서 1024개씩 가리키고 있다면, 1024 * 1024* 1024 * 4KB = 4TB의 사이즈까지 해결된다. inode 구조는 일반적으로 128B의 사이즈를 가진다. 만약 앞서 조회했던 data.rtf 파일처럼 사이즈가 작으면 direct block만으로 해결될 것이고, 파일의 사이즈가 커지면 single, double, triple indirect block을 활용하면 된다.
'운영체제, 컴퓨터 구조' 카테고리의 다른 글
Graph computing에서의 atomic operation에 대한 개념 정리 (0) | 2023.04.12 |
---|---|
On-Chip Memory: 레지스터, 캐시 메모리, 스크래치패드 (0) | 2023.04.04 |
[OS] inode 방식과 가상 파일 시스템 (0) | 2022.02.06 |
[OS] 파일 시스템이란? 파일을 저장하는 방법과 파일 시스템의 종류 (0) | 2022.02.05 |
[OS] 작은 C언어 코드가 실행될 때 어떻게 메모리를 사용하는지 설명 (0) | 2022.02.04 |