π₯ CS/μ΄μ체μ (12) μΈλ€μΌν 리μ€νΈν [μ΄μ체μ ] κ΅μ°© μν (Deadlock) λ³Έ κ²μκΈμ KOCW μ΄νμ¬μλνκ΅ λ°ν¨κ²½ κ΅μλμ κ°μλ₯Ό λ£κ³ , μ± μ μ°Έκ³ νμ¬ μ 리ν λ΄μ©μ λλ€. κ²μκΈμ ν¬ν¨λλ μ΄λ―Έμ§ μλ£λ κ°μμ ν¬ν¨λ κ°μ μλ£μ λλ€. κ΅μ°© μν(Deadlock)λ? μΌλ ¨μ νλ‘μΈμ€λ€μ΄ μλ‘κ° κ°μ§ μμ(resource)μ κΈ°λ€λ¦¬λ©° blockλ μνλ₯Ό κ΅μ°©μν(deadlock)μ΄λΌκ³ ν©λλ€. μμ(resource) νλμ¨μ΄, μννΈμ¨μ΄ λ±μ ν¬ν¨νλ κ°λ ex) I/O device, CPU cycle, memory space, semaphore λ± νλ‘μΈμ€κ° μμμ μ¬μ©νλ μ μ°¨ Request(μμ²) -> Allocate(νλ) -> Use(μ¬μ©) -> Release(λ°λ©) Deadlock λ°μμ 4κ°μ§ 쑰건 κ΅μ°© μνκ° λ°μν 쑰건μλ λ€ κ°μ§κ° μμ΅λλ€. λ€ κ°μ§ 쑰건 .. [μ΄μ체μ ] νλ‘μΈμ€ λκΈ°ν (2/2) λ³Έ κ²μκΈμ KOCW μ΄νμ¬μλνκ΅ λ°ν¨κ²½ κ΅μλμ κ°μλ₯Ό λ£κ³ , μ± μ μ°Έκ³ νμ¬ μ 리ν λ΄μ©μ λλ€. κ²μκΈμ ν¬ν¨λλ μ΄λ―Έμ§ μλ£λ κ°μμ ν¬ν¨λ κ°μ μλ£μ λλ€. Synchronizationκ³Ό κ΄λ ¨λ κ³ μ μ μΈ λ¬Έμ Bounded-Buffer Problem (Producer-Consumer Problem) Readers and Writers Problem Dining-Philosophers Problem 1. Bounded-Buffer Problem(Producer-Consumer Problem) μλλ¦¬μ€ λ μ’ λ₯μ νλ‘μΈμ€ μ‘΄μ¬ 1. μμ°μ(producer) νλ‘μΈμ€: λ°μ΄ν° μμ°ν΄μ 곡μ λ²νΌμ λ£μ 2. μλΉμ(consumer) νλ‘μΈμ€: λ°μ΄ν°λ₯Ό λ²νΌμμ κΊΌλ΄κ°μ μλΉ λ°μ κ°λ₯ν λ¬Έμ 1. lo.. [μ΄μ체μ ] νλ‘μΈμ€ λκΈ°ν (1/2) λ³Έ κ²μκΈμ KOCW μ΄νμ¬μλνκ΅ λ°ν¨κ²½ κ΅μλμ κ°μλ₯Ό λ£κ³ , μ± μ μ°Έκ³ νμ¬ μ 리ν λ΄μ©μ λλ€. κ²μκΈμ ν¬ν¨λλ μ΄λ―Έμ§ μλ£λ κ°μμ ν¬ν¨λ κ°μ μλ£μ λλ€. λ°μ΄ν° μ κ·Ό ν¨ν΄ νλ‘μΈμ€ λκΈ°νμ λν΄ μμ보기μ μμ μ»΄ν¨ν° μμ€ν λ΄μμ λ°μ΄ν°κ° μ κ·Όλλ ν¨ν΄μ λν΄ λ¨Όμ μμλ΄ μλ€. λ°μ΄ν°κ° μ μ₯λμ΄μλ μμΉμμ μ½μ΄μμ μ°μ°μ νκ³ μμ λ κ²°κ³Όλ₯Ό λ€μ λ°μ΄ν°μ λ°μμ νκ³ , λ°μ΄ν°κ° μ μ₯λλ Storage Boxλ 곡μ λκΈ° λλ¬Έμ λκΈ°ν(synchronization) λ¬Έμ κ° λ°μν©λλ€. 곡μ λ°μ΄ν°(shared data)μ λμ μ κ·Όμ λ°μ΄ν°μ λΆμΌμΉ λ¬Έμ λ₯Ό λ°μμν¬ μ μμ΅λλ€. κ·Έλ κΈ° λλ¬Έμ λ°μ΄ν°μ μΌκ΄μ±(consistency) μ μ§λ₯Ό μν΄μλ νλ ₯ νλ‘μΈμ€ κ°μ μ€ν μμλ₯Ό μ ν΄μ£Όλ λ©μ»€.. [μ΄μ체μ ] CPU μ€μΌμ€λ§ λ³Έ κ²μκΈμ KOCW μ΄νμ¬μλνκ΅ λ°ν¨κ²½ κ΅μλμ κ°μλ₯Ό λ£κ³ , μ± μ μ°Έκ³ νμ¬ μ 리ν λ΄μ©μ λλ€. κ²μκΈμ ν¬ν¨λλ μ΄λ―Έμ§ μλ£λ κ°μμ ν¬ν¨λ κ°μ μλ£μ λλ€. CPU μ€μΌμ€λ§μ΄λ? λͺ¨λ νλ‘μΈμ€λ CPUλ₯Ό νμλ‘ νκ³ , λ¨Όμ CPUλ₯Ό μ¬μ©νκ³ μΆμ΄ ν©λλ€. μ΄λ¬ν νλ‘μΈμ€λ€μκ² κ³΅μ νκ³ ν©λ¦¬μ μΌλ‘ CPU μμμ ν λΉνκΈ° μν΄ μ΄μ체μ λ μ΄λ€ νλ‘μΈμ€μ CPUλ₯Ό ν λΉν μ§, μ΄λ€ νλ‘μΈμ€λ₯Ό κΈ°λ€λ¦¬κ² ν μ§λ₯Ό κ²°μ ν©λλ€. μ΄λ κ² μ΄μ체μ κ° νλ‘μΈμ€λ€μκ² κ³΅μ νκ³ ν©λ¦¬μ μΌλ‘ CPU μμμ λ°°λΆνλ κ²μ CPU μ€μΌμ€λ§(CPU Scheduling)μ΄λΌκ³ ν©λλ€. νλ‘κ·Έλ¨μ μ€ν λ¨κ³ (CPU and I/O Bursts) ν©λ¦¬μ μ΄κ³ ν¨μ¨μ μΈ CPU μμ λ°°λΆμ μν΄ μ΄λ€ νλ‘μΈμ€μκ² CPUλ₯Ό λ¨Όμ ν λΉνλ κ²μ΄.. [μ΄μ체μ ] μ€λ λ (Thread) λ³Έ κ²μκΈμ KOCW μ΄νμ¬μλνκ΅ λ°ν¨κ²½ κ΅μλμ κ°μλ₯Ό λ£κ³ μ 리ν λ΄μ©μ λλ€. κ²μκΈμ ν¬ν¨λλ μ΄λ―Έμ§ μλ£λ κ°μμ ν¬ν¨λ κ°μ μλ£μ λλ€. μ€λ λ(Thread) μ€λ λλ νλ‘μΈμ€λ₯Ό ꡬμ±νλ μ€ν λ¨μμ λλ€. (lightweight processλΌκ³ λ λΆλ¦½λλ€) νλμ νλ‘μΈμ€λ μ¬λ¬ κ°μ μ€λ λλ₯Ό κ°μ§ μ μμΌλ©°(μ΅μ νλλ κ°μ§), μ€λ λλ₯Ό μ΄μ©νλ©΄ νλμ νλ‘μΈμ€μμ μ¬λ¬ λΆλΆμ λμμ μ€νν μ μμ΅λλ€. μ€λ λμ κ΅¬μ± Threadμ ꡬμ±: CPU μνκ³Ό κ΄λ ¨λ μ 보(곡μ νμ§ μλ λΆλΆ) Program Counter Register set Stack space Threadκ° κ³΅μ νλ μμ (= task) λ©λͺ¨λ¦¬ λ΄ Code, Data μμ (= λ©λͺ¨λ¦¬ μ£Όμ 곡κ°) OS resources .. [μ΄μ체μ ] νλ‘μΈμ€ κ΄λ¦¬ λ³Έ κ²μκΈμ KOCW μ΄νμ¬μλνκ΅ λ°ν¨κ²½ κ΅μλμ κ°μλ₯Ό λ£κ³ , μ± μ μ°Έκ³ νμ¬ μ 리ν λ΄μ©μ λλ€. κ²μκΈμ ν¬ν¨λλ μ΄λ―Έμ§ μλ£λ κ°μμ ν¬ν¨λ κ°μ μλ£μ λλ€. νλ‘μΈμ€ κ³μΈ΅κ΅¬μ‘° νλ‘μΈμ€λ μ€ν λμ€ μμ€ν νΈμΆμ ν΅ν΄ λ€λ₯Έ νλ‘μΈμ€λ₯Ό μμ±ν μ μμ΅λλ€. μ΄λ μ νλ‘μΈμ€λ₯Ό μμ±ν νλ‘μΈμ€λ₯Ό λΆλͺ¨ νλ‘μΈμ€(parent process), λΆλͺ¨ νλ‘μΈμ€μ μν΄ μμ±λ νλ‘μΈμ€λ₯Ό μμ νλ‘μΈμ€(child process)λΌκ³ ν©λλ€. λΆλͺ¨ νλ‘μΈμ€λ‘λΆν° μμ±λ μμ νλ‘μΈμ€λ μ€ν κ³Όμ μμ λ λ€λ₯Έ μμ νλ‘μΈμ€λ₯Ό μμ±ν μ μκ³ , κ·Έ μμ νλ‘μΈμ€λ μμ νλ‘μΈμ€λ₯Ό μμ±ν μ μμ΅λλ€. λ§μ μ΄μ체μ λ μ΄μ²λΌ νλ‘μΈμ€κ° νλ‘μΈμ€λ₯Ό λ³λ κ³μΈ΅μ μΈ κ΅¬μ‘°(= νΈλ¦¬ ꡬ쑰)λ‘μ¨ νλ‘μΈμ€λ€μ κ΄λ¦¬ν©λλ€. νλ‘μΈμ€ .. [μ΄μ체μ ] νλ‘μΈμ€ μν λ³Έ κ²μκΈμ KOCW μ΄νμ¬μλνκ΅ λ°ν¨κ²½ κ΅μλμ κ°μλ₯Ό λ£κ³ , μ± μ μ°Έκ³ νμ¬ μ 리ν λ΄μ©μ λλ€. κ²μκΈμ ν¬ν¨λλ μ΄λ―Έμ§ μλ£λ κ°μμ ν¬ν¨λ κ°μ μλ£μ λλ€. νλ‘μΈμ€μ μν νλμ μ»΄ν¨ν°μμ μ¬λ¬ νλ‘μΈμ€λ€μ΄ λΉ λ₯΄κ² λ²κ°μ κ°λ©΄μ μ€νλλ κ³Όμ μμ νλμ νλ‘μΈμ€λ μ¬λ¬ μνλ₯Ό κ±°μΉλ©° μ€νλ©λλ€. κ·Έλ¦¬κ³ μ΄μ 체μ λ νλ‘μΈμ€μ μνλ₯Ό PCBλ₯Ό ν΅ν΄ μΈμνκ³ κ΄λ¦¬ν©λλ€. νλ‘μΈμ€κ° κ°μ§ μ μλ λνμ μΈ μνλ λ€μκ³Ό κ°μ΅λλ€. 1. μμ± μν - new νλ‘μΈμ€κ° μμ± μ€μΈ μνλ₯Ό μμ± μν(new) λΌκ³ ν©λλ€. 2. μ€ν μν - running CPUλ₯Ό ν λΉ λ°μ μ€ν μ€(= instructionμ μν μ€)μΈ μνλ₯Ό μ€ν μν(running)λΌκ³ ν©λλ€. μ°λ¦¬κ° μ¬μ©νλ λλΆλΆμ μ»΄ν¨ν°λ C.. [μ΄μ체μ ] νλ‘μΈμ€ λ³Έ κ²μκΈμ KOCW μ΄νμ¬μλνκ΅ λ°ν¨κ²½ κ΅μλμ κ°μλ₯Ό λ£κ³ μ 리ν λ΄μ©μ λλ€. κ²μκΈμ ν¬ν¨λλ μ΄λ―Έμ§ μλ£ λν ν΄λΉ κ°μμ ν¬ν¨λ κ°μ μλ£μ λλ€. νλ‘μΈμ€λ? νλ‘μΈμ€λ μ€ν μ€μΈ νλ‘κ·Έλ¨μ λλ€. PCB (Process Control Block) PCBλ μ΄μ체μ κ° κ° νλ‘μΈμ€λ₯Ό κ΄λ¦¬νκΈ° μν΄ νλ‘μΈμ€λΉ μ μ§νλ μ 보μ λλ€. μ΄μ체μ λ νλ‘μΈμ€ λΉ PCBλ₯Ό νλμ© λκ³ (컀λ μμμ μμ±) μ΄λ₯Ό μ΄μ©ν΄ λΉ λ₯΄κ² λ²κ°μ μνλλ νλ‘μΈμ€μ μ€ν μμλ₯Ό κ΄λ¦¬νκ³ , νλ‘μΈμ€μ CPUλ₯Ό λΉλ‘―ν μμμ λ°°λΆν©λλ€. PCBμλ μ΄λ€ μ 보λ€μ΄ λ΄κΈΈκΉμ? PCBμ ꡬμ±μ μμ κ·Έλ¦Όκ³Ό κ°μ΅λλ€. (1) OSκ° κ΄λ¦¬μ μ¬μ©νλ μ 보 - Process ID(=PID): νΉμ νλ‘μΈμ€λ₯Ό μλ³νκΈ° μν΄ λΆμ¬νλ κ³ μ ν .. μ΄μ 1 2 λ€μ