μ΄μ체μ (OS)
ν° λ Έμ΄λ§μ΄ μ μν μ»΄ν¨ν° λͺ¨λΈμ λ°λΌ κ°κ°μ νλμ¨μ΄λ₯Ό μ°κ²°νλ€ ν΄μ μ°λ¦¬κ° μνλ νλ‘κ·Έλ¨μ μνν μ μλ κ²μ μλλ€. νλμ¨μ΄λ λ¨μ§ κ·Έ νλμ¨μ΄μ νΉμ κΈ°λ₯μ μνν λΏμ΄κΈ° λλ¬Έμ μ΄λ° νλμ¨μ΄ μμ νλ‘κ·Έλ¨λ€μ΄ λμλλ €λ©΄ νλμ¨μ΄λ€κ³Ό μ μ νκ² λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μΌλ©° λ Όλ¦¬μ μΈ μΌλ€μ ν΄μΌνλ€. μ΄ νλμ¨μ΄μκ² μΌμ μν€λ μ£Όμ²΄κ° λ°λ‘ μ΄μ체μ μ΄λ€.
μ΄μ체μ μ λͺ©μ λ° κΈ°λ₯
μ΄μ체μ μ λͺ©μ μ μ²λ¦¬λ₯λ ₯ ν₯μ, μ¬μ© κ°λ₯λ ν₯μ, μ λ’°λ ν₯μ, λ°ν μκ° λ¨μΆ λ±μ μμΌλ©°, μ΄λ° μ΄μ체μ μ κΈ°λ₯μ μ¬λ¬κ°μ§κ° μλ€.
- νλ‘μΈμ, κΈ°μ΅μ₯μΉ, μ μΆλ ₯μ₯μΉ, νμΌ λ° μ 보 λ±μ μμ κ΄λ¦¬
- μμμ ν¨μ¨μ κ΄λ¦¬λ₯Ό μν΄ μ΄λ€ μμμ λκ°, μΈμ , μ΄λ€ λ°©μμΌλ‘ μ¬μ©ν μ§ κ²°μ νλ μμμ μ€μΌμ€λ§ κΈ°λ₯μ μ 곡
- μ¬μ©μμ μμ€ν κ°μ νΈλ¦¬ν μΈν°νμ΄μ€ μ 곡
- μμ€ν μ κ°μ’ νλμ¨μ΄μ λ€νΈμν¬λ₯Ό κ΄λ¦¬ λ° μ μ΄
μ΄μ 체μ μ μμ€ν μμ κ΄λ¦¬
μ΄μ 체μ λ μμ© νλ‘κ·Έλ¨μ΄ νλμ¨μ΄μκ² μΌμ μν¬ μ μλλ‘ λμμ€λ€. νλμ¨μ΄λ₯Ό ꡬμ±νλ μΌμ νλ CPU, μλ£λ₯Ό μ μ₯νλ RAM, λμ€ν¬ λ±μ μμ€ν μμμ κ΄λ¦¬νλ μ£Όμ²΄κ° μ΄μ체μ μ΄λ€.
- νλ‘μΈμ€ κ΄λ¦¬(CPU)
- λ©λͺ¨λ¦¬ κ΄λ¦¬
- I/O κ΄λ¦¬ (λμ€ν¬, λ€νΈμν¬ λ±)
μμ© νλ‘κ·Έλ¨ κ΄λ¦¬
λͺ¨λ μμ© νλ‘κ·Έλ¨μ΄ μμ€ν μ μμμ λ§μλλ‘ μ¬μ©νλ€λ©΄ ν΄μ»€μ μν 곡격μ 무방λΉν μνκ° λλ€. μ μμ μΈ λͺ©μ μ κ°μ§ νλ‘κ·Έλ¨μ΄ λ―Όκ°ν μ 보λ₯Ό μ·¨λνκ³ μμλ‘ νλ‘κ·Έλ¨μ μ€ννλ κ²μ λ°©μ§νκΈ° μν΄ μμ© νλ‘κ·Έλ¨μ κΆνμ λν κ΄λ¦¬κ° νμνλ€. λν μ¬λ¬ μ¬λμ΄ νλμ κΈ°κΈ°λ₯Ό μ¬μ©νλ κ²½μ° μ¬μ©μλ₯Ό κ΄λ¦¬νλ μΌλ λ§€μ° μ€μνλ€.
μμ© νλ‘κ·Έλ¨μ΄ μ€νλκ³ , μμ€ν μμμ μ¬μ©ν μ μλλ‘ κΆνκ³Ό μ¬μ©μλ₯Ό κ΄λ¦¬νλ€.
μμ© νλ‘κ·Έλ¨ : μ΄μ체μ λ₯Ό ν΅ν΄ μ»΄ν¨ν°μκ² μΌμ μν€λ κ²
μμ© νλ‘κ·Έλ¨μ΄ μ΄μ체μ λ₯Ό ν΅ν΄ μ»΄ν¨ν°μκ² μΌμ μν€λ €λ©΄ μ»΄ν¨ν°λ₯Ό μ‘°μν μ μλ κΆνμ μ΄μ체μ λ‘λΆν° λΆμ¬λ°μμΌ νλ€. λΆμ¬λ°μ νμλ μ΄μ체μ κ° μ 곡νλ κΈ°λ₯μ μ΄μ©ν μ μλ€. μμ© νλ‘κ·Έλ¨μ΄ μ΄μ체μ μ μν΅νκΈ° μν΄μλ μ΄μ체μ κ° μμ© νλ‘κ·Έλ¨μ μν μΈν°νμ΄μ€(API)λ₯Ό μ 곡ν΄μΌ νλ€. μμ© νλ‘κ·Έλ¨μ΄ μμ€ν μμμ μ¬μ©ν μ μλλ‘ μ΄μ체μ μ°¨μμμ λ€μν ν¨μλ₯Ό μ 곡νλ κ²μ μμ€ν μ½(System Call)μ΄λΌ λΆλ₯Έλ€.
νλ‘μΈμ€
νλ‘μΈμ€λ νλ‘κ·Έλ¨μ΄ μ€ν μ€μΈ μνλ‘ νΉμ λ©λͺ¨λ¦¬ 곡κ°μ νλ‘κ·Έλ¨μ μ½λκ° μ μ¬λκ³ CPUκ° ν΄λΉ λͺ λ Ήμ΄λ₯Ό νλμ© μννκ³ μλ μνλ₯Ό μλ―Ένλ€.
μ΄μ체μ μμλ μ¬μ©μκ° μ΄ν리μΌμ΄μ μ μ€ννλ©΄, μ΄μ체μ λ‘λΆν° μ€νμ νμν λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°μ μ΄ν리μΌμ΄μ μ μ½λλ₯Ό μ€ννλ€. μ΄ λ μ€νλλ μ΄ν리μΌμ΄μ μ νλ‘μΈμ€λΌ λΆλ₯Έλ€. νλμ μ΄ν리μΌμ΄μ μ μ¬λ¬ νλ‘μΈμ€λ₯Ό λ§λ€κΈ°λ νλ€. (ex. Chrome λΈλΌμ°μ λ₯Ό λ κ° μ€ννλ©΄ λ κ°μ νλ‘μΈμ€κ° μμ±λλ€)
νλ‘μΈμ€ κ΅¬μ± μμ
νλ‘μΈμ€λ νλ‘μΈμ€λ§λ€ λ 립μ μΌλ‘ κ΄λ¦¬ν΄μΌ νλ μ μ λ©λͺ¨λ¦¬ μμμ΄λ νλ‘μΈμ€κ° μ¬μ©νλ κ°μ’ κ°μ²΄λ€μ ν¬μΈν°λ₯Ό κ΄λ¦¬νλ νΈλ€ ν μ΄λΈμ κ°μ§κ³ μλ€.
- μ μ λ©λͺ¨λ¦¬ μμ κ΄λ¦¬(Virtual Address Descriptors)
νλ‘μΈμ€ λ³λ‘ λ 립λ μμμ κ°μ§λ κ³³μ μ μ λ©λͺ¨λ¦¬ 곡κ°μ΄λ€. 컀λ λ©λͺ¨λ¦¬ 곡κ°μ κ²½μ° λͺ¨λ νλ‘μΈμ€κ° 곡μ νμ¬ μ¬μ©νκ³ μμΌλ©°, νλ‘μΈμ€ λ³λ‘ λ 립μ μΈ μ μ λ©λͺ¨λ¦¬ μμμ κ΄λ¦¬νκΈ° μν΄ VAD(Virtual Address Descriptors)λΌλ κ΄λ¦¬ ν μ΄λΈμ΄ μ‘΄μ¬νλ€.
- νΈλ€ ν
μ΄λΈ(Handle Table)
νΈλ€ ν μ΄λΈμ νλ‘μΈμ€μμ μ¬μ©νλ λͺ¨λ νΈλ€μ λν 컀λ κ°μ²΄ ν¬μΈν° μ 보λ₯Ό λ°°μ΄ ννλ‘ κ°μ§κ³ μλ 곡κ°μ΄λ€. νλ‘μΈμ€κ° μ’ λ£λ λ μ΄ ν μ΄λΈμ μ 보λ₯Ό μ°Έκ³ ν΄ μ΄ νλ‘μΈμμμ μ¬μ©νλ λͺ¨λ 컀λ κ°μ²΄λ₯Ό μλμΌλ‘ λ°ννλ€.
- λ
립μ μΈ λ©λͺ¨λ¦¬ 곡κ°
νλ‘μΈμ€ λ¨μλ‘ κ΄λ¦¬λλ μμ μ€ κ°μ₯ μ€μν ꡬλ³μ μ κ°μ λ©λͺ¨λ¦¬μ΄λ€. μλμ°μ κ²½μ° νμ΄μ§ κΈ°λ²μ μ΄μ©ν΄ νλ‘μΈμ€λ§λ€ λ³λμ κ³ μ ν λ©λͺ¨λ¦¬λ₯Ό μ¬μ©ν μ μκ² νλ€.
νλ‘μΈμ€ νΉμ§
- μμ μμ μ λ¨μ
κ°κ°μ νλ‘μΈμ€λ μμ μ μ€ν μ΄λ―Έμ§ λ‘λμ μ€νμ νμν μΆκ°μ μΈ λ©λͺ¨λ¦¬ 곡κ°μ κ°μ§κ³ μμ΄μΌ νλ€. μ΄λ κ° νλ‘μΈμ€λ§λ€ ꡬλ³λμ΄μΌ νλ©° ν΄λΉ νλ‘μΈμ€κ° μ κ·Όνκ³ μ νλ νμΌ, I/O μ₯μΉλ€μ λν΄μλ νλ‘μΈμ λ¨μλ‘ ν λΉλ°μ κ΄λ¦¬λμ΄μΌ νλ€.
- λμ€ν¨μΉμ λ¨μ
νλ‘μΈμ€λ νλμ νλ‘κ·Έλ¨μ΄ μ΄μ체μ λ‘λΆν° CPUμ μμμ μΌμ κΈ°κ° λμ ν λΉ λ°μ λͺ λ Ήμ΄λ₯Ό μ€ννλ κ²μ΄λ©° μ΄μ체μ λ μ¬λ¬ κ°μ νλ‘μΈμ€κ° λ³λ ¬μ μΌλ‘ μ€νλκ² νκΈ° μν΄ CPUμ μ¬μ© μκ°μ κ°κ°μ νλ‘μΈμ€μ κ³¨κ³ λ£¨ λλμ΄ μ£Όμ΄μΌ νλ€. νλμ νλ‘μΈμ€μ μ¬λ¬ κ°μ λμ€ν¨μΉ λ¨μκ° μ€νλ μ μλλ‘ νκ³ μμΌλ©°, μ΄λ° λμ€ν¨μΉ λ¨μλ₯Ό μ€λ λλΌ λΆλ₯Έλ€.
νλ‘μΈμ€ μν
- μ€ν(Run) : νλ‘μΈμ€κ° νλ‘μΈμλ₯Ό μ°¨μ§νμ¬ μλΉμ€λ₯Ό λ°κ³ μλ μν
- μ€λΉ(Ready) : μ€νλ μ μλλ‘ μ€λΉλλ μν
- λκΈ°(Waiting) : CPU μ μ¬μ©μ΄ μλλΌ μ μΆλ ₯μ μ¬κ±΄μ κΈ°λ€λ¦¬λ μν
μ€λ λ
μ€λ λλ λͺ λ Ήμ΄κ° CPUλ₯Ό ν΅ν΄ μνλλ κ°μ²΄μ λ¨μμ΄λ€. νλμ νλ‘μΈμ€ λ΄μλ λ°λμ 1κ° μ΄μμ μ€λ λκ° μ‘΄μ¬νλ©°, μ΄λ κ°μ νλ‘μΈμ€μ μλ μμκ³Ό μνλ₯Ό 곡μ νλ€. κ°μ νλ‘μΈμ€ λ΄μ μλ μ€λ λλ κ°μ μ£Όμ 곡κ°μ μ‘΄μ¬νκ² λλ©° λμΌν λ°μ΄ν°μ μ κ·Όν μ μλ€. λν νλμ μ€λ λκ° μμ ν λ©λͺ¨λ¦¬λ κ°μ λ©λͺ¨λ¦¬λ₯Ό μ°Έμ‘°νλ μ€λ λμ μν₯μ λ―ΈμΉκ² λλ€. νλ‘μΈμ€κ° μ’ λ£λλ©΄ κ·Έ νλ‘μΈμ€μ μν΄μλ μ€λ λλ ν¨κ» μ’ λ£λλ€.
μ€λ λμ νμμ±
νλμ νλ‘μΈμ€ μμμ μ¬λ¬ κ°μ 루ν΄μ λμμ μνν΄μ μν λ₯λ ₯μ ν₯μνλ €κ³ ν λ μ€λ λλ₯Ό μ¬μ©νκ² λλλ°, μ¬λ¬ κ°μ μμ λ¨μλ‘ κ΅¬μ±λ νλ‘κ·Έλ¨μμ μμ²μ λμμ μ²λ¦¬νκΈ° μν΄μμ΄λ€.
μλ₯Ό λ€μ΄, μλ νλ‘μΈμμμ μ¬μ©μλ‘λΆν° ν€λ³΄λ μ λ ₯ λ°κ±°λ, κ·Έλν½μ΄λ UIλ₯Ό κ·Έλ¦¬κ³ λ¬Έλ² μ€λ₯λ₯Ό 체ν¬νλ λ± μλ νλ‘μΈμ λ΄μμ μ¬λ¬ μμ²λ€μ λμμ μ²λ¦¬ν΄μΌ νλλ°, μ΄λ μ€λ λκ° νμνλ€.
μ€λ λμ κ΅¬μ± μμ
- κ°μ CPU : μΈν°ν리ν°, μ»΄νμΌλ¬μ μν΄ λ΄λΆμ μΌλ‘ μ²λ¦¬λλ κ°μ μ½λ
- μν μ½λ : Thread Classμ ꡬνλμ΄ μλ
run()
Method μ½λ
- μ²λ¦¬ λ°μ΄ν° : Threadμμ μ²λ¦¬νλ λ°μ΄ν°
μ€λ λμ νΉμ§
- νλ‘μΈμ€ λ΄μμ μ€νλλ νλ¦μ λ¨μμ΄λ€. νλμ μ€λ λλ μμν΄μ μ’ λ£ν λ κΉμ§ νλ²μ νλμ© λͺ λ Ήλ€μ μννλ€.
- κ° μ€λ λλ§λ€ call stackμ΄ μ‘΄μ¬νλ©°, λλ¨Έμ§ Code, Data, Heapμμμ μ€λ λλΌλ¦¬ 곡μ νλ€. λ°λ©΄ νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€μ λ©λͺ¨λ¦¬μ μ§μ μ κ·Όν μ μλ€.
- μ€λ λλ λ€λ₯Έ μ€λ λμ λ 립μ μΌλ‘ λμνκΈ° λλ¬Έμ λ κ° μ΄μμ μ€λ λκ° λμλλ κ²½μ° λκ° μ΄μμ μ€λ λμ μ€ν λ° μ’ λ£ μμλ μμΈ‘ν μ μλ€.
μ±κΈ μ€λ λμ λ©ν° μ€λ λ
μ±κΈ μ€λ λ(Single-Thread)
νλ‘μΈμ€κ° λ¨μΌ μ€λ λλ‘ λμνλ λ°©μμΌλ‘ μΌλ ¨μ μ²λ¦¬λ₯Ό λ¨μΌ μ€λ λλ§μΌλ‘ μ§λ ¬ μ²λ¦¬νλ νλ‘κ·Έλλ° λ°©λ²μ΄λ€. νλμ λ μ§μ€ν° νΉμ μ€νμΌλ‘ νννλ©°, JavaScriptκ° κ°μ₯ λνμ μΈ μ±κΈ μ€λ λ μΈμ΄μ΄λ€.
- μ₯μ
- μμ μ κ·Όμ λν λκΈ°νλ₯Ό μ κ²½μ°μ§ μμλ λλ€. λ©ν° μ€λ λμ κ²½μ° λͺ¨λ μ€λ λκ° μΌμ μμμ λμμ μ κ·Όνκ±°λ λκ°μ μμ μ μ€ννλ €λ κ²½μ° μλ¬κ° λ°μνκ±°λ μνλ κ°μ΄ λμ€μ§ μκΈ° λλ¬Έμ λμμ μ κ·Όνμ§ λͺ»νλλ‘ λ°λ‘ μ μ΄λ₯Ό ν΄μ£Όμ΄μΌ νλ€.
- μμ μ κ·Όμ λν λκΈ°νλ₯Ό μ κ²½μ°μ§ μμλ λκΈ° λλ¬Έμ λ¬Έλ§₯ κ΅ν(context switch) μμ μ μꡬνμ§ μλλ€. λ¬Έλ§₯ κ΅νμ μ¬λ¬ νλ‘μΈμ€κ° νλμ νλ‘μΈμλ₯Ό 곡μ ν λ λ°μνλ μμ μΌλ‘ λ§μ λΉμ©μ νμλ‘ νλ€.
- νλ‘κ·Έλλ° λμ΄λκ° μ½κ³ , CPU λ©λͺ¨λ¦¬λ₯Ό μ κ² μ¬μ©νλ€.
- λ¨μ
- μ¬λ¬ κ°μ CPUλ₯Ό νμ©νμ§ λͺ»νλ€. μ±κΈ μ€λ λλ νλμ 물리μ μ½μ΄λ°μ μ¬μ©νμ§ λͺ»ν΄ λ©ν° μ½μ΄ λ¨Έμ μμ CPU μ¬μ©μ μ΅μ ν ν μ μλ€. μ΅μ νλ₯Ό μν΄μ Cluster λͺ¨λμ μ΄μ©ν΄ μ¬λ¬ νλ‘μΈμ€λ₯Ό μ¬μ©ν μ μμ§λ§, νλ‘μΈμ€λΌλ¦¬μ μμ 곡μ λ μ΄λ ΅κΈ° λλ¬Έμ Redisμ κ°μ λΆκ° μΈνλΌκ° νμνλ€.
- μ°μ°λμ΄ λ§μ μμ μ νλ κ²½μ° κ·Έ μμ μ΄ μλ£λμ΄μΌ λ€λ₯Έ μμ μ μνν μ μλ€.
- μλ¬ μ²λ¦¬λ₯Ό λͺ»νλ κ²½μ° λ©μΆ°λ²λ¦¬κ² λλ€. λ©ν° μ€λ λλ μλ¬ λ°μ μ μλ‘μ΄ μ€λ λλ₯Ό μμ±νμ¬ κ·Ήλ³΅ν μ μλ€.
λ©ν° μ€λ λ(Multi-Thread)
λ©ν° μ€λ λ(multi thread)λ νλμ νλ‘μΈμ€ λ΄μμ λ μ΄μμ μ€λ λκ° λμμ μμ μ μννλ κ²μ μλ―Ένλ©°, λ©ν° νλ‘μΈμ€(multi process)λ μ¬λ¬ κ°μ CPUλ₯Ό μ¬μ©ν΄ μ¬λ¬ νλ‘μΈμ€λ₯Ό λμμ μννλ κ²μ μλ―Ένλ€. μμ€ν μμμ νμ© κ·Ήλν λ° μ²λ¦¬λ μ¦λκ° κ°λ₯ν΄ λ¨μΌ νλ‘μΈμ€ μμ€ν μ ν¨μ¨μ±μ λμΌ μ μλ€.
- μ₯μ
- μ±κΈ μ€λ λμ λ¬λ¦¬ μμ μ λΆλ¦¬ν΄μ μννλ―λ‘ μ€μκ°μΌλ‘ μ¬μ©μμκ² μλ΅ν μ μλ€.
- ν νλ‘μΈμ€λ₯Ό μ¬λ¬ νλ‘μΈμμμ μνν μ μμΌλ―λ‘ ν¨μ¬ ν¨μ¨μ μ΄λ€.
- λ¨μ
- μ£Όμ κΉμ μ€κ³κ° νμνλ©° λλ²κΉ μ΄ κΉλ€λ‘λ€.
- λ¨μΌ νλ‘μΈμ€ μμ€ν μ κ²½μ° ν¨κ³Όλ₯Ό κΈ°λνκΈ° μ΄λ €μ°λ©° λ€λ₯Έ νλ‘μΈμ€μμ μ€λ λλ₯Ό μ μ΄ν μ μλ€. μ¦, νλ‘μΈμ€ λ°μμ μ€λ λ κ°κ°μ μ μ΄ν μ μλ€.
- λ©ν° μ€λ λμ κ²½μ° μμ 곡μ μ λ¬Έμ κ° λ°μνλ€. νλμ μ€λ λμ λ¬Έμ κ° λ°μνλ©΄ μ 체 νλ‘μΈμ€κ° μν₯μ λ°κ² λλ€.
- λ¬Έλ§₯ κ΅ν μμ μ μꡬνλ€. λ€λ₯Έ νμ€ν¬(νλ‘μΈμ€, μ€λ λ)κ° μμν μ μλλ‘ μ΄λ―Έ μ€ν μ€μΈ νμ€ν¬(νλ‘μΈμ€, μ€λ λ)λ₯Ό λ©μΆλ κ²μ μλ―Ένλ€.
λμμ±κ³Ό λ³λ ¬μ±μ μ°¨μ΄
λμμ λ릴 μ μλ μ€λ λ μλ μ»΄ν¨ν°μ μλ μ½μ΄ κ°μλ‘ μ νλλ€. μ΄μ체μ (λλ κ°μ λ¨Έμ )λ κ° μ€λ λλ₯Ό μκ°μ λ°λΌ λΆν νμ¬ μ¬λ¬ μ€λ λκ° μΌμ μκ°λ§λ€ λμκ°λ©΄μ μ€νλλλ‘ νλ€. μ΄λ° λ°©μμ μλΆν μ΄λΌ νλ€.
- Concurrency(λμμ±, λ³νμ±): μ¬λ¬ κ°μ μ€λ λκ° μλΆν λ°©μμΌλ‘ λμμ μνλλ κ²μ²λΌ μ°©κ°μ λΆλ¬μΌμΌν΄
- Parallelism(λ³λ ¬μ±): λ©ν° μ½μ΄ νκ²½μμ μ¬λ¬ κ°μ μ€λ λκ° μ€μ λ‘ λμμ μνλ¨
Uploaded by N2T