[01μ£Όμ°¨A] λ©ν°μ°λ λ νλ‘κ·Έλλ° μκ°
νκ΅κ³΅νλνκ΅ κ²μ곡νλΆ μ λ΄ν κ΅μλ μμ λ΄μ©μ λλ€
λ©ν°μ°λ λ νλ‘κ·Έλλ°μμ OSμ μν μ κ±°μ μκ³ CPUμ λ¬λ¦Ό
- Single Core Computer vs Parallel Computer
: μ±κΈμ½μ΄ μ»΄ν¨ν°λ νμ¬ λ©Έμ’ , λ³λ ¬ μ»΄ν¨ν°κ° μ°λ¦¬κ° μ£Όλ‘ μ¬μ©νλ μ»΄ν¨ν°.
: νλμ μμ μ λ³΄λ€ λΉ¨λ¦¬ μ€ννκΈ° μν΄ μ¬μ©νκ² λμμ
: κΈ°μ‘΄ νλ‘κ·Έλ¨μ λ³λ ¬ μ»΄ν¨ν°μμ μ€ννμ λ μλ μ¦κ°λ 0, νλ‘κ·Έλ¨μ λ§λ€ λλΆν° λ³λ ¬ νλ‘κ·Έλλ° νμ
: μ§κΈκΉμ§ λ°°μ΄ μλ£κ΅¬μ‘°/μκ³ λ¦¬μ¦μ μ λΆ μ§λ ¬ μ»΄ν¨ν°λ₯Ό κ°μ νκ³ μμ΄ λ¬Έμ . μ½μ΄ κ°μκ° λμ΄λλ μ±λ₯ ν₯μμ΄ μΌμ΄λμ§ μμ...
- λ³λ ¬ νλ‘κ·Έλ¨
: νλ‘μΈμ€μ λ΄λΆ μ¬λ¬ νλ¦(process)μμ λμ μ€νλ¨, νλ‘κ·Έλ¨ νλμμ μ¬λ¬ μμ μ μννλ κ²
: Context μ¬μ΄ Synchronization(λκΈ°ν) νμ
: 곡μ λ©λͺ¨λ¦¬(Shared Memory) λͺ¨λΈκ³Ό λ©μμ§ ν¨μ±(Message Passing) λͺ¨λΈ ζ
- Process Context
: Process is a Program execution -> νλ‘μΈμ€λ μ€ν μ€μΈ νλ‘κ·Έλ¨μ μλ―Έ
: Context -> νλ‘μΈμ€κ° νμ¬ μ΄λ€ μνμμ μνλκ³ μλμ§ μ νν κ·λͺ νκΈ° μν΄ νμν μ 보
: νμ¬ μ΄μ체μ λ μ¬λ¬ νλ‘μΈμ€κ° ν¨κ» μνλλ μλΆν μμ€ν νκ²½μ
: νλ‘μΈμ€ λ¬Έλ§₯(Process Context) -> μ΄μ μ μ΄λκΉμ§ λͺ λ Ήμ μννλμ§μ μ νν μνμμ κ³Ό μνλ₯Ό μ¬νν μ μλ μ 보
- Process Synchronization (νλ‘μΈμ€ λκΈ°ν)
: νλ‘μΈμ€μ μ€ν μμλ₯Ό μ μ΄νκ³ λμμ μ κ·Όν μ μλ μμμ νλμ νλ‘μΈμ€λ§μ μ κ·Όνκ² ν΄ λ°μ΄ν°μ μΌκ΄μ±μ μ μ§
- IPC (Inter Process Communication)
: μ°λ¦¬κ° μμ λ λ€λ£° κ²μ 곡μ λ©λͺ¨λ¦¬ !
- λ³λ ¬ νλ‘κ·Έλ¨ μꡬ μ¬ν
: μ νμ± ! μ±λ₯ !
: μ¬λ¬ contextμμ λμ λ€λ°μ μΌλ‘ νΈμΆν΄λ λ¬Έμ x
: context μ¦κ°μ λ°λ₯Έ μ±λ₯ ν₯μ λν κ³ λ € μ¬ν
: CPUκ° λ리기μ λ©ν°μ½μ΄λ₯Ό μ¬μ©νλ κ²μμΌλ‘ λ©ν°μ½μ΄λ₯Ό μ¨μ μ±κΈλ³΄λ€ λλ €μ§λ©΄ μλ¨
- Process
: μ΄μ체μ λ μ¬μ©μμ νλ‘κ·Έλ¨μ νλ‘μΈμ€ λ¨μλ‘ κ΄λ¦¬ν¨
: μ€ν νμΌ μ€ν = OSκ° νμΌ λ΄μ©μ λ©λͺ¨λ¦¬μ μ¬λ € μμ μ£Όμλ‘ μ ννλ κ²
: μλΆν μ΄μ체μ -> μ¬λ¬ νλ‘μΈμ€λ₯Ό κ³ μμΌλ‘ λ²κ°μκ°λ©° μ€ννλ κ² (κ°μ λ‘ ready μνλ‘ λ³κ²½ κ°λ₯)
- νλ‘μΈμ€μ λ©λͺ¨λ¦¬ ꡬ쑰

Stack : μ§μλ³μ, λ§€κ°λ³μ, 리ν΄κ° λ± μ μ μ¬μ©λμλ€κ° μ¬λΌμ§λ λ°μ΄ν°, ν¨μ νΈμΆ μ ν λΉ - ν¨μ λ°ν μ μλ©Έ (μ»΄νμΌ νμ)
Heap : λμ λ°μ΄ν° μμ, λ©λͺ¨λ¦¬ μ£Όμ κ°μ μν΄ μ°Έμ‘°λκ³ μ¬μ©λ¨, λ°λΌ νλ‘κ·Έλ¨ λμ μμ ν¬κΈ°κ° κ²°μ (λ°νμ)
Data : μ μλ³μμ μ μ λ³μ μ μ₯, νλ‘κ·Έλ¨ μμ μ ν λΉ, μ’ λ£ μ μλ©Έ / BSS (Read-Write)
Code : μ€νν νλ‘κ·Έλ¨μ μ½λ μ μ₯, CPUκ° μ΄ μμμμ λͺ λ Ήμ΄λ₯Ό νλμ© κ°μ Έμ μ²λ¦¬ (μ»΄νμΌ νμμ κ²°μ , Read-Only)
* λ°νμ - μ»΄νμΌ νμ(κΈ°κ³μ΄μ½λλ‘ λ³ν λμ΄ μ€ν κ°λ₯ν νλ‘κ·Έλ¨μ΄ λλ κ³Όμ ), λ°νμ(μμ©νλ‘κ·Έλ¨μ΄ λμλ λ)
μ»΄νμΌνμ μ€λ₯ μ ν -> μ νμ€ μ€λ₯, νμ μ²΄ν¬ μ€λ₯, λ°νμ μ€λ₯ μ ν -> 0λλκΈ° μ€λ₯, λμ°Έμ‘° μ€λ₯, λ©λͺ¨λ¦¬ λΆμ‘± μ€λ₯
- νλ‘μΈμ€ μμ± - λΆλͺ¨ νλ‘μΈμ€μ μμ νλ‘μΈμ€
: λΆλͺ¨ νλ‘μΈμ€ -> λ€λ₯Έ νλ‘μΈμ€λ₯Ό μμ±νλ νλ‘μΈμ€
: μμ νλ‘μΈμ€ -> μμ νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€μ μνμ¬ μμ±λ νλ‘μΈμ€, λΆλͺ¨ νλ‘μΈμ€μ λ©λͺ¨λ¦¬ 곡κ°κ³Ό μμμ μ κ·Ό κ°λ₯νλ©°, λΆλͺ¨ νλ‘μΈμ€μ ν΅μ κ°λ₯ν¨. μμ νλ‘μΈμ€λ λΆλͺ¨ νλ‘μΈμ€μλ λ 립μ μΌλ‘ μ€νλ¨

- νλ‘μΈμ€μ μ°λ λ

κΈ°μ‘΄ κ°μ 곡κ°μ 곡μ μμμ κ³ μ , μ°λ λλ₯Ό μμ±νλ€ ν΄μ λ³νμ§ μκ³ κ·Έλλ‘λ, stackλ§ μλ‘ μ겨 λμκ°λ€
: νλ‘μΈμ€ -> μ΄κΈ°μ νλμ μμ μ°λ λλ₯Ό κ°μ§
: μ°λ λλ λ€λ₯Έ μ°λ λλ₯Ό λ§λ€ μ μμΌλ©° μ°λ λ μμ±μ μ¬μ©μκ° μ§μν¨
: λͺ¨λ μ°λ λλ μμ κ³ μ μ μ€νμ κ°μ§κ³ μκ³ , Dataμ Code, Heapμ 곡μ ν¨
: μ°λ λλ CPUμμ νλμ¨μ΄μ μΌλ‘ κ΄λ¦¬λ¨ (x86)
- λ©ν° μ°λ λμ λ©λͺ¨λ¦¬ 곡μ
#include <iostream>
#include <thread>
using namespace std;
int a;
void func()
{
for (int i = 0; i < 10; ++i) {
a = a + i;
cout << " a = " << a << ", i = " << i << endl;
}
}
int main()
{
thread child1(func);
thread child2(func);
func();
}

μλμ κ·Έλ¦Όμμ λ©ν°μ°λ λ ꡬν μ μ€νμ΄ μ¬λ¬κ° λ§λ€μ΄μ§λ©΄μ (localμ λ³μλ₯Ό λ§μ΄ λλ©΄μ) μΆ©λ κ°λ₯μ±μ΄ λμμ§. μμ μ ν° λ¬Έμ μμΌλ μ΅κ·Ό 64λΉνΈλ‘ λμ΄λλ©° μ¬μν λ¬Έμ λ‘ λ³ν.
aμ κ°μ λͺ¨λ μ°λ λκ° κ³΅μ νλ iμ κ°μ λμμ μ€νλλ λͺ¨λ μ°λ λμμ λ€λ₯Έ κ°μ΄ λμ΄

- μ°λ λμ μ₯λ¨μ
(λ©΄μ ) λ³λ ¬ μ²λ¦¬λ₯Ό ν΄μΌνλλ° λ©ν°μ°λ λκ° λ©ν°νλ‘μΈμ€λ³΄λ€ λκ° λ μ’μκ°?
- μ₯μ : μμ± Overheadκ° μ λ€, Context Switch Overheadκ° μ λ€(Virtual memory), μ°λ λ κ°μ ν΅μ μ΄ κ°λ¨νλ€(λ©λͺ¨λ¦¬λ₯Ό μ½κ³ μ°λ κ²μΌλ‘ λλ¨, νλ‘μΈμ€ ν΅μ μ μ΄μ체μ μκ² μμ²μ ν΄μΌν΄μ 볡μ‘νλ€ λ³Ό μ μμ)
- λ¨μ : νλμ μ°λ λμμ λ°μν λ¬Έμ κ° μ 체 νλ‘μΈμ€λ₯Ό λ©μΆκ² νλ€(λ¨μ μ΄λΌ λ³Ό μ μκ³ ), λλ²κΉ μ΄ μ΄λ ΅λ€(μ΄κ² λ¨μ !)
- λ©ν° μ°λ λ μ¬μ© λͺ©μ
: λ©ν° μ½μ΄ CPU(ν κ° μ΄μμ μ½μ΄λ‘ ꡬμ±λ CPU)μμμ νλ‘κ·Έλ¨ μ±λ₯ ν₯μ
: λ©ν° CPU μ»΄ν¨ν°μμμ νλ‘κ·Έλ¨ μ±λ₯ ν₯μ
: λ³λ ¬ μ»΄ν¨ν°μμμ νλ‘κ·Έλ¨ μ±λ₯ ν₯μ
( λΆμ° μ»΄ν¨ν°, μ±κΈ μ½μ΄, νλ‘κ·Έλ¨μ λͺ¨λνν΄μ μμ보기 μ½κ²? -> X )
- λ©ν°μ½μ΄νλ‘μΈμ
: ν΄λ μλ λ°μ μλ λ°μ΄μ΄λΌλ νκ³ μ‘΄μ¬.. κ·Έλ¬λ©΄?
: μ½μ΄ (ALU + Register + CU + Cache) -> CPUλ λκ°μ
: λ©ν°μ½μ΄ CPU -> νλμ μΉ©μ μ¬λ¬ κ°μ νλ‘μΈμλ₯Ό κ°μ΄ λ£μ κ²
: νλ‘κ·Έλλ°ν λ μ ν λ€λ₯Έ μκ³ λ¦¬μ¦λ€μ μ¬μ©ν΄μΌ ν¨ -> λλ²κΉ λμ΄λ UP