๐Ÿ’ฟ KAIST:PINTOS | Concept | Mutex

์ด์ˆœ๊ฐ„ยท2025๋…„ 5์›” 13์ผ

KAIST:PINTOS

๋ชฉ๋ก ๋ณด๊ธฐ
4/23

์šด์˜์ฒด์ œ๋ฅผ ๋ฐฐ์šฐ๋‹ค ๋ณด๋ฉด ์ฒ˜์Œ ๋งˆ์ฃผํ•˜๋Š” ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฎคํ…์Šค(Mutex)๋‹ค.
๋ฎคํ…์Šค๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์–ด๋–ค ์ž์›(ํŒŒ์ผ, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ)์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ
์„œ๋กœ ์ถฉ๋Œํ•˜์ง€ ์•Š๋„๋ก ๋„์™€์ฃผ๋Š” ์žฅ์น˜๋‹ค.


๐Ÿ” ๋ฎคํ…์Šค๋Š” ๋ฌด์—‡์ธ๊ฐ€?

๋ฎคํ…์Šค(Mutual Exclusion)๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์ƒํ˜ธ ๋ฐฐ์ œ๋ผ๋Š” ๋œป์ด๋‹ค.
์ด๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์–ด๋–ค ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ์„œ๋กœ ๋ฐฐ์ œํ•˜๋ฉฐ
ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ๋งŒ ์ ‘๊ทผํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ตฌ์กฐ
๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํ™”์žฅ์‹ค์— ๋ฌธ์ด ํ•˜๋‚˜ ์žˆ๊ณ , ํ•œ ์‚ฌ๋žŒ๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•ด๋ณด์ž.
ํ•œ ์‚ฌ๋žŒ์ด ๋“ค์–ด๊ฐ€๋ฉด ๋ฌธ์„ ์ž ๊ทธ๊ณ , ๋‹ค๋ฅธ ์‚ฌ๋žŒ์€ ๋ฌธ์ด ์—ด๋ฆด ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐฉ์‹์ด๋‹ค.
์ด ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋กœ ๋ฎคํ…์Šค์˜ ํ•ต์‹ฌ ๊ฐœ๋…์ด๋‹ค.


๐Ÿงต ์™œ ํ•„์š”ํ•œ๊ฐ€?

์šด์˜์ฒด์ œ์—์„œ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๋Œ์•„๊ฐ„๋‹ค.
์ด๋“ค์ด ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ๊ผฌ์ด๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
์ด๋Ÿฐ ์ƒํ™ฉ์„ ๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

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


๐Ÿ” ์‚ฌ์šฉ ๋ฐฉ์‹์€ ์–ด๋–ป๊ฒŒ ๋˜๋‚˜?

๋ฎคํ…์Šค๋Š” ๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

lock_acquire(&lock);  // ์ž์› ์‚ฌ์šฉ ์ „ ๋ฌธ ์ž ๊ทธ๊ธฐ
// ํฌ๋ฆฌํ‹ฐ์ปฌ ์„น์…˜ (๊ณต์œ  ์ž์› ์ ‘๊ทผ)
lock_release(&lock);  // ์ž์› ์‚ฌ์šฉ ํ›„ ๋ฌธ ์—ด๊ธฐ

์ž์›์„ ์“ฐ๊ธฐ ์ „์—” ๊ผญ ๋ฌธ์„ ์ž ๊ฐ€์•ผ ํ•˜๋ฉฐ,
๋‹ค ์“ฐ๊ณ  ๋‚˜๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์„ ์—ด์–ด์•ผ ํ•œ๋‹ค.


๐Ÿšฝ ์‰ฌ์šด ๋น„์œ : ๊ณต์ค‘ํ™”์žฅ์‹ค ์—ด์‡ 

  • ์—ด์‡ ๊ฐ€ ํ•˜๋‚˜๋ฟ์ธ ํ™”์žฅ์‹ค์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.
  • ๋ˆ„๊ตฐ๊ฐ€ ํ™”์žฅ์‹ค์— ๋“ค์–ด๊ฐ€๋ฉด ์—ด์‡ ๋ฅผ ๊ฐ€์ ธ๊ฐ„๋‹ค.
  • ๋‹ค๋ฅธ ์‚ฌ๋žŒ์€ ์—ด์‡ ๊ฐ€ ๋Œ์•„์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค.

๋ฎคํ…์Šค๋Š” ์ด "์—ด์‡ "์™€ ๊ฐ™์€ ์กด์žฌ๋‹ค.
ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์žฅ์น˜๋‹ค.


๐Ÿง  ์ค‘์š”ํ•œ ํŠน์ง•์€ ๋ฌด์—‡์ธ๊ฐ€?

ํŠน์ง•์„ค๋ช…
๋‹จ์ผ ์ž์› ๋ณดํ˜ธํ•˜๋‚˜์˜ ์ž์›์— ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.
์†Œ์œ  ๊ฐœ๋… ์กด์žฌ๋ฝ์„ ํš๋“ํ•œ ์Šค๋ ˆ๋“œ๋งŒ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅด๋‹ค๋กœ์ง์ด ๋‹จ์ˆœํ•ด ๋น ๋ฅด๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฐ๋“œ๋ฝ ์œ„ํ—˜๋„ ์žˆ๋‹ค์ž ๊ทผ ์ฑ„๋กœ unlockํ•˜์ง€ ์•Š์œผ๋ฉด ์„œ๋กœ ๊ธฐ๋‹ค๋ฆฌ๋‹ค ๋ฉˆ์ถฐ๋ฒ„๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿงช PintOS์—์„œ์˜ ์—ญํ• ์€?

PintOS์—์„œ๋Š” struct lock์ด๋ผ๋Š” ๊ตฌ์กฐ์ฒด๊ฐ€ ๋ฎคํ…์Šค ์—ญํ• ์„ ํ•œ๋‹ค.
๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์„ธ๋งˆํฌ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฎคํ…์Šค์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.

struct lock {
  struct thread *holder;
  struct semaphore semaphore; // ๋‚ด๋ถ€ ๊ตฌํ˜„์€ ์„ธ๋งˆํฌ์–ด์ง€๋งŒ, ์‚ฌ์šฉ ๋ฐฉ์‹์€ ๋ฎคํ…์Šค
};

์ฆ‰, ์šฐ๋ฆฌ๋Š” PintOS์—์„œ ๋ฎคํ…์Šค๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์ง„ ์•Š์ง€๋งŒ, ๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฝ์„ ๋‹ค๋ฃจ๊ฒŒ ๋œ๋‹ค.


๐Ÿ”— ์„ธ๋งˆํฌ์–ด์™€ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ์„๊นŒ?

๋ฎคํ…์Šค๋Š” ํ•œ ๋ฒˆ์— 1๊ฐœ๋งŒ ์ž์› ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„๋œ ๋ฐ˜๋ฉด,
์„ธ๋งˆํฌ์–ด๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž์›์„ ๋™์‹œ์— ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ์ฐจ์žฅ์— 3๊ฐœ์˜ ๋นˆ ๊ณต๊ฐ„์ด ์žˆ๋‹ค๋ฉด ์„ธ๋งˆํฌ์–ด๋ฅผ 3์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค.
์„ธ๋งˆํฌ์–ด๋Š” ๋‹ค์Œ ๊ธ€์—์„œ ๋” ์ž์„ธํžˆ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.


โœ… ์ •๋ฆฌ

  • ๋ฎคํ…์Šค๋Š” ์„œ๋กœ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋ฉด ์•ˆ ๋˜๋Š” ์ž์›์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋‹ค.
  • ์Šค๋ ˆ๋“œ๊ฐ€ ์ž์›์— ์ ‘๊ทผํ•  ๋•Œ๋Š” ๋ฎคํ…์Šค๋กœ ์ž ๊ทธ๊ณ , ๋‹ค ์“ฐ๋ฉด ๋‹ค์‹œ ์—ด์–ด์ค˜์•ผ ํ•œ๋‹ค.
  • ์šด์˜์ฒด์ œ, ํŠนํžˆ PintOS์—์„œ๋Š” lock_acquire()์™€ lock_release()๋ฅผ ํ†ตํ•ด ๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์„ธ๋งˆํฌ์–ด๋Š” ๋ฎคํ…์Šค๋ณด๋‹ค ์ผ๋ฐ˜ํ™”๋œ ๊ฐœ๋…์ด๋ฉฐ, ๋‹ค์Œ ๊ธ€์—์„œ ์ด์–ด์„œ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.
profile
์„œํˆด์ง€์–ธ์ • ๋Š˜ ํ–‰๋™์ด ๋จผ์ €์ด๊ธฐ๋ฅผ

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