νλ‘μΈμ€(Process) 1
μ΄μ체μ νλ‘μΈμ€ κ°λ μ 리
νλ‘κ·Έλ¨?
- νλ‘κ·Έλ¨μ΄λ? μ€νκ°λ₯ν(executable) νμΌ
- μ€ννμΌ, μ΄μ체μ κ° νλ‘μΈμ€λ₯Ό μ΄κΈ°κ΅¬λνλλ° μ¬μ©λλ νμΌ
- 보쑰기μ΅μ₯μΉμ μ μ₯λμ΄μλ μ μ μΈ μν -> μ΄μ체μ κ° μ€νκ°λ₯ν νμΌμ μ½μ΄λ€μ¬μ νλ‘κ·Έλ¨μ μ€ν
νλ‘μΈμ€?
- μ€ννμΌμ΄ λ©λͺ¨λ¦¬μ λ‘λ©λμ΄ μ€νλ μν
- μ£ΌκΈ°μ΅μ₯μΉμ μμ£Όλ νλ‘κ·Έλ¨μ΄ cpuμ μν΄μ μ²λ¦¬λλ μν
- μ€νμ μν΄ λ©λͺ¨λ¦¬μ μ¬λΌμ¨ λμ μΈ μν
- PCB(process control block)μ μ‘΄μ¬λ‘μ λͺ μλλ κ²
- νλ‘μΈμκ° ν λΉλλ κ°μ²΄λ‘μ, λμ€ν¨μΉκ° κ°λ₯ν λ¨μ
- λΉλκΈ°μ νμλ₯Ό μΌμΌν€λ 주체
- cpuκ° ν λΉλλ μ€μ²΄
- μ΄μ체μ κ° κ΄λ¦¬νλ μ΅μμ λ¨μ
- νλ‘κ·Έλ¨κ³Ό λ¬λ¦¬ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό κ°λ λ₯λμ μΈ κ°μ²΄
νλ‘κ·Έλ¨ μ¬λ¬κ° μ€ν β λ€μ€ νλ‘κ·Έλλ°
- μ¬λ¬ νλ‘μΈμ€λ€μ΄ λμμ λ©λͺ¨λ¦¬μ μμ μ μμ
- νλ‘μΈμ€λ μνΈ λ 립μ μΈ λ©λͺ¨λ¦¬ 곡κ°μμ μ€ν
- λ€μ€ μΈμ€ν΄μ€
- κ°μ νλ‘κ·Έλ¨μ΄μ΄λ μ€νλ λλ§λ€ λ 립μ μΈ νλ‘μΈμ€ μμ±
- κ° νλ‘μΈμ€λ λ 립λ λ©λͺ¨λ¦¬ 곡κ°μ κ°μ§κ³ , λ³κ°μ νλ‘μΈμ€λ‘ μ·¨κΈ
Loading
- μ€ννμΌμ΄ λ©λͺ¨λ¦¬μ μ¬λΌκ°λ κ³Όμ
- λ‘λ(loader) : λ©λͺ¨λ¦¬μ Load(μ μ¬) ν΄μ£Όλκ²
- Memory allocation(νλ‘κ·Έλ¨μ μν λ©λͺ¨λ¦¬ κ³΅κ° ν λΉ) β Linking(μΈλΆ λΌμ΄λΈλ¬λ¦¬ μ°Έμ‘°) β Relocation(μλμ£Όμμ μ λμ£Όμλ‘μ λ³ν) β Loading(μ€μ νλ‘κ·Έλ¨κ³Ό λ°μ΄ν°λ₯Ό λ©λͺ¨λ¦¬μ μ μ¬)
- μ λ λ‘λ(Absolute loader)
- νμ κ³ μ λ μμΉμλ§ λ‘λ©λ¨, μ¬λ°°μΉ λ° λ§νΉμ΄ μμ
- λ€μ€ νλ‘κ·Έλλ° x
- μ¬λ°°μΉ λ‘λ(Relocation loader)
- μ£ΌκΈ°μ΅μ₯μΉμ μνμ λ°λΌ λͺ©μ νλ‘κ·Έλ¨μ μ£ΌκΈ°μ΅μ₯μΉ μμμ 곡κ°μ μ μ¬
- λμ λ‘λ(Dynamic loader)
- νμν λΆλΆλ§ μ£ΌκΈ°μ΅μ₯μΉλ‘ μ μ¬νκ³ λλ¨Έμ§ λΆλΆμ 보쑰기μ΅μ₯μΉμ μ μ₯
νλ‘μΈμ€μ μλͺ μ£ΌκΈ°
-
νλ‘μΈμ€λ μλͺ μ£ΌκΈ°λμ μ¬λ¬ μνλ‘ λ³νλ©΄μ μ€νλ¨
보λ₯μν
- νλ‘μΈμ€κ° μ΄λ ν μ΄μ λ‘ μ€νμ΄ λ―Έλ€μ§κ³ , λ©λͺ¨λ¦¬μμ μ«κ²¨λ μν == μ μ₯μ₯μΉμ λμ
νλ‘μΈμ€ κ΄λ¦¬
- νλ‘μΈμ€λ μμ±λΆν° μ’ λ£κΉμ§ 컀λ(μ΄μ체μ )μ μν΄ κ΄λ¦¬λ¨
- νλ‘μΈμ€ μμ±μ£ΌκΈ° κ΄λ¦¬
- νλ‘μΈμ€ λ©νλ°μ΄ν° κ΄λ¦¬
- νλ‘μΈμ€ ν΅μ , λκΈ°ν
- 컨ν μ€νΈ μ€μμΉ(context switching, λ¬Έλ§₯κ΅ν)
PCB(Process Control Block)
- μ΄μ체μ κ° νλ‘μΈμ€λ₯Ό μ μ΄νκΈ° μν΄ νλ‘μΈμ€μ μν μ 보λ₯Ό μ μ₯νλ μλ£κ΅¬μ‘°
- νλ‘μΈμ€λ§λ€ κ³ μ μ PCBκ° μμ±
PCBμ ꡬ쑰
- μ΄μ체μ λ PCBλ€μ PCB table λλ Process tableμ΄λΌλ κ³³μ ν΅ν΄ κ΄λ¦¬
- νλ‘μΈμ€μ Context(νλ‘μΈμ€μ μν, Program Counter, PID λ±)
λ€μ€ νλ‘κ·Έλλ°μ μ리
- μλΆν (Time-slicing)
- νλ‘μΈμ€λ€μκ² λ²κ°μκ°λ©΄μ CPUλ₯Ό μ¬μ©νκ² νμ
- βμ΄λ€ μμβλ‘ λ²κ°μκ°λ©΄μ μμ νκ² ν κ²μΈκ°? β μ€μΌμ₯΄λ§ λ¬Έμ
- μ΄λ»κ² λ²κ°μ κ°κ² νμ§? β Context Switching
λ¬Έλ§₯ κ΅ν(Context Switching)
- ν νλ‘μΈμ€μμ λ€λ₯Έ νλ‘μΈμ€λ‘ CPUλ₯Ό λ겨주λ κ³Όμ
- μ€ν μνμμ λκ°λ νλ‘μΈμ€ : PCBμ νμ¬κΉμ§ μμ λ΄μ©μ μ μ₯
- μ€νμνλ‘ λ€μ΄μ€λ νλ‘μΈμ€ : PCB λ΄μ©μΌλ‘ CPUκ° λ€μ μΈν
CPU μ£Όμ 곡κ°(CPU address space)
- CPU Bus ν¬κΈ°μ μν΄ κ²°μ == Word == CPU μν€ν μ³ ν¬κΈ°
νλ‘μΈμ€ μ£Όμ 곡κ°(μ¬λ¬ νλ‘μΈμ€κ° λλ μ¨μΌνλ λ©λͺ¨λ¦¬ 곡κ°)
- νλ‘μΈμ€κ° μ€ν μ€μ μ κ·Όν μ μλλ‘ νμ©ν μ£Όμμ μ΅λ λ²μ β Segmantation
- ν λΉλ 곡κ°μ λν κ²½κ³ λ μ§μ€ν°μ νκ³ λ μ§μ€ν°λ₯Ό λ²μ΄λλμ§ κ°μ
- CPUμ κ΄μ
- νλ‘μΈμ€ κ΄μ μμλ κ°μ λ©λͺ¨λ¦¬ κ°λ
μ μ© β νλ‘μΈμ€λ μμ μ΄ CPU μ£Όμ κ³΅κ° μ 체λ₯Ό λ
μ νλ κ²μ²λΌ 보μ
- λͺ¨λ νλ‘μΈμ€λ μμ λ§μ κ°μ μ£Όμ 곡κ°μ κ°μ§
- 32bit CPUλ λ Όλ¦¬μ μΌλ‘ 4GB λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°μ κ²μ²λΌ 보μ
- νλ‘μΈμ€ μ£Όμ 곡κ°μ 2λΆλΆμΌλ‘ λλμ΄μ§
- μ¬μ©μ κ³΅κ° User space : μ½λ, λ°μ΄ν°, ν, μ€ν μμ
- 컀λ κ³΅κ° Kernel Space
- νλ‘μΈμ€κ° μμ€ν νΈμΆμ ν΅ν΄ μ¬μ©νλ 컀λ 곡κ°
- 컀λ μ½λ, 컀λ λ°μ΄ν°, 컀λ μ€ν
- 컀λ 곡κ°μ λͺ¨λ μ¬μ©μ νλ‘μΈμ€μ μν΄ κ³΅μ
μ κ°μ 곡κ°μ μ¬μ©ν κΉ?
- λ©λͺ¨λ¦¬μ λν νμ₯μ±
- 물리μ λ©λͺ¨λ¦¬λ νμ μ μ΄μ§λ§, κ°μ λ©λͺ¨λ¦¬λ λ ν° κ³΅κ°μΌλ‘ κ΅¬μ± κ°λ₯
- μ΄κ³Όν λ©λͺ¨λ¦¬λ 보쑰기μ΅μ₯μΉ λ±μ νμ©, κ°μ 곡κ°μ μ μ₯μ₯μΉμ κ΅¬λΆ μμ΄ νλμ κ°μ 곡κ°μΌλ‘ νμ© κ°λ₯ β PageSwap νμ
- λͺ¨λ νλ‘κ·Έλ¨μ λν λμΌν λ©λͺ¨λ¦¬ κ³΅κ° μ 곡
- κ° νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€λ₯Ό μ κ²½ μΈ νμ μμ
- κ° νλ‘μΈμ€κ° λ©λͺ¨λ¦¬ 격리 β 보νΈ
- RTOS(Real Time Operation System) λ±μ κ°μ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νμ§ μκ³ μ§μ μ κ·ΌνκΈ°λ ν¨
νλ‘μΈμ€κ° λ©λͺ¨λ¦¬μ μ¬λΌκ° λ
- μ½λ μμ(ν¬κΈ°κ° compiled time κ²°μ λ¨)
- μ€νλ νλ‘κ·Έλ¨ μ½λκ° μ μ¬λλ μμ
- μ¬μ©μκ° μμ±ν λͺ¨λ ν¨μμ μ½λ λ° νΈμΆν λΌμ΄λΈλ¬λ¦¬ ν¨μλ€μ μ½λ
- μ€νλ νλ‘κ·Έλ¨ μ½λκ° μ μ¬λλ μμ
- λ°μ΄ν° μμ(ν¬κΈ°κ° compiled time κ²°μ λ¨)
- μ μ λ³μ 곡κ°, μ μ λ°μ΄ν°(Static) 곡κ°
- νλ‘μΈμ€ μ μ¬ μ ν λΉ, μ’ λ£μ μλ©Έ
- ν μμ(ν¬κΈ°κ° runtime μ κ²°μ λ¨)
- νλ‘μΈμ€κ° μ€ν λμ€ λμ μΌλ‘ μ¬μ©ν μ μλλ‘ ν λΉλ 곡κ°
- malloc() λ±μΌλ‘ ν λΉ λ°λ 곡κ°μ ν μμμμ ν λΉ
- ν μμμ μλλ²μ§λ‘ λ΄λ €κ°λ©΄μ ν λΉ
- μ€ν μμ(ν¬κΈ°κ° runtime μ κ²°μ λ¨)
- ν¨μκ° μ€νλ λ, μ¬μ©λ λ°μ΄ν°λ₯Ό μν΄ ν λΉλ 곡κ°
- 맀κ°λ³μλ€, μ§μλ³μλ€, ν¨μ μ’ λ£ ν λμκ° μ£Όμλ±
- ν¨μλ νΈμΆλ λ, μ€ν μμμμ μμͺ½μΌλ‘ κ³΅κ° ν λΉ
- ν¨μκ° μ€νλ λ, μ¬μ©λ λ°μ΄ν°λ₯Ό μν΄ ν λΉλ 곡κ°
μ μ΄λ κ² μκ²ΌμκΉ?
- Code μμμ΄ κ΅¬λΆλ μ΄μ
- νλ‘κ·Έλ¨ Codeλ νλ‘κ·Έλ¨μ΄ λ§λ€μ΄μ§κ³ λμλ λ°λ μΌμ΄ μ ν μμ β Read-Only
- κ°μ νλ‘μΈμ€κ° μ¬λ¬ νλ‘μΈμ€λ‘μ μ€νλλ€λ©΄? β μ½λ μμμ 곡μ ν¨μΌλ‘μ λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μΌ μ μμ
- Data μμμ΄ κ΅¬λΆλ μ΄μ
- μ μ λ³μμ μ μ λ³μκ° μ μ₯λλ μμ β λ³μλκΉ Read-Write
- μ μ λ° μ μ λ³μ β νλ‘κ·Έλ¨ κ΅¬λ λμ€ νμ μ κ·Ό κ°λ₯ν΄μΌ ν¨ β νλ‘κ·Έλ¨ μ€νκ³Ό κ΄λ ¨μμ΄ λ 립μ μΈ κ³΅κ° νμ
- Heap μμμ΄ κ΅¬λΆλ μ΄μ
- νλ‘κ·Έλ¨μ΄ μ€ν λμ€μ νμν λλ§λ€ ν λΉ λ°λ κ³΅κ° β μΌλ§λ νμν μ§ λͺ¨λ¦
- Stack μμλ λ§μ°¬κ°μ§λ‘ μΌλ§λ μ¬μ©λ μ§ λͺ¨λ¦ β λμ 곡κ°μμ μ μ°νκ² νμ©
- Stack μμμ΄ κ΅¬λΆλ μ΄μ
- ν¨μλ νλ‘κ·Έλ¨μ μ€ν λ¨μ
- μ€ν ꡬ쑰λ₯Ό μ¬μ©νλ©΄ ν¨μμ νΈμΆ μμμ λ°ν λμ λ±μ κ΄λ¦¬κ° νΈν¨