ํ๊ตญ๊ณตํ๋ํ๊ต ๊ฒ์๊ณตํ๋ถ ์ ๋ดํ ๊ต์๋ ์์ ๋ด์ฉ์ ๋๋ค
๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์ 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
'๐ค Study > MultiThread' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[05์ฃผ์ฐจ] ๋๊ธฐํ ์ฐ์ฐ & CAS (0) | 2024.04.24 |
---|---|
[04์ฃผ์ฐจ] ๋ฉ๋ชจ๋ฆฌ ์ผ๊ด์ฑ (0) | 2024.04.18 |
[03์ฃผ์ฐจ] ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ ์ฃผ์์ฌํญ & ์ํธ๋ฐฐ์ ์๊ณ ๋ฆฌ์ฆ (1) | 2024.04.18 |
[02์ฃผ์ฐจ] ๋ฉํฐ์ฝ์ด HW & DataRace (0) | 2024.04.18 |
[01์ฃผ์ฐจB] ๋ฉํฐ์ฝ์ด HW & ๋ฉํฐ์ฐ๋ ๋ํ๋ก๊ทธ๋๋ฐ ์์ (0) | 2024.03.28 |