디스크 혹은 2차 저장장치에 파일을 효율적으로 저장 가능
- 공간 효율성 : 디스크 공간 낭비 없음
-> 파일을 block 크기로 잘게 나눔
-> 빈 디스크에 흩어져 저장- 시간효율 : 파일 빨리 찾기 (file name => location)
-> 파일 block 위치와 inode table 기억

~ inode table : 파일의 block 위치 ~
write f1 (2 block file)
write f2 (3 block file)
delete f1
write f3 (3 block file)
- store file blocks in empty disk blocks
- remember file block lecation in an empty inode
- remember inode number for this file in the directory
- where is f3? ==> go to inode 2 ==> block 2,3,7
~ 1blk = 4K byte

❓ file
❓ file system
✔️ Inode table : array of inode
= 파일 위치
1. 모든 파일은 inode를 가지고 있음
2. inode number는 1부터 시작
3. inode 2 는 root directory file("\")
4. inode는 128 byte
✔️ IBM : Inode Bit Map
= ㅇㅓ느 inode가 비어있나 ~
1. 1blk = 4Kbyte = 4096byte = can cover 4096*8= 32768 inodes
2. inode 사용 중 1 / inode가 비어있음 0
-> 위 그림에서 inode 0,1,2,3, 사용 중
-> inode 4는 비어있음 = 사용 가능
✔️ DBM : Datablock Bit Map
= ㅇㅓ느 disk가 비어있나 ~
✔️ Group Descriptors
= D , I , Inode table 위치
✔️ Super Block
= fs에 대한 전체 정보
![]()
-> 주소 400에서 시작
typedef struct // super block
{
u32 m_inodes_count; // 0-3
u32 m_blocks_count; // 4-7
u32 m_r_blocks_count; // 8-B
u32 m_free_blocks_count; // C-F
u32 m_free_inodes_count; // 10-13
u32 m_first_data_block; // 14-17
// block location of superblock.
u32 m_log_block_size; // 18-1B. block size=1024*2^(m_log_block_size))
u32 m_log_frag_size; // 1C-1F
u32 m_blocks_per_group; // 20-23
u32 m_frrags_per_group; // 24-27
u32 m_inodes_per_group; // 28-2B
u32 m_mtime; // 2C-2F
u32 m_wtime; // 30-33
u16 m_mnt_count; // 34-35
u16 m_max_mnt_count; // 36-37
u16 m_magic; // 38-39
u16 m_state; // 3A-3B
u16 m_errors; // 3C-3D
u16 m_minor_rev_level; // 3E-3F
u32 m_lastcheck; // 40-43
u32 m_checkinterval; // 44-47
u32 m_creator_os; // 48-4b
u32 m_rev_level; // 4c-4f
u16 m_def_resuid; // 50-51
u16 m_def_resgid; // 52-53
u32 m_first_ino; // 54-57
u16 m_inode_size; //58-59
u16 m_block_group_nr; //5a-5b
u32 m_feature_compat; //5c-5f
u32 m_feature_incompat; //60-63
u32 m_feature_ro_compat; //64-67
u08 m_uuid[16]; //68-77
char m_volume_name[16]; //78-87
char m_last_mounted[64]; //88-c7
u32 m_algorithm_usage_bitmap; //c8-cb
u08 m_prealloc_blocks; //cc
u08 m_prealloc_dir_blocks; //cd
u16 m_padding; // ce-cf
u08 m_journal_uuid[16]; // d0-df
u32 m_journal_inum; // e0-e3
u32 m_journal_dev; // e4-e7
u32 m_last_orphan; // e8-eb
u32 m_hash_seed[4]; // ec-fb
} SuperBlock;
typedef struct // group descriptor
{
u32 m_block_bitmap; // block location of DBM
u32 m_inode_bitmap; // block location of IBM
u32 m_inode_table; // block location of inode table
u16 m_free_blocks_count;
u16 m_free_inodes_count;
u16 m_used_dir_count;
u16 m_padding;
u32 m_reserved[3];
} GroupDescriptor;
typedef struct // inode
{
u16 m_mode; // 0-1
u16 m_uid; // 2-3
u32 m_size; // 4-7
u32 m_atime; // 8-B
u32 m_ctime; // C-F
u32 m_mtime; // 10-13
u32 m_dtime; // 14-17
u16 m_gid; // 18-19
u16 m_links_count; // 1A-1B
u32 m_blocks; // 1C-1F. shows num of data blocks for this file in units of 512 bytes
u32 m_flags; // 20-23
u32 m_reserved1; // 24-27
u32 m_block[15]; // block location of this file
u32 m_generation;
u32 m_file_acl;
u32 m_dir_acl;
u32 m_faddr;
u32 m_reserved2[3];
} Inode;
typedef struct // directory
{
u32 m_inode;
u16 m_rec_len;
u08 m_name_len;
u08 m_file_type;
char m_name[255];
} DirectoryEntry;
김기창 , "Operating System" , 인하대학교