Computer Science/π Operating System
[μ΄μ체μ ] IPC(Inter Process Communication) - νλ‘μΈμ€ κ° ν΅μ
IPC(Inter Process Communication) λ 립μ μΈ λ©λͺ¨λ¦¬ 곡κ°μ κ°λ νλ‘μΈμ€ κ°μ ν΅μ κΈ°λ² ν νλ‘μΈμ€κ° λ€λ₯Έ νλ‘μΈμ€μ μμμ μ¬μ©νκΈ° μν΄ λμμ μ κ·Ό κ°λ₯ν λ©λͺ¨λ¦¬ μ¦, νλ‘μΈμ€λ€μ΄ 곡μ νλ λ©λͺ¨λ¦¬κ° νμ 컀λ μμμμ IPCλΌλ λ΄λΆ νλ‘μΈμ€ κ° ν΅μ μ€λΉλ₯Ό μ 곡 1. 곡μ λ©λͺ¨λ¦¬ (Shared Memory) 곡μ λ©λͺ¨λ¦¬(Shared Memory)κ° λ°μ΄ν° μ체λ₯Ό 곡μ νλλ‘ μ€λΉ νλ‘μΈμ€κ° 곡μ λ©λͺ¨λ¦¬ ν λΉμ 컀λμ μμ²νλ©΄ 컀λμ ν΄λΉ νλ‘μΈμ€μ λ©λͺ¨λ¦¬ 곡κ°μ ν λΉ λͺ¨λ νλ‘μΈμ€λ 곡μ λ©λͺ¨λ¦¬μ μ κ·Όν μ μμ Textμ Data μμ μ¬μ΄ 곡μ λ©λͺ¨λ¦¬ ν¬μΈν κ³΅κ° (κ° νλ‘μΈμ€κ° λ©λͺ¨λ¦¬ μμμ 첨λΆλλ λ°©μ) νλ‘μΈμ€ κ° Read, Writeλ₯Ό λͺ¨λ νμλ‘ ν λ μ¬μ© ..
[μ΄μ체μ ] PCBμ λ¬Έλ§₯ κ΅ν(Context Switching)
PCB (Process Control Block) μ΄μ체μ κ° μμ€ν λ΄μ νλ‘μΈμ€λ€μ κ΄λ¦¬νκΈ° μν΄ νλ‘μΈμ€λ§λ€ μ μ§ν΄μΌνλ μ 보λ€μ λ΄λ 컀λ λ΄ μλ£κ΅¬μ‘° 컀λ μ£Όμ 곡κ°μ data μμμ μ‘΄μ¬ νλ‘μΈμ€μ λ©ν λ°μ΄ν°λ€μ΄ μ μ₯λλ κ³³ Process ID Process μν CPU Regiter κ° CPU μ€μΌμ€λ§ μ 보 λ©λͺ¨λ¦¬ μ¬μ©/κ΄λ¦¬ μ 보 λ±λ± Linked List λ°©μμΌλ‘ κ΄λ¦¬ PCB μμ±λ§λ€ PCB List Headμ μ£Όμκ°μΌλ‘ μ°κ²° PCBκ° νμν μ΄μ CPUμμλ νλ‘μΈμ€μ μνμ λ°λΌ μ£ΌκΈ°μ μΌλ‘ νλ‘μΈμ€λ₯Ό κ΅μ²΄ν΄μ£Όλ μμ μ΄ νμνλ€. μ΄λ₯Ό λ¬Έλ§₯ κ΅ν(Context Switching)μ΄λΌκ³ νλ€. λ¬Έλ§₯ κ΅ν μ νμ¬ CPU μμμ μ€νλκ³ μλ νλ‘μΈμ€μ μ 보(λ¬Έλ§₯)μ μμ μ PCBμ μ μ₯νκ³ ..
[μ΄μ체μ ] μ μ λͺ¨λ(User-Mode)μ 컀λλͺ¨λ(Kernel-Mode), μΈν°λ½νΈ(Interrupt)μ μμ€ν μ½(System Call)
μ μ λͺ¨λ(User-Mode)μ 컀λ λͺ¨λ(Kernel-Mode) 컀λμμλ μ€μν μμμ κ΄λ¦¬νκΈ° λλ¬Έμ μ¬μ©μκ° ν΄λΉ μμμ μ½κ² μ κ·Όνμ§ λͺ»νλλ‘ λ³΄νΈνκΈ° μν΄ λλ¨ μμ€ν μ μ€μν μν₯μ λ―ΈμΉλ μ°μ°μ 컀λ λͺ¨λμμλ§ μ€νλλλ‘ ν¨μΌλ‘μ¨ νλμ¨μ΄ 보μ μ μ§ νλ‘μΈμ€κ° μ€νλλ λμ μ μ λͺ¨λμ 컀λ λͺ¨λλ₯Ό λ°λ³΅μ μΌλ‘ λλλ¬ μ μ μ ν리μΌμ΄μ μ μμ€ν μλΉμ€λ₯Ό νΈμΆν λ μ μ λͺ¨λμμ 컀λ λͺ¨λλ‘ μ ν μ μ /μ¬μ©μ λͺ¨λ μ¬μ©μκ° μ κ·Όν μ μλ μμμ μ νμ μΌλ‘ λκ³ νλ‘κ·Έλ¨μ μμμ ν¨λΆλ‘ μ κ·Όνμ§ λͺ»νλλ‘ νλ λͺ¨λ νλμ¨μ΄ μ§μ μ κ·Ό λΆκ°λ₯ μ½λ μμ±, νλ‘μΈμ€ μ€ν λͺ λ Ή λ± μ€ν κ°λ₯ μ μ μ ν리μΌμ΄μ μ½λκ° μ€ν 컀λ λͺ¨λ λͺ¨λ μμ€ν λ©λͺ¨λ¦¬ λ± νλμ¨μ΄μ μ§μ μ κ·Ό κ°λ₯ λͺ¨λ CPU λͺ λ Ή..
[μ΄μ체μ ] λκΈ°/λΉλκΈ°(Sync/Async), λΈλ‘νΉ/λ ΌλΈλ‘νΉ(Blocking/Non-Blocking)
λκΈ°/λΉλκΈ°? λΈλ‘νΉ/λ ΌλΈλ‘νΉ? λκΈ°μ λΉλκΈ°, λΈλ‘νΉκ³Ό λ ΌλΈλ‘νΉμ κ°λ μ μ μ¬νκ² λκ»΄μ§ μ μμ§λ§ μλ‘ λ°λ‘보λ κ΄μ μ λ¬λ¦¬νκ³ μλ€. λκΈ°/λΉλκΈ°λ μΌμ μ²λ¦¬νλ μμ(μμ )μ κ²°κ³Ό(μ²λ¦¬)μ κ΄λ ¨μλ κ°λ μΌλ‘ μ΄μ μμ μ’ λ£μ λμμ μμνλ©΄ λκΈ°, κ·Έλ μ§ μμΌλ©΄ λΉλκΈ°λ‘ κ΅¬λΆνλ€. λΈλ‘νΉ/λ ΌλΈλ‘νΉμ μ μ΄κΆκ³Ό κ΄λ ¨μλ κ°λ μΌλ‘ ν¨μ νΈμΆ μ μ μ΄κΆμ΄ λμ΄κ°λ©΄ λΈλ‘νΉ, κ·Έλ μ§ μκ³ μμ μ ν μΌμ μ§μνλ©΄ λ ΌλΈλ‘νΉμΌλ‘ ꡬλΆνλ€. λκΈ°(Synchronous) μμ μ λμμ μννκ±°λ λμμ λλκ±°λ λλλ λμμ μμν¨ μμ² μμ μ μ’ λ£ μμ κ³Ό λλ¨Έμ§ μμ μμ² μμ μμ μ λμμ± νΈμΆν ν¨μμ μμ μλ£ μλ΅μ΄ νμν΄ μμ μλ£ μ¬λΆλ₯Ό κ³μν΄μ 묻거λ μλ΅μ κΈ°λ€λ¦Ό νΈμΆν ν¨μμ μμ μλ£ μ¬λΆμ λν΄..
[μ΄μ체μ ] νλ‘μΈμ€ λ©λͺ¨λ¦¬ ꡬ쑰 - Code, Data, Heap, Stack
νλ‘μΈμ€ λ©λͺ¨λ¦¬ ꡬ쑰 Code(Text) μ¬μ©μκ° μμ±ν νλ‘κ·Έλ¨ μ½λκ° μ μ₯λλ κ³΅κ° μνν μ μλ κΈ°κ³μ΄ λͺ λ Ήμ ννλ‘ λ³νλμ΄ μ μ₯ λ³κ²½μ΄ λΆκ°λ₯ν Read-Only Data μ μ λ³μλ static λ³μ λ± νλ‘κ·Έλ¨μ΄ μ¬μ©νλ λ°μ΄ν°λ₯Ό μ μ₯νλ κ³΅κ° μ μ λ³μλ static λ³μλ₯Ό μ°Έμ‘°ν μ½λ λΆλΆμ μ»΄νμΌμ΄ μλ£λλ©΄ data μμ λ΄μ ν΄λΉ μ£Όμκ°μ κ°λ¦¬ν€λλ‘ λ³κ²½λ¨ μ μ λ³μκ° μ μ₯λλ 곡κ°μ Data μμκ³Ό BSS μμμΌλ‘ λλ¨ Data: μ΄κΈ°ν λ μ μ λ³μ BSS: μ΄κΈ°ν λμ§ μμ μ μ λ³μ μ»΄νμΌ μ λ°μ΄ν°κ° μ μ₯λλ©° νλ‘κ·Έλ¨ μ’ λ£ μ μμ λ¨ μ μ λ³μμ κ°μ΄ λ³κ²½λ μ μμΌλ―λ‘ Read-Write Heap νλ‘κ·Έλλ¨Έκ° νμν λλ§λ€ μ¬μ©ν μ μλ λ©λͺ¨λ¦¬ κ³΅κ° λμ μΌλ‘ λ©λͺ¨λ¦¬λ₯Ό ν ..
[μ΄μ체μ ] νλ‘μΈμ€μ μ€λ λ, λ©ν° νλ‘μΈμ€μ λ©ν° μ€λ λ
νλ‘μΈμ€(Process) νλ‘κ·Έλ¨μ΄ λ©λͺ¨λ¦¬λ‘ μ¬λΌμ μ΄μ체μ λ‘λΆν° CPUλ₯Ό ν λΉλ°κ³ μ€νλκ³ μλ μν CPU μ€μΌμ€λ§μ λμμ΄ λλ μμ μ νλ¦μ μ§μΉ νλμ νλ‘κ·Έλ¨(μ ν리μΌμ΄μ )μ νλ μ΄μμ νλ‘μΈμ€λ₯Ό κ°μ§ κ° νλ‘μΈμ€λ λ³λμ μ£Όμ 곡κ°μμ μ€νλκ³ νλ‘μΈμ€λΌλ¦¬ μ§μμ 곡μ νμ§ μκΈ° λλ¬Έμ λ€λ₯Έ νλ‘μΈμ€μ λ³μλ μλ£κ΅¬μ‘°μ μ κ·Όν μ μμ νλ‘μΈμ€λ κ°κ° λ 립λ λ©λͺ¨λ¦¬ μμ(Code, Data, Stack, Heap)μ ν λΉ λ°μ μ€λ λ(Thread) νλ‘μΈμ€ λ΄μμ μ€νλλ νλ¦μ λ¨μ νλμ νλ‘μΈμ€λ νλ μ΄μμ μ€λ λλ₯Ό κ°μ§ κ°κ°μ μ€λ λλ νλ‘μΈμ€ λ΄μμ Stack μμλ§ λ°λ‘ ν λΉλ°κ³ Code, Data, Heap μμμ μλ‘ κ³΅μ ν¨ λ©ν°νλ‘μΈμ€(Multi-Process) νλμ μ ν..