2023. 3. 11. 19:34γCS/CS μ€ν°λ
μ¬μ©μκ° νλ‘κ·Έλ¨μ μ€νμν€κ³ νμΌμ μ΄μ΄ λ¬Έμ μμ± λ° μμ μ νλ κ²μ μΌμμμλ νν μΌμ΄λλ μΌμ΄λ€.
μ΄ μν©μμ μ¬μ©μλ νλ‘κ·Έλ¨ μμ±κ³Ό νμΌ μμ±, μμ μ λν μ μ΄κΆμ μλ²½ν κ°μ§κ³ μλ€κ³ μκ°ν μ μλ€.
μ¬μ€μ, ν΄λΉκ³Όμ μ μ΄μ체μ μ μν΄ μνλ κ²μΌλ‘ λ΄μΌνκ³ μ¬μ©μλ λ¨μν μμ²μ ν κ²μ μ§λμ§ μλλ€.
λ§μ½ μ¬μ©μ νΉμ μ¬μ©μ νλ‘κ·Έλ¨μ΄ μ§μ νμΌμ μ κ·Όνκ±°λ νλ‘μΈμ€λ₯Ό μμ±ν μ μλ κΆνμ΄ μλ€λ©΄ μ΄λ»κ² λ κΉ.
μ¬μ©μλ, νμ μ μλ₯Ό κ°κ³ νλνμ§λ μκΈ° λλ¬Έμ μ μλ₯Ό κ°μ§ μ¬μ©μκ° μμ€ν μ λ§μΉ κ°λ₯μ±μ΄ μ‘΄μ¬νλ€.
λ°λΌμ μμ€ν μ μνμ΄ λ κ°λ₯μ±μ΄ μ‘΄μ¬νλ μμ μ λν΄μλ μ΄μ체μ κ° μ§μ μννκ³ μ¬μ©μ λ° μ¬μ©μ νλ‘κ·Έλ¨μ μ΄μ λν μμ²λ§ κ°λ₯νλ€.
μ΄λ₯Ό μμ€ν μ½μ΄λΌκ³ νλ€.
μμ€ν μ½(System Call)
μ΄μ체μ λ μ¬μ©μμκ² μ΅λνμ μμ λ₯Ό 보μ₯ν΄μΌνλ©°, κ·Έλ¬λ μμ€μλ μμ€ν μ λν 곡격μ λλΉν΄μΌνλ€.
λ°λΌμ μ΄μ체μ λ μ μ λͺ¨λ κΆνμ ν΅ν΄ μ¬μ©μμκ² μμ λ₯Ό 보μ₯νλ ννΈ,
컀λ λͺ¨λ κΆνμ ν΅ν΄ μμ€ν μ μνμ΄ λ κ°λ₯μ±μ΄ μλ μμ μ μ§μ μννμ¬ μμ€ν μνμ λλΉνλ€.
μμ€ν μ½μ μ μ λͺ¨λμ 컀λ λͺ¨λ μ¬μ΄μμ μ¬μ©μκ° μ λ¬νλ μ£Όλ¬ΈμμΈ μ μ΄λ€.
μμ€ν μ½μ ν΅νλ©΄ ν¬κ² λ€μμ μ΄μ μ΄ μ‘΄μ¬νλ€.
- μμ€ν μ μνμ΄ λ λ§ν μμ μ μ΄μ체μ κ° μννκΈ° λλ¬Έμ 보μμ μΈ μΈ‘λ©΄μμ μ΄μ μ΄ μ‘΄μ¬
- νλ‘κ·Έλλ¨Έλ 컀λ λ΄λΆμ ꡬνμ λν΄ μ νμ μμ΄ μ μΆμνλ μμ€ν μ½ μΈν°νμ΄μ€λ₯Ό νΈμΆνκΈ°λ§ νλ©΄ λλ―λ‘ κ°λ° λμ΄λ μΈ‘λ©΄μμ μ΄μ μ΄ μ‘΄μ¬
μμ€ν μ½ μλ λ°©μ
μμ€ν μ½μ λ΄λΆμ μΌλ‘ νΈλ©(Trap)μ μ΄μ©νλ€.
(νΈλ©μ μ΄ν΄λ₯Ό μν ν¬μ€νΈ: https://one-armed-boy.tistory.com/entry/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8Interrupt)
μ μ λͺ¨λ νλ‘μΈμ€μμ μμ€ν μ½ ν¨μλ₯Ό νΈμΆνλ©΄, μμ€ν μ½μ νΈλ©μ λ°μμν¨λ€.
μ΄ λ κΈ°μ‘΄ νλ‘μΈμ€μ μ 보λ PCBμ μ μ₯λ μ± μ»€λ λͺ¨λλ‘ κΆνμ΄ κ²©μλκ³ ,
νΈμΆλ μμ€ν μ½μ λν μμ μ μ΄μ체μ κ° μννλ€.
ν΄λΉ μμ μ 컀λ μ€νμμ μνλκ³ , μνμ΄ μλ£λλ©΄ ν΄λΉ 곡κ°μ μ κ±°λλ€.
μμ μ΄ μλ£λλ©΄ PCBλ₯Ό ν΅ν΄ κΈ°μ‘΄ νλ‘μΈμ€λ₯Ό 볡μνκ³ , μμ€ν μ½μ λν κ²°κ³Όλ₯Ό λ°ννλ©° μλμ΄ λλλ€.
μμ€ν μ½μ μ’ λ₯
λνμ μΈ μμ€ν μ½λ‘λ λ€μμ΄ μλ€.
- fork()
- wait()
- exec()
μμμ μΈκΈν μμ€ν μ½λ€μ 곡ν΅μ μ λ°λ‘ 리λ μ€ μμ μλ λ°©μκ³Ό μ°κ΄μ΄ μλ€λ μ μΈλ°,
μ΄μ λ°λΌ μμ μλκ³Ό μ°κ΄μ§μ΄ μ΄λ€μ μ€λͺ νκ³ μ νλ€.
fork()
forkλ μλ‘μ΄ νλ‘μΈμ€λ₯Ό μμ±νκΈ° μν μμ€ν μ½μ΄λ€.
forkλ νΉμ΄ν λ°©μμΌλ‘ νλ‘μΈμ€λ₯Ό μμ±νλλ°, λ°λ‘ λΆλͺ¨ νλ‘μΈμ€λ₯Ό 볡μ νλ λ°©μμ μ΄μ©νλ€.
μ΄ λ μμ νλ‘μΈμ€λ PID(νλ‘μΈμ€ ID), PPID(λΆλͺ¨ νλ‘μΈμ€ ID), fork νΈμΆμ λν λ°νκ° μΈ λͺλͺμ μμλ₯Ό μ μΈνλ©΄ κ·Έ μΈμ λͺ¨λ κ²μ΄ λΆλͺ¨ νλ‘μΈμ€μ λμΌνλ€.
λΆλͺ¨ νλ‘μΈμ€μ μ€ν컨ν μ€νΈλ§μ 볡μ¬λ₯Ό νκΈ° λλ¬Έμ, λΆλͺ¨ νλ‘μΈμ€μμ forkλ₯Ό νΈμΆνκΈ° μ μ μ½λλ μμ νλ‘μΈμ€μμ λ€μ μ€νλμ§ μκ³ κ·Έ μ΄νμ μ½λμ λν΄μλ§ μ€νλλ€.
νλ‘κ·Έλλ¨Έλ μΌλ°μ μΌλ‘ forkμ νΈμΆ κ°μ΄ μμκ³Ό λΆλͺ¨μμ λ€λ₯΄λ€λ μ μ ν΅ν΄ λΆκΈ° μ²λ¦¬λ₯Ό μ΄μ©νμ¬ λ€λ₯Έ μ½λ νλ¦μ μ€νμν€λλ°, λΆλͺ¨ νλ‘μΈμ€μμλ fork νΈμΆ κ°μ΄ μμ±λ μμ νλ‘μΈμ€μ IDλ₯Ό κ°λ ννΈ, μμ νλ‘μΈμ€μμλ 0 κ°μ΄ λ°νλλ€.
κΈ°μ‘΄μ forkλ μ€ν μ¦μ λΆλͺ¨μ λ©λͺ¨λ¦¬λ₯Ό 볡μ¬νμ¬ κ°μ ν¬κΈ°μ λ©λͺ¨λ¦¬λ₯Ό νλ λ ν λΉνκΈ° λλ¬Έμ λΉν¨μ¨μ΄ μ‘΄μ¬νλ€.
μ΄λ₯Ό μννκΈ° μν΄ μ΄νμ Copy On Write(COW)λΌλ κΈ°λ²μ΄ λμ λμλ€.
ν΄λΉ κΈ°λ²μ fork μμλ λΆλͺ¨μ μμ νλ‘μΈμ€κ° νλμ λ©λͺ¨λ¦¬ 곡κ°μ μ°Έμ‘°νλ€κ°, λΆλͺ¨μ μμμ΄ μλ‘ λ€λ₯Έ μ½λ νλ¦μ μ€νλλ©΄ κ·Έμ μμΌ λ©λͺ¨λ¦¬ 곡κ°μ λΆλ¦¬νλ κ²μ΄λ€. μ΄λ₯Ό ν΅νλ©΄ λΆνμν λ©λͺ¨λ¦¬ λΆλ¦¬κ° λ°μνμ§ μκΈ° λλ¬Έμ λ©λͺ¨λ¦¬ μ μ½ μΈ‘λ©΄μμ λμμ΄ λλ€.
wait()
waitλ λΆλͺ¨ νλ‘μΈμ€μμ μμ νλ‘μΈμ€κ° μ’ λ£λ λκΉμ§ κΈ°λ€λ €μΌλλ μν©μμ μ¬μ©ν μ μλ μμ€ν μ½μ΄λ€.
μ΄λ₯Ό νΈμΆνλ©΄ λΆλͺ¨ νλ‘μΈμ€λ μμ νλ‘μΈμ€κ° μλ£λ λκΉμ§ μ½λλ₯Ό μ€νμν€μ§ μκ³ μλ€κ°,
μμ νλ‘μΈμ€κ° μλ£λλ©΄ κ·Έμ μμΌ λΆλͺ¨ νλ‘μΈμ€μ μ΄ν μ½λκ° μ€νλλ€.
exec()
execμ λ€λ₯Έ νλ‘κ·Έλ¨μ μ€νν΄μΌν λ νΈμΆλλ μμ€ν μ½μ΄λ€.
μ¬κΈ°μ μ€μν κ²μ λ€λ₯Έ νλ‘κ·Έλ¨μ μ€ννλ€λ κ²μ΄, μλ‘μ΄ νλ‘μΈμ€λ₯Ό μμ±νλ κ²μ΄ μλλΌλ μ μ΄λ€.
exec μμ€ν μ½μ κΈ°μ‘΄ νλ‘μΈμ€μ μ΄λ―Έμ§λ₯Ό μλ‘μ΄ νλ‘μΈμ€μ μ΄λ―Έμ§λ‘ λ체νλ€. λ°λΌμ exec μμ€ν μ½μ΄ νΈμΆλ μ΄νμ μ½λλ μ€νλμ§ μκ³ λ체λ νλ‘μΈμ€μ μ½λκ° μ€νλλ€.
Linux μμ μλ
μμ μ¬μ©μμ λͺ λ Ήμ΄λ₯Ό μ λ ₯ λ°κ³ μ΄λ₯Ό μνν λ€ κ²°κ³Όλ₯Ό μ½μμ μΆλ ₯ν΄μ£Όλ νλ‘κ·Έλ¨μ΄λ€.
μ΄λ λ€μκ³Ό κ°μ νλ¦μΌλ‘ μλνλ€.
- μμ λͺ λ Ήμ΄λ₯Ό μ λ ₯
- μμ forkλ₯Ό νΈμΆνμ¬ μμ μ 볡μ¬λ³Έμ μμ±
- μμ μμ execμ νΈμΆνμ¬ μ¬μ©μκ° μ λ ₯ν λͺ λ Ήμ΄λ‘ νλ‘μΈμ€ λ체
- λΆλͺ¨ μμ waitλ₯Ό νΈμΆνμ¬ λͺ λ Ήμ΄μ μνμ΄ μλ£λ λκΉμ§ λκΈ°
- μμ νλ‘μΈμ€κ° μλ£λλ©΄ λΆλͺ¨ μμ΄ λ€μ μλμ μμνμ¬ λ°ν κ°μ μΆλ ₯
β» fork, wait, exec μμ€ν μ½μ λν μμ μ½λλ OSTEP μ μμ githubμ μ‘΄μ¬
(https://github.com/remzi-arpacidusseau/ostep-code/blob/master/cpu-api/p3.c)
'CS > CS μ€ν°λ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
IPC(Interprocess Communication) (0) | 2023.03.19 |
---|---|
νλ‘μΈμ€ μ μ΄ λΈλ‘(PCB) (1) | 2023.03.18 |
μΈν°λ½νΈ(Interrupt) (1) | 2023.03.11 |
νλ‘μΈμ€ vs μ€λ λ (0) | 2023.03.04 |
νλ‘μΈμ€ μ£Όμ κ³΅κ° (0) | 2023.03.01 |