Unix์์์ ํ์ผ ๊ด๋ฆฌ
์ด์ ์ ์์๋ณด์๋ฏ์ด, Unix์์๋ ์์ ๊ฐ์ ํ์ผ ์์คํ ๊ตฌ์กฐ๋ฅผ ์ง๋๋ค.
inode๋ ํน์ ํ ํ์ผ์ ๋ํ ์ฃผ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ ์ด ๊ตฌ์กฐ๋ผ๊ณ ํ๋ค. ์ฌ๊ธฐ์๋ ์ง/๊ฐ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ ํ์ผ๋ค์ ๊ฐ์์ธ Link Count ๋ฑ์ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ๋ค๊ณ ํ์๋ค. ๋ํ unix์์์ inode๊ฐ ํ์ผ์ ๋ํ ์ ์ด ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ FCB์ ๋์๋๋ค๋ ๊ฒ๋ ๊ธฐ์ตํด ๋ณด์.
์ ์ด์ ๊ธฐ์ตํด์ผ ํ ๊ฒ์ ๊ฐ๊ฐ์ inode๋ ํ์ผ์ ๋ํ ์ ์ด ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ด๊ณ , ์ฌ๊ธฐ์ ํ์ผ์ ์ ์ฅํ๊ธฐ ์ํด _indexed allocation_ ๋ฐฉ์์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ด๋ค.
indexed allocation์ ํ์ผ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ํน์ Block์ Index๋ฅผ ๊ด๋ฆฌํ๋ Block์ผ๋ก ๋๋ ๋ฐฉ์์ด์๋ค. ์ฌ๊ธฐ์ ํน์ Block์ Index Block์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ๋ค๋ฅธ Data Block๋ค๊ณผ ๋์ผํ๊ฒ ์ทจ๊ธํ๋ค.
์๋ฌดํผ, inode ์์์ Data Block์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ ํํ๋ ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
๊ทธ๋ฆผ์ ๋ณด๋ฉด 10๊ฐ์ Direct Block๊ณผ 3๊ฐ์ Indirect Blocks๊ฐ ์๋ค.
๋จผ์ Direct Block์ ๊ฐ์ฅ ๋จผ์ ์ ์ฅ๋๋ Data Block๋ค์ ๋ํ ๋ฒํธ๋ค์ ์ ์ฅํ Index Block์ด๋ค. Direct Block ํ๋๊ฐ 2^10์ธ 1024Byte๋งํผ์ Data Block๋ค์ ์ ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด 10 * 2^10 * 4 = 40KB ๋งํผ์ด 10๊ฐ์ Direct Block์ ํฌ๊ธฐ๋ผ๊ณ ๋ณธ๋ค.
๋ค์์ผ๋ก Single Indirect๋ Direct Block๋ง์ผ๋ก๋ ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ ๋ถ ๋ด์ ์ ์์ ๋ ์ฌ์ฉํ๋ Block์ด๋ค.
์ฌ๊ธฐ์๋ ํ๋๋น 4KB์ธ Index Block๋ค ์์ฒด๋ค๋ฅผ ์ ์ฅํ๋ ๊ฐ์ ์ ์ธ Block ํ๋๋ฅผ ์ฌ์ฉํ๋ค. ํ๋์ Block์ 1024๊ฐ๋งํผ์ Block ์ฃผ์๋ฅผ ๋ด์ ์ ์๊ธฐ ๋๋ฌธ์ ์ด 4KB * 2^10 = 4MB์ ๊ณต๊ฐ์ ์ ์ฅํ ์ ์๋ค.
Double Indirect๋ Single Indirect ๋ง์ผ๋ก๋ ํฌ๊ธฐ๊ฐ ๋ถ์กฑํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ธ๋ฐ, ์๋ฆฌ๋ Single Indirect์ ์ ์ฌํ๋ค.
4MB๋งํผ์ ๊ณต๊ฐ์ ๊ฐ์ง๋ ํ๋์ Index Block์์ฒด๋ค์ ์ ์ฅํ๋ ๊ฐ์ ์ ์ธ Blockํ๋๋ฅผ ์ถ๊ฐ๋ก ๋ง๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด, ์ด 4MB * 2^10 = 4GB๋งํผ์ ๊ณต๊ฐ์ ์ ์ฅํ ์ ์๋ค.
Triple Indriect๋ 4GB๋งํผ์ ๊ณต๊ฐ์ ๊ฐ์ง๋ Index Block๋ค์ ์ ์ฅํ๋ ๊ฐ์ ์ ์ธ Block ํ๋๋ฅผ ์ถ๊ฐํ์ฌ ์ด 4TB๋งํผ์ ๊ณต๊ฐ์ ๊ฐ์ง ์ ์๋ค.
์ฆ, ํ๋์ Inode๋ 4KB + 4MB + 4GB + 4TB์ ๊ณต๊ฐ์ ๊ฐ์ง ์ ์๋ค.
Linux Virtual File System
๋ฆฌ๋ ์ค์์๋ ํ์ผ ์์คํ ์ ์ข ๋ฅ์ ๊ด๊ณ์์ด ์ฝ๊ฒ ์ ์ ๊ฐ ํ์ผ์ ์ ๊ทผํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ํ๊ธฐ ์ํด Virtual File System์ ์ ๊ณตํ๋ค.
๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์ผ ์์คํ ์ด ๋ฌ๋ผ์ง๋๋ผ๋ ํ๋์ ๋ชจ๋๋ก์จ ํ์ผ ์์คํ ์ ์ข ๋ฅ๋ฅผ ์ปค๋ ์์ผ๋ก ๋ฃ์ ์ ์๋ค. ์ด๋ก ์ธํด ์ฌ์ฉ์๋ ๊ตณ์ด ์ ๊ฒฝ ์ฐ์ง ์๋๋ผ๋ File System์ ์ด์ฉ ๊ฐ๋ฅํ๋ค.
์์ ๋ณด์ด๋ _page cache_๋ _disk cache_์ ๊ฐ์ ์๋ฏธ๋ก disk์์ block์ ์ฝ์ด์ค๋ฉด ์์๋ก ์ ์ฅํ๋ ๊ณต๊ฐ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
Linux inode
๋ชจ๋ inode์ ๊ตฌ์กฐ๊ฐ ๋์ผํ ๊ฒ์ ์๋๋ค. ์ด์์ฒด์ ๋ง๋ค ์กฐ๊ธ์ฉ ์ฐจ์ด์ ์ด ์กด์ฌํ๋ค.
Linux์์๋ 10๊ฐ์ Direct Blocks๋ฅผ ์ฌ์ฉํ๋ Unix์ ๋ฌ๋ฆฌ Direct Blocks๋ฅผ 12๊ฐ ์ฌ์ฉํ๋ค.
๋ํ ํ์ผ ์์คํ ์ ์ข ๋ฅ์ ๋ฐ๋ผ์ inode์ ํฌ๊ธฐ ๋ํ ๋ค๋ฅด๋ค.
ext2, ext3์์๋ 128๋ฐ์ดํธ
ext4์์๋ 256๋ฐ์ดํธ์ด๋ค.
File Operation
System Call์ ํ๋ก์ธ์ค๊ฐ ์ด์์ฒด์ ์๊ฒ ์๋ฆฌ๋ ์ด๋ฒคํธ๋ผ๊ณ ํ์๋ค. File Operation๋ ๊ฒฐ๊ตญ System Call์ด๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค๊ฐ ํด๋น ์ด๋ฒคํธ๋ฅผ ์๋ฆฐ๋ค. ํ์ง๋ง, File์์ ์ฌ์ฉํ๋ System Call์ ์ฅ์น, ํน์ ํ์ ๋ง๋ค ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํน๋ณํ ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์ผ ์์คํ , ํน์ ์ฅ์น์ ๋ฐ๋ผ ๊ฐ์ ์ข ๋ฅ์ _open_ํจ์์ด๋๋ผ๋ ๋ค๋ฅธ ๋์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค.
NFS์์๋ _nfs file open_ํจ์๊ฐ ๋ถ๋ฌ์ง๋ฉด, ๋ค๋ฅธ PC์ remote ํต์ ์ ํ๋ ์ถ๊ฐ ์์ ์ด ์ํ๋ ์ ์๋ค.
์ฆ, ๊ฐ ํ ์ด๋ธ์๋ ๊ทธ ๋ชฉ์ ์ ๋ถํฉํ ํจ์๋ค์ด ๊ฐ๊ฐ ๊ตฌํ๋์ด ์๋ค.
Linux File Operation
๋ฆฌ๋ ์ค์์ File Operation์ด ์ํ๋๋ ํ๋ฆ์ ์์ ๊ฐ๋ค.
๋จผ์ ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋ง๋ค์ด์ง๋ฉด task struct๋ผ๋ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ง๋ค. ์ด๋ PCB์ ๋์ผํ ๊ฒ์ด๊ณ ์ด ์์ file structure ์ ๋ณด๋ฅผ ๊ฐ์ง๋ค.
file structure์ ํ์ผ ์์คํ ์๋์ ์๋ ํ์ผ๋ค์ ์ฐธ์กฐ ์ ๋ณด๋ฅผ ์ง๋๋ค. ๋ํ ๊ฐ๊ฐ์ ํ์ผ๋ค์ ํ์ผ ์์คํ ๋ด๋ถ์ ์ ์๋ ๊ตฌ์กฐ์ ๋ฐ๋ผ์ inode๋ผ๋ FCB์ ๋ณด๋ฅผ ๊ฐ์ง๋ค. ์ด๋ ์ด๋ค ํ์ผ ์์คํ ์ ๊ฐ์ง๋์ ๋ฐ๋ผ ๊ตฌ์กฐ๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค.
๋ง์ง๋ง์ผ๋ก inode๋ Disk ๋ด๋ถ์ ์ ์ฅ๋ Block ํ ๋น ๋ฐฉ์์ ๋ฐ๋ผ ํ์ผ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
์ค์ ๋ก ์คํ๋๋ ์ฝ๋๋ฅผ ์ดํด๋ณด์.
task struct์ files struct๋ ํ๋ก์ธ์ค ๋จ์์ ์คํ๋๋ ๊ฒ์ด๊ณ , struct file๊ณผ file operation์ ์ ์ฅํ ํ ์ด๋ธ์ธ file operations๋ ์ด์์ฒด์ ๊ฐ ๋ง๋ค์ด ๊ด๋ฆฌํ๋ค.
์ด๋ file operation์ ์คํ๋๋ ํ์ผ ์์คํ ๋ชจ๋์ ๋ฐ๋ผ ๋ฌ๋ฆฌ์ง ์ ์์์ ๊ธฐ์ตํด ๋ณด์.
์์ ๊ฐ์ด ์ฅ์น๋ ํ์ผ ์์คํ ์ ๋ฐ๋ผ openํจ์๋ ์ฌ๋ฌ File Operation ํ ์ด๋ธ์ ๋ฐ๋ผ ๋์ํ๋ค.
'๐ Knowledge > ์ด์์ฒด์ (OS)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ ] ์ธํฐ๋ฝํธ๋ ๋ฌด์์ด๊ณ , ์ด๋ป๊ฒ ๋ฐ์ํ ๊น (0) | 2024.05.12 |
---|---|
[์ด์์ฒด์ ] ์ /์ถ๋ ฅ ๊ด๋ฆฌ(I/O Management) (0) | 2024.05.06 |
[์ด์์ฒด์ ] ๋ฐ์ดํฐ ๋ธ๋ก(Data Block)์ ๊ด๋ฆฌ (0) | 2024.05.05 |
[์ด์์ฒด์ ] ํ์ผ์์คํ ์ด๋? (0) | 2024.05.01 |
[์ด์์ฒด์ ] ๋๋ ํ ๋ฆฌ๋ฅผ ์์๋ณด์. (0) | 2024.04.28 |