๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
HYU/์šด์˜์ฒด์ œ(OS)

6. Process Syncronization (2)

by Jaeguk 2023. 4. 7.

Classical Problems of Synchronization

Synchronization Problem์œผ๋กœ ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ๋Š” ๋‹ค์Œ์˜ 3๊ฐ€์ง€์ด๋‹ค.

1. Bounded-Buffer Problem

2. Readers and Writers Problem

3. Dining-Philosophers Problem

 

Bounded-Buffer Problem

์ผ๋ช… Producer & Consumer ๋ฌธ์ œ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ์ด ๋ฌธ์ œ๋Š” ํ”„๋กœ๋“€์„œ๊ฐ€ ๊ณต์œ ๋œ ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋ฉด ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๊ฐ€๋Š” ํ˜•ํƒœ์ด๋‹ค. ์ด๋•Œ ๋ฒ„ํผ์˜ ์‚ฌ์ด์ฆˆ๋Š” ๋ฌด์ œํ•œ์ด ์•„๋‹ˆ๋ผ ํ•œ์ •๋˜์–ด ์žˆ๋‹ค.

๋ฒ„ํผ๋Š” ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ ์‚ฌ์ด์˜ ๊ณต์œ ๋˜๋Š” ๊ณต๊ฐ„์ด๋ฏ€๋กœ ํ”„๋กœ๋“€์„œ๊ฐ€ ๋ฒ„ํผ์— ๊ฐ’์„ ์“ฐ๋Š” ๋™์•ˆ ์ปจ์Šˆ๋จธ๊ฐ€ ๊ฐ’์„ ์ฝ์–ด๊ฐ€๋„ ์•ˆ ๋˜๊ณ , ์ปจ์Šˆ๋จธ๊ฐ€ ๊ฐ’์„ ์ฝ๊ณ  ์žˆ๋Š” ๋„์ค‘์— ํ”„๋กœ๋“€์„œ๊ฐ€ ๊ฐ’์„ ์จ์„œ๋„ ์•ˆ ๋œ๋‹ค.

=> ์ฆ‰, ๋ฒ„ํผ์— ๋Œ€ํ•œ ์ ‘๊ทผ์€ ๋™๊ธฐํ™”๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด์„œ ์„ธ๋งˆํฌ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ๋ฒ„ํผ์— ์ ‘๊ทผํ•˜๊ธฐ ์ „์— S๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋ฒ„ํผ์— ์ ‘๊ทผํ•œ ํ›„ ๋น ์ ธ๋‚˜์˜ค๋ฉด์„œ V๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ด ๋ฌธ์ œ๋Š” ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ์ด ๋œ๋‹ค.

 

๊ทธ๋Ÿผ ๋ญ๊ฐ€ ๋ฌธ์ œ์ผ๊นŒ?

์ด ๋ฒ„ํผ๋Š” ํ•œ์ •๋œ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„๋‹ค. ๊ทธ๋Ÿผ ํ”„๋กœ๋“€์„œ๊ฐ€ ๋ฒ„ํผ์— ํ•ญ์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋ฒ„ํผ๊ฐ€ ๊ฝ‰ ์ฐจ์žˆ์œผ๋ฉด ํ”„๋กœ๋“€์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋” ์ด์ƒ ์“ฐ์ง€ ๋ชปํ•œ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ปจ์Šˆ๋จธ ์ž…์žฅ์—์„œ ํ”„๋กœ๋“€์„œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒœ์ฒœํžˆ ์ƒ์‚ฐํ•˜๋Š” ๋ฐ”๋žŒ์— ๋” ์ด์ƒ ์†Œ๋น„ํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ๋ฒ„ํผ์—์„œ ๊ฐ’์„ ์ฝ์–ด๊ฐ€์ง€ ๋ชป ํ•œ๋‹ค.
๋ฌด์ž‘์ • ๋ฒ„ํผ์— ์ ‘๊ทผํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฒ„ํผ์— ์ ‘๊ทผํ•ด๋„ ๋˜๋Š” ์ƒํ™ฉ์ด๋ฉด ์ ‘๊ทผํ•˜๊ณ  ์•„๋‹ˆ๋ฉด ๋Œ€๊ธฐํ•˜๊ณ  ์ด๋Ÿฐ ๊ฒŒ ํ•„์š”ํ•˜๋‹ค.


ํ”„๋กœ๋“€์„œ ์ž…์žฅ์—์„œ๋Š” ๋ฒ„ํผ์˜ ๋นˆ ๊ณต๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” empty buf๊ฐ€ 0๋ณด๋‹ค ํฌ๋ฉด ๊ฐ’์„ ์จ๋„ ๋˜๊ณ , ์ปจ์Šˆ๋จธ ์ž…์žฅ์—์„œ๋Š” full buf๊ฐ€ 0๋ณด๋‹ค ํฌ๋ฉด ๊ฐ’์„ ์ฝ์–ด๋„ ๋œ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด empty buf์™€ full buf ๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•œ๋ฐ, full buf๋ฅผ ๋Š˜๋ ค์ฃผ๋Š” ์ฃผ์ฒด๋Š” ํ”„๋กœ๋“€์„œ๊ณ  empty buf๋ฅผ ๋Š˜๋ ค์ฃผ๋Š” ์ฃผ์ฒด๋Š” ์ปจ์Šˆ๋จธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด ๊ฐ’ ์ž์ฒด๊ฐ€ ๋˜ ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ ์‚ฌ์ด์˜ ๊ณต์œ  ๋ณ€์ˆ˜๊ฐ€ ๋œ๋‹ค.
=> ์ด ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋ณดํ˜ธ๊ฐ€ ๋˜ ํ•„์š”ํ•˜๋‹ค. 

๋ฌผ๋ก  ๋ณ„๋„์˜ ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ empty buf์™€ full buf๋ฅผ ๋ณดํ˜ธํ•ด๋„ ๋˜๊ฒ ์ง€๋งŒ, ๊ณต์œ ๋ณ€์ˆ˜ ์ž์ฒด๋ฅผ ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค์–ด์„œ ๋ณดํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

ํ”„๋กœ๋“€์„œ๋Š” buffer์— ๊ฐ’์„ ์“ฐ๋ ค๊ณ  ํ•˜๊ธฐ ์ „์— ๋จผ์ € empty_buf ๊ฐ€ ์žˆ๋Š”์ง€ ๋จผ์ € ํ™•์ธ์„ ํ•ด์•ผ ํ•œ๋‹ค.

๋ฐ˜๋Œ€๋กœ ์ปจ์Šˆ๋จธ๋Š” buffer์—์„œ ๊ฐ’์„ ์ฝ์œผ๋ ค๊ณ  ํ•˜๊ธฐ ์ „์— ๋จผ์ € full_buf๊ฐ€ ์žˆ๋Š”์ง€ ๋จผ์ € ํ™•์ธ์„ ํ•ด์•ผ ํ•œ๋‹ค.

ํ”„๋กœ๋“€์„œ๋Š” P(N_empty-buf)๋ฅผ ํ˜ธ์ถœํ•ด์„œ N_empty-buf๊ฐ€ 0๋ณด๋‹ค ํฐ์ง€ ํ™•์ธํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  0๋ณด๋‹ค ํฌ๋ฉด buf์— ๊ฐ’์„ ์“ฐ๊ธฐ ์œ„ํ•ด P(S_mutex)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ buf์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ํš๋“ํ•œ๋‹ค.

critical section์„ ๋น ์ ธ ๋‚˜์˜ค๋ฉด์„œ๋Š” V(N_full-buf)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ N_full-buf์˜ ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค. ์ด๋กœ์จ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋˜ ์ปจ์Šˆ๋จธ๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด ๋น ์ ธ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

๋น„์–ด์žˆ๋Š” ๋ฒ„ํผ์˜ ์ˆ˜์™€, ์ฑ„์›Œ์ง„ ๋ฒ„ํผ์˜ ์ˆ˜๋ฅผ counting semaphore๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐ์„ ํ–ˆ๋‹ค.
์™œ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•ด๊ฒฐ์ด ๋ ๊นŒ? empty buf์™€ full buf๊ฐ€ ๊ณต์œ  ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ‘๊ทผํ•˜๊ณ  ์žˆ์„ ๋•Œ ๋ณด๋ฉด ์•ˆ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, empty buf๋ฅผ ํ”„๋กœ๋“€์„œ๊ฐ€ 1 ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋„์ค‘์— ์ปจ์Šˆ๋จธ๊ฐ€ ์ฝ์œผ๋ฉด ์•ˆ ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ณ€์ˆ˜ ๊ฐ๊ฐ์„ P, V๋กœ ๋ณดํ˜ธํ•ด์„œ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ์•Š๊ณ  ์„œ๋กœ ํฌ๋กœ์Šค ํ•ด์„œ P, V๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๊ฒฐ์ด ๋ ๊นŒ? P, V๊ฐ€ "atomic" ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๋“€์„œ์™€ ์ปจ์Šˆ๋จธ๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ์›์ฒœ์ ์œผ๋กœ ๋ด‰์‡„ํ•œ๋‹ค.

=> ๊ทธ๋ž˜์„œ ์ด ๋ฐฉ๋ฒ•์€ Solution์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

=> ๋ณ„๋„์˜ ๋ณ€์ˆ˜๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋˜ ๋‹ค๋ฅธ ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ๊ทธ ๋ณ€์ˆ˜ ์ž์ฒด๋ฅผ ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•ด์„œ P,V ํ•จ์ˆ˜์˜ atomicํ•จ์„ ์ด์šฉํ•ด์„œ ์Šค์Šค๋กœ ๋ณดํ˜ธํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

Readers-Writers Probelm

์ด ๋ฌธ์ œ ์—ญ์‹œ ํ”„๋กœ๋“€์„œ ์ปจ์Šˆ๋จธ ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•˜๋‹ค. Writer๊ฐ€ ๊ธ€์„ ์“ฐ๋ฉด Reader๊ฐ€ ๊ธ€์„ ์ฝ์–ด๊ฐ€๋Š” ํ˜•ํƒœ์ด๋‹ค. Writer๊ฐ€ ๊ธ€์„ ์“ธ ๋•Œ Reader๊ฐ€ ๊ธ€์„ ์ฝ์„ ์ˆ˜ ์—†๊ณ , Reader๊ฐ€ ๊ธ€์„ ์ฝ๊ณ  ์žˆ์œผ๋ฉด Writer๊ฐ€ ๊ธ€์„ ์“ธ ์ˆ˜ ์—†๋Š” ๊ฒƒ์€ ๋˜‘๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ DB์— ๋Œ€ํ•œ ์ ‘๊ทผ์ž์ฒด๋Š” ์ƒํ˜ธ๋ฐฐ์ œ๊ฐ€ ์ด๋ฃจ์–ด ์ ธ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— db๋ผ๋Š” binary ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ฐจ์ด์ ์ด ์žˆ๋‹ค. ์ปจ์Šˆ๋จธ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„ํ•˜๋Š” ๋ฐ˜๋ฉด์— Reader๋“ค์€ ๊ฐ’์„ ์ฝ๊ธฐ๋งŒ ํ•œ๋‹ค. ์ฆ‰, Read-only์ด๋‹ค.

๋”ฐ๋ผ์„œ Reader๋“ค๋ผ๋ฆฌ๋Š” DB์— ๋™์‹œ์— ์ ‘๊ทผํ•ด๋„ ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•œ Reader๊ฐ€ ์ฝ๊ณ  ์žˆ์„ ๋•Œ ๋‹ค๋ฅธ Reader๊ฐ€ ์ง„์ž…์„ ์‹œ๋„ํ•˜๋ฉด ํ—ˆ์šฉํ•ด์•ผ ํ•œ๋‹ค.

Reader๋“ค ์‚ฌ์ด์—๋Š” ๋™์‹œ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ๊ทธ๋•Œ ์Šค์ผ€์ค„๋ง์€ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.

B. Reader๋“ค์ด ๊ธ€์„ ์ฝ๊ณ  ์žˆ๋Š”๋ฐ Writer๊ฐ€ ๊ธ€์„ ์“ฐ๋ ค๊ณ  ํ•œ๋‹ค๋ฉด ๋” ์ด์ƒ์€ Reader๊ฐ€ ์ง„์ž…์„ ํ•˜์ง€ ๋ชป ํ•˜๊ฒŒ ๋ง‰๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฝ๊ณ  ์žˆ๋˜ Reader๋“ค์ด ๋ชจ๋‘ ๋น ์ ธ๋‚˜๊ฐ€๋ฉด Writer๊ฐ€ ๊ธ€์„ ์“ฐ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ•.

A. Writer๊ฐ€ ์™€์„œ Reader๋“ค์ด ๋‹ค ์ฝ๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค ํ•˜๋”๋ผ๋„ ์ƒˆ๋กœ์šด Reader๊ฐ€ ์ง„์ž…์„ ์‹œ๋„ํ•˜๋ฉด ๋“ค์–ด๊ฐ€๊ฒŒ ๋‘”๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  Reader๊ฐ€ ๋น ์ ธ๋‚˜๊ฐ€๊ณ  ๋‚˜๋ฉด Writer๊ฐ€ ๊ธ€์„ ์“ฐ๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•.

์ด ์ค‘ ์šฐ๋ฆฌ๋Š” A ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค.

 

Writer๋Š” db ๊ฐ’์ด 1์ด๋ฉด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, Reader๊ฐ€ ํ•œ ๋ช…์ด๋ผ๋„ ์ฝ๊ณ  ์žˆ์œผ๋ฉด db๊ฐ’์„ 0์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ชป ๋“ค์–ด๊ฐ€๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒ˜์Œ ๋“ค์–ด๊ฐ€๋Š” Reader๋Š” P(db)๋ฅผ ํ˜ธ์ถœํ•ด์„œ db๊ฐ’์„ 0์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๊ทธ ๋’ค๋กœ Writer๋Š” P(db)๋ฅผ ํ˜ธ์ถœํ•ด๋„ db๊ฐ€ 0์ด๋ผ์„œ ๋“ค์–ด๊ฐˆ ์ˆ˜๊ฐ€ ์—†๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ๋‘ ๋ฒˆ์งธ ๋“ค์–ด๊ฐ€๋Š” Reader๋Š” ๊ตณ์ด P(db)๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ์–ด์งœํ”ผ Writer๋Š” ๋ชป ๋“ค์–ด์˜ค๊ณ  ์žˆ์œผ๋‹ˆ๊นŒ.
๊ทธ๋ฆฌ๊ณ  ์ œ์ผ ๋งˆ์ง€๋ง‰์— ๋‚˜์˜ค๋Š” Reader๊ฐ€ V(db)๋ฅผ ํ˜ธ์ถœํ•ด์„œ db๊ฐ’์„ 1๋กœ ๋ฐ”๊พธ์–ด์ค€๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋‚ด๊ฐ€ ์ฒซ ๋ฒˆ์งธ Reader์ธ์ง€ ๋˜๋Š” ๋งˆ์ง€๋ง‰ Reader์ธ์ง€๋Š” ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ? ํ˜„์žฌ ์ฝ๊ณ ์žˆ๋Š” Reader์˜ ์ˆ˜๋ฅผ Countํ•˜๋ฉด ๋œ๋‹ค. readcount๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์„œ ํ˜„์žฌ ๊ธ€์„ ์ฝ๊ณ  ์žˆ๋Š” Reader์˜ ์ˆ˜๋ฅผ ํŒŒ์•…ํ•œ๋‹ค. ๊ธ€์„ ์ฝ์„ ๋•Œ +1 ์‹œํ‚ค๊ณ  ๋‹ค ์ฝ๊ณ  ๋น ์ ธ๋‚˜์˜ฌ ๋•Œ -1์‹œํ‚จ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด readcount๋ผ๋Š” ๋ณ€์ˆ˜๋Š” Reader๋“ค ์‚ฌ์ด์˜ ๊ณต์œ  ๋ณ€์ˆ˜๊ฐ€ ๋˜๋Š” ์…ˆ์ด๋‹ค. ๋”ฐ๋ผ์„œ readcount ๋ณ€์ˆ˜๋„ ๋ณดํ˜ธ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. readcount๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด mutex ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด Writer์™€ Reader ์‚ฌ์ด์˜ ์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ์‹œ์ผœ์ฃผ๋Š” db ๋ณ€์ˆ˜, Reader๋“ค ์‚ฌ์ด์— ๊ณต์œ ๋˜๋Š” ๋ณ€์ˆ˜ readcount, ๊ทธ๋Ÿฌํ•œ readcount๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ mutex ๋ณ€์ˆ˜ ์ด๋ ‡๊ฒŒ 2๊ฐœ์˜ ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜์™€, 1๊ฐœ์˜ int ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค.

Writer๋Š” writeํ•˜๊ธฐ ์ „์— ํ˜„์žฌ ์ฝ๊ณ  ์žˆ๋Š” ๋…์ž๊ฐ€ ํ•œ ๋ช…์ด๋ผ๋„ ์žˆ๋Š”์ง€๋งŒ ํŒŒ์•…ํ•˜๋ฉด ๋˜๋ฏ€๋กœ P(db)๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋น ์ ธ๋‚˜์˜ฌ ๋•Œ V(db)๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ Reader๋Š” readcount ์—๋„ ์ ‘๊ทผํ•ด์•ผ ํ•˜๊ณ  ์ดํ›„ Writer๊ฐ€ ๊ธ€์„ ์“ฐ๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

P(mutex)๋ฅผ ํ˜ธ์ถœํ•ด์„œ readcount์— ์ ‘๊ทผํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  readcount ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. ๊ทธ๋•Œ readcount๊ฐ’์ด 1์ด๋ผ๋ฉด ๋ณธ์ธ์ด ์ฒ˜์Œ ๋“ค์–ด์˜จ Reader๋ผ๋Š” ๋œป์ด๋ฏ€๋กœ P(db)๋ฅผ ํ˜ธ์ถœํ•ด์„œ Reader๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ Writer์—๊ฒŒ ์•Œ๋ฆฐ๋‹ค.

๋งŒ์•ฝ readcount๊ฐ€ 2 ์ด์ƒ์ด๋ผ๋ฉด ์ด๋ฏธ ๋“ค์–ด๊ฐ„ ๋…์ž๊ฐ€ 1๋ช… ์ด์ƒ ์กด์žฌํ•œ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ๊ตณ์ด P(db)๋ฅผ ํ˜ธ์ถœํ•  ํ•„์š”๋Š” ์—†๋‹ค.

๊ทธ๋ฆฌ๊ณ  readcount์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ๋๋‚˜๋ฉด V(mutex)๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋‹ค๋ฅธ Reader๋“ค๋„ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

๋˜ํ•œ DB์— ์ ‘๊ทผํ•˜๊ณ  ๋‚˜์„œ๋Š” P(mutex)๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋‹ค์‹œ readcount์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์–ป๋Š”๋‹ค. readcount ๊ฐ’์„ 1 ๊ฐ์†Œ์‹œํ‚ค๊ณ  ๊ทธ๋•Œ์˜ readcount ๊ฐ’์ด 0์ด๋ผ๋ฉด ์ด์ œ ์•ˆ์—๋Š” ๋” ์ด์ƒ Reader๊ฐ€ ์—†๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ ๋ณธ์ธ์ด ๋งˆ์ง€๋ง‰ Reader๊ฐ€ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ V(db)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ Writer๊ฐ€ DB์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

 

P(mutex), V(mutex)๋ฅผ ํ†ตํ•ด readcount์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ๋™๊ธฐํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ• ๊นŒ?

Reader ๋‘ ๋ช…์ด ๋™์‹œ์— readcount์— ์ ‘๊ทผํ•ด์„œ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด readcount๊ฐ€ 2๊ฐ€ ๋œ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด readcount๊ฐ€ 2์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด๋„ P(db)๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ๋“ค์–ด๊ฐ€๋ฒ„๋ฆฌ๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

๋˜๋Š” ๋‚ด๊ฐ€ readcount๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋™์•ˆ ๋‹ค๋ฅธ Reader๊ฐ€ readcount๋ฅผ ๊ฐ์†Œ์‹œ์ผœ์„œ ์ž˜๋ชป๋œ readcount ๊ฐ’์„ ์ฝ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

Dining-Philosophers Problem

์žฌ๋ฐŒ๋Š” ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ์žˆ๋‹ค. ์›ํƒ์— ์ฒ ํ•™์ž๋“ค์ด ๋‘˜๋Ÿฌ ์•‰์•„์žˆ๊ณ  ์•ž์— ์ ‘์‹œ๊ฐ€ ํ•˜๋‚˜์”ฉ ๋†“์—ฌ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ “๊ฐ€๋ฝ์€ ์ฒ ํ•™์ž๋“ค ์‚ฌ์ด์‚ฌ์ด์— ํ•˜๋‚˜์”ฉ๋งŒ ๋†“์—ฌ ์žˆ๋‹ค.
์ฒ ํ•™์ž๋“ค์€ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€ (์ฒ ํ•™์ž๋‹ˆ๊นŒ ํ•˜๋ฃจ์ข…์ผ ์ƒ๊ฐ๋งŒ ํ•˜๋‚˜๋ด„,,,) ๋ฐฐ๊ฐ€ ๊ณ ํ”„๋ฉด ์–‘์ชฝ์— ์žˆ๋Š” ์ “๊ฐ€๋ฝ์„ ํ•˜๋‚˜์”ฉ ๋“ค์–ด์„œ ๋‘ ์ “๊ฐ€๋ฝ์„ ๋ชจ๋‘ ํ™•๋ณดํ•˜๋ฉด ๋ฐฅ์„ ๋จน๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐฅ์„ ๋‹ค ๋จน์œผ๋ฉด ์–‘์ชฝ์— ๋‹ค์‹œ ์ “๊ฐ€๋ฝ์„ ๋‚ด๋ ค๋†“๊ณ  ๋‹ค์‹œ ์ƒ๊ฐ ๋ชจ๋“œ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

์—ฌ๊ธฐ์„œ ์‚ฌ์ด์— ๋†“์—ฌ์žˆ๋Š” ์ “๊ฐ€๋ฝ์€ ์ “๊ฐ€๋ฝ ์–‘์ชฝ์˜ ๋‘ ์ฒ ํ•™์ž ์‚ฌ์ด์˜ ๊ณต์œ  ๋ณ€์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

=> ๋‘ ์ฒ ํ•™์ž๊ฐ€ ๋™์‹œ์— ์ “๊ฐ€๋ฝ์„ ๋“œ๋Š” ๊ฒƒ์„ ๋ง‰์•„์•ผ ํ•œ๋‹ค. ์ฆ‰, ์ “๊ฐ€๋ฝ์„ ๋“œ๋Š” ํ–‰์œ„๊ฐ€ ๋™๊ธฐํ™”๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.

์ “๊ฐ€๋ฝ์„ ๋“ค๊ธฐ ์ „์— ๋‹ค๋ฅธ ์ฒ ํ•™์ž๊ฐ€ ์ “๊ฐ€๋ฝ์„ ๋“ค๊ณ  ์žˆ๋‚˜ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”

์ “๊ฐ€๋ฝ ์ž์ฒด๋ฅผ ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜๋กœ ๋‘๊ณ  ๋“ค๊ธฐ ์ „ P๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋‹ค ์‚ฌ์šฉํ•˜๊ณ  ๋‚˜๋ฉด V๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋‹ค๋ฅธ ์ฒ ํ•™์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

์–‘์ชฝ ์ “๊ฐ€๋ฝ์„ ๋ชจ๋‘ ๋“ค์–ด์•ผ ๋ฐฅ์„ ๋จน์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— P(chopstick[i]), P(chopstick[i+1])์„ ํ˜ธ์ถœํ•ด์„œ ๋‘˜ ๋‹ค ํƒˆ์ถœํ•˜๋ฉด ๋ฐฅ์„ ๋จน๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ Deadlock์„ ์œ ๋ฐœํ•˜๊ธฐ์— ํ•ด๊ฒฐ์ฑ…์ด ๋  ์ˆ˜ ์—†๋‹ค.
๋ชจ๋“  ์ฒ ํ•™์ž๊ฐ€ ๋™์‹œ์— ๋ฐฐ๊ฐ€ ๊ณ ํŒŒ์„œ ๋™์‹œ์— ์ž์‹ ์˜ ์™ผ์ชฝ ์ “๊ฐ€๋ฝ์„ ๋“ค์—ˆ๋‹ค๊ณ  ํ•˜์ž. ๊ทธ๋Ÿผ P(chopstick[i])๋Š” ๋ชจ๋‘ ํ†ต๊ณผํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ชจ๋‘ ์ “๊ฐ€๋ฝ์„ ํ•œ ์ชฝ์”ฉ ๋“ค๊ณ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ „๋ถ€ P(chopstick[(i+1)%5]์— ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.
=> ์•„๋ฌด๋„ ๋ฐฅ์„ ๋ชป ๋จน๊ณ  ๋Œ€๊ธฐ๋งŒ ํ•˜๊ฒŒ ๋œ๋‹ค.

๋ชจ๋‘๊ฐ€ ์™ผ์ชฝ ์ “๊ฐ€๋ฝ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๋ชจ๋‘๊ฐ€ ์ž๊ธฐ์˜ ์˜ค๋ฅธ์ชฝ ์‚ฌ๋žŒ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. 

=> ์ด๋ ‡๊ฒŒ ๊ณต์œ  ์ž์›์— ๋Œ€ํ•ด ์›ํ˜• ๋Œ€๊ธฐ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ์ƒํ™ฉ์„ Deadlock์ด๋ผ๊ณ  ํ•จ.

 

Deadlock & Startvation

Deadlock์€ ๊ต์ฐฉ์ƒํƒœ๋กœ ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฌดํ•œ ๋Œ€๊ธฐ๋ฅผ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ,

์ด๋Ÿฌํ•œ ๋ฌดํ•œ ๋Œ€๊ธฐ๊ฐ€ ํ˜„์žฌ ๋ฌดํ•œ ๋Œ€๊ธฐ๋ฅผ ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด์„œ๋งŒ ๊นจ์งˆ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ.

=> ์ฆ‰, ๋ฌดํ•œ ๋Œ€๊ธฐ๊ฐ€ ํ’€๋ฆด ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ด๋‹ค.

 

์ด๋Ÿฌํ•œ ํ˜„์ƒ์€ Startvation ํ˜„์ƒ๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, Block/Wakeup Semaphore์—์„œ Sleep๋œ ํ”„๋กœ์„ธ์Šค๋“ค์€ List์— ๋งค๋‹ฌ์•„๋‘”๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, wakeup์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ œ์ผ ๋Šฆ๊ฒŒ ๋“ค์–ด์˜จ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊นจ์šฐ๊ฒŒ ๋˜๋ฉด(Last In First Out) ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณ„์† ๋“ค์–ด์˜ค๋ฉด ์ฒ˜์Œ ๋“ค์–ด์˜จ ํ”„๋กœ์„ธ์Šค๋Š” ๊นจ์–ด๋‚˜์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.

Startvation ์ƒํ™ฉ์€ ๊ทธ๋ž˜๋„ ์ง„๋„๋ฅผ ๋ชป ๋‚˜๊ฐ€๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ํŠน์ • ํ”„๋กœ์„ธ์Šค์˜ ํฌ์ƒ์œผ๋กœ ์ง„๋„๊ฐ€ ๋‚˜๊ฐ€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๊ณ 

Deadlock์€ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง„๋„๋ฅผ ๋‚˜๊ฐ€์ง€ ๋ชปํ•˜๊ณ  ๋Œ€๊ธฐํ•˜๋Š” ์ƒํ™ฉ

 

Remedies of Deadlock (ํ•ด๊ฒฐ์ฑ…)

์•ž์˜ ์‹์‚ฌํ•˜๋Š” ์ฒ ํ•™์ž ์˜ˆ์—์„œ Deadlock์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ์„๊นŒ?

1. ์–‘์ชฝ์— ์žˆ๋Š” ์ “๊ฐ€๋ฝ์„ ํ•˜๋‚˜์”ฉ ๋“œ๋‹ˆ๊นŒ Deadlock์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

๋‘ ์ “๊ฐ€๋ฝ์„ ๋ฌถ์–ด์„œ ๋‘˜ ๋‹ค ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉด ๋“ค๊ณ , ์•„๋‹ˆ๋ฉด ๋‘˜ ๋‹ค ๋‚ด๋ ค๋†“๋Š”๋‹ค. (All or Nothing)

 

2. ํ™€์ˆ˜๋ฒˆ์งธ ์•‰์€ ์ฒ ํ•™์ž๋Š” ์™ผ์ชฝ์„ ๋จผ์ € ๋“ค๊ณ ๋‚˜์„œ ์˜ค๋ฅธ์ชฝ์„ ๋“ค๊ฒŒ ๋งŒ๋“ ๋‹ค.

๋ฐ˜๋Œ€๋กœ ์ง์ˆ˜๋ฒˆ์งธ์— ์•‰์€ ์ฒ ํ•™์ž๋Š” ์˜ค๋ฅธ์ชฝ์„ ๋จผ์ € ๋“ค๊ณ ๋‚˜์„œ ์™ผ์ชฝ์„ ๋“ค๊ฒŒ ๋งŒ๋“ ๋‹ค.

 

3. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ตœ๋Œ€ 4๋ช…์˜ ์ฒ ํ•™์ž๋งŒ ์‹ํƒ์— ์•‰ํžˆ์ž.

์ “๊ฐ€๋ฝ์€ 5๊ฐ ๋ฐ ์‚ฌ๋žŒ์€ 4๋ช…์ด๋ฏ€๋กœ Deadlock์ด ๋ฐœ์ƒํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.

 

Problems of Semaphore

์•ž์˜ Problem๋“ค์„ Semaphore๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐํ–ˆ์—ˆ๋Š”๋ฐ ์„ธ๋งˆํฌ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์˜ ์—ฌ๋Ÿฌ ๋‹จ์ ๋“ค์ด ์žˆ๋‹ค.

1. ์„ธ๋งˆํฌ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋”ฉํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.
2. ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋”ฉ์„ ํ–ˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, ์˜ฌ๋ฐ”๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ์ฆ๋ช…ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต๋‹ค.
๋‘ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•ด์•ผ๋งŒ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
=> ์ด๋Ÿฐ ์ƒํ™ฉ์ด ํ•ญ์ƒ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.
=> ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋””๋ฒ„๊น…์ด ์–ด๋ ต๋‹ค.
3. ํ˜‘์—…ํ•ด์„œ ์ฝ”๋”ฉ์„ ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋‚ด๊ฐ€ P๋ฅผ ํ˜ธ์ถœํ• ํ…Œ๋‹ˆ ๋„ˆ๊ฐ€ V๋ฅผ ํ˜ธ์ถœํ•ด ์ด๋Ÿฐ ํ˜‘์˜๋ฅผ ๋ณด๊ณ  ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต๋‹ค.
4. ํ•œ ๋ฒˆ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ์ „์ฒด ์‹œ์Šคํ…œ์ด ๋งˆ๋น„๋œ๋‹ค.
=> ์ด๋ก ์ ์œผ๋กœ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ •ํ™•ํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.

 

Monitors

์šฐ๋ฆฌ๊ฐ€ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ High-level language์—์„œ ์ œ๊ณตํ•˜๋Š” ๋™๊ธฐํ™” ํˆด์ธ Monitor๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๋ชจ๋‹ˆํ„ฐ๋Š” C๋˜๋Š” java์˜ Class์™€ ๊ต‰์žฅํžˆ ์œ ์‚ฌํ•˜๋‹ค.

๊ณต์œ  ๋ณ€์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” private data๊ฐ€ ์žˆ๊ณ  private data์— ์ ‘๊ทผ์€ public methods๋ฅผ ํ†ตํ•ด์„œ ํ•œ๋‹ค.

๊ทผ๋ฐ ์ด๊ฒŒ ์–ด๋–ป๊ฒŒ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๋Š” ๊ฑฐ์ง€?

๋ชจ๋‹ˆํ„ฐ๊ฐ€ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธธ๋ž˜ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„๊นŒ.
๋ชจ๋‹ˆํ„ฐ ์•ˆ์—์„œ ํ™œ์„ฑํ™” ๋˜์–ด ๋™์ž‘ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜ ๋ฐ–์— ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•œ๋‹ค.
=> public methods๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜ ๋ฐ–์— ์—†์Œ์„ ๋ณด์žฅํ•œ๋‹ค๋Š” ๋œป. ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ public methods๋ฅผ ๋™์‹œ์— ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋ƒ? ๊ทธ๊ฒƒ์„ ๋ง‰์•„์ฃผ๊ฒ ๋‹ค๋Š” ๊ฒƒ์ž„.
์–ด๋–ป๊ฒŒ?
entry queue๋ฅผ ์ œ๊ณตํ•ด์„œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ public methods๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋„์ค‘์— ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ public methods๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด entry queue์— ๋งค๋‹ฌ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  activeํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ํ์—์„œ ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋˜ ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋กœ ๋„ฃ์–ด์„œ public methods๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

=> private data์— ๋Œ€ํ•ด์„œ ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•ด์ค€๋‹ค.

 

๋ชจ๋‹ˆํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ๋””์ž์ธ์„ ํ•˜๋‹ค๋ณด๋ฉด ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

๋ชจ๋‹ˆํ„ฐ ๋‚ด๋ถ€์˜ public method๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ผ์„ ํ•˜๋˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ method์•ˆ์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋„์ค‘์— ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜์ง€ ์•Š์•„์„œ ๋” ์ด์ƒ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ทธ ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜๋„๋ก ํ•ด์ฃผ๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ผ๋ฉด? Bounded buffer problem์—์„œ consumeํ•˜๋Š” public method๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ์น˜์ž. ์ด๋•Œ ์ปจ์Šˆ๋จธ๋Š” full buf๊ฐ€ 0์ด๋ฉด wait๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. ์ปจ์Šˆ๋จธ๋Š” CPU๋ฅผ ์“ฐ๋ฉด์„œ busy waiting์„ ํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง„์ž…ํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค. full buf๋ฅผ 1 ์ฆ๊ฐ€์‹œ์ผœ ์ฃผ๋Š” ๊ฒƒ์€ ํ”„๋กœ๋“€์„œ์ธ๋ฐ, ์ปจ์Šˆ๋จธ ํ”„๋กœ์„ธ์Šค๊ฐ€ consume์„ ํ˜ธ์ถœํ•ด์„œ activeํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๋“€์„œ๊ฐ€ produce ๋ฉ”์†Œ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜๊ฐ€ ์—†์Œ.

=> ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•ด์„œ๋Š” ์•ˆ ๋จ.
=> ๊ทธ๋ž˜์„œ ๋ชจ๋‹ˆํ„ฐ๋Š” ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋ชจ๋‹ˆํ„ฐ ์™ธ๋ถ€๊ฐ€ ์•„๋‹Œ ๋‚ด๋ถ€์—์„œ ๋Œ€๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. busy waiting ํ•˜์ง€ ์•Š๊ณ  sleep์„ ํ•˜๋„๋ก ๋งŒ๋“ฆ. sleep์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๋” ์ด์ƒ activeํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ๋‹ˆํ„ฐ ์•ˆ์œผ๋กœ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๋ชจ๋‹ˆํ„ฐ ๋‚ด๋ถ€์—์„œ ์กฐ๊ฑด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ฒŒ ๋˜๋ฉด ๊ทธ ๋ณ€์ˆ˜์—์„œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊นจ์–ด๋‚˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณต.
x.wait()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ์•„ ๋‚˜๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— x์—์„œ sleepํ•˜๋ฉด์„œ ๊ธฐ๋‹ค๋ฆฌ๊ฒ ๋‹ค๋Š” ๋œป.
entry queue์— ์žˆ๋˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด์™€์„œ x ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œ์ผœ ์ฃผ๊ฒŒ ๋˜๋ฉด x์—์„œ ์ž ๋“ค์–ด ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๊นจ์›Œ์ค˜์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ x.signal()์„ ํ˜ธ์ถœํ•ด์„œ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ๊นจ์›Œ์ค€๋‹ค.

์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•ด ๋” ์ด์ƒ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์€ wait๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  condition ๋ณ€์ˆ˜ ๋‚ด์—์„œ ๋Œ€๊ธฐํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ๋ชจ๋‹ˆํ„ฐ๋Š” entry queue์—์„œ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ชจ๋‹ˆํ„ฐ ์•ˆ์œผ๋กœ ๋“ค์–ด์˜ค๊ฒŒ ํ•ด์„œ public method๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ํŠน์ • ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜์–ด ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊นจ์–ด๋‚  ์กฐ๊ฑด์ด ๋˜๋ฉด, signal์„ ํ†ตํ•ด ๊นจ์šด๋‹ค. 

๋ชจ๋‹ˆํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ์–ด๋–ป๊ฒŒ "์‹์‚ฌํ•˜๋Š” ์ฒ ํ•™์ž ๋ฌธ์ œ"๋ฅผ ํ•ด๊ฒฐํ• ๊นŒ??

์ “๊ฐ€๋ฝ์„ ํ•œ ์ชฝ์”ฉ ๋“ค์–ด์„œ Deadlock ์ƒํ™ฉ์ด ๋ฐœ์ƒ๋˜์—ˆ์œผ๋ฏ€๋กœ ๊ตณ์ด ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์ “๊ฐ€๋ฝ์œผ๋กœ ๋‚˜๋ˆ„์ง€ ์•Š๊ณ  ๋ฌถ์–ด์„œ State๋กœ ํ‘œํ˜„ํ•œ๋‹ค. hungry๋ฉด ๋จน๊ณ ์ž ํ•˜๋Š” ์˜์ง€๊ฐ€ ์žˆ๋Š” ์ƒํƒœ, thinking์€ ์‹์‚ฌ๋ฅผ ํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ์ƒํƒœ, eating์€ ์‹์‚ฌ๋ฅผ ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ. ์ฆ‰, eating์ด๋ฉด ์–‘์ชฝ ์ “๊ฐ€๋ฝ์„ ๋‹ค ๋“ค๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์ด๋Ÿฌํ•œ State๊ฐ€ ๊ณต์œ ๋ณ€์ˆ˜๊ฐ€ ๋˜๋Š” ์…ˆ์ด๋‹ค.

๋˜ํ•œ ๋จน๊ณ ์ž ํ•˜๋Š” ์˜์ง€๋Š” ์žˆ์ง€๋งŒ ์–‘ ์˜† ์‚ฌ๋žŒ ์ค‘ ํ•œ ๋ช… ์ด์ƒ์ด ์ด๋ฏธ ๋จน๊ณ  ์žˆ์–ด์„œ ๋จน์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์—๋Š” ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๋„๋ก self๋ผ๋Š” ์กฐ๊ฑด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ๋‹ค.

State๋ผ๋Š” ๊ณต์œ ๋ณ€์ˆ˜๋Š” init, pickup, putdown, test ๋ผ๋Š” public methods๋ฅผ ์ด์šฉํ•ด์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ init์€ ์ดˆ๊ธฐํ™”์šฉ์ด๊ณ  test๋Š” pickup, putdown ๋‚ด๋ถ€์—์„œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ด๋ฏ€๋กœ ์‹ค์งˆ์ ์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” methods๋Š” pickup๊ณผ putdown์ด๋‹ค.

์ฒ ํ•™์ž๊ฐ€ ๋ฐฅ์„ ๋จน์œผ๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ pickup์„ ํ˜ธ์ถœํ•œ๋‹ค. pickup์—์„œ๋Š” state๋ฅผ hungry๋กœ ๋ฐ”๊พธ๊ณ , ํ˜„์žฌ ์–‘ ์˜†์— ์žˆ๋Š” ์ฒ ํ•™์ž ์ค‘ ์•„๋ฌด๋„ ๋ฐฅ์„ ๋จน๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์—†๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด test๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์–‘ ์˜† ๋ชจ๋‘ ๋ฐฅ์„ ๋จน๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—” ๋ฐฅ์„ ๋จน์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ state๋ฅผ eating์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  signal์„ ๋ณด๋‚ด์„œ i๋ฅผ ๊นจ์›Œ์ค€๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์‚ฌ์‹ค pickup์—์„œ test๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” i๊ฐ€ ์ง์ ‘ test๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— i๋Š” ๊นจ์–ด์žˆ๋Š” ์ƒํƒœ์ด๋‹ค. ๊ทธ๋ž˜์„œ signal์„ ๋ณด๋‚ด๋„ ์•„๋ฌด๋Ÿฐ ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

ํ•˜์ง€๋งŒ test method๋Š” putdown์—์„œ๋„ ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์— signal์„ ๋ณด๋‚ด๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ์€ ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ ๋ณ„๋„์˜ test ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  pickup๊ณผ putdown ๋‚ด๋ถ€์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค๋ฉด pickup ๋‚ด๋ถ€์—๋Š” signal์„ ๋ณด๋‚ด๋Š” ๋ถ€๋ถ„์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋์„ ๊ฒƒ!

 

putdown ํ•จ์ˆ˜๋Š” ์ด์ œ ๋‚˜๋Š” ๋ฐฅ์„ ๋‹ค ๋จน์—ˆ์œผ๋‹ˆ ์ “๊ฐ€๋ฝ์„ ๋‚ด๋ ค๋†“๊ณ  state๋ฅผ thinking ์ƒํƒœ๋กœ ๋ฐ”๊พผ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋กœ ์ธํ•ด ๋ฐฅ์„ ๋จน์ง€ ๋ชปํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์–‘ ์˜†์‚ฌ๋žŒ์— ๋Œ€ํ•ด test ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์ค€๋‹ค.

์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜๋ฉด signal์„ ํ†ตํ•ด ํ•ด๋‹น ์‚ฌ๋žŒ์„ ๊นจ์šธ ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ์˜๋ฌธ. putdown ํ•จ์ˆ˜์—์„œ test๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊นจ๊ฒŒ ๋˜๋ฉด activeํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ 2๊ฐœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€?

๊นจ์–ด๋‚œ ํ”„๋กœ์„ธ์Šค๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๊ณ  pickup์„ ๋ฐ”๋กœ ๋‚˜๊ฐ„๋‹ค. ๊ทธ๋ฆฌ๊ณ  eat()๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— activeํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ์—ฌ์ „ํžˆ ๋‚˜ ํ•˜๋‚˜ ๋ฟ์ด๋‹ค. ๋งŒ์•ฝ ๊ทธ ๊นจ์–ด๋‚œ ํ”„๋กœ์„ธ์Šค๊ฐ€ public method๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‚ด๊ฐ€ activeํ•˜๊ธฐ ๋•Œ๋ฌธ์— entry queue์— ๋งค๋‹ฌ๋ฆฌ๊ฒŒ ๋  ๊ฒƒ.

wait() ์ฝ”๋“œ๋ฅผ method์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ž‘์„ฑํ•œ ์ด์œ ๋„ ์ด๋Ÿฌํ•œ ์ด์œ  ๋•Œ๋ฌธ์ด๋‹ค. ๊ผญ wait() ์ฝ”๋“œ๊ฐ€ method์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์ด์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๊นจ์–ด๋‚œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋Š” ์ผ์€ ์—†์–ด์•ผ ํ•œ๋‹ค.

=> ๋ชจ๋‹ˆํ„ฐ๋Š” ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด์ง€ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ฃผ๋Š” ๊ฒƒ์€ ์•„๋‹˜. ํ•ด๊ฒฐ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ Dining philosoper Problem์„ ํ•ด๊ฒฐํ–ˆ๋‹ค.

์ฒ˜์Œ์— ๋ชจ๋‹ˆํ„ฐ๋งŒ ๋จธ๋ฆฌ๋ฅผ ์ž˜ ์จ์„œ ์ฝ”๋”ฉํ•ด ๋†“์œผ๋ฉด ๋‚˜์ค‘์—๋Š” pickup๊ณผ putdown์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. 

 

์ด์ฒ˜๋Ÿผ Programming Language ์ฐจ์›์—์„œ ๋™๊ธฐํ™” ํˆด์„ ์ œ๊ณตํ•ด์ฃผ๋ฉด ๋ฌธ์ œ๋ฅผ ํ›จ์”ฌ ๋” ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฝ”๋“œ ๋‚ด์— ์–ด๋– ํ•œ ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ์ด ๋˜์—ˆ๋‹ค.

=> ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ž…์žฅ์—์„œ ํ›จ์”ฌ ํŽธํ•˜๋‹ค.

 

Monitor Implementation

๋ชจ๋‹ˆํ„ฐ์—์„œ signal์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ชจ๋‹ˆํ„ฐ ๋‚ด๋ถ€์— wait๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ž ๋“ค์–ด ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ ๊นจ์›Œ์•ผ ํ•˜๋Š”๋ฐ, ํŠน์ • ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง€์ •ํ•ด์„œ ๊นจ์šฐ๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

1. wait ํ˜ธ์ถœ์‹œ์— ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” integer๊ฐ’ C๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋‚˜์ค‘์— signal์ด ๋ฐœ์ƒํ•˜๋ฉด ์ด ์šฐ์„  ์ˆœ์œ„ ๊ฐ’์ด ์ œ์ผ ์ž‘์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊นจ์šฐ๊ฒŒ ๋œ๋‹ค.

2. ์•ž์—์„œ์˜ ์‹์‚ฌํ•˜๋Š” ์ฒ ํ•™์ž ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฒ• ์ฒ˜๋Ÿผ, ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๋Œ€๊ธฐํ•˜๋Š” ๊ณต๊ฐ„(์กฐ๊ฑด ๋ณ€์ˆ˜)์„ ๋ณ„๋„๋กœ ๋งˆ๋ จํ•ด์„œ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ๊นจ์šด๋‹ค.

 

๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋‹ˆํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ 2๊ฐ€์ง€ ์กฐ๊ฑด๋งŒ ๋งŒ์กฑ๋˜๋ฉด ์˜ฌ๋ฐ”๋ฅธ ํ•ด๊ฒฐ์ฑ…์ด๋ผ๋Š” ๊ฒƒ์ด ์ฆ๋ช…์ด ๋˜์–ด ์žˆ๋‹ค.
๊ทธ๋Ÿผ ์ด 2๊ฐ€์ง€ ์กฐ๊ฑด์€ ๋ญ˜๊นŒ?

1. function์„ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ํ˜ธ์ถœํ•˜๋„๋ก ํ•ด๋ผ.
์•ž์˜ ์˜ˆ์—์„œ๋Š” pickup์„ ๋จผ์ € ํ˜ธ์ถœํ•˜๊ณ  putdown์„ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค. putdown์„ ๋จผ์ € ํ˜ธ์ถœํ•˜๋Š” ์ผ์ด ์—†๋„๋ก ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ฝ”๋”ฉ์„ ํ•ด์•ผ ํ•œ๋‹ค.

2. ๋ชจ๋‹ˆํ„ฐ์˜ private ๋ณ€์ˆ˜๋“ค์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ public method๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผํ•˜๋„๋ก ํ•ด๋ผ. ์ฆ‰, ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•ด๋ผ.

๋ชจ๋‹ˆํ„ฐ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ language๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— private ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ง์ ‘์ ์ธ ์ ‘๊ทผ์„ ๋ง‰์•„์ฃผ์ง€ ์•Š๋Š”๋‹ค.

์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ P,V๋กœ๋งŒ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ œ์•ฝ.

 

โ€ป๋ณธ ๋‚ด์šฉ์€ ํ•œ์–‘๋Œ€ํ•™๊ต ๊ฐ•์ˆ˜์šฉ ๊ต์ˆ˜๋‹˜์˜ ๊ฐ•์˜๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

728x90

'HYU > ์šด์˜์ฒด์ œ(OS)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

9. Memory Management (2)  (0) 2023.05.07
8. Memory Management (1)  (0) 2023.05.02
5. Process Synchronization (1)  (0) 2023.03.30
4. CPU Scheduling  (3) 2023.03.24
3. Processes and Threads  (0) 2023.03.23