[μ΄μ체μ ] νλ‘μΈμ€
μ©μ΄ μ€λͺ
1. μ€ν λ¨μ : cpu coreμμ μ€ννλ νλμ λ¨μλ‘, νλ‘μΈμ€μ μ€λ λλ₯Ό ν¬κ΄νλ κ°λ
2. νλ‘μΈμ€ : νλμ μ€λ λλ§ κ°μ§κ³ μλ λ¨μΌ μ€λ λ νλ‘μΈμ€
3. λμμ± : ν μκ°μ μ¬λ¬κ°μ§ μΌμ΄ μλλΌ, 짧μ μ νμΌλ‘ μ¬λ¬κ°μ§ μΌμ λμμ μ²λ¦¬νλ κ²μ²λΌ 보μ΄λ κ²
4. νλ‘κ·Έλ¨
- μ΄λ€ μμ μ μν΄ μ΄μ체μ μμμ μ€νν μ μλ νμΌ
- μ»΄νμΌ μ½λ, μ μλ³μ, λ¬Έμμ΄, λ¬Έμμ΄ μμ λ± μ μ λ°μ΄ν°λ₯Ό ν¬ν¨νλ μ μ κ°μ²΄
5. νλ‘μΈμ€
- μ΄μ체μ μμμ μ€ν μ€μΈ νλ‘κ·Έλ¨
- λ©λͺ¨λ¦¬ ꡬ쑰λ₯Ό μ΄λ£¨κ³ , νλ‘κ·Έλ¨ μΉ΄μ΄ν°λ λ μ§μ€ν°μ²λΌ νμ¬ μ΄λ€ μμμ μ¬μ©νλμ§ μ λ³΄κ° λ€μ΄ μλ λμ κ°μ²΄
6. νλ‘μΈμ : νλ‘μΈμ€κ° λμνλλ‘ νλ νλμ¨μ΄(= CPU)
νλ‘μΈμ€μ λ©λͺ¨λ¦¬ ꡬ쑰 (4κ°μ§ μμ)
- νλ‘κ·Έλ¨μ΄ λμν λ νμν CPU, λ©λͺ¨λ¦¬, I/Oμ₯μΉ, νμΌ λ± μμμ ν λΉλ°μ ν λμνλ€.
- νλ‘κ·Έλ¨ μ€νμ μν λ©λͺ¨λ¦¬λ₯Ό ν λΉ λ°κ³ , νλ‘κ·Έλ¨μ λͺ
λ Ήμ΄μ λ°μ΄ν°κ° λ©λͺ¨λ¦¬ 곡κ°μΌλ‘ λ‘λ(Load)λλ©΄,
νλ‘κ·Έλ¨μ νλ‘μΈμ€λΌκ³ λΆλ¦°λ€. - νλ‘κ·Έλ¨μ΄ λ©λͺ¨λ¦¬ 곡κ°μ λ‘λ(Load)λμ΄ CPUκ° λͺ λ Ήμ΄λ€μ μμ°¨μ μΌλ‘ μ²λ¦¬νλ€.
1. Code : μ€ν λͺ λ Ήμ ν¬ν¨νλ νλ‘κ·Έλ¨μ μ½λ
2. Data : μ μ λ³μ ex) static λ³μ, global λ³μ
3. Heap : λμ ν λΉ λ°μ΄ν° ex) new Object(), malloc()
4. Stack : μ§μλ³μ, 맀κ°λ³μ, λ°νκ°, νΈμΆλ ν¨μ λ± μμ λ°μ΄ν°
PCB (Process Control Block)
- μ΄λ€ νλ‘μΈμ€λ₯Ό μ΄λκΉμ§ μμ νλμ§ μ μ μμ΄μΌ νλ€.
- λ°λΌμ νλ‘μΈμ€ μμ± μ, νλ‘μΈμ€μ λν μ 보λ₯Ό λ΄κ³ μλ PCB λΈλμ΄ ν¨κ» μμ±λλ€.
- PCBλ νλ‘μΈμ€λ₯Ό μ μ΄νκΈ° μν μ 보 λͺ¨μμ§μ΄λ€.
1. ν¬μΈν° (Pointer)
- νλ‘μΈμ€ μν μ€μ μ€λΉμνλ λκΈ°μνμ νλ₯Ό ꡬννκΈ° μν ν¬μΈν°μ΄λ€.
2. νλ‘μΈμ€ μν (Process State)
- νλ‘μΈμ€μ νμ¬ μνλ₯Ό λνλΈλ€.
3. νλ‘μΈμ€ λ²νΈ (PID, Process ID, Process Number)
- νλ‘μΈμ€μ κ΅¬λΆ κΈ°μ€μ΄ λλ κ³ μ IDμ΄λ€.
4. νλ‘κ·Έλ¨ μΉ΄μ΄ν° (PC, Program Counter)
- νλ‘μΈμ€ μνμ μν λ€μ λͺ λ Ήμ΄μ μ£Όμλ₯Ό νμνλ€.
5. λ μ§μ€ν° (Register)
- μ΄μ μ μμ νλ λ΄μ©μ΄λ€.
- μ€νμνμμ λ€λ₯Έ μνλ‘ μ μ΄λλ κ²½μ° CPUμ λ μ§μ€ν° μ 보λ₯Ό μ΄κ³³μ μ μ₯μμΌμ λμ€μ λ€μ μ€νμνλ‘ μ μ΄λ λ 볡ꡬ μμΌ νλ‘μΈμ€μ μ νν μνμ μ΄μ΄λκ°λ€.
6. λ©λͺ¨λ¦¬
- νλ‘μΈμ€μ μ£Όμ 곡κ°μ΄λ€.
- νλ‘μΈμ€κ° μ μ₯λ μ£Όμμ κ°μ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νλ κ²½μ°μλ κ°μμ£Όμμ μ€μ μ£Όμμ μ¬μ(mapping) μ 보, κΈ°μ€ λ μ§μ€ν°(base register)μ κ²½κ³ λ μ§μ€ν°(bound register) λ±μ μ 보λ₯Ό ν¬ν¨νλ€.
7. νλ‘μΈμ€ μ°μ μμ
- μ°μ μμ, μ΅μ’ μ€νμκ°, CPU μ μ μκ° λ± CPU μ€μΌμ€λ§ μ 보μ΄λ€.
- μ€μΌμ€λ§ μ μ΄λ€ μμ μ μ νν κ²μΈκ°λ₯Ό κ²°μ νλ€.
νλ‘μΈμ€κ° ꡬ체μ μΌλ‘ μ΄λ»κ² μ€νλλκ°?
- CPU(νλ‘μΈμ)λ νμκ°μ νλμ νλ‘μΈμ€λ§ μ€νκ°λ₯νλ€.
- λ€μμ νλ‘μΈμ€λ₯Ό λμμ μ€ννκΈ° μν΄, λ€μμ νλ‘μΈμ€λ₯Ό μλΆν λ‘, μ¦ μ§§μ ν μΌλ‘ λ°λ³΅ μ νν΄μ μ€ννλ€.
νλ‘μΈμ€ μν
- μμ±μν -> μ€λΉμν
- 미리 μ μλ μ μ± μ λ°λΌ μ€μΌμ€λ¬μ μν΄ νΈμΆ, μ΄λ λ©λͺ¨λ¦¬μ μ΄μ© κ°λ₯μ±κ³Ό μ΄λ€ μ₯μΉκ° μꡬλλμ§λ₯Ό κ²μ¬νλ€.
- μ€λΉμν -> μ€νμν (dispatch)
- μ¬μ μ μ μλ μκ³ λ¦¬μ¦(FCFS, SJF, SRT, RRλ±)μ λ°λΌ μ€μΌμ€λ¬μ μν΄ μ²λ¦¬λλ€. μ΄ κ³Όμ μ λμ€ν¨μΉλΌκ³ νλ€.
- μ€νμν -> μ€λΉμν (timeout)
- ν λΉμκ°μ λ§λ£λ μ°μ μμ μκ³ λ¦¬μ¦μ ννκ³ μλ μμ€ν μμ λμ μ°μ μμμ νλ‘μΈμ€κ° μ€λ κ²½μ° μ€μΌμ€λ¬μ μν΄ μ²λ¦¬λλ€.
- μ€νμν -> λκΈ°μν (block)
- READ, WRITE λλ λ€λ₯Έ I/O μꡬ, νμ΄μ§ κ΅νμ μꡬνλ μμ κ°μ λͺ λ Ή λ±μ μνμ¬ μΌμ΄λλ€.
- μ΄λ¬ν μμ μ μλμ μΌλ‘ μ€λ μκ°μ΄ 걸리기 λλ¬Έμ κ·Έλμ CPUλ₯Ό λ€λ₯Έ νλ‘μΈμ€μ ν λΉνμ¬ νμ©νκΈ° μν¨μ΄λ€.
- λκΈ°μν -> μ€λΉμν (wakeup)
- I/O μ₯μΉ κ΄λ¦¬μμ μ νΈμ μν΄ μΌμ΄λλ€.
- νμ΄μ§ κ΅νμ κ²½μ° νμ΄μ§ μΈν°λ½νΈ νΈλ€λ¬κ° λ©λͺ¨λ¦¬μ κ·Έ νμ΄μ§κ° μλ€λ μ νΈλ₯Ό 보λ΄κ² λλ©°, νλ‘μΈμ€λ μ€λΉ νμ λμ΄κ² λλ€.
- μ€νμν -> μ’
λ£μν
- νλ‘μΈμ€λ₯Ό μ±κ³΅μ μΌλ‘ λλ§μΉ κ²½μ°, νΉμ μ΄μ체μ κ° μλ¬ λ°μμ κ°μ§νκ³ νλ‘μΈμ€λ₯Ό κ°μ λ‘ μ’ λ£μν¨ κ²½μ°μ μ€μΌμ€λ¬μ μν΄ μ€νλλ€.
νλ‘μΈμ€μ 컨ν μ€νΈ μ€μμΉ
- λμμ μ€ννκ³ μΆμ νλ‘μΈμ€ λ κ°κ° μμ λ, λ νλ‘μΈμ€λ₯Ό 짧μ ν μΌλ‘ μ ννλ©° μ€ννλ€.
λ©ν° νλ‘μΈμ€
- λΆλͺ¨ νλ‘μΈμ€κ° fork()λ₯Ό νμ¬ μμ νλ‘μΈμ€λ₯Ό μ¬λ¬ κ° λ§λ€μ΄ μμ μ μ²λ¦¬νλ€.
- μμ νλ‘μΈμ€λ λΆλͺ¨μ λ³κ°μ λ 립μ μΈ λ©λͺ¨λ¦¬ μμμ ν보νλ€.
- ex) ν μ΄ν리μΌμ΄μ
μμ μ¬λ¬κ°μ§ μΌμ μ²λ¦¬ν λ
- μ¬λ¬ μ¬μ©μκ° λ‘κ·ΈμΈμ μμ²νλ μν©μ΄λΌλ©΄
- ν νλ‘μΈμ€λ λ§€λ² νλμ λ‘κ·ΈμΈλ§ μ²λ¦¬ν μ μμΌλ―λ‘, λμμ μ²λ¦¬ν μ μλ€.
λ©ν° νλ‘μΈμ€μ λ¬Έμ μ
1. μ€νλλ νλ‘μΈμ€μ λ³κ²½κ³Όμ μμ λ°μνλ 컨ν μ€νΈ μ€μμΉμ μμ€ν μ λΆλ΄μ μ€λ€
- μ€νμ€μΈ νλ‘μΈμ€κ° λ³κ²½λλ©΄ CPU λ΄μ μ‘΄μ¬νλ λ μ§μ€ν°λ€μ κ°μ΄ λ³κ²½λλ€.
- κ·Έλ λ€κ³ μμ κ·Έ νλ‘μΈμ€ μ€νμ΄ μ’ λ£λλ κ²μ΄ μλκΈ° λλ¬Έμ, μ§κΈ λ μ§μ€ν°λ€μ΄ κ°μ§κ³ μλ κ°μ μ΄λκ°μ μ μ₯ν΄μΌ νλ€.
- λ λ³κ²½λμ΄ μ€νλλ νλ‘μΈμ€κ° μλ‘ μ€νλλ κ²μ΄ μλλΌλ©΄, μ΄μ μ λ μ§μ€ν°λ€μ΄ κ°μ§κ³ μλ λ°μ΄ν°λ₯Ό 볡μμμΌμΌ νλ€.
- μ΄ κ³Όμ μμ μ΄μ λ μ§μ€ν° μ 보λ λ©λͺ¨λ¦¬μ μ μ₯λκ³ λ³κ²½λμ΄ μ€νλλ νλ‘μΈμ€μ μ 보λ CPUμ λ μ§μ€ν°μ 볡μμν¨λ€.
2. νλ‘μΈμ€λ κ°μ μκΈ°λ§μ λ 립μ μΈ λ©λͺ¨λ¦¬ μμμ κ°μ§κ³ μλ€.
- λ°λΌμ λ€λ₯Έ νλ‘μΈμ€μ μ 보λ₯Ό κ°μ Έμ€λ €λ©΄ ν΅μ (IPC)μ΄ νμνλ€.
μ€λ λ
- ν νλ‘μΈμ€ λ΄μμ ꡬλΆμ§μ΄μ§ μ€ν λ¨μμ΄λ€.
- νλ‘μΈμ€κ° λ€μμ μ€λ λλ‘ κ΅¬λΆλμ΄μμ§ μμΌλ©΄, λ¨μΌ μ€λ λ νλλ‘ νλ‘μΈμ€κ° μ€νλλ€. μ¦, νλ‘μΈμ€μ νλλ°μ μλ μ€λ λκ° μ€ν λ¨μκ° λλ κ²μ΄λ€.
- μμ κ²½μ° ν΅μμ μΌλ‘ νλ‘μΈμ€λ₯Ό μ€ν λ¨μλ‘ λ³Έλ€.
μ€λ λμ 컨ν μ€νΈ μ€μμΉ
- νλμ νλ‘μΈμ€ μμ λ€μμ μ€λ λκ° μμ λ, 곡μ νλ μμμ΄ μλ€.
- μ€λ λλ μ½λ, λ°μ΄ν°, ν μμμ 곡ν΅λ μμμΌλ‘ 곡μ ν΄μ μ¬μ©νλ€.
- κ° μ€λ λλ μ€ν μμλ§μ λ°λ‘ κ°μ§κ³ μλ€.
- 곡μ νλ μμμ΄ μκΈ° λλ¬Έμ, 컨ν μ€νΈ μ€μμΉμ΄ μΌμ΄λ λ *μΊμ μ μ€λ₯ μ΄ μ¬λΌκ°λ€.
- 컨ν μ€νΈ μ€μμΉλ₯Ό ν λ λͺ¨λ μμμ λμμΌλ‘ νμ§ μκΈ° λλ¬Έμ ν¨μ¨μ μ΄λ€.
* μΊμ μ μ€λ₯ (Hit Rate)
- μνλ μ λ³΄κ° μΊμ λ©λͺ¨λ¦¬μ κΈ°μ΅λμ΄ μμ λ μ μ€(Hit), κΈ°μ΅λμ΄ μμ§ μμΌλ©΄ μ μ€νμ§ λͺ»ν κ²μ΄λ€.
- μ μ€λ₯ μ μΊμ κΈ°μ΅μ₯μΉκ° μλ μ»΄ν¨ν°μ μ±λ₯μ λνλ΄λ μ²λλ‘ μ΄μ©λλ€.
- μ μ€λ₯ μ΄ 0.95~0.99μΌ λ μ°μνλ€κ³ λ³Έλ€.
- μ μ€λ₯ = μ μ€ νμ / μ΄ μ κ·Ό νμ
λ©ν° μ€λ λ
- νλ‘μΈμ€ λ΄μμ λΆλ¦¬ν΄μ μ¬λ¬ μ€λ λλ‘ μ€νλ¨μκ° λλμ΄μ§ κ²½μ°λ₯Ό λ§νλ€.
- ex) ν μ΄ν리μΌμ΄μ
μ λν μμ
μ λ¨μκ° λλμ΄μ§λ κ²½μ°
- μΈν 리μ μ΄μμ μμ€μ½λλ₯Ό μμ νλ λμμ, μΆμ²μ½λλ 보μ¬μ£Όκ³ , ν μ€νΈλ λλ¦¬κ³ , ...
- μ΄ λ κ°κ°μ μ€λ λκ° κ·Έ μμ μ λ΄λΉνλ€.
λ©ν° μ€λ λμ λ¨μ
- Internet Explorer : ν μ€λ λ, ν νμ λ¬Έμ κ° μκΈ°λ©΄ μ 체 νλ‘μΈμ€μ μν₯μ λΌμΉλ€.
- Chrome : λ©ν° νλ‘μΈμ€λ₯Ό μ΄μ©νλ―λ‘ λ©ν°ν κ°μ μν₯μ λ λ°λλ€.
Concurrency vs Parallelism (μ§λ μ£Ό μ§λ¬Έ)
μΆμ²
1. [μ°μνTech] π· μ½λ€μ Process vs Thread https://www.youtube.com/watch?v=1grtWKqTn50
2. [μ°μνTech] π©π»π¨π» μͺΌλ°λ¦¬μ μ€κ΅¬μ Process vs Thread https://www.youtube.com/watch?v=DmZnOg5Ced8
3. [μ΄λ€ νλ‘κ·Έλλ¨Έ] 05. νλ‘μΈμ€μ μμ±κ³Ό μλ©Έ https://popcorntree.tistory.com/56
4. νλ‘κ·Έλ¨μ μ€ν κ³Όμ https://scriptplay.tistory.com/284
5. νλ‘μΈμ€μ κ°μκ³Ό κ΅¬μ± https://hyuntaekhong.github.io/blog/OperatingSystem02/
6. [μ½λ©μ€ννΈ] https://coding-start.tistory.com/198
7. μΊμλ©λͺ¨λ¦¬ μ μ€λ₯