
νλ‘μΈμ€: νλ‘κ·Έλ¨μ λ©λͺ¨λ¦¬ μμμ μ€ν μ€μΈ μμ
μ€λ λ: νλ‘μΈμ€ μμμ μ€νλλ μ¬λ¬ νλ¦ λ¨μ
κΈ°λ³Έμ μΌλ‘ νλ‘μΈμ€λ§λ€ μ΅μ 1κ°μ μ€λ λ(λ©μΈ μ€λ λ ν¬ν¨)λ₯Ό μμ ν©λλ€. νλ‘μΈμ€κ° μμ±λλ©΄ λ©λͺ¨λ¦¬μ κ°κ° λ³λμ 'νλ‘μΈμ€ μ£Όμ 곡κ°'μ΄ ν λΉλ©λλ€(λ 립μ ).
public class MemoryExample {
// μ μ λ³μ (μ μ λ³μ)
static int globalVar = 10; // Data Segment (μ΄κΈ°νλ λ°μ΄ν°)
public static void main(String[] args) {
// μ§μ λ³μ
int localVar = 20; // Stack Segment
// κ°μ²΄ μμ± (λμ ν λΉ)
MemoryExample example = new MemoryExample(); // Heap Segment
// λ©μλ νΈμΆ
example.method(localVar); // Stack Segment (λ§€κ°λ³μ)
}
public void method(int param) {
// μ§μ λ³μ
int result = param + globalVar; // Stack Segment (μ§μ λ³μ)
System.out.println("Result: " + result);
}
}
λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μ΄κΈ° μν΄ λ°μ΄ν°λ₯Ό μ΅λν 곡μ ν μ μλλ‘ μ€κ³λμμ΅λλ€. μ½λ μμμ κ°μ νλ‘κ·Έλ¨ λ΄μμ λμΌν λ΄μ©μ κ°μ§λ―λ‘ κ³΅μ κ΄λ¦¬κ° κ°λ₯ν©λλ€. μ€νκ³Ό λ°μ΄ν° μμμ λλ μ΄μ λ μ€ν ꡬ쑰μ νΉμ±κ³Ό μ μ λ³μμ νμ©μ±μ κ·ΉλννκΈ° μν¨μ λλ€.
μ¦, νλ‘κ·Έλ¨μ ν¨μμ μ§μ λ³μλ LIFO(Last In, First Out) νΉμ±μ κ°μ§ μ€νμμ μ€νλλ―λ‘, μ μ λ³μλ₯Ό λ°λ‘ μ§μ νλ©΄ λ©λͺ¨λ¦¬λ₯Ό μλ μ μμ΅λλ€.
μ€λ λλ Stackλ§ λ°λ‘ ν λΉλ°κ³ λλ¨Έμ§ μμμ μλ‘ κ³΅μ ν©λλ€.
νλμ νλ‘μΈμ€κ° μμ±λ λ κΈ°λ³Έμ μΌλ‘ νλμ μ€λ λκ° μμ±λ©λλ€.
νλ‘μΈμ€λ κ³ μ 곡κ°κ³Ό μμμ ν λΉλ°μ μ¬μ©νλ λ°λ©΄, μ€λ λλ λ€λ₯Έ μ€λ λμ 곡κ°, μμμ 곡μ νλ©΄μ μ¬μ©νλ μ°¨μ΄κ° μμ΅λλ€.
νλμ νλ‘κ·Έλ¨μ μ¬λ¬ κ°μ νλ‘μΈμ€λ‘ ꡬμ±νμ¬ κ° νλ‘μΈμ€κ° λ³λ ¬μ μΌλ‘ μμ μ μννλ κ².
μ₯μ : OSκ° λ
립μ μΈ λ©λͺ¨λ¦¬λ₯Ό ν΅ν΄ 체κ³λ₯Ό κ΄λ¦¬ν΄ μ£ΌκΈ° λλ¬Έμ μμ μ μ
λλ€.
λ¨μ : κ°κ° λ
립λ λ©λͺ¨λ¦¬ μμμ κ°κ³ μμ΄ μμ
λμ΄ λ§μμλ‘ μ€λ²ν€λκ° λ°μνκ³ , Context SwitchingμΌλ‘ μΈν μ±λ₯ μ νκ° μ°λ €λ©λλ€.
μ€λ²ν€λ: μμ€ν μ±λ₯μ λΆμ μ μΈ μν₯μ λ―ΈμΉλ μΆκ°μ μΈ μμ μ΄λ μμ μλͺ¨λ₯Ό μλ―Έν©λλ€(μ£Όμ μμΈμ Context Switching λ±μ λλ€).
λ©λͺ¨λ¦¬ 곡κ°μ μ€λ³΅ μ¬μ©: νλ‘μΈμ€λ μμ λ§μ μ½λ, λ°μ΄ν°, μ€ν, ν μμμ κ°μ§λ©°, μ μ¬ν λ°μ΄ν°λ μ½λκ° νμν κ²½μ° μμμ 곡μ νμ§ μκ³ μ€λ³΅μΌλ‘ 볡μ¬νμ¬ μ¬μ©νκΈ° λλ¬Έμ λ©λͺ¨λ¦¬ μλͺ¨κ° 컀μ§λλ€.
νλ‘μΈμ€ κ° ν΅μ λΉμ©(IPC: Inter-Process Communication): κ° νλ‘μΈμ€κ° λ€μν IPC λ°©λ²(μμΌ, νμ΄ν, 곡μ λ©λͺ¨λ¦¬, λ©μμ§ ν λ±)μ μ¬μ©νμ§λ§, μ΄ κ³Όμ μ΄ λ³΅μ‘νκ³ μμ λμ΄ λ§κΈ° λλ¬Έμ μ€λ²ν€λ λ°μ κ°λ₯μ±μ΄ 컀μ§λλ€.
νλ‘μΈμ€ μμ± λ° κ΄λ¦¬: μλ‘μ΄ μμμ ν λΉν΄μΌ νλ―λ‘ μλΉκ° ν¬λ©°, Context Switchingμ μ΄λ¬ν λκ·λͺ¨ μμ μ μ μ₯νκ³ λ³΅μνλ μμ μ΄ λ°λ³΅λκΈ° λλ¬Έμ μμ μλͺ¨κ° λ§μ΅λλ€.
μΊμ ν¨μ¨μ± μ ν: λ 립μ μΈ λ©λͺ¨λ¦¬ μ¬μ©μΌλ‘ μΈν΄ μλ‘μ΄ λ΄μ©μ λ€λ£¨λ νλ‘μΈμ€κ° λ§μμ§λ©΄ μΊμ λν κ³μν΄μ λ‘λνκ³ μ μ₯νλ κ²μ λ°λ³΅νκ² λμ΄ νμ©λκ° λ¨μ΄μ§λλ€.
νλμ μμ© νλ‘κ·Έλ¨μμ μ¬λ¬ μ€λ λλ₯Ό ꡬμ±ν΄ κ° μ€λ λκ° νλμ μμ μ μ²λ¦¬νλ κ².
μ€λ λλ€μ 곡μ λ©λͺ¨λ¦¬λ₯Ό ν΅ν΄ μ¬λ¬ μμ μ λμμ μ²λ¦¬ν μ μλλ‘ ν΄μ€λλ€.
μ₯μ : λ 립μ μΈ νλ‘μΈμ€μ λΉν΄ 곡μ λ©λͺ¨λ¦¬λ‘ μΈν΄ μκ°κ³Ό μμ μμ€μ΄ κ°μνλ©°, μ μ λ³μμ μ μ λ³μμ λν μλ£ κ³΅μ κ° κ°λ₯ν©λλ€.
λ¨μ : μμ μ± λ¬Έμ . νλμ μ€λ λκ° λ°μ΄ν° 곡κ°μ λ§κ°λ¨λ¦¬λ©΄ λͺ¨λ μ€λ λκ° μλ λΆλ₯ μνκ° λ μ μμ΅λλ€(곡μ λ©λͺ¨λ¦¬ λλ¬Έ).
νλμ μ€λ λκ° κ³΅μ λ°μ΄ν° κ°μ λ³κ²½νλ μμ μ λ€λ₯Έ μ€λ λκ° κ·Έ κ°μ μ½μΌλ € ν λ λ°μνλ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν λκΈ°ν κ³Όμ μ λλ€.
- μνΈ λ°°μ (Mutual Exclusion): Critical Sectionμ λ μ΄μμ μ€λ λ μ κ·Όμ μ νν©λλ€.
- μ§ν(Progress): λκΈ° μνμΈ μ€λ λλ€μ΄ μΈμ κΉμ§ κΈ°λ€λ €μΌ ν μ§ κ²°μ ν©λλ€.
- νμ λ λκΈ°(Bounded Waiting): 무ν λκΈ° μνμΈ κΈ°μ(starvation)λ₯Ό λ°©μ§νκΈ° μν΄ νμ λ μκ° λ΄μ λκΈ°λ₯Ό νκ³ μ§μ ν΄μΌ ν©λλ€.
λμμ±: νλ‘κ·Έλ¨μ΄ μ¬λ¬ μμ μ λμμ μ²λ¦¬νλ κ²μ²λΌ 보μ΄κ² νλ λ₯λ ₯μ λλ€. λΉ λ₯΄κ² μ νλλ©΄μ λμμ μ€νλλ κ²μ²λΌ 보μ΄λλ‘ νλ©°, μ£Όμ λͺ©νλ μλ΅μ±μ λμ΄κ³ μμμ ν¨μ¨μ μΌλ‘ μ¬μ©νλ κ²μ λλ€. λ¨μΌ CPUμμλ λ¬Έλ§₯ μ νμ ν΅ν΄ ꡬνν μ μμ΅λλ€.
λ³λ ¬μ±: μ¬λ¬ μμ μ΄ μ€μ λ‘ λμμ μ€νλλ κ². μ£Όμ λͺ©νλ μμ μ λΉ λ₯΄κ² μλ£νλ κ²μ΄λ©°, λ€μ€ μ½μ΄ λλ λ€μ€ νλ‘μΈμ μμ€ν μμ λνλ©λλ€.
μ΄ κΈμ ν΅ν΄ νλ‘μΈμ€μ μ€λ λμ μ°¨μ΄, λ©ν° νλ‘μΈμ€μ λ©ν° μ€λ λμ μ₯λ¨μ , κ·Έλ¦¬κ³ λμμ±κ³Ό λ³λ ¬μ±μ μ΄ν΄νλ λ° λμμ΄ λκΈΈ λ°λλλ€! π
[1] Inpa Dev π¨βπ» - π©βπ» λ©ν° νλ‘μΈμ€ vs λ©ν° μ€λ λ λΉκ΅ π― μμ μ΄μ 리 (https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-multi-process-multi-thread)
[2] GitHub - λ©ν° νλ‘μΈμ€(Multi Process)μ λ©ν° μ€λ λ(Multi Thread) (https://wooody92.github.io/os/%EB%A9%80%ED%8B%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%93%9C/)
[3] F-Lab - λ©ν° νλ‘μΈμ€μ λ©ν° μ€λ λμ μ°¨μ΄μ κ³Ό μ μ© μ¬λ‘ (https://f-lab.kr/insight/multi-process-vs-multi-thread)
[4] velog - [OS] λ©ν° νλ‘μΈμ€μ λ©ν° μ€λ λ (Multi Process & ... (https://velog.io/@kurtyoon/OS-%EB%A9%80%ED%8B%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%93%9C-Multi-Process-Multi-Thread)