-
-
mm_struct-
mm_structλ νλ‘μΈμ€μ μ£Όμ 곡κ°μ νννλ μ 보λ₯Ό λ΄κ³ μλ ꡬ쑰체μ΄λ€. -
νλ‘μΈμ€μ
task_structꡬ쑰체μmmνλͺ©μ΄ ν΄λΉ νλ‘μΈμ€μmm_structꡬ쑰체λ₯Ό κ°λ¦¬ν€λ©° νλ‘μΈμ€ μ€μΌμ€λ§ λ°μ μ ν΄λΉ νλ‘μΈμ€μ μμ μμΈtask_structμmmνλͺ©μ΄ κ°λ¦¬ν€λmm_structκ° λ‘λλλ€.- 컀λ μ€λ λ μλ νλ‘μΈμ€ μ£Όμ 곡κ°μ΄ μκΈ° λλ¬Έμ
mmνλͺ©μ΄ κ°λ¦¬ν€λmm_structλν μλ€. νμ§λ§ 컀λ μ€λ λ λ 컀λ λ©λͺ¨λ¦¬ μμ μ μ κ·ΌνκΈ° μννμ΄μ§ ν μ΄λΈκ³Ό κ°μ΄mm_structꡬ쑰체μ μΌλΆ μ λ³΄κ° νμν μ μκΈ°μ μ΄μ νλ‘μΈμ€μ μ£Όμ 곡κ°μ κ·Έλλ‘ λλ€.- μ΄μ νλ‘μΈμ€μ μ£Όμ 곡κ°μ κ·Έλλ‘ μ¬μ©νλ κ²μ΄ μ΄λ»κ² 컀λ μ€λ λ κ° νμλ‘ νλ μ 보λ₯Ό μ 곡ν μ μλ λ°©λ²μ΄ λλκ°?
컀λ μ€λ λ κ° μ κ·Όνλ λ©λͺ¨λ¦¬ μμμ 컀λ λ©λͺ¨λ¦¬ μμ μΈλ°, μ΄λ λͺ¨λ νλ‘μΈμ€κ°
νμ΄μ§ ν μ΄λΈμμμ 곡μ νλ λ©λͺ¨λ¦¬ μμ μ΄κΈ°μ μ΄λ νλ‘μΈμ€λ μ΄μ μ μ¬μ©νλ νλ‘μΈμ€μ μ£Όμ 곡κ°μ κ·Έλλ‘ μ¬μ©νλ©΄ 컀λ μ€λ λ κ° νμλ‘ νλ 컀λ λ©λͺ¨λ¦¬ μμ μ λν μ 보λ₯Ό μ»μ μ μλ€.
- μ΄μ νλ‘μΈμ€μ μ£Όμ 곡κ°μ κ·Έλλ‘ μ¬μ©νλ κ²μ΄ μ΄λ»κ² 컀λ μ€λ λ κ° νμλ‘ νλ μ 보λ₯Ό μ 곡ν μ μλ λ°©λ²μ΄ λλκ°?
- 컀λ μ€λ λ μλ νλ‘μΈμ€ μ£Όμ 곡κ°μ΄ μκΈ° λλ¬Έμ
-
mm_Structλ λ©λͺ¨λ¦¬ μμ λ€λ‘ μ΄λ£¨μ΄μ Έ μλ€.mm_structλ₯Ό ꡬμ±νλ λ©λͺ¨λ¦¬ μμ λ€μmmapκ³Όmm_rbμ μλ£κ΅¬μ‘°μ κ°μ λ΄μ©μ λ΄μ μ μ§νλ€.mmap리μ€νΈ ννλ‘ λͺ¨λ λ©λͺ¨λ¦¬ μμ μ νμν λ μ μ©νλ€. μ°κ²° ννκ° κ°λ¨νκ³ λ¦¬μ€νΈ ν€λ μμ μμνμ¬ λ¦¬μ€νΈ μ λ§μ§λ§ λ ΈλκΉμ§ λΉ λ₯΄κ² μνν μ μκΈ° λλ¬Έμ΄λ€.mm_rbλ λλΈλνΈλ¦¬ ννλ‘ νΉμ λ©λͺ¨λ¦¬ μμ μ νμν λ μ μ©νλ€. κ· μΌνκ³ λΉ λ₯Έ νμ μκ°(O(log n)) μ΄ λ³΄μ₯λκΈ° λλ¬Έμ΄λ€.
-
-
vm_area_structvm_area_structλ μ£Όμ΄μ§ μ£Όμ 곡κ°μμ μ°μλ ꡬκ°μ ν΄λΉνλ λ¨μΌ λ©λͺ¨λ¦¬ μμ μ λνλΈλ€.- 컀λμ κ° λ©λͺ¨λ¦¬ μμμ λ
립μ μΈ λ©λͺ¨λ¦¬ κ²μ²΄λ‘ κ°μ£ΌνκΈ°μ κ° λ©λͺ¨λ¦¬ μμ μ μμλ³λ‘ μ κ·Ό κΆν λ° κ΄λ ¨λ μμ
λ€μ μ€μ ν μ μλ€.
- μ΄ λλΆμ νλ‘μΈμ€ μ£Όμ 곡κ°μ μ€ν νΉμ λ°μ΄ν° μμ, νμΌκ³Ό λ§€νλ λ©λͺ¨λ¦¬ μμ λ± μ’
λ₯κ° λ€λ₯Έ λ©λͺ¨λ¦¬ μμ λ€μ νλμ
vm_area_structλ‘ λͺ¨λ ννν μ μλ€.
- μ΄ λλΆμ νλ‘μΈμ€ μ£Όμ 곡κ°μ μ€ν νΉμ λ°μ΄ν° μμ, νμΌκ³Ό λ§€νλ λ©λͺ¨λ¦¬ μμ λ± μ’
λ₯κ° λ€λ₯Έ λ©λͺ¨λ¦¬ μμ λ€μ νλμ
vm_area_structλ ν΄λΉ λ©λͺ¨λ¦¬ μμ μ λν μ 보λ₯Ό λ΄κ³ μλ€.- λ©λͺ¨λ¦¬ μμ μ μμκ³Ό λ μ£Όμ
[ vm_start, vm_end) mm_structκ° μ μ§νλvm_area_structμ 리μ€νΈ λ₯Ό ꡬννκΈ° μνvm_nextν¬μΈν°mm_structκ° μ μ§νλvm_area_structμ λ λλΈλνΈλ¦¬ λ₯Ό ꡬννκΈ° μνvm_rbλ³μ- μ κ·Ό κΆνκ³Ό νλκ·Έ
vm_area_structκ° μ€ννλ ν¨μλ€μ ν¬μΈν°λ€μ΄ μ‘΄μ¬νλ ꡬ쑰체λ₯Ό κ°λ¦¬ν€λ ν¬μΈν°vm_ops- λ±λ±
- λ©λͺ¨λ¦¬ μμ μ μμκ³Ό λ μ£Όμ
- 컀λμ κ° λ©λͺ¨λ¦¬ μμμ λ
립μ μΈ λ©λͺ¨λ¦¬ κ²μ²΄λ‘ κ°μ£ΌνκΈ°μ κ° λ©λͺ¨λ¦¬ μμ μ μμλ³λ‘ μ κ·Ό κΆν λ° κ΄λ ¨λ μμ
λ€μ μ€μ ν μ μλ€.
mm_structλvm_area_structλ€μ μ 보λ₯Ό μ μ§νκ³ μλ€.
-
-
vm_flagsνλͺ©μ λ©λͺ¨λ¦¬ μμμ λμκ³Ό λ©λͺ¨λ¦¬ μμμ΄ λ€μ΄ μλ νμ΄μ§μ λν μ 보λ₯Ό μ 곡νλ€.VM_READ,VM_WRITE,VM_EXECVMAμ μ’ λ₯μ λ°λΌ μ μ νκ² μ‘°ν©νμ¬ νλ‘μΈμ€μ μ κ·Ό κΆνμ μ μ΄νλ νλκ·Έλ€μ΄λ€.- μ½λ μμ μ΄λΌλ©΄
VM_READ,VM_EXEC - λ°μ΄ν° μμ μ΄λΌλ©΄
VM_READ,VM_WRITE - COPY ON WRITE λΌλ©΄
VM_READ
- μ½λ μμ μ΄λΌλ©΄
VM_SHARED- ν΄λΉ λ©λͺ¨λ¦¬ μμ μ΄ μ¬λ¬ νλ‘μΈμ€κ° 곡μ νλ μμμΈμ§ λνλ΄λ νλκ·Έ
- μ΄ νλκ·Έκ° μ€μ λμ΄ μμΌλ©΄ 곡μ ν λΉ , μλλ©΄ κ°λ³ ν λΉ μ΄λΌκ³ λΆλ₯Έλ€.
VM_IO- ν΄λΉ λ©λͺ¨λ¦¬ μμ μ΄ μ₯μΉ μ μΆλ ₯ 곡κ°μΌλ‘ ν λΉλ κ²μΈμ§ λνλ΄λ νλκ·Έ
- μ΄ νλκ·Έκ° μ€μ λμ΄ μλ λ©λͺ¨λ¦¬ μμ μ νλ‘μΈμμ μ½μ΄ λ€ν μ ν¬ν¨λμ§ μλλ€.
- μ½μ΄ λ€ν
- νλ‘κ·Έλ¨ μ€λ₯ μ§λ¨ νΉμ λλ²κΉ μ μ°μ΄κΈ° μν΄, νλ‘κ·Έλ¨μ΄ λΉμ μμ μΌλ‘ μ’ λ£λμμ λ λ§λ€μ΄μ§λ, νλ‘μΈμ€μ νΉμ μμ μ λ©λͺ¨λ¦¬ μνλ₯Ό κΈ°λ‘ν κ²
- μ½μ΄ λ€ν
-
mmap-
mmapμ μ¬μ©μ 곡κ°μ μ 곡λλ μμ€ν νΈμΆ μ΄λ€.#include <sys/mman.h> void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off); /* * addr: λ§€νν λ©λͺ¨λ¦¬ μ£Όμ * len: λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ° * prot: 보νΈλͺ¨λ * flags: λ§€νλ λ°μ΄ν°μ μ²λ¦¬ λ°©λ²μ μ§μ νλ ν¨μ * fildes: νμΌ κΈ°μ μ * off: νμΌ μ€νμ */
-
mmapμ λ΄λΆμ μΌλ‘do_mmapμ νΈμΆνλ€.do_mmapdo_mmapμ 컀λ μ΄ μ°μλ μ£Όμ λ²μλ₯Ό μλ‘ λ§λ€ λ μ¬μ©λλ ν¨μμ΄λ€.do_mmapμ μλ‘ μμ±ν μ£Όμ λ²μμ μΈμ ν μ£Όμ λ²μκ° μ΄λ―Έ μ‘΄μ¬νκ³ , μλ‘ μμ ν μ£Όμ λ²μμ κΆν μ€μ κ³Ό μΈμ ν μ£Όμ λ²μμ κ·Έκ²μ΄ κ°λ€λ©΄ λ μ£Όμ λ²μλ₯Ό νλλ‘ ν©μΉλ€.
do_mmapν¨μλ νλ‘μΈμ€μ μ£Όμ 곡κ°μ μ£Όμ λ²μλ₯Ό μΆκ°νκΈ° μν΄ μ¬μ©νλ ν¨μμ΄λ€.
-
-
νμ΄μ§ ν μ΄λΈμ μ΄μ©ν΄ κ°μ μ£Όμλ₯Ό 물리 μ£Όμλ‘ λ³ννλ κ³Όμ μ λν΄ μ€λͺ νμμ€.MMUκ°TLBμ μ°Ύκ³ μ νλpage offsetμ΄ μ‘΄μ¬νλμ§ νμΈ- μ‘΄μ¬νλ©΄
TLBμμ κ·Έ μ 보λ₯Ό κ°μ§κ³ μμ κ³§λ°λ‘ 물리 μ£Όμλ‘ λ³ν - μ‘΄μ¬νμ§ μμΌλ©΄ λ©λͺ¨λ¦¬μ μ μ¬λμ΄ μλ
νμ΄μ§ ν μ΄λΈμ μ κ·ΌPTBRμ μ΄μ©νμ¬ νμ¬ νλ‘μΈμ€μνμ΄μ§ ν μ΄λΈμμΉλ₯Ό μ μ μλ€.
νμ΄μ§ ν μ΄λΈμμpage offsetμ λμλλframe offsetνλ- κ°μ μ£Όμμ
page offsetλΆλΆμframe offsetμΌλ‘ λ³ννμ¬ λ¬Όλ¦¬ μ£Όμ μμ± - μμ±ν 물리 μ£Όμλ₯Ό μ΄μ©νμ¬ λ©λͺ¨λ¦¬λ‘ μ κ·Ό