Mutex & Semaphore

2023. 3. 26. 15:32ใ†CS/CS ์Šคํ„ฐ๋””

๊ณต์œ ์ž์› ์ ‘๊ทผ์— ๋Œ€ํ•ด ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž์˜ ์ž…์žฅ์—์„œ ์ค‘์š”ํ•œ ํ™”๋‘์ด๋‹ค.

๊ฐ€๋ น,

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

๋‹ค์ค‘ ํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ์—์„œ IPC๋ฅผ ์œ„ํ•ด ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ ๋“ฑ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋•Œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํ‚ฌ์ด ๋ฐ”๋กœ Mutex์™€ Semaphore์ด๋‹ค.

 

Mutex

์ถœ์ฒ˜: https://www.javatpoint.com/mutex-vs-semaphore

๋ฎคํ…์Šค๋Š” Mutual Exclusion์˜ ์ค„์ž„๋ง๋กœ ์ƒํ˜ธ ๋ฐฐ์ œ๋ผ๋Š” ๋œป์„ ๊ฐ–๋Š”๋‹ค.

๋ฎคํ…์Šค๋Š” ํŠน์ • ๊ณต์œ  ์ž์›์— ๋Œ€ํ•ด ๋‹จ ํ•˜๋‚˜์˜ ์ฃผ์ฒด๋งŒ์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฝ์˜ ๊ฐœ๋…์ด๋‹ค.

๋ฎคํ…์Šค์˜ ๊ตฌํ˜„์€ ํฌ๊ฒŒ lock()๊ณผ unlock()์œผ๋กœ ์ด๋ฃจ์–ด ์ง€๋Š”๋ฐ,

(wait()์™€ release()๋กœ๋„ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ์—ฌ๊ธฐ์„œ๋Š” lock()๊ณผ unlock()์ด ๋” ์ง๊ด€์ ์ธ ์›Œ๋”ฉ์ด๋ผ๊ณ  ํŒ๋‹จ)

lock()์€ ํŠน์ • ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์ฃผ์ฒด์˜ ์ ‘๊ทผ์„ ์ฐจ๋‹จํ•˜๋Š” ๊ฒƒ์ด๊ณ  unlock()์€ lock()์„ ์ˆ˜ํ–‰ํ•œ ์ฃผ์ฒด๊ฐ€ ๊ฑธ์—ˆ๋˜ ๋ฝ์„ ํ•ด์ œํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค.

ํŠน์ • ๊ณต์œ  ์ž์›์—์„œ ๋ฎคํ…์Šค๋ฅผ ์“ฐ๊ณ  ์žˆ๋Š”๋ฐ ๋™์‹œ์— 3๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

3๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋“ค์€ ๋ชจ๋‘ ๋ฎคํ…์Šค์— lock() ์š”์ฒญ์„ ์ „๋‹ฌํ•œ๋‹ค.

๊ทธ ์ค‘ ๊ฐ€์žฅ ๋จผ์ € ์š”์ฒญ์„ ๋ณด๋‚ธ ์Šค๋ ˆ๋“œ์˜ lock()์ด ์„ฑ๊ณตํ•˜๊ณ , ๋‚˜๋จธ์ง€ ์Šค๋ ˆ๋“œ๋“ค์€ ์ด๋ฏธ ๋ฎคํ…์Šค๊ฐ€ ๋ฝ ์ƒํƒœ์ด๋ฏ€๋กœ ๋Œ€๊ธฐ์— ๋น ์ง„๋‹ค.

๋ฝ์„ ์„ฑ๊ณตํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์„ ๋งˆ์น˜๊ณ  unlock()์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๊ทธ์ œ์„œ์•ผ ๋‹ค์Œ ์ˆœ๋ฒˆ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

๋ฎคํ…์Šค์—์„œ lock() ์š”์ฒญ์€ ์•„๋ฌด๋‚˜ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, unlock() ์š”์ฒญ์€ ์˜ค๋กœ์ง€ ํ˜„์žฌ ๊ณต์œ  ์ž์›์„ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ฃผ์ฒด ๋งŒ์ด ์ˆ˜ํ–‰๊ฐ€๋Šฅํ•˜๋‹ค. 

 

Semaphore

์ถœ์ฒ˜: https://velog.io/@hahahaa8642/OS-Spinlock-Semaphore-Mutex-Monitor

๋ฎคํ…์Šค๊ฐ€ ์ƒํ˜ธ ๋ฐฐ์ œ์— ๋Œ€ํ•œ ๊ธฐ์ˆ ์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, ์„ธ๋งˆํฌ์–ด๋Š” ํ•ด๋‹น ์—ญํ•  ๋ฟ ์•„๋‹ˆ๋ผ ์ž‘์—… ์ฃผ์ฒด๋“ค ๊ฐ„ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋Š”๋ฐ ์“ฐ์ด๋Š” ๋“ฑ ๋ฝ๊ณผ ์ปจ๋””์…˜ ๋ณ€์ˆ˜ ๋ถ„์•ผ์— ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

์„ธ๋งˆํฌ์–ด์—์„œ๋Š” ๋จผ์ € ์ด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. 

์ด ๋•Œ ์„ธ๋งˆํฌ์–ด์˜ ๊ฐ’์„ ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ํ•ด๋‹น ๊ฐ’์€ ๋™์‹œ์— ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ๋ฅผ ํ—ˆ์šฉํ•  ์ฃผ์ฒด์˜ ์ˆ˜๋งŒํผ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค.

๊ฐ€๋ น, 1๋กœ ์„ธ๋งˆํฌ์–ด๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๊ณต์œ  ์ž์›์—๋Š” ๋™์‹œ์— ํ•˜๋‚˜์˜ ์ฃผ์ฒด ๋งŒ์ด ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์ง€๋Š” ๊ฒƒ์ด๋‹ค. 

์ด๋Ÿฌํ•œ ์„ธ๋งˆํฌ์–ด๋ฅผ ์ด์ง„ ์„ธ๋งˆํฌ์–ด(Binary Semaphore)๋ผ๊ณ  ํ•˜๊ณ  ์ด๋Š” ๋ฎคํ…์Šค์˜ ๊ตฌํ˜„์—์„œ ํ™œ์šฉ๋˜๋Š” ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

์„ธ๋งˆํฌ์–ด๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ ๋’ค ์ด๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹์€ wait()์™€ release()๋กœ ๋‚˜๋‰œ๋‹ค. 

wait()๋Š” ์„ธ๋งˆํฌ์–ด์˜ ๊ฐ’์„ ํ•˜๋‚˜ ๋‚ฎ์ถ”๊ณ , ๋งŒ์•ฝ ์„ธ๋งˆํฌ์–ด์˜ ๊ฐ’์ด ์Œ์ˆ˜๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด ๋Œ€๊ธฐ์— ๋น ์ง€๋Š” ์š”์ฒญ์ด๋‹ค.

๋งŒ์•ฝ ์„ธ๋งˆํฌ์–ด์˜ ๊ฐ’์ด ์Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ๋Œ€๊ธฐ์—†์ด ๊ณง๋ฐ”๋กœ ์š”์ฒญ์ด ๋ฐ˜ํ™˜๋˜๊ณ  ๋กœ์ง์„ ๊ณ„์† ์ˆ˜ํ–‰ํ•œ๋‹ค.

release()๋Š” ์„ธ๋งˆํฌ์–ด์˜ ๊ฐ’์„ ํ•˜๋‚˜ ์ƒ์Šน์‹œํ‚ค๋Š” ๋กœ์ง์ด๋‹ค.

๋งŒ์•ฝ ํ•ด๋‹น ์š”์ฒญ์œผ๋กœ ์„ธ๋งˆํฌ์–ด์˜ ๊ฐ’์ด ์Œ์ˆ˜์—์„œ ๋ฒ—์–ด๋‚˜๋ฉด,

ํ์—์„œ ๋Œ€๊ธฐ ์ค‘์ธ ๋‹ค๋ฅธ ์ฃผ์ฒด์˜ wait() ์š”์ฒญ์ด ๋ฐ˜ํ™˜๋˜์–ด ํ•ด๋‹น ์ฃผ์ฒด์˜ ๋กœ์ง์ด ๋งˆ์ € ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์„ธ๋งˆํฌ์–ด๋Š” 1๋ณด๋‹ค ๋” ํฐ ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์ดˆ๊ธฐํ™”๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋™์‹œ์— ๊ณต์œ ์ž์›์— ์ ‘๊ทผํ•˜๋Š” ์ฃผ์ฒด์˜ ์ˆ˜๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ํŠน์ • ์ƒํ™ฉ์—์„œ ์„ธ๋งˆํฌ์–ด์˜ ๊ฐ’์ด ์Œ์ˆ˜๋ผ๋ฉด, ์ด๋Š” ๊ทธ ์ˆ˜์˜ ์ ˆ๋Œ“๊ฐ’๋งŒํผ ์ฃผ์ฒด๋“ค์ด ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๊ธฐ๋„ ํ•˜๋‹ค.

์„ธ๋งˆํฌ์–ด ์‘์šฉ (ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์™„๋ฃŒ ์ˆœ์„œ ๋ณด์žฅ)

์„ธ๋งˆํฌ์–ด๋ฅผ ์‘์šฉํ•˜๋ฉด ๋‘ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์„ธ๋งˆํฌ์–ด๋ฅผ 1์ด ์•„๋‹Œ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•ด์•ผํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋จผ์ € ์‹คํ–‰์ด ์™„๋ฃŒ๋˜์–ด์•ผ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์—์„œ release() ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ ,

๋Šฆ๊ฒŒ ์™„๋ฃŒ๋˜์–ด์•ผ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์—์„œ wait() ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

์ด๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค Parent์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค Child๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

์šฐ์„ , Parent๊ฐ€ ๋จผ์ € ์‹คํ–‰๋œ ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด๋ณด์ž.

Parent๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ wait() ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ด๋‹ค.

์ด ๋•Œ ์„ธ๋งˆํฌ์–ด์˜ ๊ฐ’์€ 0์ด๊ธฐ ๋•Œ๋ฌธ์—,

wait() ์š”์ฒญ ์‹œ -1์ด ๋˜๊ณ  ์ด์— ๋”ฐ๋ผ Parent๋Š” ๋Œ€๊ธฐ ์ƒํƒœ์— ๋น ์ง€๊ฒŒ ๋˜์–ด CPU ์ œ์–ด๊ถŒ์„ Child์—๊ฒŒ ๋„˜๊ธฐ๊ฒŒ ๋œ๋‹ค.

์ดํ›„ Child()๊ฐ€ ์‹คํ–‰๋˜์–ด release() ์š”์ฒญ๊ณผ ํ•จ๊ป˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์„ธ๋งˆํฌ์–ด์˜ ๊ฐ’์€ ๋‹ค์‹œ 0์ด ๋œ ์ฑ„ Parent๊ฐ€ ๋Œ€๊ธฐ ์ƒํƒœ์—์„œ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋œ๋‹ค. 

๋”ฐ๋ผ์„œ Child -> Parent ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜๊ฒŒ ๋œ๋‹ค.

๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

Child๊ฐ€ ๋จผ์ € ์ˆ˜ํ–‰๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ Child๊ฐ€ ์ˆ˜ํ–‰๋˜๋‹ค๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ CPU ์ œ์–ด๊ถŒ์ด ์šด์˜์ฒด์ œ๋กœ ๋„˜์–ด๊ฐ€๊ณ , ์šด์˜์ฒด์ œ๋Š” ๋‹ค์Œ ์ฐจ๋ก€๋กœ Parent๋ฅผ ์Šค์ผ€์ค„๋ง ํ–ˆ๋‹ค๋ฉด?

ํ•ด๋‹น ๊ฒฝ์šฐ์—๋„ Parent๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ๋„์ค‘ wait() ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ด์— ๋”ฐ๋ผ Parent๋Š” ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋˜์–ด Child๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. 

๋”ฐ๋ผ์„œ ํ•ด๋‹น ๊ฒฝ์šฐ์—๋„ Child -> Parent ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฌํ•œ ์‘์šฉ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€, ์„ธ๋งˆํฌ์–ด๋Š” ๋ฎคํ…์Šค์™€ ๋‹ฌ๋ฆฌ ๊ทธ ๋ˆ„๊ตฌ๋ผ๋„ release() ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

๋ฎคํ…์Šค๋Š” lock()์„ ๊ฑด ์ฃผ์ฒด๋งŒ์ด unlock()์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์„ธ๋งˆํฌ์–ด์—์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

'CS > CS ์Šคํ„ฐ๋””' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Dead Lock(๊ต์ฐฉ ์ƒํƒœ)  (0) 2023.03.31
Race Condition  (0) 2023.03.30
CPU ์Šค์ผ€์ค„๋ง  (0) 2023.03.25
IPC(Interprocess Communication)  (0) 2023.03.19
ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก(PCB)  (1) 2023.03.18