ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC)
์ด์์ฒด์ ๋ด์์ ์คํ๋๋ ๋ณํ ํ๋ก์ธ์ค๋ค์ ๋ ๋ฆฝ์ ์ด๊ฑฐ๋ ๋๋ ํ๋ ฅ์ ์ธ ํ๋ก์ธ์ค ๋ค์ผ ์ ์์ต๋๋ค. ํ๋ก์ธ์ค๊ฐ ์์คํ ์์ ์คํ ์ค์ธ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค๊ณผ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ์ง ์๋ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ ๋๋ค. ํ๋ก์ธ์ค๊ฐ ์์คํ ์์ ์คํ ์ค์ธ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ ์ํฅ์ ์ฃผ๊ฑฐ๋ ๋ฐ๋๋ค๋ฉด ์ด๋ ํ๋ ฅ์ ์ธ ํ๋ก์ธ์ค๋ค์ ๋๋ค. ๋ถ๋ช ํ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค๊ณผ ์๋ฃ๋ฅผ ๊ณต์ ํ๋ ํ๋ก์ธ์ค๋ ์ํธ ํ๋ ฅ์ ์ธ ํ๋ก์ธ์ค์ ๋๋ค.
ํ๋ก์ธ์ค ํ๋ ฅ์ ํ์ฉํ๋ ํ๊ฒฝ์ ์ ๊ณตํ๋ ๋ฐ๋ ๋ช ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค.
- ์ ๋ณด ๊ณต์ (information sharing): ์ฌ๋ฌ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋์ผํ ์ ๋ณด(์๋ฅผ ๋ค๋ฉด, ๋ณต์ฌ์ ๋ถ์ฌ๋ฃ๊ธฐ)์ ํฅ๋ฏธ๋ฅผ ๋๋ ์ ์์ผ๋ฏ๋ก, ๊ทธ๋ฌํ ์ ๋ณด๋ฅผ ๋ณํ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํด์ผ ํ๋ค.
- ๊ณ์ฐ ๊ฐ์ํ(computation speedup): ๋ง์ผ ์ฐ๋ฆฌ๊ฐ ํน์ ํ์คํฌ๋ฅผ ๋นจ๋ฆฌ ์คํํ๊ณ ์ ํ๋ค๋ฉด, ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์๋ธํ์คํฌ๋ก ๋๋์ด ์ด๋ค ๊ฐ๊ฐ์ด ๋ค๋ฅธ ์๋ธ ํ์คํฌ๋ค๊ณผ ๋ณ๋ ฌ๋ก ์คํ๋๊ฒ ํด์ผ ํ๋ค. ์ด๋ฌํ ๊ฐ์ํ๋ ๋ณต์ ๊ฐ์ ์ฒ๋ฆฌ ์ฝ์ด๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ์๋ง ๋ฌ์ฑํ ์ ์์์ ์ ์ํด๋ผ.
- ๋ชจ๋์ฑ(modularity): ์ฐ๋ฆฌ๋ ์์คํ ๊ธฐ๋ฅ์ ๋ณ๋์ ํ๋ก์ธ์ค๋ค ๋๋ ์ค๋ ๋๋ค๋ก ๋๋์ด, ๋ชจ๋์ ํํ๋ก ์์คํ ์ ๊ตฌ์ฑํ๊ธฐ๋ฅผ ์ํ ์ ์๋ค.
ํ๋ ฅ์ ํ๋ก์ธ์ค๋ค์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์๋, ์ฆ ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ฑฐ๋ ๋ฐ์ ์ ์๋ ํ๋ก์ธ์ค ๊ฐ ํต์ (interprocess communication, IPC) ๊ธฐ๋ฒ์ด ํ์ํฉ๋๋ค. ํ๋ก์ธ์ค ๊ฐ ํต์ ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณต์ ๋ฉ๋ชจ๋ฆฌ(shared memory)์ ๋ฉ์์ง ์ ๋ฌ(message passing)์ ๋ ๊ฐ์ง ๋ชจ๋ธ์ด ์์ต๋๋ค. ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์์๋ ํ๋ ฅ ํ๋ก์ธ์ค๋ค์ ์ํด ๊ณต์ ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ญ์ผ๋ก ๊ตฌ์ถ๋ฉ๋๋ค. ํ๋ก์ธ์ค๋ค์ ๊ทธ ์์ญ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๊ณ ํจ์ผ๋ก์จ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์์ต๋๋ค. ๋ฉ์์ง ์ ๋ฌ ๋ชจ๋ธ์์๋ ํต์ ์ด ํ๋ ฅ ํ๋ก์ธ์ค๋ค ์ฌ์ด์ ๊ตํ๋๋ ๋ฉ์์ง๋ฅผ ํตํ์ฌ ์ด๋ฃจ์ด์ง๋๋ค. ์ด ๋ ๋ชจ๋ธ์ด ์๋์ ์ด๋ฏธ์ง์ ๋๋น๋์ด ์์ต๋๋ค.
์ธ๊ธ๋ ๋ ๋ชจ๋ธ์ ์ด์์ฒด์ ์์๋ ํต์์ ์ด๋ฉฐ ๋ง์ ์์คํ ์ด ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ๊ตฌํํฉ๋๋ค. ๋ฉ์์ง ์ ๋ฌ ๋ชจ๋ธ์ ์ถฉ๋์ ํํผํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๋๋ฐ ์ ์ฉํฉ๋๋ค. ๋ฉ์์ง ์ ๋ฌ์ ๋ํ ๋ถ์ฐ ์์คํ ์์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๊ตฌํํ๊ธฐ ์ฝ์ต๋๋ค. ๋ฉ์์ง ์ ๋ฌ ์์คํ ์ ํต์ ์์คํ ์ฝ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋๋ฏ๋ก ์ปค๋ ๊ฐ์ญ ๋ฑ์ ๋ถ๊ฐ์ ์ธ ์๊ฐ ์๋น ์์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์ด ๋ฉ์์ง ์ ๋ฌ๋ณด๋ค ๋ ๋น ๋ฆ ๋๋ค. ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์คํ ์์๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ตฌ์ถํ ๋๋ง ์์คํ ์ฝ์ด ํ์ํฉ๋๋ค. ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ๊ตฌ์ถ๋๋ฉด ๋ชจ๋ ์ ๊ทผ์ ์ผ๋ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ผ๋ก ์ทจ๊ธ๋์ด ์ปค๋์ ๋์์ด ํ์ ์์ต๋๋ค.
๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์คํ ์์์ ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC in Shared-Memory Systems)
๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ธ์ค ๊ฐ ํต์ ์์๋ ํต์ ํ๋ ํ๋ก์ธ์ค๋ค์ด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ตฌ์ถํด์ผ ํฉ๋๋ค. ํต์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ๋ฅผ ์์ฑํ๋ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์ ์์นํฉ๋๋ค. ์ด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ๋ฅผ ์ด์ฉํ์ฌ ํต์ ํ๊ณ ์ ํ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ ์ด ์ธ๊ทธ๋จผํธ๋ฅผ ์์ ์ ์ฃผ์ ๊ณต๊ฐ์ ์ถ๊ฐํ์ฌ์ผ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด์์ฒด์ ๋ ํ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ๊ฒ์ ๊ธ์งํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํด์ผํฉ๋๋ค. ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ ์ด์์ ํ๋ก์ธ์ค๊ฐ ์ด ์ ์ฝ ์กฐ๊ฑด์ ์ ๊ฑฐํ๋ ๊ฒ์ ๋์ํ๋ ๊ฒ์ ํ์๋ก ํฉ๋๋ค. ๊ทธ๋ฐ ํ์ ํ๋ก์ธ์ค๋ค์ ๊ณต์ ์์ญ์ ์ฝ๊ณ ์์ผ๋ก์จ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ์ ํ์๊ณผ ์์น๋ ์ด๋ค ํ๋ก์ธ์ค์ ์ํด ๊ฒฐ์ ๋๋ฉฐ ์ด์์ฒด์ ์ ์๊ด์ด ์๋๋๋ค. ๋ํ ํ๋ก์ธ์ค๋ค์ ๋์์ ๋์ผํ ์์น์ ์ฐ์ง ์๋๋ก ์ฑ ์์ ธ์ผ ํฉ๋๋ค.
ํ๋ ฅํ๋ ํ๋ก์ธ์ค์ ๊ฐ๋ ์ ์ค๋ช ํ๊ธฐ ์ํด์, ํ๋ ฅํ๋ ํ๋ก์ธ์ค์ ์ผ๋ฐ์ ์ธ ํจ๋ฌ๋ค์์ธ ์์ฐ์-์๋น์ ๋ฌธ์ ๋ฅผ ์๊ฐํด ๋ณด๊ธฐ๋ก ํฉ์๋ค. ์์ฐ์ ํ๋ก์ธ์ค๋ ์ ๋ณด๋ฅผ ์์ฐํ๊ณ ์๋น์ ํ๋ก์ธ์ค๋ ์ ๋ณด๋ฅผ ์๋นํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํ์ผ๋ฌ๋ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ์์ฐํ๊ณ , ์ด์ ๋ธ๋ฌ๋ ์ด๊ฒ์ ์๋นํฉ๋๋ค. ์ด์ ๋ธ๋ฌ๋ ์ด์ด ๋ชฉ์ ๋ชจ๋(object module)์ ์์ฐํ ์ ์๊ณ , ์ ์ฌ๊ธฐ(loader)๋ ์ด๋ค์ ์๋นํฉ๋๋ค. ์์ฐ์ ์๋น์ ๋ฌธ์ ๋ ํด๋ผ์ด์ธํธ ์๋ฒ ํจ๋ฌ๋ค์์ ์ํ ์ ์ฉํ ์์ ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์๋ฒ๋ฅผ ์์ฐ์๋ก ํด๋ผ์ด์ธํธ๋ฅผ ์๋น์๋ก ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ์น ์๋ฒ๋ HTML ํ์ผ๊ณผ ์ด๋ฏธ์ง์ ๊ฐ์ ์น ์ฝํ ์ธ ๋ฅผ ์์ฐํ๊ณ (์ฆ, ์ ๊ณตํ๊ณ ) ์ด ์์๋ค์ ์์ฒญํ ํด๋ผ์ด์ธํธ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋นํ๊ฒ ๋ฉ๋๋ค.(์ฆ ์ฝ๋๋ค)
์์ฐ์-์๋น์ ๋ฌธ์ ์ ํ๋์ ํด๊ฒฐ์ฑ ์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์์ฐ์์ ์๋น์ ํ๋ก์ธ์ค๋ค์ด ๋ณํ์ผ๋ก ์คํ๋๋๋ก ํ๋ ค๋ฉด, ์์ฐ์๊ฐ ์ ๋ณด๋ฅผ ์ฑ์๋ฃ๊ณ ์๋น์๊ฐ ์๋ชจํ ์ ์๋ ํญ๋ชฉ๋ค์ ๋ฒํผ๊ฐ ๋ฐ๋์ ์ฌ์ฉ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค. ์ด ๋ฒํผ๋ ์์ฐ์์ ์๋น์๊ฐ ๊ณต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์กด์ฌํ๊ฒ ๋ฉ๋๋ค. ์์ฐ์๊ฐ ํ ํญ๋ชฉ์ ์์ฐํ๊ณ , ๊ทธ๋์์ ์๋น์๋ ๋ค๋ฅธ ํญ๋ชฉ์ ์๋นํ ์ ์์ต๋๋ค. ์์ฐ์์ ์๋น์๊ฐ ๋ฐ๋์ ๋๊ธฐํ๋์ด์ผ ์์ฐ๋์ง๋ ์์ ํญ๋ชฉ๋ค์ ์๋น์๊ฐ ์๋ํ์ง ์์ ๊ฒ์ ๋๋ค.
๋ ๊ฐ์ง ์ ํ์ ๋ฒํผ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฌดํ ๋ฒํผ(unbounded buffer)์ ์์ฐ์ ์๋น์ ๋ฌธ์ ์์๋ ๋ฒํผ์ ํฌ๊ธฐ์ ์ค์ง์ ์ธ ํ๊ณ๊ฐ ์์ต๋๋ค. ์๋น์๋ ์๋ก์ด ํญ๋ชฉ์ ๊ธฐ๋ค๋ ค์ผ๋ง ํ ์๋ ์์ง๋ง, ์์ฐ์๋ ํญ์ ์๋ก์ด ํญ๋ชฉ์ ์์ฐํ ์ ์์ต๋๋ค. ์ ํ ๋ฒํผ(bounded buffer)๋ ๋ฒํผ์ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ฒํผ๊ฐ ๋น์ด ์์ผ๋ฉด ์๋น์๋ ๋ฐ๋์ ๋๊ธฐํด์ผ ํ๋ฉฐ, ๋ชจ๋ ๋ฒํผ๊ฐ ์ฑ์์ ธ ์์ผ๋ฉด ์์ฐ์๊ฐ ๋๊ธฐํด์ผ ํฉ๋๋ค.
์ ํ ๋ฒํผ๊ฐ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ํ๋ก์ธ์ค๊ฐ ํต์ ์ ์ด๋ป๊ฒ ๋ถ๋ช ํ๊ฒ ํ๋์ง ์ดํด๋ด ์๋ค. ๋ค์ ๋ณ์๋ค์ ์์ฐ์์ ์๋น์ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์กด์ฌํฉ๋๋ค.
#define BUFFER SIZE 10
typedef struct {
...
} item;
item buffer[BUFFER SIZE];
int in = 0;
int out = 0;
๊ณต์ ๋ฒํผ๋ ๋ ๊ฐ์ ๋ ผ๋ฆฌ ํฌ์ธํฐ in๊ณผ out์ ๊ฐ๋ ์ํ ๋ฐฐ์ด๋ก ๊ตฌํ๋ฉ๋๋ค. ๋ณ์ in์ ๋ฒํผ ๋ด์์ ๋ค์์ผ๋ก ๋น์ด ์๋ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ, out์ ๋ฒํผ ๋ด์์ ์ฒซ ๋ฒ์งธ๋ก ์ฑ์์ ธ ์๋ ์์น๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. in==out; ์ผ ๋ ๋ฒํผ๋ ๋น์ด ์๊ณ , ((in+1)% BUFFER_SIZE) == out)์ด๋ฉด ๋ฒํผ๋ ๊ฐ๋ ์ฐจ ์์ต๋๋ค.
์์ฐ์์ ์๋น์์ ์ฝ๋๊ฐ ์๋์ ๋ํ๋ ์์ต๋๋ค.
๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์์ฐ์ ํ๋ก์ธ์ค
// ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์์ฐ์ ํ๋ก์ธ์ค
item next produced;
while (true) {
/* produce an item in next produced */
while (((in + 1) % BUFFER SIZE) == out)
; /* do nothing */
buffer[in] = next produced;
in = (in + 1) % BUFFER SIZE;
}
๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์๋น์ ํ๋ก์ธ์ค
// ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์๋น์ ํ๋ก์ธ์ค
item next consumed;
while (true) {
while (in == out)
; /* do nothing */
next consumed = buffer[out];
out = (out + 1) % BUFFER SIZE;
/* consume the item in next consumed */
}
์์ฐ์ ํ๋ก์ธ์ค๋ next_Produced๋ผ๋ ์ง์ญ ๋ณ์์ ๋ค์๋ฒ ์์๋๋ item์ ์ ์ฅํ๊ณ ์์ต๋๋ค. ์๋น์ ์ฝ๋๋ next_Consumed๋ผ๋ ์ง์ญ ๋ณ์์ ๋ค์๋ฒ ์๋น๋๋ item์ ์ ์ฅํ๊ณ ์์ต๋๋ค.
์ด ๋ฐฉ๋ฒ์ ์ต๋ BUFFER_SIZE - 1 ๊น์ง๋ง์ ๋ฒํผ์ ์์ฉํ ์ ์์ต๋๋ค.
๋ฉ์์ง ์ ๋ฌ ์์คํ ์์์ ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC in Message-Passing Systems)
๋ฐ๋ก ๋ฐฉ๊ธ ์๋ก ํ๋ ฅํ๋ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ํ๊ฒฝ์์ ์ด๋ป๊ฒ ์ํธ ํต์ ์ ํํ๋์ง ์์๋ณด์์ต๋๋ค. ๊ทธ ๊ธฐ๋ฒ์ ํ๋ก์ธ์ค๋ค์ด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ณต์ ํ ๊ฒ์ ํ์๋ก ํ๋ฉฐ, ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๊ณ ์กฐ์ํ๋ ์ฝ๋๊ฐ ์์ฉ ํ๋ก๊ทธ๋๋จธ์ ์ํด ๋ช ์์ ์ผ๋ก ์์ฑ๋์ด์ผ ํ์ต๋๋ค. ๋์ผํ ํจ๊ณผ๋ฅผ ์ป๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ด์์ฒด์ ๊ฐ ๋ฉ์์ง ์ ๋ฌ ์ค๋น๋ฅผ ํตํ์ฌ ์๋ก ํ๋ ฅํ๋ ํ๋ก์ธ์ค ๊ฐ์ ํต์ ์๋จ์ ์ ๊ณตํด ์ฃผ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์์ ๋์ผํ ์ฃผ์ ๊ณต๊ฐ์ ๊ณต์ ํ์ง ์๊ณ ๋ ํ๋ก์ธ์ค๋ค์ด ํต์ ์ ํ๊ณ , ๊ทธ๋ค์ ๋์์ ๋๊ธฐํํ ์ ์๋๋ก ํ์ฉํ๋ ๊ธฐ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์์ ํต์ ํ๋ ํ๋ก์ธ์ค๋ค์ด ๋คํธ์ํฌ์ ์ํด ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ์ปดํจํฐ๋ค์ ์กด์ฌํ ์ ์๋ ๋ถ์ฐ ํ๊ฒฝ์์ ํนํ ์ ์ฉํฉ๋๋ค. ํ ์๋ก ์๋ ์์ด๋ ์น์ ์ฌ์ฉ๋๋ chat ํ๋ก๊ทธ๋จ์ ์๋ก ๋ฉ์์ง๋ฅผ ๊ตํํ์ฌ ํต์ ํ๋๋ก ์ค๊ณ๋ ์ ์์ต๋๋ค.
๋ฉ์์ง ์ ๋ฌ ์์คํ ์ ์ต์ํ ๋ ๊ฐ์ง ์ฐ์ฐ์ ์ ๊ณตํฉ๋๋ค.
- send(message)
- receive(message)
ํ๋ก์ธ์ค๊ฐ ๋ณด๋ธ ๋ฉ์์ง๋ ๊ณ ์ ๊ธธ์ด์ผ ์๋ ์๊ณ ๊ฐ๋ณ ๊ธธ์ด์ผ ์๋ ์์ต๋๋ค. ๊ณ ์ ๊ธธ์ด ๋ฉ์์ง๋ง ๋ณด๋ผ ์ ์๋ค๋ฉด, ์์คํ ์์ค์ ๊ตฌํ์ ์ง์ ์ ์ ๋๋ค. ๊ทธ๋ ์ง๋ง, ์ด๋ฌํ ์ ํ์ ํ๋ก๊ทธ๋๋ฐ ์์ ์ ๋์ฑ ํ๋ค๊ฒ ํฉ๋๋ค. ๋ฐ๋ฉด์, ๊ฐ๋ณ ๊ธธ์ด ๋ฉ์์ง๋ ๋ณด๋ค ๋ณต์กํ ์์คํ ์์ค์ ๊ตฌํ์ด ์์ด์ผ ํ์ง๋ง, ํ๋ก๊ทธ๋๋ฐ ์์ ์ ๋ ๊ฐ๋จํด์ง๋๋ค. ์ด๋ฌํ ์ผ์ ์ด์ ์ฒด์ ์ค๊ณ ์ ๋ฐ์ ๊ฑธ์ณ ํํ ๋ณผ ์ ์๋ ๊ตํ์ ๋๋ค.
๋ง์ฝ ํ๋ก์ธ์ค P์ Q๊ฐ ํต์ ์ ์ํ๋ฉด, ๋ฐ๋์ ์๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ๋ฐ์์ผ ํฉ๋๋ค. ์ด๋ค ์ฌ์ด์ ํต์ ์ฐ๊ฒฐ(communication link)์ด ์ค์ ๋์ด์ผ ํฉ๋๋ค. ์ด ์ฐ๊ฒฐ์ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฐ๊ฒฐ์ ๋ฌผ๋ฆฌ์ ์ธ ๊ตฌํ์ ๊ด์ฌ์ด ์๋ ๊ฒ์ด ์๋๋ผ, ๋ ผ๋ฆฌ์ ์ธ ๊ตฌํ์ ๊ด์ฌ์ด ์์ต๋๋ค. ํ๋์ ๋งํฌ์ send() / receive() ์ฐ์ฐ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ตฌํํ๋ ๋ค์์ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ง์ ๋๋ ๊ฐ์ ํต์
- ๋๊ธฐ์ ๋๋ ๋น๋๊ธฐ์ ํต์
- ์๋ ๋๋ ๋ช ์์ ๋ฒํผ๋ง
๋ค์์ผ๋ก ์ด ํน์ฑ๊ณผ ๊ด๋ จ๋ ์์ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
(1) ๋ช ๋ช (Naming)
ํต์ ์ ์ํ๋ ํ๋ก์ธ์ค๋ค์ ์๋ก๋ฅผ ๊ฐ๋ฆฌํฌ ๋ฐฉ๋ฒ์ด ์์ด์ผ ํฉ๋๋ค. ์ด๋ค์ ๊ฐ์ ํต์ ๋๋ ์ง์ ํต์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ง์ ํต์ ํ์์, ํต์ ์ ์ํ๋ ๊ฐ ํ๋ก์ธ์ค๋ ํต์ ์ ์์ ์ ๋๋ ์ก์ ์์ ์ด๋ฆ์ ๋ช ์ํด์ผ ํฉ๋๋ค. ์ด ๊ธฐ๋ฒ์์ send(), receive() ํ๋ฆฌ๋ฏธํฐ๋ธ๋ค์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํฉ๋๋ค.
- send(P, message) - ํ๋ก์ธ์ค P์ ๋ฉ์์ง๋ฅผ ์ ์กํฉ๋๋ค.
- receive(Q, message) - ํ๋ก์ธ์ค Q๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ์์ ํฉ๋๋ค.
์ด ๊ธฐ๋ฒ์์ ํต์ ์ฐ๊ฒฐ์ ๋ค์์ ํน์ฑ์ ๊ฐ์ง๋๋ค.
- ํต์ ์ ์ํ๋ ๊ฐ ํ๋ก์ธ์ค์ ์๋ค ์ฌ์ด์ ์ฐ๊ฒฐ์ด ์๋์ผ๋ก ๊ตฌ์ถ๋๋ค. ํ๋ก์ธ์ค๋ค์ ํต์ ํ๊ธฐ ์ํด ์๋๋ฐฉ์ ์ ์(identity)๋ง ์๋ฉด ๋๋ค.
- ์ฐ๊ฒฐ์ ์ ํํ ๋ ํ๋ก์ธ์ค ์ฌ์ด์๋ง ์ฐ๊ด๋๋ค.
- ํต์ ํ๋ ํ๋ก์ธ์ค๋ค์ ๊ฐ ์ ์ฌ์ด์๋ ์ ํํ๊ฒ ํ๋์ ์ฐ๊ฒฐ์ด ์กด์ฌํด์ผ ํ๋ค.
์ด ๊ธฐ๋ฒ์ ์ฃผ์ ๋ฐฉ์์์ ๋์นญ์ฑ์ ๋ณด์ ๋๋ค. ์ฆ, ์ก์ ์์ ์์ ์ ํ๋ก์ธ์ค๊ฐ ๋ชจ๋ ํต์ ํ๋ ค๋ฉด ์๋๋ฐฉ์ ์ด๋ฆ์ ์ ์ํด์ผ ํฉ๋๋ค. ์ด ๊ธฐ๋ฒ์ ๋ณํ์ผ๋ก์ ์ฃผ์ ์ง์ ์์ ๋น๋์นญ์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์ก์ ์๋ง ์์ ์ ์ด๋ฆ์ ์ง๋ช ํ๋ฉฐ, ์์ ์๋ ์ก์ ์์ ์ด๋ฆ์ ์ ์ํ ํ์๊ฐ ์์ต๋๋ค. ์ด ๊ธฐ๋ฒ์์ send()์ receive() ํ๋ฆฌ๋ฏธํฐ๋ธ๋ค์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํฉ๋๋ค.
- send(P, message) - ๋ฉ์์ง๋ฅผ ํ๋ก์ธ์ค P์ ์ ์กํ๋ค.
- receive(id, message) - ์์์ ํ๋ก์ธ์ค๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ์์ ํ๋ค. ๋ณ์ id๋ ํต์ ์ ๋ฐ์์ํจ ํ๋ก์ธ์ค์ ์ด๋ฆ์ผ๋ก ์ค์ ๋๋ค.
์ด๋ค ๊ธฐ๋ฒ(๋์นญ์ ๊ทธ๋ฆฌ๊ณ ๋น๋์นญ์ ) ๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ์ง์ ํ๋ ๋ฐฉ์ ๋๋ฌธ์ ๋ชจ๋์ฑ์ ์ ํํ๋ค๋ ๊ฒ์ด ๋จ์ ์ ๋๋ค. ํ๋ก์ธ์ค์ ์ด๋ฆ์ ๋ฐ๊พธ๋ฉด ๋ชจ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค ์ง์ ๋ถ๋ถ์ ๊ฒ์ฌํ ํ์๊ฐ ์์ ์ ์์ต๋๋ค. ์ ์ด๋ฆ๋ค์ ๋ํ ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ๋ฐ๋์ ์ฐพ์์ ์๋ก์ด ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ํ๋ ์ฝ๋ฉ(hard-coding) ๊ธฐ๋ฒ์, ์ด ์ํฉ์์๋ ์ ์์ ๋ช ์์ ์ผ๋ก ํ์ํด์ผ ํฉ๋๋ค. ๋ค์์ ์ค๋ช ํ ๊ฐ์ ์ ์ธ ๋ฐฉ์์ ๋นํด ๋ฐ๋์งํ์ง ์์ต๋๋ค.
๊ฐ์ ํต์ ์์ ๋ฉ์์ง๋ค์ ๋ฉ์ผ๋ฐ์ค(mailbox) ๋๋ ํฌํธ(port)๋ก ์ก์ ๋๊ณ , ๊ทธ๊ฒ์ผ๋ก๋ถํฐ ์์ ๋ฉ๋๋ค. ๋ฉ์ผ๋ฐ์ค๋ ์ถ์์ ์ผ๋ก ํ๋ก์ธ์ค๋ค์ ์ํด ๋ฉ์์ง๋ค์ด ๋ฃ์ด์ง๊ณ , ๋ฉ์์ง๋ค์ด ์ ๊ฑฐ๋ ์ ์๋ ๊ฐ์ฒด๋ผ๊ณ ๋ ๋ณผ ์ ์์ต๋๋ค. ๊ฐ ๋ฉ์ผ๋ฐ์ค๋ ๊ณ ์ ์ id๋ฅผ ๊ฐ์ง๋๋ค. ์๋ฅผ ๋ค์ด POSIX ๋ฉ์์ง ํ๋ ๋ฉ์ผ๋ฐ์ค๋ฅผ ์๋ณํ๊ธฐ ์ํ์ฌ ์ ์ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค. ์ด ๊ธฐ๋ฒ์์ ํ๋ก์ธ์ค๋ ๋ค์์ ์์ดํ ๋ฉ์ผ๋ฐ์ค๋ฅผ ํตํด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค๊ณผ ํต์ ํ ์ ์์ต๋๋ค. ๋ ํ๋ก์ธ์ค๋ค์ด ๊ณต์ ๋ฉ์ผ๋ฐ์ค๋ฅผ ๊ฐ์ง ๋๋ง ์ด๋ค ํ๋ก์ธ์ค๊ฐ ํต์ ํ ์ ์์ต๋๋ค. send()์ receive() ํ๋ฆฌ๋ฏธํฐ๋ธ๋ค์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ์ ์์ต๋๋ค.
- send(A, message) - ๋ฉ์์ง๋ฅผ ๋ฉ์ผ๋ฐ์ค A๋ก ์ก์ ํ๋ค.
- receive(A, message) - ๋ฉ์์ง๋ฅผ ๋ฉ์ผ๋ฐ์ค A๋ก๋ถํฐ ์์ ํ๋ค.
์ด ๋ฐฉ๋ฒ์์ ํต์ ์ฐ๊ฒฐ์ ๋ค์์ ์ฑ์ง์ ๊ฐ์ง๋๋ค.
- ํ ์์ ํ๋ก์ธ์ค๋ค ์ฌ์ด์ ์ฐ๊ฒฐ์ ์ด๋ค ํ๋ก์ธ์ค๊ฐ ๊ณต์ ๋ฉ์ผ๋ฐ์ค๋ฅผ ๊ฐ์ง ๋๋ง ๊ตฌ์ถ๋ฉ๋๋ค.
- ์ฐ๊ฒฐ์ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๋ค๊ณผ ์ฐ๊ด๋ ์ ์์ต๋๋ค.
- ํต์ ํ๊ณ ์๋ ๊ฐ ํ๋ก์ธ์ค ์ฌ์ด์๋ ๋ค์์ ์๋ก ๋ค๋ฅธ ์ฐ๊ฒฐ์ด ์กด์ฌํ ์ ์๊ณ , ๊ฐ ์ฐ๊ฒฐ์ ํ๋์ ๋ฉ์ผ๋ฐ์ค์ ๋์๋ฉ๋๋ค.
ํ๋ก์ธ์ค P1, P2, P3๊ฐ ๋ชจ๋ ๋ฉ์ผ๋ฐ์ค A๋ฅผ ๊ณต์ ํ๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. ํ๋ก์ธ์ค P1์ ๋ฉ์์ง๋ฅผ A์ ์ก์ ํ๊ณ , P2์ P3๋ ๊ฐ๊ฐ A๋ก๋ถํฐ receive()๋ฅผ ์คํํฉ๋๋ค. ์ด๋ ํ๋ก์ธ์ค๊ฐ P1์ด ๋ณด๋ธ ๋ฉ์์ง๋ฅผ ์์ ํ ๊น์? ์ด ๋ฌธ์ ์ ๋ํ ๋ต์ ์ฐ๋ฆฌ๊ฐ ์ ํํ ๊ธฐ๋ฒ์ ์ข์ฐ๋ฉ๋๋ค.
- ํ๋์ ๋งํฌ๋ ์ต๋ ๋ ๊ฐ์ ํ๋ก์ธ์ค์ ์ฐ๊ด๋๋๋ก ํ์ฉํ๋ค.
- ํ์๊ฐ์ ์ต๋๋ก ํ๋์ ํ๋ก์ธ์ค๊ฐ receive() ์ฐ์ฐ์ ์คํํ๋๋ก ํ์ฉํ๋ค.
- ์ด๋ ํ๋ก์ธ์ค๊ฐ ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฒ์ธ์ง ์์คํ ์ด ์์๋ก ์ ํํ๋๋ก ํ๋ค(์ฆ, ๋ ํ๋ก์ธ์ค ๋ชจ๋๋ ์๋๊ณ P2๋ P3 ์ค ํ๋๊ฐ ๋ฉ์์ง๋ฅผ ์์ ํ๋ค). ์์คํ ์ด ์ด๋ ํ๋ก์ธ์ค๊ฐ ์์ ํ ๊ฒ์ธ์ง๋ฅผ ์ ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํ ์ ์๋ค(์๋ฅผ ๋ค๋ฉด, ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์์๋ ํ๋ก์ธ์ค๊ฐ ๋์๊ฐ๋ฉด์ ๋ฉ์์ง๋ฅผ ์์ ํ๋ค). ์์คํ ์ ์ก์ ์์๊ฒ ์์ ์๋ฅผ ์๋ ค ์ค ์ ์๋ค.
๋ฉ์ผ๋ฐ์ค๋ ํ ํ๋ก์ธ์ค ๋๋ ์ด์์ฒด์ ์ ์ํด ์์ ๋ ์ ์์ต๋๋ค. ๋ฉ์ผ๋ฐ์ค๊ฐ ํ ํ๋ก์ธ์ค์ ์ํด ์์ ๋๋ค๋ฉด(์ฆ, ๋ฉ์ผ๋ฐ์ค๊ฐ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์ ์ผ๋ถ์ ๋๋ค), ์ฐ๋ฆฌ๋ ์์ ์(์ด ๋ฉ์ผ๋ฐ์ค๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ์์ ๋ง ๊ฐ๋ฅํ ํ๋ก์ธ์ค)์ ๋ฉ์ผ๋ฐ์ค์ ์ฌ์ฉ์๋ฅผ(๋ฉ์ผ๋ฐ์ค์ ๋ฉ์์ง๋ฅผ ์ก์ ๋ง ํ ์ ์๋ ํ๋ก์ธ์ค) ๊ตฌ๋ถํ ์ ์์ต๋๋ค. ๊ฐ ๋ฉ์ผ๋ฐ์ค๊ฐ ๊ณ ์ ํ ์์ ์๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ์ด ๋ฉ์ผ๋ฐ์ค๋ก ๋ณด๋ด์ง ๋ฉ์์ง๋ฅผ ์ด๋ ํ๋ก์ธ์ค๊ฐ ์์ ํ ์ง์ ๋ํ ํผ๋์ด ์๊ธฐ์ง ์์ต๋๋ค. ๋ฉ์ผ๋ฐ์ค๋ฅผ ์์ ํ๊ณ ์๋ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃํ ๋, ๋ฉ์ผ ๋ฐ์ค๋ ์ฌ๋ผ์ง๋๋ค. ๊ทธ ํ์ ์ด ๋ฉ์ผ๋ฐ์ค๋ก ๋ฉ์์ง๋ฅผ ์ก์ ํ๋ ๋ชจ๋ ํ๋ก์ธ์ค๋ ๋๋ ๋ฉ์ผ๋ฐ์ค๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ ์ฌ์ค์ ๋ฐ๋์ ํต๋ณด๋ฐ์์ผ ํฉ๋๋ค.
๋ฐ๋ฉด์, ์ด์์ฒด์ ๊ฐ ์์ ํ ๋ฉ์ผ๋ฐ์ค๋ ์์ฒด์ ์ผ๋ก ์กด์ฌํฉ๋๋ค. ์ด๊ฒ์ ๋ ๋ฆฝ์ ์ธ ๊ฒ์ผ๋ก ์ด๋ค ํน์ ํ ํ๋ก์ธ์ค์ ์์๋์ง ์์ต๋๋ค. ์ด์์ฒด์ ๋ ํ ํ๋ก์ธ์ค์ ๋ค์์ ํ ์ ์๋๋ก ํ์ฉํ๋ ๊ธฐ๋ฒ์ ๋ฐ๋์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
- ์๋ก์ด ๋ฉ์ผ๋ฐ์ค๋ฅผ ์์ฑํ๋ค.
- ๋ฉ์ผ๋ฐ์ค๋ฅผ ํตํด ๋ฉ์์ง๋ฅผ ์ก์ ํ๊ณ ์์ ํ๋ค.
- ๋ฉ์ผ๋ฐ์ค๋ฅผ ์ญ์ ํ๋ค.
์๋ก์ด ๋ฉ์ผ๋ฐ์ค๋ฅผ ์์ฑํ๋ ํ๋ก์ธ์ค๋ ๋ํดํธ๋ก ๋ฉ์ผ๋ฐ์ค์ ์์ ์๊ฐ ๋ฉ๋๋ค. ์ด๊ธฐ์๋, ์์ ์๋ง์ด ์ด ๋ฉ์ผ๋ฐ์ค๋ฅผ ํตํด ๋ฉ์์ง๋ฅผ ์์ ํ ์ ์๋ ์ ์ผํ ํ๋ก์ธ์ค์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ ๊ถ๊ณผ ์์ ํน๊ถ์ ์ ์ ํ ์์คํ ์ฝ์ ํตํด ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ ๋ฌ๋ ์ ์์ต๋๋ค. ๋ฌผ๋ก ์ด๋ฐ ๊ท์น์ผ๋ก ์ธํด ๋ฉ์ผ๋ฐ์ค๋ง๋ค ๋ณต์์ ์์ ์๋ค์ ๋ณ์ ์ ์์ต๋๋ค.
(2) ๋๊ธฐํ(Synchronization)
ํ๋ก์ธ์ค ๊ฐ์ ํต์ ์ send์ receive ํ๋ฆฌ๋ฏธํฐ๋ธ์ ๋ํ ํธ์ถ์ ์ํด ๋ฐ์ํฉ๋๋ค. ๊ฐ ํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ์๋ก ๋ค๋ฅธ ์ค๊ณ ์ต์ ์ด ์์ต๋๋ค. ๋ฉ์์ง ์ ๋ฌ์ ๋ด์ํ(blocking)์ด๊ฑฐ๋ ๋น ๋ด์ํ(nonblocking) ๋ฐฉ์์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. ์ด ๋ ๋ฐฉ์์ ๊ฐ๊ฐ ๋๊ธฐ์, ๋น๋๊ธฐ์์ด๋ผ๊ณ ๋ ์๋ ค์ ธ ์์ต๋๋ค.
- ๋ด์ํ ๋ณด๋ด๊ธฐ: ์ก์ ํ๋ ํ๋ก์ธ์ค๋ ๋ฉ์์ง๊ฐ ์์ ํ๋ก์ธ์ค ๋๋ ๋ฉ์ผ๋ฐ์ค์ ์ํด ์์ ๋ ๋๊น์ง ๋ด์๋๋ค.
- ๋น๋ด์ํ ๋ณด๋ด๊ธฐ: ์ก์ ํ๋ ํ๋ก์ธ์ค๊ฐ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ์์ ์ ์ฌ์์ํ๋ค.
- ๋ด์ํ ๋ฐ๊ธฐ: ๋ฉ์์ง๊ฐ ์ด์ฉ ๊ฐ๋ฅํ ๋๊น์ง ์์ ํ๋ก์ธ์ค๊ฐ ๋ด์๋๋ค.
- ๋น๋ด์ํ ๋ฐ๊ธฐ: ์ก์ ํ๋ ํ๋ก์ธ์ค๊ฐ ์ ์ํ ๋ฉ์์ง ๋๋ ๋(null)์ ๋ฐ๋๋ค.
send()์ reeive()์ ๋ค๋ฅธ ์กฐํฉ๋ ๊ฐ๋ฅํฉ๋๋ค. send()์ receive()๊ฐ ๋ชจ๋ ๋ด์ํ์ผ ๋, ์ฐ๋ฆฌ๋ ์ก์ ์์ ์์ ์ ๊ฐ์ ๋๋ฐ๋ถ(rendezvous)๋ฅผ ํ๊ฒ ๋ฉ๋๋ค. ๋ด์ํ send()์ receive()๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์์ฐ์์ ์๋น์ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฌ์ํ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ์์ฐ์๋ ๋จ์ํ ๋ด์ํ send()๋ฅผ ํธ์ถํ๊ณ ๋ฉ์์ง๊ฐ ์์ ์ ๋๋ ๋ฉ์ผ๋ฐ์ค์ ์ ๋ฌ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ ์ฌํ๊ฒ ์๋น์๊ฐ receive()๋ฅผ ํธ์ถํ๋ฉด ๋ฉ์์ง๊ฐ ์ ๋ฌ๋ ๋๊น์ง ๋ด์๋ฉ๋๋ค. ์๋์ ๋ ์ฝ๋๊ฐ ์ด ๋์์ ์ค๋ช ํ๊ณ ์์ต๋๋ค.
๋ฉ์์ง ์ ๋ฌ์ ์ฌ์ฉํ๋ ์์ฐ์ ํ๋ก์ธ์ค
message next produced;
while (true) {
/* produce an item in next produced */
send(next produced);
}
๋ฉ์์ง ์ ๋ฌ์ ์ฌ์ฉํ๋ ์๋น์ ํ๋ก์ธ์ค
message next consumed;
while (true) {
receive(next consumed);
/* consume the item in next consumed */
}
(3) ๋ฒํผ๋ง(Buffering)
ํต์ ์ด ์ง์ ์ ์ด๋ ๊ฐ์ ์ ์ด๋ ๊ฐ์, ํต์ ํ๋ ํ๋ก์ธ์ค๋ค์ ์ํด ๊ตํ๋๋ ๋ฉ์์ง๋ ์์ ํ์ ๋ค์ด ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฌํ ํ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ์์ ์ธ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
- ๋ฌด์ฉ๋(zero capacity): ํ์ ์ต๋ ๊ธธ์ด๊ฐ 0์ด๋ค. ์ฆ, ๋งํฌ๋ ์์ฒด ์์ ๋๊ธฐํ๋ ๋ฉ์์ง๋ค์ ๊ฐ์ง ์ ์๋ค. ์ด ๊ฒฝ์ฐ์, ์ก์ ์๋ ์์ ์๊ฐ ๋ฉ์์ง๋ฅผ ์์ ํ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
- ์ ํ ์ฉ๋(bounded capacity): ํ๋ ์ ์ผํ ๊ธธ์ด n์ ๊ฐ์ง๋ค. ์ฆ ์ต๋ n๊ฐ์ ๋ฉ์์ง๊ฐ ๊ทธ ์์ ๋ค์ด ์์ ์ ์๋ค. ์๋ก์ด ๋ฉ์์ง๊ฐ ์ ์ก๋ ๋ ํ๊ฐ ๊ฝ ์ฐจ์ง ์์๋ค๋ฉด, ๋ฉ์์ง๋ ํ์ ๋์ด๋ฉฐ(๋ฉ์์ง๊ฐ ๋ณต์ฌ๋๋ ์ง ๋๋ ๋ฉ์์ง์ ๋ํ ํฌ์ธํฐ๊ฐ ์ ์ง๋๋ค), ์ก์ ์๋ ๋๊ธฐํ์ง ์๊ณ ์คํ์ ๊ณ์ํ๋ค. ๊ทธ๋ ์ง๋ง, ๋งํฌ๋ ์ ํํ ์ฉ๋์ ๊ฐ์ง๋ค. ๋งํฌ๊ฐ ๊ฝ ์ฐจ๋ฉด, ์ก์ ์๋ ํ ์์ ๊ณต๊ฐ์ด ์ด์ฉ ๊ฐ๋ฅํ ๋๊น์ง ๋ฐ๋์ ๋ด์๋์ด์ผ ํ๋ค.
- ๋ฌดํ ์ฉ๋(unbounded capacity): ํ๋ ์ ์ฌ์ ์ผ๋ก ๋ฌดํํ ๊ธธ์ด๋ฅผ ๊ฐ์ง๋ค. ๋ฐ๋ผ์ ๋ฉ์์ง๋ค์ด ์ผ๋ง๋ ์ง ํ ์์์ ๋๊ธฐํ ์ ์๋ค. ์ก์ฑ์๋ ์ ๋ ๋ด์๋์ง ์๋๋ค.
๋ฌด์ฉ๋์ ๊ฒฝ์ฐ๋ ๋๋๋ก ๋ฒํผ๊ฐ ์๋ ๋ฉ์์ง ์์คํ ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๋ค๋ฅธ ๊ฒฝ์ฐ๋ค์ ์๋ ๋ฒํผ๋ง์ด๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค.
'ComputerScience ๐ > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[OS] ์ค๋ ๋ ํ(thread pool) (0) | 2022.02.14 |
---|---|
[OS] ์ค๋ ๋์ ๋์์ฑ(Thread & Concurrency) (0) | 2022.02.14 |
[OS] IPC ์์คํ ์ ์ฌ๋ก(Examples of IPC Systems) (0) | 2022.02.10 |
[OS] ํ๋ก์ธ์ค์ ๊ฐ๋ (Process Concept) (0) | 2022.02.08 |
[OS] macOS, iOS ์ Android ์ด์์ฒด์ (0) | 2022.02.06 |
[OS] ์์คํ ์ฝ(System Calls) (0) | 2022.02.05 |
๋๊ธ