๐Ÿš€ ๋ฉ€ํ‹ฐ์ฝ”์–ด๋Š” ํŒ€ํ”Œ์ด๋‹ค โ€“ ๋ณ‘๋ ฌ์„ฑ, ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ˜‘์—…

GoldenDuskยท2025๋…„ 4์›” 3์ผ
0
post-thumbnail

๐Ÿ’ก ํ”„๋กค๋กœ๊ทธ: ํ˜ผ์ž๋ณด๋‹ค ํ•จ๊ป˜๊ฐ€ ์–ด๋ ค์šด ์ด์œ 

์˜ˆ์ „์—” CPU ์•ˆ์— ๋”ฑ ํ•˜๋‚˜์˜ ์ฝ”์–ด๋งŒ ์žˆ์—ˆ์–ด์š”. ๋ชจ๋“  ์ž‘์—…์€ ์ด ํ•˜๋‚˜์˜ ๋‡Œ๋กœ ์ฒ˜๋ฆฌ๋์ฃ . ๊ทธ๋Ÿฐ๋ฐ ์ด์ œ๋Š” ๋ฉ€ํ‹ฐ์ฝ”์–ด ์‹œ๋Œ€. CPU ์•ˆ์— ๋‘ ๊ฐœ, ๋„ค ๊ฐœ, ์—ฌ๋Ÿ ๊ฐœโ€ฆ ์‹ฌ์ง€์–ด ์ˆ˜์‹ญ ๊ฐœ์˜ ์ฝ”์–ด๊ฐ€ ๋“ค์–ด ์žˆ๋Š” ์‹œ๋Œ€์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ๊ถ๊ธˆ์ฆ ํ•˜๋‚˜.

"์ฝ”์–ด๊ฐ€ ๋งŽ์•„์กŒ๋Š”๋ฐ ์™œ ์ปดํ“จํ„ฐ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ๊นŒ์ง€ ๋นจ๋ผ์ง€์ง„ ์•Š์„๊นŒ?"

๊ทธ ์ด์œ ๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ฝ”์–ด๋ผ๋ฆฌ ํ˜‘์—…์ด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ด์—์š”.

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ์‹œ๋ฆฌ์ฆˆ์—์„œ๋Š” ๋ฉ€ํ‹ฐ์ฝ”์–ด ์‹œ๋Œ€์˜ ์ปดํ“จํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜‘๋ ฅํ•˜๋Š”์ง€, ๊ทธ ์•ˆ์˜ ๊ทœ์น™๊ณผ ์ถฉ๋Œ, ์กฐ์œจ ๋ฐฉ์‹์„ ์ด์•ผ๊ธฐ์ฒ˜๋Ÿผ ํ’€์–ด๋ณผ ๊ฑฐ์˜ˆ์š”. ์ฒซ ํ™”๋ถ€ํ„ฐ ํ•จ๊ป˜ ๋– ๋‚˜๋ณผ๊นŒ์š”?


๐ŸŒŸ 1ํ™”. ๊ฐ์ž์˜ ์บ์‹œ๋ฅผ ๊ฐ€์ง„ CPU๋“ค

๐Ÿ’ก ์™œ ์ฝ”์–ด๋งˆ๋‹ค ์บ์‹œ๊ฐ€ ์žˆ์„๊นŒ?

ํ˜„๋Œ€์˜ CPU๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ์†๋„๊ฐ€ ๋„ˆ๋ฌด ๋А๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—, CPU๋Š” ์ž‘์€ ์ €์žฅ์†Œ์ธ ์บ์‹œ(Cache)๋ฅผ ์‚ฌ์šฉํ•ด์š”.

๊ทธ๋ฆฌ๊ณ  ๋ฉ€ํ‹ฐ์ฝ”์–ด CPU์—์„œ๋Š” ๊ฐ ์ฝ”์–ด๊ฐ€ ์ž์‹ ๋งŒ์˜ ์บ์‹œ(L1, L2)๋ฅผ ๊ฐ–๊ณ  ์žˆ์–ด์„œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด:

  • CPU1์€ ์ž๊ธฐ ์ผ์„ ํ•˜๋А๋ผ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ณจ๋ผ ์ž๊ธฐ L1 ์บ์‹œ์— ์ €์žฅํ•ด๋‘ฌ์š”.
  • CPU2๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž๊ธฐ๋งŒ์˜ ์บ์‹œ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ž‘์—…ํ•ด์š”.

์ด๊ฑด ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ๋Š” ์•„์ฃผ ์ข‹์€ ๊ตฌ์กฐ์ง€๋งŒโ€ฆ ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ์ƒ๊ฒจ์š”.

โš ๏ธ ๋ฌธ์ œ ๋ฐœ์ƒ: ์บ์‹œ๊ฐ€ โ€˜๋”ฐ๋กœ ๋…ผ๋‹คโ€™

๋ฌธ์ œ๋Š” ์ฝ”์–ด๋“ค์ด ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ž ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์—์š”.

์˜ˆ์‹œ

  1. ๊ณต์œ  ๋ณ€์ˆ˜ x๊ฐ€ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” 0์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ์Œ
  2. CPU1์ด x = 1๋กœ ๋ฐ”๊พธ๊ณ , ๊ทธ ๊ฐ’์„ ์ž๊ธฐ L1 ์บ์‹œ์— ์ €์žฅํ•จ (๋ฉ”๋ชจ๋ฆฌ๋Š” ์•„์ง ์—…๋ฐ์ดํŠธ ์•ˆ ๋จ)
  3. CPU2๋Š” ์—ฌ์ „ํžˆ ์˜›๋‚  ๊ฐ’์ธ x = 0์„ ์ž๊ธฐ ์บ์‹œ์— ๊ฐ€์ง€๊ณ  ์žˆ์Œ

์ด ์ƒํƒœ์—์„œ CPU1๊ณผ CPU2๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ณด๊ฒŒ ๋˜๋ฉด, ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์ธ๋ฐ๋„ ๊ฒฐ๊ณผ๊ฐ€ ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋‘ ์ฝ”์–ด๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ์บ์‹ฑํ•ด์„œ ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ด ๊นจ์ง€๋Š” ํ˜„์ƒ์„
์šฐ๋ฆฌ๋Š” ์บ์‹œ ์ผ๊ด€์„ฑ ๋ฌธ์ œ(Cache Coherency Problem)๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

๐Ÿ’ฅ ์™œ ์ด๊ฒŒ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ์ผ๊นŒ?

๋ฉ€ํ‹ฐ์ฝ”์–ด ํ™˜๊ฒฝ์—์„  ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ์ผ์ด ์•„์ฃผ ํ”ํ•ด์š”.
์ด๋Ÿด ๋•Œ ์บ์‹œ ์ผ๊ด€์„ฑ์ด ๊นจ์ง€๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ์š”:

  1. ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ: ์–ด๋–ค ์ฝ”์–ด๊ฐ€ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Œ
  2. ๋””๋ฒ„๊น… ์–ด๋ ค์›€: ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Œ (Heisenbug ํ˜„์ƒ)
  3. ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ํ›ผ์†: ํŠนํžˆ ๊ธˆ์œต, ํ†ต์‹ , ๋ณด์•ˆ ์‹œ์Šคํ…œ์—์„  ์น˜๋ช…์ 

โœ… ๊ทธ๋ž˜์„œ ํ•ด๊ฒฐ์ฑ…์€?

๋ฐ”๋กœ ์บ์‹œ ์ผ๊ด€์„ฑ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฑฐ์˜ˆ์š”.

๋Œ€ํ‘œ์ ์ธ ํ”„๋กœํ† ์ฝœ์ธ MESI๋Š” ๊ฐ ์บ์‹œ ๋ธ”๋ก์˜ ์ƒํƒœ๋ฅผ Modified, Exclusive, Shared, Invalid ๋„ค ๊ฐ€์ง€๋กœ ๊ด€๋ฆฌํ•˜๋ฉด์„œ,

  • ๋ˆ„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€
  • ๋ˆ„๊ฐ€ ์ˆ˜์ •ํ–ˆ๋Š”์ง€
  • ๋ˆ„๊ฐ€ ๊ณต์œ ํ•˜๊ณ  ์žˆ๋Š”์ง€

๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถ”์ ํ•˜๊ณ , ์ฝ๊ธฐ/์“ฐ๊ธฐ ์š”์ฒญ์— ๋”ฐ๋ผ ์บ์‹œ ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŒŸ 2ํ™”. ํ˜ผ์„ ์„ ๋ง‰๊ธฐ ์œ„ํ•œ ๊ทœ์น™ โ€“ MESI ํ”„๋กœํ† ์ฝœ

๊ทธ๋ž˜์„œ ๋“ฑ์žฅํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ MESI ํ”„๋กœํ† ์ฝœ์ด์—์š”. ์ด๊ฑด ๊ฐ ์บ์‹œ ๋ธ”๋ก์ด ์–ด๋–ค ์ƒํƒœ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ๊ทœ์น™์ด์—์š”.

์ƒํƒœ์˜๋ฏธ
M (Modified)์ˆ˜์ •๋จ. ๋ฉ”๋ชจ๋ฆฌ์™€ ๋‹ค๋ฆ„. ๋‚˜๋งŒ ๊ฐ–๊ณ  ์žˆ์Œ
E (Exclusive)๋‚˜๋งŒ ๊ฐ–๊ณ  ์žˆ๊ณ , ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ฐ™์Œ
S (Shared)์—ฌ๋Ÿฌ ์บ์‹œ๊ฐ€ ๊ณต์œ  ์ค‘. ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ฐ™์Œ
I (Invalid)๋ฌดํšจํ™”๋จ. ๋” ์ด์ƒ ๋ชป ์”€

์ƒํƒœ ์ „์ด ์˜ˆ์‹œ

  • CPU1์ด x๋ฅผ Modified ์ƒํƒœ๋กœ ๊ฐ–๊ณ  ์žˆ๋‹ค๊ฐ€
  • CPU2๊ฐ€ x๋ฅผ ์ฝ์œผ๋ฉด โ†’ ๋‘˜ ๋‹ค Shared ์ƒํƒœ๋กœ ์ „์ด
  • ์ดํ›„ CPU2๊ฐ€ x๋ฅผ ์“ฐ๋ ค๊ณ  ํ•˜๋ฉด โ†’ ๋‹ค๋ฅธ ์บ์‹œ๋“ค ๋ฌดํšจํ™” ์š”์ฒญ โ†’ Modified ์ƒํƒœ ์ง„์ž…

์ด๋ ‡๊ฒŒ ์„œ๋กœ์˜ ์ƒํƒœ๋ฅผ ์กฐ์ ˆํ•˜๋ฉด์„œ ์บ์‹œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŒŸ 3ํ™”. CPU๋“ค์€ ์„œ๋กœ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ์‹œํ• ๊นŒ? โ€“ Bus Snooping

๊ทธ๋Ÿฐ๋ฐ ์ฝ”์–ด๋ผ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ์„œ๋กœ๊ฐ€ ์–ด๋–ค ์ƒํƒœ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ์š”?

๋ฐ”๋กœ ๋ฒ„์Šค๋ฅผ ๋ชฐ๋ž˜ ์—ฟ๋“ฃ๋Š” ๋ฐฉ์‹, Bus Snooping์ž…๋‹ˆ๋‹ค.

๊ฐ ์บ์‹œ๋Š” ๊ณต์šฉ ๋ฒ„์Šค๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ์‹œํ•ด์š”.

  • ๋ˆ„๊ตฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ x๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋ฉด?
    • "๋‚˜ ๊ฐ–๊ณ  ์žˆ์–ด!" ํ˜น์€
    • "๊ทธ๋Ÿผ ๋‚œ ๋‚ด ์บ์‹œ ๋ฌดํšจํ™”ํ•ด์•ผ์ง€..."

์ด๋ ‡๊ฒŒ ์„œ๋กœ ๋ˆˆ์น˜ ๋ณด๋ฉฐ ์บ์‹œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ด์š”.

ํ•˜์ง€๋งŒ ์ฝ”์–ด๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋ชจ๋‘๊ฐ€ ๋ฒ„์Šค๋ฅผ ์—ฟ๋“ฃ๋Š” ๊ตฌ์กฐ๋Š” ํ˜ผ์žกํ•ด์ง€๊ณ  ํ™•์žฅ์„ฑ์ด ๋–จ์–ด์ง€์ฃ .


๐ŸŒŸ 4ํ™”. ์ปค์ง„ ํŒ€์—” ๊ทœ์น™์ด ํ•„์š”ํ•˜๋‹ค โ€“ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ธฐ๋ฐ˜ ์ผ๊ด€์„ฑ

์ฝ”์–ด ์ˆ˜๊ฐ€ ์ˆ˜์‹ญ ๊ฐœ, ์ˆ˜๋ฐฑ ๊ฐœ๊ฐ€ ๋˜๋ฉด ์—ฟ๋“ฃ๊ธฐ ๋ฐฉ์‹์€ ํ•œ๊ณ„์— ๋ถ€๋”ชํž™๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋“ฑ์žฅํ•œ ๊ฒŒ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ์ด์—์š”.

  • ์ค‘์•™์— ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋‘๊ณ 
  • ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก๋งˆ๋‹ค "์ด๊ฑฐ ๋ˆ„๊ฐ€ ๊ฐ–๊ณ  ์žˆ์Œ?" ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ด์š”

์˜ˆ์‹œ:

  • CPU3๊ฐ€ x๋ฅผ ์“ฐ๋ ค ํ•˜๋ฉด
    • ๋””๋ ‰ํ„ฐ๋ฆฌ์—๊ฒŒ ์š”์ฒญ
    • ๊ด€๋ จ ์ฝ”์–ด๋“ค์—๊ฒŒ ๋ฌดํšจํ™” ์š”์ฒญ ์ „ํŒŒ

๋งˆ์น˜ ์ค‘๊ฐ„ ๊ด€๋ฆฌ์ž์ฒ˜๋Ÿผ ๊ฐ์ž ๊ฐ–๊ณ  ์žˆ๋Š” ์ƒํƒœ๋ฅผ ํŒŒ์•…ํ•ด์„œ ์ „ํŒŒํ•ด์ฃผ๋Š” ๊ฑฐ์ฃ .


๐ŸŒŸ 5ํ™”. ๋ช…๋ น์–ด ์ˆœ์„œ๋„ ํ˜‘์—…์˜ ์ผ๋ถ€๋‹ค โ€“ ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ

์บ์‹œ ์ผ๊ด€์„ฑ๋งŒ ์ž˜ ์œ ์ง€ํ•˜๋ฉด ๋์ผ๊นŒ์š”? ์•„๋‹ˆ์—์š”.

CPU๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ช…๋ น์–ด ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ” ์‹คํ–‰ํ•˜๊ธฐ๋„ ํ•ด์š”. ์™œ? ๋” ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ์š”.

x = 1;
y = x + 1;

์ด๋Ÿฐ ์ฝ”๋“œ์กฐ์ฐจ CPU๋Š” y๋ฅผ ๋จผ์ € ๊ณ„์‚ฐํ•  ์ˆ˜๋„ ์žˆ์–ด์š”!

๊ทธ๋ž˜์„œ ๊ฐ ์–ธ์–ด๋‚˜ CPU๋งˆ๋‹ค "์–ด๋А ์ •๋„๊นŒ์ง€ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•  ๊ฒƒ์ธ์ง€"๋ฅผ ๋ช…์‹œํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ(Memory Model)์ด ์กด์žฌํ•ด์š”.

  • Java์—๋Š” volatile
  • C++์—๋Š” memory_order_acquire

๊ฐ™์€ ํ‚ค์›Œ๋“œ๊ฐ€ ๋ฐ”๋กœ ๊ทธ๊ฑธ ์œ„ํ•œ ๊ฑฐ์˜ˆ์š”.

๋ฉ€ํ‹ฐ์ฝ”์–ด์˜ ํ˜‘์—…์€ '์ˆœ์„œ'๊นŒ์ง€ ์‹ ๊ฒฝ ์จ์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŒŸ 6ํ™”. ์ง„์งœ ๋ณ‘๋ ฌ์„ฑ์˜ ์‹œ์ž‘ โ€“ ๋ฉ€ํ‹ฐ์ฝ”์–ด์™€ ์Šค๋ ˆ๋“œ

์ด์ œ ์ผ๊ด€์„ฑ์„ ๋‹ค์กŒ๋‹ค๋ฉด, ์ง„์งœ ๋ฉ€ํ‹ฐ์ฝ”์–ด์˜ ํž˜, ๋ณ‘๋ ฌ์„ฑ(Parallelism)์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณผ๊ฒŒ์š”.

๋ฉ€ํ‹ฐ์ฝ”์–ด๋ž€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฝ”์–ด๊ฐ€ ํ•˜๋‚˜์˜ CPU ์•ˆ์— ์žˆ๋Š” ๊ตฌ์กฐ๊ณ ,
๋ณ‘๋ ฌ์„ฑ์€ ์ด ์ฝ”์–ด๋“ค์ด ๋™์‹œ์— ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Šฅ๋ ฅ์ž…๋‹ˆ๋‹ค.

๐Ÿณ ์ฃผ๋ฐฉ ๋น„์œ 

  • ์‹ฑ๊ธ€์ฝ”์–ด = ์…ฐํ”„ 1๋ช…์ด ๋ชจ๋“  ์š”๋ฆฌ ๋‹ด๋‹น
  • ๋ฉ€ํ‹ฐ์ฝ”์–ด = ์…ฐํ”„ ์—ฌ๋Ÿฌ ๋ช…์ด ๋™์‹œ์— ์š”๋ฆฌ
  • ๊ฐ๊ฐ์˜ ์š”๋ฆฌ๋Š” = ์Šค๋ ˆ๋“œ(Thread)
  • ์ฃผ๋ฐฉ ์ „์ฒด๋Š” = ํ”„๋กœ์„ธ์Šค(Process)

์Šค๋ ˆ๋“œ์˜ ์žฅ์ 

  • ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•ด์„œ ๋น ๋ฆ„
  • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

๐ŸŒŸ 7ํ™”. ํ˜‘์—…์˜ ํ•„์ˆ˜ ์กฐ๊ฑด โ€“ ๋™๊ธฐํ™”์™€ ๋ฎคํ…์Šค

ํ•˜์ง€๋งŒ ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ ์ž์›์„ ๊ณต์œ ํ•˜๋‹ค ๋ณด๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”.

์˜ˆ:

  • ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— x++์„ ์‹คํ–‰ํ•˜๋ฉด?
    • ์˜ˆ์ƒ ๊ฒฐ๊ณผ: 2
    • ์‹ค์ œ ๊ฒฐ๊ณผ: 1 ๐Ÿ˜ฑ

๊ทธ๋ž˜์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ๋™๊ธฐํ™”(Synchronization) ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋„๊ตฌ์—ญํ• 
๋ฎคํ…์Šค(Mutex)ํ•œ ๋ฒˆ์— ํ•˜๋‚˜๋งŒ ์ž์› ์ ‘๊ทผ ๊ฐ€๋Šฅ
์„ธ๋งˆํฌ์–ด๋™์‹œ์— N๊ฐœ๊นŒ์ง€๋งŒ ์ ‘๊ทผ ํ—ˆ์šฉ
๋ฝ/Unlock์ž์› ์ž ๊ธˆ๊ณผ ํ•ด์ œ

ํ˜‘์—…์—๋Š” ์ถฉ๋Œ ๋ฐฉ์ง€๊ฐ€ ํ•„์ˆ˜์˜ˆ์š”.


๐ŸŒŸ 8ํ™”. ์‚ฌ์šฉ์ž vs ์ปค๋„ ๋ชจ๋“œ โ€“ ๋ˆ„๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„๊นŒ?

CPU์—๋Š” ๋‘ ๊ฐ€์ง€ ์‹คํ–‰ ๋ชจ๋“œ๊ฐ€ ์žˆ์–ด์š”:

  • ์‚ฌ์šฉ์ž ๋ชจ๋“œ: ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ (์ œํ•œ์  ๊ถŒํ•œ)
  • ์ปค๋„ ๋ชจ๋“œ: ์šด์˜์ฒด์ œ ๊ธฐ๋Šฅ ์‹คํ–‰ (์ „์ฒด ๊ถŒํ•œ)

โœˆ๏ธ ๊ณตํ•ญ ๋น„์œ 

  • ์ผ๋ฐ˜ ์Šน๊ฐ = ์‚ฌ์šฉ์ž ๋ชจ๋“œ (ํƒ‘์Šน๊ตฌ๊นŒ์ง€๋งŒ)
  • ๋ณด์•ˆ ์š”์› = ์ปค๋„ ๋ชจ๋“œ (์ œ์–ดํƒ‘, ํ™œ์ฃผ๋กœ๊นŒ์ง€ ์ ‘๊ทผ ๊ฐ€๋Šฅ)

์‚ฌ์šฉ์ž ๋ชจ๋“œ์—์„œ ์ปค๋„ ๊ธฐ๋Šฅ์„ ์“ฐ๊ณ  ์‹ถ์œผ๋ฉด?

์‹œ์Šคํ…œ ์ฝœ(System Call)์„ ํ†ตํ•ด ์ปค๋„ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•ด์š”.

ํ•˜์ง€๋งŒ ์ด ์ „ํ™˜์—๋Š” ๋น„์šฉ์ด ๋“ค์–ด์š”. ๋„ˆ๋ฌด ์ž์ฃผ ์ „ํ™˜ํ•˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ฃ .


๐ŸŒŸ 9ํ™”. CPU์—๊ฒŒ ์ฐพ์•„์˜จ ์‘๊ธ‰ ์ƒํ™ฉ โ€“ ์ธํ„ฐ๋ŸฝํŠธ ์‹œ์Šคํ…œ

๋งˆ์ง€๋ง‰์œผ๋กœ, CPU๊ฐ€ ์—ด์‹ฌํžˆ ์ž‘์—… ์ค‘์ธ๋ฐ
๊ฐ‘์ž๊ธฐ ์™ธ๋ถ€์—์„œ ๊ธด๊ธ‰ํ•œ ์ผ์ด ์ƒ๊ธฐ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?

๊ทธ๊ฑธ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋กœ ์ธํ„ฐ๋ŸฝํŠธ ์‹œ์Šคํ…œ์ด์—์š”.

์˜ˆ: CPU๊ฐ€ ์ง„๋ฃŒ ์ค‘์ธ ์˜์‚ฌ๋ผ๋ฉด?

  • ์‘๊ธ‰ํ™˜์ž ๋“ฑ์žฅ โ†’ ํ˜„์žฌ ํ™˜์ž ์ง„๋ฃŒ ๋ฉˆ์ถค
  • ์‘๊ธ‰์ฒ˜์น˜(ISR) ์‹คํ–‰
  • ๋‹ค์‹œ ์›๋ž˜ ํ™˜์ž๋กœ ๋Œ์•„๊ฐ€๊ธฐ

์ธํ„ฐ๋ŸฝํŠธ์˜ ์ข…๋ฅ˜

์œ ํ˜•์˜ˆ์‹œ์„ค๋ช…
ํ•˜๋“œ์›จ์–ดํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค์™ธ๋ถ€ ์žฅ์น˜ ์š”์ฒญ
์†Œํ”„ํŠธ์›จ์–ด์‹œ์Šคํ…œ ์ฝœ, 0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ๋‚ด๋ถ€ ๋ฐœ์ƒ
๋™๊ธฐ/๋น„๋™๊ธฐ์˜ˆ์™ธ vs ์žฅ์น˜ ์‹ ํ˜ธ๋ฐœ์ƒ ์‹œ์  ๊ธฐ์ค€

์ธํ„ฐ๋ŸฝํŠธ๋Š” ์‹ค์‹œ๊ฐ„ ๋ฐ˜์‘์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ์ฑ…์ž„์ง‘๋‹ˆ๋‹ค.


โœ… ์ „์ฒด ์š”์•ฝ

๊ฐœ๋…์š”์•ฝ
์บ์‹œ ์ผ๊ด€์„ฑ์ฝ”์–ด๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฐ’ ๋ฐฉ์ง€ (MESI)
์ƒํƒœ ์ „์ด์ฝ๊ธฐ/์“ฐ๊ธฐ ์‹œ ์บ์‹œ ์ƒํƒœ ์ „ํ™˜
Bus Snooping์บ์‹œ๋“ค์ด ๋ฒ„์Šค๋ฅผ ์—ฟ๋“ฃ๊ณ  ์กฐ์ •ํ•จ
๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฐฉ์‹์ค‘์•™ ๊ด€๋ฆฌ์ž๋กœ ํ™•์žฅ์„ฑ ํ™•๋ณด
๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ๋ช…๋ น์–ด ์ˆœ์„œ ๋ณด์žฅ ์—ฌ๋ถ€๋ฅผ ๊ทœ์ •
๋ณ‘๋ ฌ์„ฑ & ์Šค๋ ˆ๋“œ์—ฌ๋Ÿฌ ์ž‘์—… ๋™์‹œ ์‹คํ–‰์„ ์œ„ํ•œ ๊ตฌ์กฐ
๋™๊ธฐํ™”์ถฉ๋Œ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ์ œ์–ด ์žฅ์น˜
์‚ฌ์šฉ์ž/์ปค๋„ ๋ชจ๋“œ๊ถŒํ•œ ๊ตฌ๋ถ„ ๋ฐ ๋ชจ๋“œ ์ „ํ™˜ ๊ตฌ์กฐ
์ธํ„ฐ๋ŸฝํŠธ ์‹œ์Šคํ…œ๊ธด๊ธ‰ ์ƒํ™ฉ ๋Œ€์‘์„ ์œ„ํ•œ CPU ๊ตฌ์กฐ

๋ฉ€ํ‹ฐ์ฝ”์–ด๋Š” ์„ฑ๋Šฅ์ด ์•„๋‹Œ ํ˜‘์—…์ด๋‹ค.
์ž˜ ๋‚˜๋‰œ ์—ญํ• ๊ณผ ์ฒ ์ €ํ•œ ์กฐ์œจ์ด ์ง„์งœ ๋น ๋ฆ„์„ ๋งŒ๋“ ๋‹ค.

profile
๋‚ด ์ง€์‹์„ ๊ธฐ๋กํ•˜์—ฌ, ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๊ณต์œ ํ•˜์—ฌ ํ•จ๊ป˜ ๋ฐœ์ „ํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋˜๊ณ  ์‹ถ๋‹ค. gitbook์—๋„ ์ •๋ฆฌ์ค‘ ~

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