๐ก Program vs Process vs Thread
- Program - ์ด๋ค ์์
์ ์ํด ์คํํ ์ ์๋ ํ์ผ
- Process - ์ฐ์์ ์ผ๋ก ์คํ๋๊ณ ์๋ ํ๋ก๊ทธ๋จ, ๊ณ ์ ๊ณต๊ฐ๊ณผ ์์์ ํ ๋น๋ฐ์ ์ฌ์ฉ
- Thread - ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ์ฌ๋ฌ ํ๋ฆ ๋จ์, ๋ค๋ฅธ ์ค๋ ๋์ ๊ณต๊ฐ, ์์์ ๊ณต์ ํ๋ฉฐ ์ฌ์ฉ
ํ๋ก์ธ์ค(Process)
-
์คํ์ค์ธ ํ๋ก๊ทธ๋จ, ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์ ์คํ๋๊ณ ์๋ ํ๋ก๊ทธ๋จ์ ์ธ์คํด์ค (๋
๋ฆฝ์ ์ธ ๊ฐ์ฒด)
-
๋์คํฌ๋ก๋ถํฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด CPU์ ํ ๋น์ ๋ฐ์ ์ ์๋ ๊ฒ.
-
์ด์์ฒด์ ๋ก๋ถํฐ ๋ณ๋์ ๋
๋ฆฝ์ ์ธ ์ฃผ์๊ณต๊ฐ, ํ์ผ, *๋ฉ๋ชจ๋ฆฌ ๋ฑ์ ํ ๋น๋ฐ์
-> ์ด์์ฒด์ ๋ก๋ถํฐ ์์คํ
์์์ ํ ๋น๋ฐ๋ ์์
์ ๋จ์
*๋ฉ๋ชจ๋ฆฌ - Code, Data, Stack, Heap์ ๊ตฌ์กฐ๋ก ๋์ด ์๋ ๋
๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
-
Code : ํ๋ก๊ทธ๋จ ์คํ ์ฝ๋ ๋๋ ํจ์๋ค์ด ์ ์ฅ๋๋ ์์ญ -> ์ฝ๋ ์์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ(ํ๋ก๊ทธ๋จ ๋ช
๋ น)
-
Data : ์ ์ญ๋ณ์, ์ ์ ๋ณ์, ๋ฐฐ์ด ๋ฑ์ ์ด๊ธฐํ๋ ๋ฐ์ดํฐ๋ค์ด ์ ์ฅ๋๋ ์์ญ, ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ์์ฑ๋๊ณ ์ข
๋ฃ๋๋ฉด ์์คํ
์ ๋ฐํ ๋์ด ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋ ๋๊น์ง ์ ์ง๋์ด์ผ ํ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋จ
-
Stack : ํจ์์ ๋งค๊ฐ๋ณ์, ๋ณต๊ท ์ฃผ์์ ๋ก์ปฌ ๋ณ์์ ์๋ฃ๋ค์ด ์ ์ฅ๋๋ ์์ญ, ํจ์ ํธ์ถ์ ์์ฑ๋๋ฉฐ, ํจ์๊ฐ ๋๋๋ฉด ๋ฐํ ๋์ด ์ ๊น ์ฌ์ฉ๋๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ์๋ฉธ์ํฌ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋จ.
์คํ ํฌ๊ธฐ๋ ๊ฐ ํ๋ก์ธ์ค๋ง๋ค ํ ๋น๋๋ฉฐ ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๋ ์ฌ์ด์ฆ๊ฐ ๊ณ ์ ๋จ -> ๋ฐํ์์ stack ์ฌ์ด์ฆ๋ฅผ ๋ฐ๊ฟ ์ X
-
Heap : ํ์์ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ํ ๋น ํ ๋ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ(new(), malloc()) -> ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ง์๋๋ก ์ฌ์ฉํ ์ ์๋ ์ใ
์ญ
** ์ฐธ๊ณ
Stack๊ณผ Heap ์ ๊ฐ์ ๊ณต๊ฐ์ ๊ณต์ ( heap - ๋ฉ๋ชจ๋ฆฌ์ ๋ฎ์ ์ฃผ์๋ถํฐ ํ ๋น, stack - ๋์ ์ฃผ์๋ถํฐ ํ ๋น )
-> stack overflow
, heap overflow
: ๊ฐ ์์ญ์ด ์๋ ๊ณต๊ฐ์ ์นจ๋ฒํ๋ ๊ฒ
-
ํ๋ก์ธ์ค๋น ์ต์ 1๊ฐ์ ์ค๋ ๋ (๋ฉ์ธ ์ค๋ ๋)๋ฅผ ๊ฐ์ง
-
๊ฐ ํ๋ก์ธ์ค๋ ๋ณ๋์ ์ฃผ์ ๊ณต๊ฐ์์ ์คํ, ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ, ๋ณ์๋ ์๋ฃ๊ตฌ์กฐ์ ์ง์ ์ ๊ทผ X
์ ๊ทผ ๋ฐฉ๋ฒ : ํ๋ก์ธ์ค ๊ฐ์ ํต์ (IPC) ์ฌ์ฉ ํ์
๐ก PCB (Process Control Block)
์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ๋ก์ธ์ค์ ์์ฑ๊ณผ ๋์์ ์์ฑํ ํน์ ํ๋ก์ธ์ค์ ๋ํ ์ค์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์๋ ์ด์์ฒด์ ์ ์๋ฃ๊ตฌ์กฐ
- ํ๋ก์ธ์ค๋ CPU๋ฅผ ํ ๋น๋ฐ์ ์์
์ ์ฒ๋ฆฌํ๋ค๊ฐ๋ ํ๋ก์ธ์ค ์ ํ์ด ๋ฐ์ํ๋ฉด ์งํํ๋ ์์
์ ์ ์ฅํ๊ณ CPU๋ฅผ ๋ฐํํด์ผ ํจ
- ๋ฐํ์ ์์
์ ์งํ ์ํฉ์ ๋ชจ๋ PCB ์ ์ ์ฅ
- ์ดํ CPU๋ฅผ ๋ค์ ํ ๋น๋ฐ๊ฒ ๋๋ฉด PCB์ ์ ์ฅ๋์ด์๋ ๋ด์ฉ์ ๋ถ๋ฌ์ ์ด์ ์ ์ข
๋ฃ๋๋ ์์ ๋ถํ ์์
์ฌ์ํ
- PCB ์ ์ฅ ์ ๋ณด
- ํ๋ก์ธ์ค ์๋ณ์(Process ID, PID) : ํ๋ก์ธ์ค ์๋ณ๋ฒํธ
- ํ๋ก์ธ์ค ์ํ : new, ready, running, waiting, terminated ๋ฑ์ ์ํ๋ฅผ ์ ์ฅ
- ํ๋ก๊ทธ๋จ ์นด์ดํฐ : ํ๋ก์ธ์ค๊ฐ ๋ค์์ ์คํํ ๋ช
๋ น์ด์ ์ฃผ์
- CPU ๋ ์ง์คํฐ
- CPU ์ค์ผ์ฅด๋ง ์ ๋ณด : ํ๋ก์ธ์ค์ ์ฐ์ ์์, ์ค์ผ์ค ํ์ ๋ํ ํฌ์ธํฐ ๋ฑ
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ณด : ํ์ด์ง ํ
์ด๋ธ ๋๋ ์ธ๊ทธ๋จผํธ ํ
์ด๋ธ ๋ฑ๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ํฌํจ
- ์
์ถ๋ ฅ ์ํ ์ ๋ณด : ํ๋ก์ธ์ค์ ํ ๋น๋ ์
์ถ๋ ฅ ์ฅ์น๋ค๊ณผ ์ด๋ฆฐ ํ์ผ ๋ชฉ๋ก
- ์ด์นด์ดํ
์ ๋ณด : ์ฌ์ฉ๋ CPU ์๊ฐ, ์๊ฐ์ ํ, ๊ณ์ ๋ฒํธ ๋ฑ
๐ก ํ๋ก์ธ์ค ๊ฐ์ ํต์ (IPC, Inter-Process Communication)
ํ๋ก์ธ์ค๋ผ๋ฆฌ ์์์ด๋ ๋ฐ์ดํฐ๋ฅผ ์๋ก ์ฃผ๊ณ ๋ฐ๋ ํ์ ๋๋ ๊ทธ์ ๋ํ ๋ฐฉ๋ฒ์ด๋ ๊ฒฝ๋ก
์์ธํ ๋ด์ฉ ์ฐธ๊ณ
IPC๊ฐ ํ์ํ ์ด์
- ์ ๋ณด ๊ณต์ (Information sharing) : ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์ผํ ์ ๋ณด๋ฅผ ํ์๋ก ํจ
- ๊ณ์ฐ ๊ฐ์ํ (Computation speedup) : ํน์ ์์
(task)๋ฅผ ๋น ๋ฅด๊ฒ ์คํํ๊ธฐ ์ํด, ํด๋น ์์
์ ๋ถ๋ถ ์์
(sub-task) ๋ก ๋๋ ์ ๋ณ๋ ฌ๋ก ์คํ
- ๋ชจ๋์ฑ (Modularity) : ํน์ ํ ์์คํ
๊ธฐ๋ฅ์ ๋ณ๋์ ํ๋ก์ธ์ค(์ค๋ ๋)๋ก ๊ตฌ๋ถํ์ฌ ๋ชจ๋์ ํํ๋ก ์์คํ
๊ตฌ์ฑ
- ํธ์์ฑ (Convenience) : ์ฌ๋ฌ ์ฌ์ฉ์๋ค์ด ๋์์ ๋ง์ ์์
์ํ
IPC ์ข
๋ฅ
- ๋ฉ์์ง ์ ๋ฌ (Message Passing)
- ์ปค๋์ ํตํด ๋ฉ์์ง ์ ๋ฌ, ์์์ด๋ ๋ฐ์ดํฐ ์ฃผ๊ณ ๋ฐ์
- ๋ณ๋์ ๊ตฌ์ถ์์ด ์ปค๋์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ๋น๊ต์ ๊ตฌํ ์ฌ์
- ์ปค๋์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์์คํ
์ฝ์ด ํ์ -> ์ค๋ฒํค๋ ๋ฐ์
- ํ์ดํ, ์๊ทธ๋, ๋ฉ์์งํ, ์์ผ ๋ฑ
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ (shared Memory)
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ตฌ์ถํ๊ณ ์ด ์์ญ์ ํตํด ์์์ด๋ ๋ฐ์ดํฐ ์ฃผ๊ณ ๋ฐ์
- ์ปค๋ ์์กด์ฑ์ด ๋ฎ์ -> ์๋ ๋น ๋ฆ, ์ ์ ๋ ๋ฒจ์์ ์งํ๋๊ธฐ ๋๋ฌธ์ ์์ ๋ก์ด ํต์
- ์์๊ณผ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ๋๊ธฐํ ์ด์
- ์ต๋ช
PIPE - ํ์ชฝ ๋ฐฉํฅ์ผ๋ก๋ง ํต์ ์ด ๊ฐ๋ฅํ ๋ฐ์ด์ค ํต์
- Named PIPE(FIFO) - ์ต๋ช
ํ์ดํ์ ํ์ฅ๋ ์ํ๋ก ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋ฌด๊ดํ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ํต์ ์ด ๊ฐ๋ฅํ ๊ฒ
- ๋ฉ๋ชจ๋ฆฌ ๋งต - ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ . ์ด๋ฆฐ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ์ ๋งตํ์์ผ์ ๊ณต์ ํ๋ ๋ฐฉ์(์ฆ ๊ณต์ ๋งค๊ฐ์ฒด๊ฐ ํ์ผ+๋ฉ๋ชจ๋ฆฌ)
- ์์ผ - ๋คํธ์ํฌ ์์ผ ํต์ ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ณต์
- IPC ํต์ ์์ ํ๋ก์ธ์ค ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ๊ณ ๋ณดํธํ๊ธฐ ์ํด ์ธ๋งํฌ์ด์ ๋ฎคํ
์ค ๋ฅผ ์ฌ์ฉ
(๊ณต์ ๋ ์์์ ํ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์ ๊ทผ์ํฌ ๋)
์ค๋ ๋(Thread)
-
ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ์ฌ๋ฌ ํ๋ฆ์ ๋จ์, ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์์์ ์ด์ฉํ๋ ์คํ์ ๋จ์
-
ํ๋ก์ธ์ค์ ํน์ ํ ์ํ ๊ฒฝ๋ก
-
์ค๋ ๋ ID, ํ๋ก๊ทธ๋จ์นด์ดํฐ, ๋ ์ง์คํฐ ์งํฉ, ์คํ์ผ๋ก ๊ตฌ์ฑ
-
Stack - ๋ฐ๋ก ํ ๋น, Code, Data, Heap ์์ญ์ ๊ณต์
- ์ค๋ ๋๋ ๋ณ๋์ ๋ ์ง์คํฐ์ ์คํ ์ ๊ฐ๊ณ ์์ง๋ง, ํ ๋ฉ๋ชจ๋ฆฌ๋ ์๋ก ์ฝ๊ณ ์ธ ์ O
- ํ ์ค๋ ๋๊ฐ ํ๋ก์ธ์ค ์์์ ๋ณ๊ฒฝํ๋ฉด, ๋ค๋ฅธ ์ด์ ์ค๋ ๋๋ ๊ทธ ๋ณ๊ฒฝ ๊ฒฐ๊ณผ๋ฅผ ์ฆ์ ๋ณผ ์ O
-
โ
Stack์ ์ค๋ ๋๋ง๋ค ๋
๋ฆฝ์ ์ผ๋ก ํ ๋น ํ๋ ์ด์
- Stack - ํจ์ ํธ์ถ ์ ์ ๋ฌ๋๋ ์ธ์, ๋๋์๊ฐ ์ฃผ์๊ฐ ๋ฐ ํจ์ ๋ด์์ ์ ์ธํ๋ ๋ณ์ ๋ฑ์ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
- ์คํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋
๋ฆฝ์ ์ด๋ค == ๋
๋ฆฝ์ ์ธ ํจ์ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค => ๋
๋ฆฝ์ ์ธ ์คํ ํ๋ฆ (์ค๋ ๋์ ์ ์, ํ๋ก์ธ์ค์ ์คํ ๋จ์๋ฅผ ๋ง์กฑํ๊ธฐ ์ํ ์ต์ ์กฐ๊ฑด)
- โ
PC Register๋ฅผ ์ค๋ ๋๋ง๋ค ๋
๋ฆฝ์ ์ผ๋ก ํ ๋น ํ๋ ์ด์
- pc - ์ค๋ ๋๊ฐ ๋ช
๋ น์ด์ ์ด๋๊น์ง ์ํํ์๋์ง๋ฅผ ๋ํ๋
- ์ค๋ ๋๋ CPU๋ฅผ ํ ๋น๋ฐ๊ณ ์ค์ผ์ค๋ฌ์ ์ํด ๋ค์ ์ ์ ๋นํจ -> ๋ช
๋ น์ด๊ฐ ์ฐ์์ ์ผ๋ก ์ํX, ๋ง์ง๋ง ์ํ ์์น๋ฅผ ๊ธฐ์ตํด์ผ ํจ
๐ก ์ค๋ ๋ ๊ฐ ๋ฐ์ดํฐ ๊ณต์
๋ณ๋์ ์์์ ์ด์ฉํ๋ ๊ฒ์ด ์๋ ์ ์ญ ๋ณ์์ ๊ณต๊ฐ ์ด์ฉ
๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ, ์ ์ญ ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํ ๊ฐ๋ฅ
๋ฉํฐ์ค๋ ๋์ ๊ฒฝ์ฐ ์ถฉ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ๋๊ธฐํ ๋ฌธ์ ํด๊ฒฐ ํ์
๐ก Thread-safe
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ํ๋์ ๊ณต์ ์์์ ์ ๊ทผํ ๋, ์๋๋๋ก ๋์ํ๋ ๊ฒ
- ๊ตฌํ๋ฐฉ๋ฒ - ์ฐธ๊ณ
- ์ํธ๋ฐฐ์ - ๊ณต์ ์์์ ์ ๊ทผํ๋ ์๊ณ์์ญ(Critical Section)์ ๋๊ธฐํ ๊ธฐ๋ฒ์ผ๋ก ์ ์ด
ํ ์ค๋ ๋๊ฐ ์์์ ์ ๊ทผํ ๋ ๋ค๋ฅธ ์ค๋ ๋์ ์ ๊ทผ์ ๋ง์
Mutex / Semaphore ์ด์ฉ
- Reentrant
- ์ฌ์ง์
์ฑ - ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผํด๋ ์ธ์ ๋ ๊ฐ์ ์คํ ๊ฒฐ๊ณผ ๋ณด์ฅ
- ํด๋น ์๋ธ๋ฃจํด์์๋ ๊ณต์ ์์ ์ฌ์ฉํ์ง ์๊ธฐ
Ex) ์ ์ (์ ์ญ)๋ณ์๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ฐํ X, ํธ์ถ์ ์ ๊ณต๋ ๋งค๊ฐ๋ณ์๋ง์ผ๋ก ๋์
- Reentrant -> Thread-Safe
Thread-Safe -> Reentrant (์ญ์ ์ฑ๋ฆฝํ์ง X)
๐ก ์ค๋ ๋ ๋๊ธฐํ
Thread-Safe๋ Synchronized ์ ๊ฐ๋ โ
โก Thread-safe
๋ ์ฌ๋ฌ ์ค๋ ๋์ ์ ๊ทผ์ผ๋ก๋ถํฐ ์์ ํ ๊ฑฐ๊ณ
ย ย Synchronized
๋ ๋๊ธฐํ ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ 2๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ํ ํจ์ / ์ฝ๋๋ธ๋ญ์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ๋ง๋ ๊ฒ!
- ๋๊ธฐํ ๊ฐ์ฒด์ ์ข
๋ฅ
- ๋๊ธฐํ์ฉ ์ปค๋ ๊ฐ์ฒด : Mutex, Semaphore, Event
- ์ ์ ๋ชจ๋ ๋๊ธฐํ ๊ฐ์ฒด : Critical Section
- ์ค๋ ๋ ๋๊ธฐํ ๋ฐฉ๋ฒ
- ์คํ ์์์ ๋๊ธฐํ : Event
- ์ค๋ ๋์ ์คํ์์๋ฅผ ์ ์ํ๊ณ , ์ด ์์์ ๋ฐ๋์ ๋ฐ๋ฅด๋๋ก ํ๋ ๊ฒ
- ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ๋ํ ๋๊ธฐํ : Mutex, Semaphore
- ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์์ด์ ๋์์ ๊ทผ์ ๋ง๋ ๊ฒ
- ์คํ์ ์์๊ฐ ์ค์ํ ์ํฉ์ด ์๋๊ณ , ํ ์๊ฐ์ ํ๋์ ์ค๋ ๋๋ง ์ ๊ทผํ๋ฉด ๋๋ ์ํฉ์ ์๋ฏธ
- ๋๊ธฐํ ๊ธฐ๋ฒ์ ์ข
๋ฅ
- ์ ์ ๋ชจ๋ ๋๊ธฐํ
- ์ปค๋์ ํ์ ๋น๋ฆฌ์ง ์๋(์ปค๋ ์ฝ๋๊ฐ ์คํ๋์ง ์๋) ๋๊ธฐํ ๊ธฐ๋ฒ
- ์ฑ๋ฅ์ ์ด์ , ๊ธฐ๋ฅ์์ ์ ํ
- Ex) Critical Section ๊ธฐ๋ฐ์ ๋๊ธฐํ, ์ธํฐ๋ฝ ํจ์ ๊ธฐ๋ฐ์ ๋๊ธฐํ
- ์ปค๋ ๋ชจ๋ ๋๊ธฐํ
- ์ปค๋์์ ์ ๊ณตํ๋ ๋๊ธฐํ ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ
- ์ปค๋ ๋ชจ๋๋ก์ ๋ณ๊ฒฝ์ด ํ์ํ๊ณ ์ด๋ ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง, ๋ค์ํ ๊ธฐ๋ฅ ํ์ฉ ๊ฐ๋ฅ
- Ex) Mutex ๊ธฐ๋ฐ์ ๋๊ธฐํ, Semaphore ๊ธฐ๋ฐ์ ๋๊ธฐํ, ์ด๋ฆ์๋ ๋ฎคํ
์ค ๊ธฐ๋ฐ์ ํ๋ก์ธ์ค ๋๊ธฐํ, Event ๊ธฐ๋ฐ์ ๋๊ธฐํ
โ
Mutex vs Semaphore (์ํธ๋ฐฐ์ )
- Mutex -locking
- ๊ณต์ ๋ ์์์ ๋ฐ์ดํฐ์ ํ๋์ Process ํน์ Thread๊ฐ ์ ๊ทผํ๋ ๊ฒ์ ๋ง๋ ๊ฒ(=> ๋๊ธฐํ ๋์์ด ํ๋)
- Critical Section์ ๊ฐ์ง ์ค๋ ๋์ Running time์ด ์๋ก ๊ฒน์น์ง ์๋๋ก ๊ฐ๊ฐ ๋จ๋
์ผ๋ก ์คํํ๊ฒ ํ๋ ๊ธฐ์
- synchronized ๋๋ lock์ ์ฌ์ฉํ์ฌ ๋ค์ค ํ๋ก์ธ์ค๋ค์ ๊ณต์ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ์กฐ์จ
- ๋ฎคํ
์ค ๊ฐ์ฒด๋ฅผ ๋ ์ค๋ ๋๊ฐ ๋์์ ์ฌ์ฉํ ์ X
- Semaphore -signaling
- ๊ณต์ ๋ ์์์ ๋ฐ์ดํฐ์ ์ฌ๋ฌ Process ํน์ Thread๊ฐ ์ ๊ทผํ๋ ๊ฒ์ ๋ง๋ ๊ฒ
- wait๋ฅผ ํธ์ถํ๋ฉด ์ธ๋งํฌ์ด์ ์นด์ดํธ๋ฅผ 1์ค์ด๊ณ , ์ธ๋งํฌ์ด์ ์นด์ดํธ๊ฐ 0๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ง ๊ฒฝ์ฐ์ ๋ฝ์ด ์คํ
- ๋ฆฌ์์ค ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฐ๋จํ ์นด์ดํฐ๋ก ์๊ฐํ ์ ์์
- ์ด์์ฒด์ ๋๋ ์ปค๋์ ํ ์ง์ ๋ ์ ์ฅ์ฅ์น ๋ด์ ๊ฐ
- ์ผ๋ฐ์ ์ผ๋ก ๋น๊ต์ ๊ธด ์๊ฐ์ ํ๋ณดํ๋ ๋ฆฌ์์ค์ ๋ํด ์ด์ฉ
- ๊ณต์ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋ ํ๋ก์ธ์ค์ ์ต๋ ํ์ฉ์น๋งํผ ๋์์ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ์ฌ ์ฌ์ฉ
- ๊ฐ ํ๋ก์ธ์ค๋ ์ธ๋งํฌ์ด ๊ฐ์ ํ์ธํ๊ณ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ์ฌ์ฉ ์ค์ด์ง ์๋ ์์์ ๊ฒฝ์ฐ ๊ทธ ํ๋ก์ธ์ค๊ฐ ์ฆ์ ์์์ ์ฌ์ฉ ๊ฐ๋ฅ
- ์ด๋ฏธ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํด ์ฌ์ฉ ์ค์ด๋ผ๋ ์ฌ์ค์ ์๊ฒ ๋๋ฉด ์ฌ์๋ํ๊ธฐ ์ ์ ์ผ์ ์๊ฐ์ ๊ธฐ๋ค๋ฆผ
- ์ธ๋งํฌ์ด๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ธ์ค๋ ๊ทธ ๊ฐ์ ํ์ธํ๊ณ , ์์์ ์ฌ์ฉํ๋ ๋์์๋ ๊ทธ ๊ฐ์ ๋ณ๊ฒฝํจ์ผ๋ก์จ ๋ค๋ฅธ ์ธ๋งํฌ์ด ์ฌ์ฉ์๋ค์ด ๊ธฐ๋ค๋ฆฌ๋๋ก ํด์ผ ํจ
- ์ธ๋งํฌ์ด๋ ์ด์ง์ (0 ๋๋ 1)๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, ๋๋ ์ถ๊ฐ์ ์ธ ๊ฐ์ ๊ฐ์ง ์๋ ์์
- ์ฐจ์ด
- ๋๊ธฐํ ๋์์ ๊ฐ์
- Mutex - ๋๊ธฐํ ๋์์ด ํ๋
- Semaphore - ๋๊ธฐํ ๋์์ด ํ๋ ์ด์
- Semaphore๋ Mutex๊ฐ ๋ ์ ์์ง๋ง Mutex๋ Semaphore๊ฐ ๋ ์ ์๋ค.
- Mutex๋ ์ํ๊ฐ 0, 1 ๋ ๊ฐ ๋ฟ์ธ binary Semaphore -> lock ๊ฐ์ง ์ O
- Semaphore๋ ์์ ํ ์ ์๋ ๋ฐ๋ฉด, Mutex๋ ์์ ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ์์ ์ฃผ๊ฐ ์ด์ ๋ํ ์ฑ
์ ๊ฐ์ง
- ํด์
- Mutex - Mutex๋ฅผ ์์ ํ๊ณ ์๋ ์ค๋ ๋๊ฐ ํด๋น Mutex๋ฅผ ํด์ ํ ์ ์์
- Semaphore - ํด๋น Semaphore๋ฅผ ์์ ํ์ง ์๋ ์ค๋ ๋๊ฐ Semaphore๋ฅผ ํด์ ํ ์ ์์
- ๋ฒ์
- Mutex - ํ๋ก์ธ์ค ๋ฒ์๋ฅผ ๊ฐ์ง๋ฉฐ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋ ๋ ์๋์ผ๋ก Clean up
- Semaphore - ์์คํ
๋ฒ์์ ๊ฑธ์ณ์๊ณ ํ์ผ์์คํ
์์ ํ์ผ ํํ๋ก ์กด์ฌ
๋ฉํฐ ํ๋ก์ธ์ค vs ๋ฉํฐ ์ค๋ ๋
๐ก ๋ฉํฐ ํ๋ก์ธ์ค
ํ๋์ ์ปดํจํฐ์ ์ฌ๋ฌ CPU, ํ๋ ์ด์์ ํ๋ก์ธ์ค ๋์ ๋ณ๋ ฌ ์ฒ๋ฆฌ
- ์ฅ์
- ํ๋์ ํ๋ก์ธ์ค๊ฐ ์ฃฝ๋๋ผ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํฅ X,
- ์์ ์ฑ (๋ฉ๋ชจ๋ฆฌ ์นจ๋ฒ ๋ฌธ์ ๋ฅผ OS ์ฐจ์์์ ํด๊ฒฐํจ)
- ๋จ์
- ๋ฉํฐ ์ค๋ ๋๋ณด๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๊ณผ CPU ์๊ฐ ์ฐจ์ง
- ๋
๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ง๊ณ ์์ด ์์
๋์ด ๋ง์ ์๋ก ์ค๋ฒํค๋ ๋ฐ์
- Context Switching ์ผ๋ก ์ธํ ์ฑ๋ฅ ์ ํ
** ์ฐธ๊ณ **
Context Switching - ํ๋ก์ธ์ค์ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ํ๋ ์ผ๋ จ์ ๊ณผ์
๋์ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐํ๋ฉด์ ํด๋น ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ณด๊ดํ๊ณ ,
๋๊ธฐํ๊ณ ์๋ ๋ค์ ์๋ฒ์ ํ๋ก์ธ์ค๊ฐ ๋์ํ๋ฉด์ ์ด์ ์ ๋ณด๊ดํ๋ ํ๋ก์ธ์ค ์ํ๋ฅผ ๋ณต๊ตฌํ๋ ๊ณผ์
๐ก ๋ฉํฐ ์ค๋ ๋
ํ๋์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ฌ๋ฌ ์ค๋ ๋ ๊ตฌ์ฑ, ๊ฐ ์ค๋ ๋๊ฐ ํ๋์ ์์
์ฒ๋ฆฌ
์ค๋ ๋๋ค์ด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํด ๋ค์์ ์์
์ ๋์์ ์ฒ๋ฆฌํ๋๋ก ํจ
- ์ฅ์
- ๋ฉํฐ ํ๋ก์ธ์ค๋ณด๋ค ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์ฐจ์ง, ๋น ๋ฅธ Context Switching
- ์ ์ญ ๋ณ์์ ์ ์ ๋ณ์์ ๋ํ ์๋ฃ ๊ณต์ ๊ฐ๋ฅ
- ๋จ์
- ์ค๋ฅ๋ก ํ๋์ ์ค๋ ๋๊ฐ ์ข
๋ฃ๋๋ฉด ์ ์ฒด ์ค๋ ๋ ์ข
๋ฃ๋ ์ ์์, ์์ ์ฑ ๋ฌธ์
- ๋๊ธฐํ ๋ฌธ์
๋ฉํฐ ํ๋ก์ธ์ค ๋์ ๋ฉํฐ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ์ด์
์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ ํค๋ ๋์ , ํ๋์ ํ๋ก๊ทธ๋จ ์์์ ์ฌ๋ฌ ์์
์ ํด๊ฒฐ
- ์์์ ํจ์จ์ฑ ์ฆ๋
- ํ๋ก์ธ์ค๋ฅผ ์์ฑํ์ฌ ์์์ ํ ๋นํ๋ ์์คํ
์ฝ์ด ์ค์ด๋ฌ
- Context Switching ์ CPU Register ๊ต์ฒด ๋ฟ๋ง ์๋๋ผ RAM ๊ณผ CPU ์ฌ์ด์ ์บ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ๋ฐ์ดํฐ๊น์ง ์ด๊ธฐํ -> ์ค๋ฒํค๋ ํผ
- ์ฒ๋ฆฌ ๋น์ฉ ๊ฐ์ ๋ฐ ์๋ต ์๊ฐ ๋จ์ถ
- Stack ์์ญ์ ์ ์ธํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต์ -> IPC ๋ณด๋ค ํต์ ๋น์ฉ์ด ์ ์
- Context Switching ์ Stack ์์ญ๋ง ์ฒ๋ฆฌ -> ์ค๋ ๋ ๊ฐ์ ์ ํ ์๋๊ฐ ๋น ๋ฆ
์ฐธ๊ณ
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://github.com/WeareSoft/tech-interview/blob/master/contents/os.md#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://gyoogle.dev/blog/computer-science/operating-system/Process%20vs%20Thread.html
https://worthpreading.tistory.com/m/90