์ž„๊ณ„๊ตฌ์—ญ

์„œ์žฌยท2023๋…„ 6์›” 26์ผ

์šด์˜์ฒด์ œ

๋ชฉ๋ก ๋ณด๊ธฐ
2/3
post-thumbnail

๐Ÿšง ์ž„๊ณ„๊ตฌ์—ญ

๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•ด์„œ๋Š” ์•ˆ ๋˜๋Š” ๊ณต์œ  ์ž์›(์ž๋ฃŒ ๊ตฌ์กฐ ๋˜๋Š” ์žฅ์น˜)์— ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ์˜ ์ผ๋ถ€


โš ๏ธ ์ž„๊ณ„๊ตฌ์—ญ ๋ฌธ์ œ

์ž„๊ณ„ ๊ตฌ์—ญ์œผ๋กœ ์ง€์ •๋˜์–ด์•ผ ํ•  ์ฝ”๋“œ ์˜์—ญ์ด ์ž„๊ณ„ ๊ตฌ์—ญ์œผ๋กœ ์ง€์ •๋˜์ง€ ์•Š์•˜์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ

๐Ÿ’ก ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • ์ƒํ˜ธ๋ฐฐ์ œ (mutual exclusion)
    ์ž„๊ณ„๊ตฌ์—ญ์— ์ด๋ฏธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์Œ

  • ์ง„ํ–‰ (progress)
    ํ•˜๋‚˜์˜ ์ž„๊ณ„๊ตฌ์—ญ์— ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ‘๊ทผํ•  ๋•Œ, ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด๊ฐˆ์ง€ ๊ฒฐ์ •

  • ํ•œ์ •๋Œ€๊ธฐ (bounded waiting)
    ํ•œ ๋ฒˆ ์ž„๊ณ„๊ตฌ์—ญ์— ๋“ค์–ด๊ฐ„ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ ์ž„๊ณ„๊ตฌ์—ญ ์ ‘๊ทผ์— ์ œํ•œ์ด ์ƒ๊น€ ๊ธฐ์•„ ํ˜„์ƒ ๋ฐฉ์ง€


โš ๏ธ ๊ฒฝ์Ÿ ์œ„ํ—˜

๊ฒฝ์Ÿ ์กฐ๊ฑด์œผ๋กœ ์ธํ•ด ์ •์ƒ์ ์ธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ

๐Ÿ“Œ ๊ฒฝ์Ÿ ์กฐ๊ฑด (Race Condition)

๋‘ ๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณตํ†ต ์ž์› ๋ณ‘ํ–‰ ์ ‘๊ทผ ์‹œ, ์ ‘๊ทผ ์ˆœ์„œ์— ๋”ฐ๋ผ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ์ƒํ™ฉ

โœ”๏ธ ๋™์‹œ์„ฑ ์ œ์–ด (ํ•ด๊ฒฐ๋ฐฉ๋ฒ•)

  • ์„ธ๋งˆํฌ์–ด
    ๊ณต์œ  ์ž์›์˜ ๋ฐ์ดํ„ฐ์— ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์˜ ์ ‘๊ทผ์„ ๋ฐฉ์ง€

  • ๋ฎคํ…์Šค
    ๊ณต์œ  ์ž์›์˜ ๋ฐ์ดํ„ฐ์— ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์˜ ์ ‘๊ทผ์„ ๋ฐฉ์ง€



โœ”๏ธ ์„ธ๋งˆํฌ์–ด์™€ ๋ฎคํ…์Šค

๊ฒฝ์Ÿ์œ„ํ—˜์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋™์‹œ์„ฑ ์ œ์–ด ๊ธฐ๋ฒ•

์ƒํ˜ธ๋ฐฐ์ œ ๋ณด์žฅ

์„ธ๋งˆํฌ์–ด๋ฎคํ…์Šค
๋™๊ธฐํ™” ์ˆ˜1๊ฐœ ์ด์ƒ์˜ค์ง 1๊ฐœ
์ž์› ์†Œ์œ  ๋ฐ ์ฑ…์ž„NOYES
ํ•ด์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์Šค๋ ˆ๋“œ์†Œ์œ ํ•˜์ง€ ์•Š์€ ์Šค๋ ˆ๋“œ์†Œ์œ  ์ค‘์ธ ์Šค๋ ˆ๋“œ ๋ณธ์ธ
๋ฒ”์œ„์‹œ์Šคํ…œ ๋ฒ”์œ„ํ”„๋กœ์„ธ์Šค ๋ฒ”์œ„

โœ”๏ธ ์„ธ๋งˆํฌ์–ด

๊ณต์œ  ์ž์›์˜ ๋ฐ์ดํ„ฐ / ์ž„๊ณ„์˜์—ญ ์—
2๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค / ์Šค๋ ˆ๋“œ ์˜ ์ ‘๊ทผ์„ ๋ฐฉ์ง€

์‹œ์Šคํ…œ ๋ฒ”์œ„ : ์‹œ์Šคํ…œ ์ƒ์˜ ํŒŒ์ผ๋กœ ์กด์žฌ


โœ”๏ธ ๋ฎคํ…์Šค

๊ณต์œ  ์ž์›์˜ ๋ฐ์ดํ„ฐ / ์ž„๊ณ„์˜์—ญ ์—
๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค / ์Šค๋ ˆ๋“œ ์˜ ์ ‘๊ทผ์„ ๋ฐฉ์ง€

ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž์›์„ ์†Œ์œ , ์ฑ…์ž„์„ ๊ฐ€์ง
์†Œ์œ ํ•œ ์Šค๋ ˆ๋“œ๋งŒ์ด ๋ณธ์ธ์˜ ์†Œ์œ ๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Œ

ํ”„๋กœ์„ธ์Šค ๋ฒ”์œ„ : ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ์‹œ ์‚ฌ๋ผ์ง

๋ฐ”์ด๋„ˆ๋ฆฌ ์„ธ๋งˆํฌ์–ด ์™€ ์œ ์‚ฌ (๋ฝ์˜ ์ฑ…์ž„ ์ฐจ์ด)



๐ŸŒ IPC

ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ 
Inter-Process Communication

ํ”„๋กœ์„ธ์Šค๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ†ต์‹  ๋ฐ ๋ฐฉ์‹


๐Ÿ“Œ PIPE

์ต๋ช… PIPE
FIFO

2๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฐ๊ฒฐ
1๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ฝ๊ธฐ
1๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์“ฐ๊ธฐ

๋ถ€๋ชจ ์ž์‹ ๊ฐ„์˜ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์— ์ฃผ๋กœ ์‚ฌ์šฉ
Half-Duplex(๋ฐ˜์ด์ค‘) ํ†ต์‹ ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ

์ฝ๊ธฐ ์ข…๋ฃŒ ์ „์— ์“ฐ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Œ

โญ ์žฅ์ 

  • ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„

โ˜ ๏ธ ๋‹จ์ 

  • ์ „์ด์ค‘ ํ†ต์‹  ๊ตฌํ˜„ ์‹œ 2๊ฐœ์˜ PIPE ํ•„์š” (์ถฉ๋Œ ์œ„ํ—˜)
  • buffer๊ฐ€ ์ž‘์•„ overflow๊ฐ€ ์‰ฝ๊ฒŒ ๋ฐœ์ƒ
  • ๋ถ€๋ชจ ์ž์‹ ๊ด€๊ณ„์˜ ํ”„๋กœ์„ธ์Šค์— ์ œํ•œ

๐Ÿ“Œ Named PIPE

์ต๋ช… PIPE์˜ ํ™•์žฅ
FIFO

์‚ฌ์šฉํ•  PIPE๋ฅผ ๋ช…๋ช…
์ด๋ฆ„์ด ์žˆ๋Š” ํŒŒ์ผ์„ ๋งค๊ฐœ์ฒด๋กœ ์‚ฌ์šฉ
-> ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ ํ†ต์‹ ์ด ๊ฐ€๋Šฅ

โญ ์žฅ์ 

  • ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„

โ˜ ๏ธ ๋‹จ์ 

  • ์ „์ด์ค‘ ํ†ต์‹  ๊ตฌํ˜„ ์‹œ 2๊ฐœ์˜ PIPE ํ•„์š” (์ถฉ๋Œ ์œ„ํ—˜)
  • buffer๊ฐ€ ์ž‘์•„ overflow๊ฐ€ ์‰ฝ๊ฒŒ ๋ฐœ์ƒ

๐Ÿ“Œ Message Queue

FIFO
์ปค๋„ ์˜์—ญ

๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด (MOM)

PIPE๋Š” ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„,
Message Queue๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ (๋ฒ„ํผ)

๋ฐ์ดํ„ฐ์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ž„์œผ๋กœ์จ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ

์ผ๋Œ€์ผ ํ†ต์‹  : ๊ฐ ๋ฉ”์‹œ์ง€๋Š” ํ•˜๋‚˜์˜ ์†Œ๋น„์ž์—๊ฒŒ ํ•œ ๋ฒˆ์”ฉ ์‚ฌ์šฉ๋จ

โญ ์žฅ์ 

  • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ๋น„๋™๊ธฐ : ํ์— ๋„ฃ์–ด๋‘” ํ›„ ๋‚˜์ค‘์— ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

โ˜ ๏ธ ๋‹จ์ 

  • ํ ์ž…์ถœ๋ ฅ ์‹œ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

๐Ÿ“Œ Socket

๊ฐ™์€ ๋„๋ฉ”์ธ ๋‚ด์—์„œ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•œ ํ†ต์‹ 

Full-Duplex(์ „์ด์ค‘) ํ†ต์‹ 

์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ํ•ญ์ƒ ์œ ์ง€ํ•ด์•ผ ํ•จ

โญ ์žฅ์ 

  • ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ํ™˜๊ฒฝ ๊ตฌ์ถ•์— ์šฉ์ด
  • ํ•ญ์ƒ ์—ฐ๊ฒฐ๋˜์–ด HTTP ํ†ต์‹ ๋ณด๋‹ค ๋น ๋ฆ„ -> ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ค„์–ด๋“ฆ

โ˜ ๏ธ ๋‹จ์ 

  • ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์ง€์†์  ์—ฐ๊ฒฐ์€ ๊ณง ๋น„์šฉ

๐Ÿ“Œ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ

์ง€๊ธˆ๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์•˜๋‹ค๋ฉด
๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉ

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ปค๋„์— ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์š”์ฒญ

โญ ์žฅ์ 

  • ๊ฐ€์žฅ ๋น ๋ฅธ IPC ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ

โ˜ ๏ธ ๋‹จ์ 

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผ ํ•˜๋Š” ์‹œ์ ์„ ์•Œ ์ˆ˜ ์—†์Œ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๋ฐฉ์‹์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ


๐Ÿ‘๏ธ ์Šค๋ ˆ๋“œ ์•ˆ์ „

๊ณต์œ  ์ž์›์— ๋Œ€ํ•ด
์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์˜ ์ ‘๊ทผ์ด
ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๊ฒƒ


๐Ÿ“Œ ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

๐Ÿ“ ์ƒํ˜ธ ๋ฐฐ์ œ

Mutual Exclusion

์„ธ๋งˆํฌ์–ด / ๋ฎคํ…์Šค ๋“ฑ์œผ๋กœ ๋ฝ์„ ํ†ต์ œ

๐Ÿ“ ์›์ž ์—ฐ์‚ฐ

Atomic Operation

๋” ์ด์ƒ ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ์—ฐ์‚ฐ
์ค‘๋‹จ๋˜์ง€ ์•Š๋Š” ์—ฐ์‚ฐ
์ฃผ๋กœ CPU์˜ ๋ช…๋ น์–ด๋ฅผ ์ง์ ‘ ์‚ฌ์šฉ

๐Ÿ“ ์“ฐ๋ ˆ๋“œ ์ง€์—ญ ์ €์žฅ์†Œ

Thread-Local Storage

๊ณต์œ  ์ž์›์˜ ์ˆ˜๋ฅผ ์ค„์ด๊ณ  ์Šค๋ ˆ๋“œ ๊ฐ๊ฐ์˜ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉ
: ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ์ง€์–‘

๐Ÿ“ ์žฌ์ง„์ž…์„ฑ

Re-Entrancy

ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ํ•˜๋”๋ผ๋„ ๊ฐ๊ฐ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์˜ณ์•„์•ผ ํ•จ


โœ ํ”ผํ„ฐ์Šจ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ž„๊ณ„๊ตฌ์—ญ ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• 3๊ฐ€์ง€ ๋ชจ๋‘ ์ถฉ์กฑ

๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด๊ฐ€๋ฉฐ ํ˜„์žฌ ์ž‘์—…์„ ์ง„ํ–‰ ๋˜๋Š” ๋Œ€๊ธฐ

๐Ÿ“ Example

๊ณต์œ  ๋ณ€์ˆ˜

boolean wannaSleep = false;
boolean wannaWork = true;

final int SLEEP = 0;
final int WORK = 1;
int TimeTo = WORK;

์ž ์„ ์žฌ์šฐ๊ณ  ์‹ถ์€ ํ”„๋กœ์„ธ์Šค

wannaSleep = true;
TimeTo = SLEEP;

while(wannaWork && TimeTo==SLEEP);
//
// ์ž„๊ณ„๊ตฌ์—ญ
//
wannaSleep = false;

์ผ์„ ์‹œํ‚ค๊ณ  ์‹ถ์€ ํ”„๋กœ์„ธ์Šค

wannaWork = true;
TimeTo = WORK;

while(wannaSleep && TimeTo==WORK);
//
// ์ž„๊ณ„๊ตฌ์—ญ
//
wannaWork = false;

โ˜ ๏ธ ํ•œ๊ณ„

์ž„๊ณ„๊ตฌ์—ญ ์ข…๋ฃŒ ์ด์ „์— ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋ฐœ์ƒ ์‹œ ์›ํ•˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Œ

๋Œ€๊ธฐ๋ฅผ ์œ„ํ•œ while๋ฌธ์˜ ๋ฃจํ”„๊ฐ€ ์•„๋ฌด๋Ÿฐ ๋™์ž‘์„ ํ•˜์ง€ ์•Š์Œ์—๋„
CPU ์ž์›์„ ์‚ฌ์šฉํ•œ๋‹ค : Busy waiting

3๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค์—์„  Busy waiting์€ ๋”์šฑ ์‹ฌํ•ด์ง„๋‹ค
ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚˜๊ฒŒ ๋  ๊ฒƒ

profile
์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€