π νλ‘μΈμ€(Process)
νλ‘μΈμ€λ μ€ν μ€μΈ νλ‘κ·Έλ¨μ μλ―Ένλ€. νλ‘μΈμ€λ μ΄μ체μ μ μν΄ κ΄λ¦¬λλ©°, λ 립μ μΌλ‘ μ€νλκ³ μμμ ν λΉ λ°μ μ μλ λ¨μμ΄λ€. μ΄μ체μ λ νλ‘μΈμ€λ€μκ² μ μ ν μμλ€μ λΆλ°°νμ¬ μ¬λ¬κ°μ§ μμ μ μνν μ μκ² νλ€.
π νλ‘μΈμ€ ꡬ쑰
νλ‘μΈμ€λ₯Ό μ€νμν€κΈ° μν΄μλ μ½λμ λ°μ΄ν°λ₯Ό λ©λͺ¨λ¦¬μ μ¬λ € μ€νμμΌμΌ νλ€. μ΄λ, νλ‘μΈμ€λ§λ€ κ³ μ ν κ°μ λ©λͺ¨λ¦¬ 곡κ°μ μ 곡νλ©°, μ΄ κ³΅κ°μ 4κ°λ‘ λλ μ μλ€.
β code μμ(Text Segment)
- λ΄κ° μμ±ν μ½λκ° μ μ₯λλ 곡κ°μΌλ‘, μ½λλ μ»΄νμΌ λμ΄ 0κ³Ό 1λ‘ λ³νλ κΈ°κ³μ΄κ° μ μ₯λλ€.
β‘ Data μμ(Data Segment)
- λ΄κ° μμ±ν μ½λμμ μ μΈλ μ μ λ³μ, μ μ λ³μ, μμ λ±μ μ μ₯νλ€.
- μ΄κΈ°νλ λ³μμ μ΄κΈ°νλμ§ μμ λ³μλ€μ΄ λλ μ μ μ₯λλ€.
- λ°μ΄ν° μμμ νλ‘κ·Έλ¨μ μμ μ μ΄κΈ°νλλ©°, νλ‘μΈμ€κ° μ’ λ£λ λκΉμ§ μ μ§λλ€.
β’ Stack
- λ΄κ° μμ±ν ν¨μμμ μ§μλ³μ, λ§€κ°λ³μ, return μ£Όμλ€μ μ μ₯νλ€.
- μκ³ λ¦¬μ¦μμ μ¬μ©νλ stack ꡬ쑰λ₯Ό μ¬μ©ν΄μ stackμ΄λΌκ³ λΆλ₯Έλ€. νλ‘μΈμ€λ§λ€ λ 립μ μΈ stackμ κ°μ§ μ μκ³ , stack ν¬μΈν°λ₯Ό ν΅ν΄ μ€νμ μνλ₯Ό κ΄λ¦¬νλ€.
- ν¨μκ° νΈμΆλλ©΄ stack 곡κ°μ΄ μμ±λλ©°, ν¨μκ° μ’ λ£λλ©΄ μ κ±°λλ€.
β£ Heap
- λ΄κ° μμ±ν μ½λμμ λμ μΌλ‘ μμ±λλ λ°μ΄ν° ꡬ쑰λ κ°μ²΄λ€μ μ μ₯νλ€.
- μλ₯Ό λ€λ©΄, κ°μ²΄λ λ°°μ΄μ μμ±νμ λ νλ‘κ·Έλ¨ μ€νλ§λ€ μΌλ§λ§νΌμ λ°μ΄ν°κ° μΆκ°λ μ§ λͺ¨λ₯Έλ€. λ°μ΄ν°κ° μΆκ°λ¨μ λ°λΌ μ λμ μΌλ‘ 곡κ°μ λ릴 μ μλκ² ν μμμ΄λ€.
- νμ λμ μΌλ‘ ν λΉλλ λ©λͺ¨λ¦¬ μμμΌλ‘, νλ‘μΈμ€κ° μ€ν μ€μ λμ μΌλ‘ λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°κ³ ν΄μ νλλ° μ¬μ©λλ€.
- νμ νλ‘μΈμ€μ μ£Όμ 곡κ°μ λλ¨Έμ§ μμμ μμΉνλ©°, ν¬κΈ°λ λμ μΌλ‘ νμ₯λ μ μλ€.
- μ μ λ°μ΄ν° μΉμ μ μ΄κΈ°νλ λ°μ΄ν°μ μ΄κΈ°ν λμ§ μμ λ°μ΄ν°λ₯Ό μ μ₯νλ λ€λ₯Έ μΉμ μΌλ‘ λλλ€.
- main() ν¨μμ μ λ¬λ argc , argvλ λ§€κ°λ³μκ° μ μ₯λλ λ³λμ μΉμ μ΄ μ 곡λλ€.
- int iλ int* valuesλ μ§μλ³μλ‘ μ°μ΄λ―λ‘ stack μΉΈμ λ€μ΄κ°λ κ²μ λ³Ό μ μλ€.
- int x,yλ μ μ λ³μ μ΄λ―λ‘ data ꡬκ°μ λ€μ΄κ°λ€.
- heapμ λμ ν λΉ
π νλ‘μΈμ€μ μν
β νλ‘μΈμ€ μμ±(new)
νλ‘μΈμ€κ° μμ±λ μνμ΄λ€. μμ±λ§ λμκ³ , μμ§ μ€νλκΈ° μν μμμ ν λΉλ°μ§ λͺ»ν μνμ΄λ€.
β‘ μ€ν κ°λ₯(Ready)
νλ‘μΈμ€κ° μ€νμ κΈ°λ€λ¦¬λ μνμ΄λ€. νλ‘μΈμ€κ° νμν μμμ λͺ¨λ ν λΉλ°μμΌλ©°, μ€νμ μν μ€λΉκ° μλ£λμμ§λ§ CPUλ₯Ό ν λΉλ°μ§ λͺ»ν μνμ΄λ€. μ΄ μνμμλ CPUλ₯Ό ν λΉλ°κΈ° μν΄ μ€μΌμ€λ§ λκΈ°μ΄(Queue)μ λ€μ΄κ°κ² λλ€.
β’ μ€ν μν(Running)
νλ‘μΈμ€κ° CPUλ₯Ό ν λΉλ°μ μ€μ λ‘ μ½λλ₯Ό μ€ννλ μνμ΄λ€. μ΄ μνμμλ νλ‘μΈμ€κ° μμ μ μ²λ¦¬νκ³ κ²°κ³Όλ₯Ό λ§λ€μ΄ λΈλ€.
β£ λκΈ°(Blocked)
νλ‘μΈμ€λ₯Ό μ²λ¦¬μ€μ μμ μκ°μ΄ μ΄κ³Όλκ±°λ μμ μ¬μ©μ μν΄ λκΈ°ν΄μΌ νλ μ΄λ²€νΈκ° λ°μν΄μ νλ‘μΈμ€κ° μ μ λ©μΆ μνμ΄λ€. μ΄ μνμμλ CPUλ₯Ό μ¬μ©νμ§ μλλ€. νΉμ μμμ μ¬μ©ν μ μμ λκΉμ§ μ€νμ λ©μΆκ³ , λ€μ λκΈ°μ΄(Ready Queue)λ‘ λ€μ΄κ°κ² λλ©°, νλ‘μΈμ€ μ²λ¦¬ κ°λ₯ μνκ° λλ©΄ μ€ν(Running) μνλ‘ λ³κ²½νλ€.
β€ μ’ λ£(Terminated, exit)
νλ‘μΈμ€μ μ€νμ΄ μλ£λμ΄ μ’ λ£λ μνμ΄λ€. μ΄ μνμμλ ν λΉλ μμμ΄ ν΄μ λκ³ , νλ‘μΈμ€μ λ©λͺ¨λ¦¬ 곡κ°μ μ΄μ체μ μ λ°νλλ€.
π νλ‘μΈμ€μ νλ¦
- new -> ready -> running νλ‘μΈμ€κ° μμ±(New)λλ©΄ Ready μνμ μλ€.μ¬λ¬κ°μ νλ‘μΈμ€λ€μ λλΆλΆ Ready μνμ μκ³ , μ΄μ체μ μ μ€μΌμ€λ§ κΈ°λ²μ λ°λΌ κ·Έ μ€ λ¨ 1κ°λ§ Running μΌλ‘ λ°λ μ μλ€.Running μνκ° λλ©΄ μ€μ CPUλ₯Ό μ΄μ©ν΄μ νκ³ μνλ μΌμ μννλ€.
- running -> waiting -> readyμλ₯Ό λ€μ΄ scanf, read, printf λ± μΈλΆμ₯μΉμ λν΄ μ μΆλ ₯μ μꡬνμ λμ΄λ€.Waitingμ΄ λλλ μμ μ I/O μ΄λ²€νΈ μλ£ μΈν°λ½νΈκ° λ°μλ λμ΄λ€.
- μ΄ μΈν°λ½νΈκ° λ°μλλ©΄ λ€μ ready μνκ° λμ΄ λ€μ μ€μΌμ€λ¬μ μν μ€νμ κΈ°λ€λ¦¬κ² λλ€.
- μ΄ μμ μ κ΅μ₯ν λ리기 λλ¬Έμ CPUλ 무μμ κΈ°λ€λ¦¬λ κ²μ΄ μλλΌ μνλ₯Ό waiting μΌλ‘ λ°κΎΈκ² λλ€.
- running μνμ μλ νλ‘μΈμ€λ κ³μ μ€νλλ κ²μ΄ μλλΌ μ΄λ€ μ‘°κ±΄μ΄ λ§μ‘±λλ©΄ μνκ° λ³κ²½λλ€.
- running -> exit Running μνμ μλ νλ‘μΈμ€μ μ’ λ£λ₯Ό μλ―Ένλ€.
- running -> ready -> running -> ready -> running -> ready ....1ms ~ 10ms λ§λ€ νμ΄λ¨Έ μΈν°λ½νΈκ° λ°μνμ¬ μ΄μ체μ λ νμ¬ μ€νμ€μΈ νλ‘μΈμ€λ₯Ό κ°μ λ‘ μ€μ§λ₯Ό μν¨ λ€ ready μνλ‘ λΉΌλλλ€.κ·Έλ¦¬κ³ ready μνμ μλ λ€λ₯Έ νλ‘μΈμ€λ₯Ό μ€ν μν¨λ€. μ΄ κ³Όμ μ λ§€μ° λΉ λ₯΄κ² μν λ³νλ₯Ό μΌμΌν€λ©° λ°λ³΅λκΈ° λλ¬Έμ λ§μΉ μ¬λ¬κ°μ νλ‘μΈμ€κ° 1κ°μ CPUλ₯Ό κ°μ§κ³ λμμ μ€νλλ κ²μ²λΌ 보μΈλ€.=> μ΄λ₯Ό ν΅ν΄ μ΄μ체μ λ λ©ννμ€νΉ λ©ν°νλ‘μΈμ±μ λ¬μ±νκ² λλ€.
π PCB(Process Control Block)
νλ‘κ·Έλ¨μ΄ μ€νλλ©΄ νλ‘μΈμ€μ μ 보λ₯Ό μ μ₯νλ λ³λμ 곡κ°μ΄ λ°λ‘ μκΈ°κ² λλ€. μ΄μ체μ μ 컀λ(Kernel) λν νλμ νλ‘κ·Έλ¨μ΄λ―λ‘ νλ‘μΈμ€μ κ°μ΄ μ 보λ₯Ό μ μ₯ν μ μλ 곡κ°(stack, data, heap ...)μ΄ μκΈ΄λ€. μ΄λ, 컀λμ λ°μ΄ν°(Data) μμμμλ κ° νλ‘μΈμ€μ μν, CPU μ¬μ©μ μ 보, λ©λͺ¨λ¦¬ μ¬μ© μ 보 λ± κ°μ’ μμμ κ΄λ¦¬νκΈ° μν΄μ PCBλΌλ 곡κ°μ λλ€.
μ¦, PCBλ μ΄μ체μ κ° νλ‘μΈμ€λ₯Ό κ΄λ¦¬νκΈ° μν΄ μ¬μ©νλ λ°μ΄ν° ꡬ쑰μ΄λ€. PCBλ κ° νλ‘μΈμ€λ§λ€ μ μ§λλ©°, ν΄λΉ νλ‘μΈμ€μ μν μ 보μ μ μ΄ μ 보λ₯Ό μ μ₯νλ€. νλ‘μΈμ€κ° μμ±λλ©΄ μ΄μ체μ λ PCBλ₯Ό ν λΉνκ³ , νλ‘μΈμ€κ° μ’ λ£λλ©΄ ν΄λΉ PCBλ₯Ό ν΄μ νλ€.
PCBμλ λ€μκ³Ό κ°μ μ 보λ€μ΄ μ μ₯λλ€.
β νλ‘μΈμ€ μν(Process State)
νλ‘μΈμ€μ νμ¬ μνλ₯Ό λνλΈλ€. μλ₯Ό λ€λ©΄, μ€ν(Running), μ€λΉ(Ready), λκΈ°(Waiting) λ±μ μν λ±μ΄ μλ€. μ΄ μν μ 보λ νλ‘μΈμ€ μ€μΌμ€λ§κ³Ό μνΈμμ©νμ¬ νλ‘μΈμ€μ μ€νμ κ΄λ¦¬νλ€.
β‘ νλ‘κ·Έλ¨ μΉ΄μ΄ν°(Program Counter, PC)
νλ‘μΈμ€κ° λ€μμ μ€νν λͺ λ Ήμ΄(μ½λ)μ μ£Όμλ₯Ό κ°λ¦¬ν€λ ν¬μΈν°μ΄λ€. PCλ νλ‘μΈμ€κ° μ€λ¨λμμ λ λ€μ μμν μμΉλ₯Ό μλ €μ£Όλ μ€μν μν μ νλ€.
β’ λ μ§μ€ν°(Registers)
νλ‘μΈμ€κ° νμ¬ μ€νλλ λμ μ¬μ©λλ λ μ§μ€ν° κ°λ€μ μ μ₯νλ€. μ¬κΈ°μ νλ‘μΈμ€κ° μΌμ μ€λ¨λκ³ λ€μ μ€ν λ λ λ μ§μ€ν° κ°λ€μ 볡μνλ λ° μ¬μ©λλ€.
β£ μ€μΌμ€λ§ μ 보(Scheduling Information)
νλ‘μΈμ€μ μ°μ μμ, ν λΉ λ CPU μκ°, μ€μΌμ€λ§ μκ³ λ¦¬μ¦κ³Ό κ΄λ ¨λ μ 보 λ± μ€μΌμ€λ§μ νμν μ 보λ₯Ό ν¬ν¨νλ€.
β€ λ©λͺ¨λ¦¬ κ΄λ¦¬ μ 보(Memory Management Information)
νλ‘μΈμ€κ° μ¬μ©νλ λ©λͺ¨λ¦¬ 곡κ°μ μ£Όμ λ²μ, νμ΄μ§ ν μ΄λΈ, λ©λͺ¨λ¦¬ ν λΉ μ 보 λ±κ³Ό κ°μ΄ λ©λͺ¨λ¦¬ κ΄λ¦¬μ νμν μ 보λ₯Ό μ μ₯νλ€.
β₯ μ μΆλ ₯ μν(I/O state)
νλ‘μΈμ€κ° νμ¬ μ¬μ© μ€μΈ μ
μΆλ ₯ μ₯μΉμ κ΄λ ¨λ μ 보λ₯Ό ν¬ν¨νλ€. μλ₯Ό λ€μ΄, μ΄λ€ μ
μΆλ ₯ μμ²μ 보λ΄κ³ μλμ§, μ΄λ€ νμΌμ μ΄μ΄λμλμ§ λ±μ μ 보λ₯Ό μ μ₯νλ€.
CPUλ ν νλ‘μΈμ€κ° μ’ λ£λ λκΉμ§ μννλ κ²μ΄ μλλΌ μ¬λ¬ νλ‘μΈμ€λ₯Ό μ€κ° μ€κ°μ λ°κΏκ°λ©΄μ μννλ€.
κ·Έλ¬λ―λ‘ CPUλ μνμ€μΈ νλ‘μΈμ€λ₯Ό λκ° λ, μ΄ νλ‘μΈμ€μ μ 보λ₯Ό μ΄λκ°μ μ μ₯νκ³ μμ΄μΌ λ€μμ μ΄ νλ‘μΈμ€λ₯Ό μνν λ μ΄μ μ μνν κ·Έ λ€μλΆν° μ΄μ΄μ μμ ν μ μλ€. μ΄λ¬ν μ 보λ₯Ό μ μ₯νλ κ³³μ΄ PCBμ΄λ€.
'μ΄μ체μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[OS] IPC(Inter Process Communication)μ μ’ λ₯ (0) | 2024.07.17 |
---|---|
[OS] νλ‘μΈμ€ μμ± λ° μ΄μ / μ’λΉ νλ‘μΈμ€(Zombie Process) μ κ³ μ νλ‘μΈμ€(Orphan Process) (1) | 2024.07.16 |
[OS] λ¬Έλ§₯ κ΅ν(context switch) μ΄λ? (1) | 2024.07.16 |
[OS] λͺ¨λ리μ 컀λκ³Ό λ§μ΄ν¬λ‘컀λ + λ μ΄μ΄ ꡬ쑰 컀λ (0) | 2024.07.01 |
[OS] μμ€ν μ½ (system call) (0) | 2024.07.01 |