๋ฐ์ํ
Multi process์์์ ๋ฐ์ดํฐ ํต์
์์น์ ์ผ๋ก Process๋ ๋ ๋ฆฝ์ ์ธ ์ฃผ์ ๊ณต๊ฐ์ ๊ฐ๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ์ฃผ์ ๊ณต๊ฐ์ ์ฐธ์กฐํ ์ ์๋ค.
ํ์ง๋ง ๋ฐ์ดํฐ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด, ์ด์์ฒด์ ๋ Process ๊ฐ์ ์์ ์ ๊ทผ์ ์ํ ๋ฉ์ปค๋์ฆ์ธ
ํ๋ก์ธ์ค๊ฐ ํต์ (Inter Process Communication) ์ ๊ณตํ๋ค.
IPC (Inter Process Communication)
Process๊ฐ์ ํต์ ์ ๋์์ฃผ๋ ์ด์์ฒด์ ์ ๋ฉ์ปค๋์ฆ
๊ณต์ ๋ฉ๋ชจ๋ฆฌ (Shared Memory)
Process๋ค์ ์ฃผ์ ๊ณต๊ฐ์ ์ผ๋ถ๋ฅผ ๊ณต์
- Process๊ฐ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ Kernel์ ์์ฒญ
- Kernel์ ํด๋น process์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น
- ์ดํ, Kernel์ ๋์์์ด Process๋ค์ด ํด๋น ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ๊ทผ
โ ์ฅ์
- ์ปค๋์ ๊ด์ฌ ์์ด ๋ฐ์ดํฐ๋ฅผ ํต์ ํ ์ ์๊ธฐ ๋๋ฌธ์ IPC ์๋๊ฐ ๋น ๋ฅด๋ค.
โ ๋จ์
- ๋์์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์น์ ์ ๊ทผํ๊ฒ ๋๋ฉด ์ผ๊ด์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์.
-> ์ด์ ๋ํด ์ปค๋์ด ๊ด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ process๋ผ๋ฆฌ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ๋ํ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
๐ ์์: ๊ณต์ ๋ฉ๋ชจ๋ฆฌ, POSIX
๋ฉ์ธ์ง ์ ๋ฌ (Message passing)
send(message) / receive(message) ๋๊ฐ์ง ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ kernel system call์ ํตํ ๋ฉ์ธ์ง ์ ๋ฌ
โ ์ฅ์
- ์ถฉ๋์ ํํผํ ํ์๊ฐ ์์ -> ์ ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๋๋ฐ ์ ๋ฆฌ
โ ๋จ์
- ๋ฉ๋ชจ๋ฆฌ ๊ณต์ ๋ณด๋ค ์๋๊ฐ ๋๋ฆผ
๐ ์์: Pipe, socket, message queue
๋๊ธฐํ ๋ฌธ์
๋๊ธฐํ ๋ฌธ์
: ์ฌ๋ฌ thread๊ฐ ๋์ผํ ์์์ ๋์์ ์ ๊ทผํ์ฌ ์๋ฑํ ๊ฐ์ ์ฝ๊ฑฐ๋ ์์ ํ๋ ๋ฌธ์
ํด๊ฒฐ๋ฒ
Mutex
- ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋ process / thread์ ์๋ฅผ 1๊ฐ๋ก ์ ํ
- ์๊ณ์์ญ์ ๋ณดํธํ๊ณ , ๊ฒฝ์์ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด mutex lock ์ฌ์ฉ
๐ก process / thread๋ ์๊ณ์์ญ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ๋ฐ๋์ lock์ ํ๋ํด์ผ ํ๊ณ , ์๊ณ๊ตฌ์ญ์ ๋น ์ ธ๋์ฌ ๋ lock์ ๋ฐํ
acquire() // available = false;
// ์๊ณ์์ญ ์คํ
release() // available = true;
Semaphore
- ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋ process / thread์ ๊ฐ์๋ฅผ 2๊ฐ ์ด์์ผ๋ก ์ง์
- S(์ธ๋งํฌ): ๋์์ ์ ๊ทผ ๊ฐ๋ฅํ process / thread ๊ฐฏ์
- S>0: ์๊ณ์์ญ์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- S==0: ์๊ณ์์ญ์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค.
wait(S) // S--
// ์๊ณ์์ญ ์คํ
signal(S) // S++
๊ต์ฐฉ์ํ(Deadlock)
๋ ์ด์์ thread๊ฐ ๊ฐ๊ธฐ ๋ค๋ฅธ thread๊ฐ ์ ์ ํ๊ณ ์๋ ์์์ ์๋ก ๊ธฐ๋ค๋ฆด ๋, ๋ฌดํ ๋๊ธฐ์ ๋น ์ง๋ ์ํฉ
์กฐ๊ฑด
- ์ํธ ๋ฐฐ์ : ๋์์ ํ thread๋ง ์์์ ์ ์ ํ ์ ์๋ ์ํฉ
- ์ ์ ๋๊ธฐ: thread๊ฐ ์์์ ๋ณด์ ํ ์ํ์์ ๋ค๋ฅธ thread๊ฐ ๋ณด์ ํ ์์์ ์ถ๊ฐ๋ก ๊ธฐ๋ค๋ฆฌ๋ ์ํฉ
- ๋น์ ์ : ๋ค๋ฅธ thread๊ฐ ์ฌ์ฉ ์ค์ธ ์์์ ๊ฐ์ ๋ก ์ ์ ํ ์ ์๋ ์ํฉ
- ์ํ ๋๊ธฐ: ๋๊ธฐ ์ค์ธ thread๋ค์ด ์ํ ํํ๋ก ์์์ ๋๊ธฐํ๊ณ ์๋ ์ํฉ
ํด๊ฒฐ ๋ฐฉ๋ฒ
๊ธฐ๋ฒ | ์ค๋ช | ๋น๊ณ |
๋ฌด์ | deadlock ๋ฐ์ ํ๋ฅ ์ด ๋ฎ์ ์์คํ ์์ ์๋ฌด๋ฐ ์กฐ์น๋ ์ทจํ์ง ์๊ณ , deadlock์ ๋ฌด์ํ๋ ๋ฐฉ๋ฒ | - ์์คํ
์ฑ๋ฅ ์ ํ๊ฐ ์์ - ํ๋ ์์คํ ์์๋ deadlock์ด ๋ฐ์ํ์ง ์๊ณ , ํด๊ฒฐ ๋น์ฉ์ด ํฌ๊ธฐ ๋๋ฌธ์ ๋ฌด์ ๋ฐฉ๋ฒ์ด ๋ง์ด ์ฌ์ฉ ๋จ |
์๋ฐฉ | ๊ต์ฐฉ ์ํ์ 4๊ฐ์ง ๋ฐ์ ์กฐ๊ฑด ์ค ํ๋๊ฐ ์ฑ๋ฆฝํ์ง ์๊ฒ ํ๋ ๋ฐฉ๋ฒ | - ์ํ ๋๊ธฐ ์กฐ๊ฑด์ด ์ฑ๋ฆฝํ์ง ์๋๋ก ํ๋๊ฒ์ด ํ์ค์ ์ผ๋ก ๊ฐ๋ฅํ ์๋ฐฉ ๊ธฐ๋ฒ - ์์ ์ฌ์ฉ์ ํจ์จ์ฑ์ด ๋จ์ด์ง๊ณ ๋น์ฉ์ด ํผ |
ํํผ | thread๊ฐ ์์ผ๋ก ์์์ ์ด๋ป๊ฒ ์์ฒญํ ์ง์ ๋ํด ์ ๋ณด๋ฅผ ํตํด ์ํ ๋๊ธฐ ์ํ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์์์ ํ ๋นํ๋ ๋ฐฉ๋ฒ | - ์์ํ ๋น ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ, ์ํ์ ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ ์ฌ์ฉํ์ฌ ์์์ ํ ๋น |
ํ์ง - ํ๋ณต | ์์คํ ๊ฒ์ฌ๋ฅผ ํตํด deadlock๋ฐ์์ ํ์งํ๊ณ , ์ด๋ฅผ ํ๋ณตํ๋ ๋ฐฉ๋ฒ | - ์์ ์ฌ์ฉ์ ํจ์จ์ฑ์ด ๋จ์ด์ง๊ณ ๋น์ฉ์ด ํผ |
๋ฐ์ํ
'๐ Study > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Memory] ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ (0) | 2022.05.25 |
---|---|
[Memory] Paging VS Segmentation (0) | 2022.05.25 |
Multi process VS Multi thread (0) | 2022.05.25 |
Thread์ Multi Thread (0) | 2022.05.09 |
Process์ Multi Process (0) | 2022.04.26 |