λ§μ§λ§ νλ‘μ νΈκ° λλ¬λ€.
ꡬννλ©΄μ μκ²λ λ΄μ©μ κ°λ¨νκ² μ λ¦¬ν΄ λ³΄λ €κ³ νλ€.
νμΌ μμ€ν
μ 900κ° ~ 1000κ°κ° μ‘΄μ¬ν λ§νΌ λ§€μ° λ§λ€. FAT, NFTSλ EXT4 κ°μ λνμ μΈ νμΌμμ€ν
μ΄ μμ§λ§, μ΄λ² κΈμμλ μ’ λ μΌλ°μ μΈ κ°λ
μ λ€λ£¬λ€.
νμΌ
- I/Oμ λν μΆμν.
- μ½κ±°λ μΈ μ μλ μμ°¨μ μΈ λ°μ΄νΈμ λ°°μ΄.
- pathname (path + filename)μΌλ‘ μλ³λ μ μλ€.
- storageμ logical unit μ΄λΌκ³ λ³Ό μλ μλ€. OS λ΄μ subsystemμ΄ ν΄λΉ νμΌμ physical storageμ mapping ν΄μ€λ€. κ·Έ subsystemμ΄ κ³§ νμΌμμ€ν
. μλ₯Ό λ€λ©΄, μ μ κ° νμΌμ μ°λ©΄ μ΄μ체μ κ° storageμ μ¨μ€λ€.
- νμΌμ μ νμλ μΌλ° νμΌ, λλ ν°λ¦¬, μ¬λ³Όλ¦ λ§ν¬ κ° μλ€ (λνμ μΌλ‘).
- νμΌμ μ μ data (μ€μ data)μ ν΄λΉνκΈ° λλ¬Έμ, κ·Έ dataλ₯Ό κ΄λ¦¬νκΈ° μν meta-dataκ° λ°λμ νμνλ€. μ΄λ μμ΄λ
Έλ(inode)λΌλ μλ£κ΅¬μ‘°μ μ μ₯λλ€.
- μμ΄λ
Έλλ νμΌλ§λ€ κ³ μ νκ² κ°μ§λ λ©νλ°μ΄ν° μ μ₯ μλ£κ΅¬μ‘°μ΄λ€. μμ 3κ°μ§ μ’
λ₯μ νμΌ μμ κ°κ° μμ μ κ³ μ ν μμ΄λ
Έλλ₯Ό κ°μ ΈμΌ νλ€.
λλ ν°λ¦¬
- μμμ μΌλ‘ μλ €μ Έ μλ―μ΄ νμΌμ μμΉλ₯Ό λνλ΄λ κ³μΈ΅μ μΈ κ΅¬μ‘°μ΄λ€. κ°μ₯ μ΅μμ λλ ν°λ¦¬μΈ root λλ ν°λ¦¬κ° μ‘΄μ¬νλ€.
- "λλ ν°λ¦¬λ λΈλ‘μΌλ‘ μ‘΄μ¬νλ€."
- μ‘°κΈ λ ꡬ체μ μΌλ‘ λ§νμλ©΄, λλ ν°λ¦¬ μμλ νμΌ λλ νμ λλ ν°λ¦¬κ° μ‘΄μ¬ν ν
λ°, μ΄λ¬ν μ 보λ€(directory entry λͺ©λ‘) λν λΆλͺ
storageμ μ νμΌ ν κ²μ΄λ€. μ΄λ¬ν μ 보λ₯Ό storageμ μ μ₯νκΈ° μν΄, μ€μ dataμ(directory entry λͺ©λ‘) meta-data(μμ΄λ
Έλ)λ₯Ό κ°μ§ νμΌμ²λΌ λλ ν°λ¦¬ λν storageμ μ μ₯νλ€λ κ²μ΄λ€.
- κ·Έλμ λλ ν°λ¦¬λ νλμ νΉμν νμΌλ‘μ μ·¨κΈλλ€.
- νλμ directory entryλ νλμ <νλͺ©μ μ΄λ¦, μμ΄λ
Έλ λ²νΈ> μμ΄λ€.
- example.
Root Directory
νλͺ©μ μ΄λ¦ | μμ΄λ
Έλ λ²νΈ | νμΌ μ ν(μ€μ μ μ₯ x) |
---|
. | 2 | λλ ν°λ¦¬ |
.. | 2 | λλ ν°λ¦¬ |
hello | 10 | μΌλ° νμΌ |
hello2 | 10 | μΌλ° νμΌ (νλ λ§ν¬) |
hello3 | 12 | μ¬λ³Όλ¦ λ§ν¬ (hello3->hello) |
νλ λ§ν¬ vs μ¬λ³Όλ¦ λ§ν¬
- νμΌμ μμ±ν λ, λ κ°μ§ μμ
μ΄ νμνλ€.
- κ³ μ ν μμ΄λ
Έλλ₯Ό λ§λ€κΈ°.
- μμ΄λ
Έλμ μ¬λμ΄ μ½μ μ μλ μ΄λ¦μ μ°κ²°νκ³
<νλͺ©μ μ΄λ¦(νμΌ μ΄λ¦), μμ΄λ
Έλ λ²νΈ>
, κ·Έ μ°κ²° μ 보λ₯Ό λλ ν°λ¦¬μ μμ±νκΈ°.
- κ³ μ ν μμ΄λ
Έλλ₯Ό κ°μ§λ νλμ νμΌμ λν΄μ,
- νλ λ§ν¬λ μΆκ°μ μΈ μ°κ²°μ 보μ΄λ€. μ¦, μμ λ κ°μ§ μμ
μ€ 2λ² μμ
λ§ μννλ κ²μ΄λ€.
link()
μμ€ν
μ½λ‘ μμ±ν μ μλ€. μλ‘κ² λ§ν¬νλ €λ μ΄λ¦ νλͺ©μ λλ ν°λ¦¬μ μμ±νκ³ , μλ νμΌκ³Ό κ°μ μμ΄λ
Έλ λ²νΈλ₯Ό κ°λ¦¬ν€λλ‘ νλ€.
- μ¬λ³Όλ¦ λ§ν¬λ ν΄λΉ νμΌμ κ°λ¦¬ν€λ μλ‘μ΄ νμΌμ΄λ€. κ·Έλμ μμ λ κ°μ§ μμ
λͺ¨λκ° λ€μ μΌμ΄λλ€.
κ·Έ μλ‘μ΄ νμΌμ λ΄μ©μλ μλ νμΌμ κ²½λ‘λͺ
μ΄ μ μ₯λλ€.
- κ²°κ΅ νλ λ§ν¬, μ¬λ³Όλ¦ λ§ν¬λ, κ°μ νμΌμ κ°λ¦¬ν€λ μ¬λ¬ κ°μ μλ‘ λ€λ₯Έ, μ¬λμ΄ μ½μ μ μλ μ΄λ¦μ λ§λ€κΈ° μν΄ μ¬μ©λλ€.
- example.
hello
: original file
hello2
: hard link to hello
hello3
: symbolic link to hello
νμΌ μμ
- νμΌ μμ λ unlink μΌ λΏμ΄λ€.
- νμΌμ μμ ν λ μ
λ ₯νλ λͺ
λ Ήμ΄
rm
μ λ΄λΆμ μΌλ‘ unlink()
μμ€ν
μ½μ νΈμΆνλ€.
- μμ νλ λ§ν¬λ₯Ό μμ±ν λ νΈμΆνλ
link()
λ μλ νμΌμ μμ΄λ
Έλμ μ°Έμ‘° νμ(reference count or link count)λ₯Ό μ¦κ°μν¨λ€. μ¬λ³Όλ¦ λ§ν¬μ linkλ μ°Έμ‘° νμμ ν¬ν¨λμ§ μλλ€.
unlink()
κ° νΈμΆλλ©΄ μ΄λ¦κ³Ό ν΄λΉ μμ΄λ
Έλ λ²νΈ κ°μ "μ°κ²°" μ λκ³ (ν΄λΉ directory entryλ₯Ό μ κ±°ν¨) μ°Έμ‘° νμλ₯Ό νλ μ€μΈλ€.
- μ¬κΈ° μ κΈ°μ ν΄λΉ νμΌκ³Ό κ΄λ ¨ν
unlink()
κ° νΈμΆλμ΄, κ²°κ΅ μ°Έμ‘° νμλ₯Ό 0μΌλ‘ λ§λλ unlink()
νΈμΆμ΄ λ°μνλ κ·Έ μκ°μ, νμΌ μμ€ν
μ κ·Έμ μμΌ λΉλ‘μ μμ΄λ
Έλμ κ΄λ ¨λ λ°μ΄ν° λΈλμ ν΄μ νλ©΄μ μ§μ μΌλ‘ νμΌμ "μμ " νλ€.
- κ²°κ΅ νμΌμ κ³ μ ν μ 체μ±μ μμ΄λ
Έλκ° κ°μ§κ³ μλ κ²μΌλ‘ μ΄ν΄νλ©΄ λλ€.
fsync ( )
- μμ λ§νλ―, μ μ κ° νμΌμ μ°λ©΄ μ΄μ체μ κ° storageμ μ¨μ€λ€. λ€λ₯Έ λ§λ‘, 'μ μ λ ν΄λΉ λ°μ΄ν°λ₯Ό κ°κΉμ΄ λ―Έλμ μμ μ μ₯ μ₯μΉμ κΈ°λ‘ν΄ λ¬λΌκ³ νμΌ μμ€ν
μκ² μμ²νλ€'.
- νμ§λ§ μ±λ₯μμ μ΄μ λ‘ νμΌ μμ€ν
μ μ°κΈ°λ₯Ό μΌμ μμλμ λ©λͺ¨λ¦¬μ λͺ¨μλ€ : λ²νΌλ§. μ¦
write()
μμ€ν
μ½μ μ μμ μΈ returnμ΄, diskμ μ°κΈ°κ° μλ£λμμμ μλ―Ένμ§λ μλλ€.
- μ¬κΈ°μ persistence(μμμ±) κ³Ό performance μ¬μ΄μ λλ λ§κ° λ°μνλ€. λ²νΌλ§μ μ¬μ©νλ€ λ³΄λ©΄ μ±λ₯μ κ°μ λ μ μμΌλ, crash consistency λ¬Έμ κ° λ°μν μ μλ€. λ²νΌμλ§ λ°μ΄ν°κ° μ νκ³ diskμ commit λμ§ μμ μνλ‘ μμμΉ λͺ»ν crushκ° λ°μνμ¬ λ°μ΄ν°κ° μ μ€λ μ μλ κ²μ΄λ€.
- λ°λΌμ μμ©νλ‘κ·Έλ¨μ΄ λͺ
μμ μΌλ‘ μμ μ
write()
μμ²λ€μ diskμ commit(flush) ν μ μλ APIκ° μ 곡λλ€ : fsync()
- νλ‘μΈμ€κ° νΉμ νμΌ λμ€ν¬λ¦½ν°μ λν΄
fsync()
λ₯Ό νΈμΆνλ©΄ νμΌ μμ€ν
μ μ§μ λ νμΌμ λͺ¨λ dirty λ°μ΄ν° (κ°±μ λ λ°μ΄ν°) λ€μ diskμ κ°μ λ‘ λ΄λ €λ³΄λΈλ€. μ΄ λͺ¨λ μ°κΈ°κ° μ²λ¦¬λ νμ fsync()
κ° μ μμ μΌλ‘ return λλ€.
- μ΄λ€ κ²½μ°μλ νμΌ fooκ° μ‘΄μ¬νλ λλ ν°λ¦¬λ
fsync()
ν΄μ£Όμ΄μΌ νλ€. λλ ν°λ¦¬λ νμΌμ ννλ‘ diskμ μ μ₯λκΈ° λλ¬Έμ΄λ€.
μ°Έκ³ μλ£
- Operating System : Three Easy Pieces
- κΆμμ§ κ΅μλ κ°μ μλ£
- linux man page
μκ³ νμ ¨μ΅λλ€~π€£