μ¬λ¬ μμ λ€μ΄ λμμ μ€νλλ κ²μ²λΌ 보μ΄λλ‘ νλ λ°©λ² -> CPU μκ°μ λλμ΄ μ°λ©΄ λλ€. ν νλ‘μΈμ€λ₯Ό μ μλμ μ€ννκ³ , λ€λ₯Έ νλ‘μΈμ€λ₯Ό λ μ κΉ μ€ννκ³ νλ©΄μ 물리μ μΈ CPUλ₯Ό 곡μ νλ€. μ΄λ° κ°μν κΈ°λ²μ ꡬννκΈ° μν΄μ λͺκ°μ§ λ¬Έμ λ₯Ό ν΄κ²°ν΄μΌ νλ€.
- μ±λ₯ μ ν -> μμ€ν μ κ³Όμ€ν μ€λ²ν€λλ₯Ό μ£Όμ§ μμΌλ©΄μ κ°μνλ₯Ό ꡬνν μ μμκΉ?
- μ μ΄ λ¬Έμ -> CPUμ λν ν΅μ λ₯Ό μ μ§ + ν¨μ¨μ μΌλ‘ νλ‘μΈμ€λ₯Ό μ€ν -> μ μ΄κΆμ μΌμΌλ©΄ ν νλ‘μΈμ€κ° μμν μ€νμ κ³μνκ² λ μ§λ λͺ¨λ¦.
1. κΈ°λ³Έ μ리: μ νμ μ§μ μ€ν(Limited Direct Execution)
μ§μ μ€ν -> νλ‘κ·Έλ¨μ CPU μμμ κ·Έλ₯ μ€νμν¨λ€.

μ΄λ κ² νλ©΄ νλ‘κ·Έλ¨μ΄ μ΄μ체μ κ° μμΉμλ μΌμ νκ² λ μ μλ€. λ μ΄λ»κ² νλ‘κ·Έλ¨μ μ€νμ μ€λ¨νκ³ λ€λ₯Έ νλ‘μΈμ€λ‘ μ νμν¬μ§ κ³ λ―Όλ ν΄μΌ νλ€. -> CPU κ°μνμ νμν μλΆν (time sharing) κΈ°λ².
λ°λΌμ μ νμ μΌλ‘ νλ‘κ·Έλ¨μ μ€νμμΌμΌ νλ€. νλ‘κ·Έλ¨ μ€νμ μ νμ λμ§ μμΌλ©΄ μ΄μ체μ λ μ무κ²λ μ μ΄ν μ μλ λ¨μν λΌμ΄λΈλ¬λ¦¬κ° λλ€.
2. λ¬Έμ μ 1: μ νλ μ°μ°
물리μ μΈ CPUμμ μ§μ μ€ννλ©΄ λΉ λ₯΄κ² μ€νλλ€. νμ§λ§ νλ‘μΈμ€κ° νΉμν μ’ λ₯μ μ°μ° (λμ€ν¬ μ μΆλ ₯ μμ² λ° CPU, λ©λͺ¨λ¦¬ μΆκ°ν λΉ μμ² λ±)μ μννκΈΈ μνλ€λ©΄? μλ₯Ό λ€μ΄ νμΌμ λν μ κ·Ό κΆνμ λΆμ¬νκΈ° μ μ, κΆνμ νμΈνλ νμΌ μμ€ν μ λ§λ λ€κ³ νμ. μ΄ λ νλ‘μΈμ€κ° λμ€ν¬μ λν΄ μ μΆλ ₯νλ κ²μ μ ννμ§ μμΌλ©΄ νλ‘μΈμ€λ μ 체 λμ€ν¬λ₯Ό μ½κ³ μΈ μ μκΈ° λλ¬Έμ κ²μ¬νλ μλ―Έκ° μλ€.
μ΄ λλ¬Έμ μ¬μ©μ λͺ¨λ(user mode)μ 컀λ λͺ¨λ (kernel mode) κ° λμ λμλ€. user modeμμλ μνν μ μλ μμ μ μ νμ λκ³ , μ νλ μμ μ kernel modeμμλ§ μνν μμλλ‘ νλ€. μλ₯Ό λ€μ΄, νμΌ μ μΆλ ₯κ³Ό κ°μ μμ μ kernel modeμμλ§ μνλλ€.
user modeμΈ νλ‘μΈμ€κ° μ μΆλ ₯κ³Ό κ°μ μμ μ μ€ννκ³ μΆλ€λ©΄ μ 곡λλ μμ€ν μ½μ μ¬μ©νλ€. 컀λμ μμ€ν μ½μ ν΅νμ¬ μμ μ μ£Όμ κΈ°λ₯μ μ¬μ©μ νλ‘κ·Έλ¨μκ² μ 곡νλ€. μ΄λ¬ν κΈ°λ₯μλ νμΌ μμ€ν μ κ·Ό, νλ‘μΈμ€ μμ± λ° μ κ±°, λ€λ₯Έ νλ‘μΈμ€μμ ν΅μ λ° λ©λͺ¨λ¦¬ ν λΉ λ±μ΄ ν¬ν¨λλ€.
μμ€ν μ½μ μ€ννκΈ° μν΄ νλ‘κ·Έλ¨μ trapμ΄λΌλ νΉμ λͺ λ Ήμ΄λ₯Ό μ€νν΄μΌ νλ€. μ΄ λͺ λ Ήμ΄λ 컀λ μμΌλ‘ λΆκΈ°νλ λμμ kernel modeλ‘ νμ¬ νΉκΆ μμ€μ μν₯ μ‘°μ νλ€. μ΄λ κ² kernel modeλ‘ μ§μ νλ©΄ μ΄μ체μ λ λͺ¨λ λͺ λ Ήμ΄λ₯Ό μ€νν μ μκ³ , μλ£λλ©΄ return from trap νΉμ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ λ€μ user modeλ‘ νΉκΆ μμ€μ νν₯νλ€.
컀λμ λΆν μμ νΈλ© ν μ΄λΈ(trap table) μ λ§λ€κ³ μ΄λ₯Ό μ΄μ©νμ¬ μμ€ν μ ν΅μ νλ€. μ΄μ체μ κ° νλ μ΄κΈ° μμ μ€ νλλ νλμ¨μ΄μκ² μμΈ μ¬κ±΄μ΄ μΌμ΄λ¬μ λ μ΄λ€ μ½λλ₯Ό μ€νν΄μΌ νλμ§ μλ €μ£Όλ μΌμ΄λ€. μλ₯Ό λ€μ΄, νλ λμ€ν¬ μΈν°λ½νΈκ° λ°μνλ©΄, ν€λ³΄λ μΈν°λ½νΈκ° λ°μνλ©΄, λλ νλ‘κ·Έλ¨μ΄ μμ€ν μ½μ νΈμΆ νλ©΄ λ¬΄μ¨ μ½λλ₯Ό μ€νν΄μΌ νλμ§ μλ €μ€λ€. μ΄μ체μ λ νΉμ λͺ λ Ήμ΄λ₯Ό μ¬μ©νμ¬ νλμ¨μ΄μκ² νΈλ© νΈλ€λ¬(trap handler)μ μμΉλ₯Ό μλ €μ€λ€. νλμ¨μ΄λ μ΄ μ 보λ₯Ό μ λ¬λ°μΌλ©΄ ν΄λΉ μμΉλ₯Ό κΈ°μ΅νκ³ μλ€. λ°λΌμ μμ€ν μ½κ³Ό κ°μ μμΈμ μΈ μ¬κ±΄μ΄ λ°μνμ λ νλμ¨μ΄λ 무μμ ν΄μΌ ν μ§ (μ¦, μ΄λ μ½λλ‘ λΆκΈ°νμ¬ μ€νν μ§) μ μ μλ€.
μ΄μ체μ μμ μΈν°λ½νΈλ νλμ¨μ΄λ μννΈμ¨μ΄μμ λ°μνλ μκΈ°μΉ μμ μ΄λ²€νΈλ₯Ό μλ―Έν©λλ€. μ΄λ²€νΈλ νμ¬ μ€ν μ€μΈ νλ‘κ·Έλ¨μ νλ¦μ μ€λ¨νκ³ μ΄μ체μ μκ² μ²λ¦¬λ₯Ό μμ²ν©λλ€. μΈν°λ½νΈλ μμ€ν μ μΌλΆλΆμ λ°μνλ μ€λ¨ μ νΈλ‘ μ΄ν΄ν μ μμ΅λλ€. μΈν°λ½νΈλ μ¬λ¬ κ°μ§ μν©μμ λ°μν μ μμ΅λλ€. λͺ κ°μ§ μ£Όμν μΈν°λ½νΈ μ νμ λ€μκ³Ό κ°μ΅λλ€
νλμ¨μ΄ μΈν°λ½νΈ: νλμ¨μ΄ μ₯μΉμμ λ°μνλ μ΄λ²€νΈλ‘, μλ₯Ό λ€μ΄ νμ΄λ¨Έ μΈν°λ½νΈ, μ μΆλ ₯ μ₯μΉμμμ μλ£ μ νΈ, νλμ¨μ΄ μ€λ₯ λ±μ΄ μμ΅λλ€. μννΈμ¨μ΄ μΈν°λ½νΈ: νλ‘κ·Έλ¨ μ€ν μ€ λͺ λ Ήμ μν΄ λ°μνλ μ΄λ²€νΈλ‘, μ£Όλ‘ μμ€ν μ½μ΄λ μμΈ μν©μ μν΄ λ°μν©λλ€.

3. λ¬Έμ μ 2: νλ‘μΈμ€ κ° μ ν
μ΄μ체μ λ μ€ν μ€μΈ νλ‘μΈμ€λ₯Ό κ³μ μ€νν κ²μΈμ§, λ©μΆκ³ λ€λ₯Έ νλ‘μΈμ€λ₯Ό μ€νν κ²μΈμ§ κ²°μ ν΄μΌ νλ€. μ΄λ κΉλ€λ‘μ΄ λ¬Έμ μ΄λ€.
CPUμμ νλ‘μΈμ€κ° μ€ν μ€μ΄λΌλ κ²μ μ΄μ체μ λ μ€νμ€μ΄μ§ μλ€λ κ²μ μλ―Ένλ€. μ΄μ체μ κ° μ€ννκ³ μμ§ μλ€λ©΄ μ΄λ»κ² μ΄λ° μΌλ€μ ν μ μμκΉ?
νμ‘° λ°©μ: μμ€ν μ½ κΈ°λ€λ¦¬κΈ°
νμ‘° λ°©μμ μΌλΆ κ³Όκ±° μμ€ν μμ μ¬μ©λ λ°©λ²μΌλ‘, μ΄μ체μ κ° νλ‘μΈμ€λ€μ΄ ν©λ¦¬μ μΌλ‘ νλν κ²μ΄λΌκ³ κ°μ νλ€. νλ‘μΈμ€λ€μ μ£ΌκΈ°μ μΌλ‘ CPU μ μ΄λ₯Ό μ΄μ체μ μκ² μ보ν΄μΌ νλ€λ κ°μ νμ λμνλ€. μ£Όλ‘ μμ€ν μ½μ νΈμΆνμ¬ CPU μ μ΄λ₯Ό μ΄μ체μ μκ² λ겨μ€λ€.
λΉνμ‘° λ°©μ: μ΄μ체μ κ° μ κΆμ νμ¬
νλ‘μΈμ€κ° νμ‘°νμ§ μκ±°λ μμ€ν μ½μ νΈμΆνμ§ μμ μ΄μ체μ μκ² μ μ΄λ₯Ό λκΈ°μ§ μμ κ²½μ°, μ΄μ체μ λ μΆκ°μ μΈ λμ μμ΄ μ μ΄λ₯Ό νλνκΈ° μ΄λ ΅λ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ νμ΄λ¨Έ μΈν°λ½νΈ κΈ°λ₯μ μ¬μ©νλ€. νμ΄λ¨Έ μΈν°λ½νΈλ μ κΈ°μ μΌλ‘ λ°μνμ¬ μ΄μ체μ μκ² CPU μ μ΄λ₯Ό μλν©λλ€.
λ¬Έλ§₯ κ΅ν (Context Switching)
λ¬Έλ§₯ κ΅νμ νλ‘μΈμ€ μ νμ΄ μΌμ΄λ λ νμ¬ μ€ν μ€μΈ νλ‘μΈμ€μ μνλ₯Ό μ μ₯νκ³ λ€μμ μ€νλ νλ‘μΈμ€μ μνλ₯Ό 볡μνλ κ³Όμ μ΄λ€. λ¬Έλ§₯ κ΅νμ μ΄μ체μ μ μ€μΌμ€λ¬μ μν΄ κ²°μ λλ€. λ μ§μ€ν° κ°κ³Ό μ€ν ν¬μΈν° λ±μ μνλ₯Ό μ μ₯νκ³ λ³΅μνμ¬ μ μ΄λ₯Ό μ νλ€.
νμ΄λ¨Έ μΈν°λ½νΈμ λ¬Έλ§₯ κ΅ν
νμ΄λ¨Έ μΈν°λ½νΈλ μ κΈ°μ μΌλ‘ λ°μνμ¬ μ΄μ체μ μκ² CPU μ μ΄λ₯Ό μλνλ μν μ νλ€. νμ΄λ¨Έ μΈν°λ½νΈκ° λ°μνλ©΄ νμ¬ μ€ν μ€μΈ νλ‘μΈμ€μ λ μ§μ€ν° κ°μ μ μ₯νκ³ , λ€μμ μ€νλ νλ‘μΈμ€μ λ μ§μ€ν° κ°μ 볡μνλ€. μ΄λ₯Ό ν΅ν΄ μ΄μ체μ λ λ€λ₯Έ νλ‘μΈμ€λ‘ μ ννμ¬ μ€νμ κ³μν μ μλ€.


4. Concurrency?
μΈν°λ½νΈ μ²λ¦¬ μ€ λ€λ₯Έ μΈν°λ½νΈκ° λ°μνλ©΄ μ΄λ»κ² ν κ²μΈμ§, μμ€ν μ½ μ²λ¦¬ μ€ timer interruptκ° λ°μνλ©΄ μ΄λ€ κ²μ λ¨Όμ μ²λ¦¬ν μ§?
- Disable Interrupt -> λ€λ₯Έ μΈν°λ½νΈ μ²λ¦¬ μ€μΌ λ λ°μνλ μΈν°λ½νΈ 무μ
- Priority -> μΈν°λ½νΈμ μ°μ μμλ₯Ό λμ΄ μμ°¨μ μΌλ‘ μ²λ¦¬
- Locking Mechanism -> Lock κΈ°λ² μ¬μ©
OSTEP κ΅μ¬ μ°Έκ³