[CS:APP] Chapter 6. The Memory Hierarchy

June 9, 2023, 2:41 p.m. ยท 12 min read ยท ๐ŸŒ๏ธŽ ko

CS:APP system programming

๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ์€ ์„œ๋กœ ๋‹ค๋ฅธ ์šฉ๋Ÿ‰, ๊ฐ€๊ฒฉ, ์ ‘๊ทผ ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋Š” ์ €์žฅ์žฅ์น˜๋“ค์˜ ์œ„๊ณ„(hierarchy)๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. CPU cycle ์ˆ˜๋กœ ๋”ฐ์ ธ๋ณด๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

6.1. Storage Technologies

Random Access Memory(RAM)

DRAM๊ณผ SRAM
SRAM์€ Static RAM์˜ ์•ฝ์ž๋กœ, โ€œbistableโ€ํ•œ ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค. ์ฆ‰, LOW ๋˜๋Š” HIGH voltage๋ฅผ ํ•ญ์ƒ ์œ ์ง€ํ•˜๋ ค ํ•˜๊ณ , ๋‹ค๋ฅธ voltage๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๋‘˜ ์ค‘ ํ•˜๋‚˜๋กœ ์ˆ˜๋ ดํ•œ๋‹ค. SRAM์€ ํŠธ๋žœ์ง€์Šคํ„ฐ 6๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด ๋•Œ๋ฌธ์— ๊ฐ€๊ฒฉ์ด DRAM๋ณด๋‹ค ๋น„์‹ธ๋‹ค. Bistablity๋กœ ์ „์›์ด ์ผœ์ ธ ์žˆ๋Š” ํ•œ disturbance๊ฐ€ ์žˆ์–ด๋„ ์› ์ƒํƒœ๋กœ ๋ณต์›๋œ๋‹ค. ๋•Œ๋ฌธ์— refreshing์ด ํ•„์š”ํ•˜์ง€ ์•Š์•„ ์†๋„๊ฐ€ DRAM๋ณด๋‹ค ๋น ๋ฅด๋‹ค.

๋ฐ˜๋ฉด Dynamic RAM(DRAM)์€ ์บํŒจ์‹œํ„ฐ์˜ ์ „ํ•˜ ํ˜•ํƒœ๋กœ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ด ๋•Œ๋ฌธ์— SRAM๋ณด๋‹ค disturbance์— ์ทจ์•ฝํ•˜๋‹ค. DRAM์€ ๊ฐ€๋งŒํžˆ ๋‘๋ฉด leakage current ๋•Œ๋ฌธ์— ์ „ํ•˜๊ฐ€ ๊ณ„์† ์†์‹ค๋˜์–ด ์ „์••์ด ๋‚ฎ์•„์ง„๋‹ค. ๋”ฐ๋ผ์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ refresh๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•ด ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค. ๋ฐ˜๋ฉด ํŠธ๋žœ์ง€์Šคํ„ฐ๋ฅผ 2๊ฐœ๋งŒ ์‚ฌ์šฉํ•ด ๊ฐ’์ด ์‹ธ๊ณ  ์šฉ๋Ÿ‰์ด SRAM๋ณด๋‹ค ํฌ๋‹ค.

์ „ํ†ต์  DRAM์˜ ๊ตฌ์กฐ

Conventional DRAM์€ $d$๊ฐœ์˜ supercell์— ๊ฐ๊ฐ $w$๊ฐœ์˜ DRAM cell์ด ๋“ค์–ด์žˆ์–ด, ์ด $dw$ bit์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด๋‹ค.

Enhanced DRAM
๋ฉ”๋ชจ๋ฆฌ ๊ธฐ์ˆ ์ด ๋ฐœ์ „ํ•˜๋ฉด์„œ conventional DRAM์˜ ํฐ ํ‹€ ์ž์ฒด๋Š” ๋ณ€ํ•˜์ง€ ์•Š์€ ์ฑ„๋กœ ์กฐ๊ธˆ์”ฉ์˜ ๋ณ€ํ˜•์ด ์ถ”๊ฐ€๋˜๋ฉด์„œ SDRAM, DDR SDRAM ๋“ฑ์ด ๋“ฑ์žฅํ•˜์˜€๋‹ค. ์ž์„ธํ•œ ๋ถ€๋ถ„์€ pp. 621-622์— ๋‚˜์™€์žˆ๋‹ค.

๋น„ํœ˜๋ฐœ์„ฑ ๋ฉ”๋ชจ๋ฆฌ

๋น„ํœ˜๋ฐœ์„ฑ ๋ฉ”๋ชจ๋ฆฌ(Nonvolatile Memory)๋Š” ์—ญ์‚ฌ์ ์ธ ์ด์œ ๋กœ Read-Only Memory(ROM)์œผ๋กœ ๋ถˆ๋ ค์™”์œผ๋‚˜, ์‹ค์ œ๋กœ๋Š” ์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๋„ ์žˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ PROM, EPROM, EEPROM, Flash Memory, SSD ๋“ฑ์ด ๋น„ํœ˜๋ฐœ์„ฑ ๋ฉ”๋ชจ๋ฆฌ์— ์†ํ•œ๋‹ค.
ROM ์žฅ์น˜์— ์ฃผ๋กœ ์ €์žฅ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ค‘์—๋Š” ํŽŒ์›จ์–ด(firmware)๊ฐ€ ์žˆ์œผ๋ฉฐ, BIOS ๋“ฑ ์ปดํ“จํ„ฐ๊ฐ€ ์ฒ˜์Œ ์ผœ์งˆ ๋•Œ ์ž‘๋™ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ์ฃผ๋กœ ์—ฌ๊ธฐ์— ์†ํ•œ๋‹ค.

๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ๋กœ์˜ ์ ‘๊ทผ

DRAM๊ณผ ํ”„๋กœ์„ธ์„œ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์€ Bus๋ฅผ ํ†ตํ•ด ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ฅผ Bus transaction์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์„ธ์„œ์™€ DRAM ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค.

๊ทธ๋ฆผ์— ๋‚˜์™€์žˆ๋“ฏ์ด,

์˜ˆ๋ฅผ ๋“ค์–ด์„œ, ํ”„๋กœ์„ธ์„œ๊ฐ€ movq A, %rax๋ผ๋Š” load instruction์„ ์ฝ๋Š”๋‹ค๊ณ  ํ•˜๋ฉด,

  1. CPU๊ฐ€ address A๋ฅผ ์‹œ์Šคํ…œ ๋ฒ„์Šค์— ๋†“๊ณ ,
  2. I/O bridge๊ฐ€ ์ด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„์Šค๋กœ ์ „๋‹ฌํ•˜๋ฉฐ
  3. ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ A์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„์Šค๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•˜๋ฉด
  4. I/O bridge๊ฐ€ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹ ํ˜ธ๋ฅผ ๋ฒˆ์—ญํ•ด %rax๋กœ ๊ฐ’์„ ๋ณต์‚ฌํ•ด์ฃผ๋Š” ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

๋””์Šคํฌ ์ €์žฅ์žฅ์น˜

๋””์Šคํฌ์˜ ๊ตฌ์กฐ

๋””์Šคํฌ์˜ ๊ตฌ์กฐ๋Š” ์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ์ด๋•Œ ๋””์Šคํฌ์˜ ์šฉ๋Ÿ‰์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ณ€์ˆ˜๋“ค์—๋Š”

  1. ๊ธฐ๋ก ๋ฐ€๋„(recording density): ํŠธ๋ž™์˜ ๋‹จ์œ„๊ธธ์ด๋‹น ๊ธฐ๋ก๋˜๋Š” ๋น„ํŠธ์˜ ์ˆ˜
  2. ํŠธ๋ž™ ๋ฐ€๋„(track density): ๋ฐ˜์ง€๋ฆ„์˜ ๋‹จ์œ„๊ธธ์ด๋‹น ํŠธ๋ž™์˜ ์ˆ˜
  3. ๋ฉด์  ๋ฐ€๋„(areal density): ์œ„ ๋‘˜์˜ ๊ณฑ
    ๋“ฑ์ด ์žˆ๋‹ค.

๋””์Šคํฌ๊ฐ€ ์ฝ๊ณ  ์“ฐ๋Š” ๋™์ž‘ ์ˆ˜ํ–‰ํ•  ๋•Œ๋Š”, actuator arm์— ๋‹ฌ๋ฆฐ Read/write head๊ฐ€ ์ด๋ฅผ ๋‹ด๋‹นํ•˜๊ฒŒ ๋œ๋‹ค. ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๋Š” ์„นํ„ฐ ํฌ๊ธฐ์˜ ๋ธ”๋ก ๋‹จ์œ„๋กœ ์ˆ˜ํ–‰๋˜๋ฉฐ, ์ฝ๊ธฐ/์“ฐ๊ธฐ ์†๋„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋‹ค์Œ์˜ 3์š”์†Œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

๋””์Šคํฌ๋Š” ์ด๋Ÿฌํ•œ ๋ณต์žกํ•œ ๊ตฌ์กฐ๋ฅผ OS๋กœ๋ถ€ํ„ฐ ์ˆจ๊ธฐ๊ณ  ์„นํ„ฐ ํฌ๊ธฐ์˜ logical disk block $B$๊ฐœ๋ฅผ OS์— ์ œ๊ณตํ•œ๋‹ค. ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ด๋ฅผ ์‹ค์ œ ๋ฌผ๋ฆฌ์  ๋””์Šคํฌ์™€ ๋งคํ•‘ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

I/O ์žฅ์น˜์˜ ์—ฐ๊ฒฐ

์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์€ ๋ณดํ†ต ๋‹ค์–‘ํ•œ third-party I/O ์žฅ์น˜๋ฅผ ์ง€์›ํ•˜๋ฉฐ,
๋””์Šคํฌ๋ฅผ ํฌํ•จํ•ด ํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค, ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ ๋“ฑ์˜ I/O ์žฅ์น˜๋Š” I/O ๋ฒ„์Šค๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์— ์—ฐ๊ฒฐ๋œ๋‹ค. CPU-specificํ•œ ์‹œ์Šคํ…œ ๋ฒ„์Šค, ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„์Šค์™€๋Š” ๋‹ฌ๋ฆฌ I/O ๋ฒ„์Šค๋Š” CPU์— ๋ฌด๊ด€ํ•œ ๊ทœ๊ฒฉ์ด๋‹ค.
I/O ๋ฒ„์Šค๋Š” ์‹œ์Šคํ…œ ๋ฒ„์Šค๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„์Šค๋ณด๋‹ค๋Š” ๋Š๋ฆฌ์ง€๋งŒ ํ›จ์”ฌ ๋‹ค์–‘ํ•œ ์žฅ์น˜๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ฆผ์—๋Š” ์„ธ ์ข…๋ฅ˜์˜ ์žฅ์น˜๊ฐ€ I/O ๋ฒ„์Šค์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

๋””์Šคํฌ ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ
CPU๋Š” I/O ์žฅ์น˜์— ๋ช…๋ น์„ ๋‚ด๋ฆฌ๊ธฐ ์œ„ํ•ด Memory-mapped I/O๋ผ๋Š” ํ…Œํฌ๋‹‰์„ ์‚ฌ์šฉํ•œ๋‹ค. Memory-mapped I/O์—์„œ, CPU๋Š” address space์˜ ์ผ๋ถ€๋ฅผ I/O ์žฅ์น˜์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•ด ํ• ๋‹นํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ํ• ๋‹น๋œ ์ฃผ์†Œ๋“ค์€ I/O port๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ์ค‘ 0xa0๋ถ€ํ„ฐ 0xaf๊นŒ์ง€๋Š” ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—†๊ณ  ์—ฌ๊ธฐ์— ์ฝ๊ธฐ/์“ฐ๊ธฐ๋ฅผ ํ•˜๋ฉด I/O ์žฅ์น˜๊ฐ€ ๋™์ž‘ํ•˜๋Š” ์‹์ด๋‹ค.

๋””์Šคํฌ์˜ ํ•œ ์„นํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด์ž.

  1. CPU๊ฐ€ 0xa0์— ์„ธ ๋ฒˆ์˜ store operation์„ ํ•œ๋‹ค. ์ด๋Š” ๊ฐ๊ฐ initialize, logical block ๋ฒˆํ˜ธ, ํ•ด๋‹น ๋””์Šคํฌ ์„นํ„ฐ๊ฐ€ ์ €์žฅ๋  ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค
  2. ๋””์Šคํฌ๊ฐ€ ์ฝ๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ CPU๋Š” ๋ณดํ†ต ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  3. ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ๋Š” CPU๋กœ๋ถ€ํ„ฐ ๋ช…๋ น์„ ๋ฐ›์•„ logical block ๋ฒˆํ˜ธ๋ฅผ ์„นํ„ฐ ์ฃผ์†Œ๋กœ ๋ฒˆ์—ญํ•˜๊ณ  ์„นํ„ฐ๋ฅผ ์ฝ์–ด ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค. ์ด ๊ณผ์ •์—์„œ๋Š” CPU๊ฐ€ ๊ฐœ์ž…๋˜์ง€ ์•Š๊ณ  ์ „๋ถ€ I/O ์žฅ์น˜๊ฐ€ ์Šค์Šค๋กœ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ, ์ด๋ฅผ Direct Memory Access(DMA)๋ผ ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ์˜ ์ „์†ก์€ DMA transfer๋ผ๊ณ  ํ•œ๋‹ค.
  4. DMA transfer๊ฐ€ ๋๋‚˜ ๋””์Šคํฌ ์„นํ„ฐ์˜ ๋‚ด์šฉ์ด ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฎ๊ฒจ์ง€๋ฉด ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ๋Š” CPU์— ์ธํ„ฐ๋ŸฝํŠธ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด ์•Œ๋ฆฐ๋‹ค.

Solid State Disk(SSD)
SSD๋Š” ํ”Œ๋ž˜์‹œ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์ €์žฅ์žฅ์น˜๋กœ, I/O ๋ฒ„์Šค์— ์—ฐ๊ฒฐ๋˜์–ด ๋””์Šคํฌ์™€ ๋™์ผํ•œ ํ–‰๋™์„ ํ•œ๋‹ค.

6.2. Locality

์ž˜ ์งœ์—ฌ์ง„ ํ”„๋กœ๊ทธ๋žจ์€ ๋ณดํ†ต ์ข‹์€ locality๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด๋Š” ์ตœ๊ทผ ์ ‘๊ทผํ•œ item ๊ทผ์ฒ˜์˜ item์— ์ž์ฃผ ์ ‘๊ทผํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด๋ฅผ Principle of Locality๋ผ ํ•˜๋ฉฐ, HW์™€ SW์˜ ๋””์ž์ธ๊ณผ ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ๋ผ์นœ๋‹ค.

Locality์—๋Š” temporal locality์™€ spatial locality๊ฐ€ ์žˆ๋‹ค. Temporal locality๋Š” ์ตœ๊ทผ ์ ‘๊ทผํ•œ item์„ ๋‹ค์‹œ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋งํ•˜๋ฉฐ, spatial locality๋Š” ์ตœ๊ทผ ์ ‘๊ทผํ•œ item ๊ทผ์ฒ˜์˜ item์„ ํ›„์— ๋‹ค์‹œ ์ ‘๊ทผํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์€ ํ•˜๋“œ์›จ์–ด ๋‹จ๊ณ„์—์„œ๋ถ€ํ„ฐ OS, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ SW์— ๋‹ฌํ•˜๊ธฐ๊นŒ์ง€ ๋ชจ๋“  ๋‹จ๊ณ„์—์„œ locality๋ฅผ ์ด์šฉํ•œ๋‹ค.

๋‹ค์Œ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋ณด์ž.

int sumvec(int v[N]){
    int i, sum = 0;
    for(i = 0, i < N; i++){
        sum += v[i];
    }
    return sum;
}

์ด ํ”„๋กœ๊ทธ๋žจ์„ ๋ณด๋ฉด, ๋ณ€์ˆ˜ sum์ด ๊ณ„์†ํ•ด์„œ ์ ‘๊ทผ๋˜๋ฏ€๋กœ sum์— ๋Œ€ํ•ด์„œ๋Š” ์ข‹์€ temporal locality๋ฅผ ๊ฐ€์ง„๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด sum์€ ์Šค์นผ๋ผ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ ์ธ์ ‘ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ‘๊ทผ๋˜์ง€๋Š” ์•Š์•„, spatial locality๋Š” ์—†๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
๋ฐ˜๋ฉด v[i]๋Š” ๊ฐ ์›์†Œ๊ฐ€ ํ•œ๋ฒˆ์”ฉ๋งŒ ์ ‘๊ทผ๋˜๋ฏ€๋กœ temporal locality๋Š” ์—†๊ณ , ์—ฐ์†๋œ ์›์†Œ๊ฐ€ ๊ณ„์†ํ•ด์„œ ์ ‘๊ทผ๋˜๋‹ˆ ์ข‹์€ spatial locality๋ฅผ ๊ฐ€์ง„๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

6.3. The Memory Hierarchy

Memory hierarchy๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ์˜ ์›์น™์— ๋”ฐ๋ผ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

level $k$์˜ ๋น ๋ฅด๊ณ , ์ž‘๊ณ , ๋น„์‹ผ ์ €์žฅ์žฅ์น˜๊ฐ€ level $k+1$์˜ ๋Š๋ฆฌ๊ณ , ํฌ๊ณ , ๊ฐ’์‹ผ ์ €์žฅ์žฅ์น˜๋ฅผ cacheํ•œ๋‹ค.

$k+1$๋‹จ๊ณ„์˜ ์ €์žฅ์žฅ์น˜์—์„œ ์ฐพ๊ณ  ์žˆ๋Š” object๊ฐ€ ์šด์ด ์ข‹๊ฒŒ $k$๋‹จ๊ณ„์—์„œ ๋ฐœ๊ฒฌ๋œ๋‹ค๋ฉด, ์ด๋ฅผ cache hit์ด๋ผ ํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ $k$๋‹จ๊ณ„์—์„œ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋“ค์ด๋ฉด ๋œ๋‹ค. ๋ฐ˜๋ฉด $k$๋‹จ๊ณ„์— ์ฐพ๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด $k+1$๋‹จ๊ณ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ $k$๋‹จ๊ณ„์— ์ €์žฅํ•œ ํ›„์— ์ด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. ์ด ๊ฒฝ์šฐ๋Š” cache miss๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.

Cache miss์˜ ์ข…๋ฅ˜
Cache miss๊ฐ€ ์ผ์–ด๋‚˜๋Š” ์›์ธ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์บ์‹œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์บ์‹œ ์ €์žฅ์žฅ์น˜๋ฅผ ๋ธ”๋ก ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๊ณ , ์ธ์ ‘ ๋ ˆ๋ฒจ ์‚ฌ์ด์—์„œ transfer๋ฅผ ์‹œํ‚ค๋ฉฐ hit/miss๋ฅผ ํŒ๋ณ„ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์ด ํ•„์š”ํ•˜๋‹ค. ๋ณดํ†ต ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋ช…์‹œ์ ์ธ ์ปจํŠธ๋กค์ด ์—†์–ด๋„ ์•Œ์•„์„œ ์ž˜ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค.

6.4. ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ

์ปดํ“จํ„ฐ๊ฐ€ ๋ฐœ์ „ํ•˜๋ฉด์„œ CPU์™€ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์˜ ์†๋„ ์‚ฌ์ด ๊ฐญ๋„ ์ ์  ์ปค์ ธ๊ฐ”๊ณ , ์ด์— ๋”ฐ๋ผ ์ ์  ๋” ๋งŽ์€ ์ˆ˜์˜ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” L1 ์บ์‹œ๋งŒ์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ์„ ๋‹ค๋ฃฌ๋‹ค.

์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ

๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ $m$ ๋น„ํŠธ, ์ฆ‰ ์ฃผ์†Œ๊ฐ€ $M=2^m$๊ฐœ์ธ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์„ ๊ณ ๋ คํ•˜์ž.

์œ„ ๊ทธ๋ฆผ์—์„œ,

์บ์‹œ๋Š” match/miss๋ฅผ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์œ„์™€ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ํ•ด์‹œ(hash) ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ $A$์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์–ดํ•œ๋‹ค๊ณ  ํ•˜์ž. $m$๋น„ํŠธ์งœ๋ฆฌ ์ฃผ์†Œ $A$๋Š” ์•ž์—์„œ๋ถ€ํ„ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถ„ํ• ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ ‘๊ทผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

  1. Set selection
    ์ฃผ์†Œ์—์„œ ๊ฐ€์šด๋ฐ $s$ ๋น„ํŠธ์˜ set index๋ฅผ $S = 2^s$๊ฐœ์˜ cache set ์ค‘ ๋ช‡ ๋ฒˆ์งธ set์— ์ ‘๊ทผํ•  ๊ฒƒ์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

  2. Line matching
    ์„ ํƒ๋œ cache set์˜ $E$๊ฐœ cache line์„ ์‚ดํŽด๋ณด๋ฉด์„œ, tag๊ฐ€ address์˜ tag(๋งจ ์•ž $t$ ๋น„ํŠธ)์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์ด ์žˆ๋Š”์ง€ ์ฐพ๋Š”๋‹ค. ๋งŒ์•ฝ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์ด ์žˆ๊ณ  valid bit๊ฐ€ 1์ด๋ผ๋ฉด, ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ธ”๋ก์ด ์บ์‹œ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

    • ๋งŒ์•ฝ ๊ทธ๋Ÿฐ ๊ฒƒ์ด ์—†๋‹ค๋ฉด cache miss์ด๋‹ค
  3. Word extraction
    Cache line์˜ data block์—์„œ block offset๋ฒˆ์งธ ๋น„ํŠธ๊ฐ€ ์ฃผ์†Œ $A$์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ์ด๋‹ค.

์บ์‹œ์˜ ๋ถ„๋ฅ˜
์บ์‹œ๋Š” cache line์˜ ๊ฐœ์ˆ˜ $E$์— ๋”ฐ๋ผ์„œ ์„ธ ๊ฐ€์ง€๋กœ ๋‚˜๋‰  ์ˆ˜ ์žˆ๋‹ค.

Direct Mapped Cache

Direct mapped cache๋Š” ํ•œ cache set์— line์ด ํ•˜๋‚˜๋ฐ–์— ์—†์œผ๋‹ˆ ์ดํ•ด์™€ ๊ตฌํ˜„์ด ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๋‹ค. ์ด ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. Set selection
    ์ฃผ์†Œ์˜ ๊ฐ€์šด๋ฐ $s$ ๋น„ํŠธ๋ฅผ unsigned int๋กœ ์ทจ๊ธ‰ํ•ด set ๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„๋‚ด๊ณ , set์„ ์„ ํƒํ•œ๋‹ค.

  2. Line matching
    Set ๋‚ด์—์„œ line์„ ์„ ํƒํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” line์ด ํ•˜๋‚˜๋ฐ–์— ์—†์œผ๋ฏ€๋กœ, ์œ ์ผํ•œ cache line์—์„œ valid/tag bit๋ฅผ ํ™•์ธํ•ด์ฃผ๋ฉด ๋์ด๋‹ค.

  3. Word extraction
    Address์˜ ๋งจ ๋ $b$๋น„ํŠธ๋ฅผ block offset์œผ๋กœ ์ทจ๊ธ‰ํ•ด block ๋‚ด์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋‹ค.

ํ•œํŽธ, cache miss๊ฐ€ ๋ฐœ์ƒํ•  ์‹œ ๋‹ค์Œ ๋‹จ๊ณ„์˜ ๋ฉ”๋ชจ๋ฆฌ๋กœ๋ถ€ํ„ฐ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค. ์ด ๋•Œ ๋ชจ๋“  line์˜ valid bit๊ฐ€ 1์ด๋ผ๋ฉด evicting์ด ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, direct mapped cache์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์™€ set line ์‚ฌ์ด์˜ ๋งคํ•‘์ด injection(๋‹ค๋Œ€์ผ)์ด๋ฏ€๋กœ victim์ด ๋ฐ”๋กœ ๊ฒฐ์ •๋œ๋‹ค. (์ฆ‰ replacement policy๊ฐ€ ์ž๋ช…ํ•˜๋‹ค)

Direct mapped cache์˜ conflict miss
Direct mapped cache์˜ ๊ฒฝ์šฐ, ํฌ๊ธฐ๊ฐ€ 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ธ ๋ฐฐ์—ด ์—ฌ๋Ÿฌ ๊ฐœ์— ์ ‘๊ทผํ•˜๋ฉด conflict miss๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค. (p.658 ์ฐธ๊ณ ) Set์— line์ด ํ•˜๋‚˜๋ฟ์ด๊ธฐ ๋•Œ๋ฌธ์—, set index๊ฐ€ ๊ฐ™์€
๋‘ ์ฃผ์†Œ์— ๊ณ„์† ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋ฉด load์™€ evict๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” thrashing์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Š” block size๋งŒํผ์˜ padding์„ ๋”ํ•จ์œผ๋กœ์จ set index๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๋งŒ๋“ค์–ด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค(p. 660).

Set Associative Cache

Cache set์ด ์—ฌ๋Ÿฌ ๊ฐœ์ด๊ณ , ๊ฐ set๋‹น line์˜ ์ˆ˜๋„ ์—ฌ๋Ÿฌ ๊ฐœ์ธ, ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์ด๋‹ค. ์ด ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ set line์ค‘์— ๋งค์นญ๋˜๋Š” ๊ฒƒ(์ฆ‰ tag๊ฐ€ ๊ฐ™๊ณ  valid๊ฐ€ 1์ธ ๊ฒƒ)์ด ์žˆ๋Š”์ง€ ์ „๋ถ€ ํ™•์ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ตฌํ˜„์ด direct mapped cache๋ณด๋‹ค ๋ณต์žกํ•˜๋‹ค.

Set associative cache์—์„œ, associative๋Š” associative memory์—์„œ ๋”ฐ์˜จ ๊ฒƒ์ด๋‹ค. Associative memory๋Š” ์ฃผ์†Œ์™€ ๊ฐ’ ์‚ฌ์ด์˜ ๋งคํ•‘์ธ conventional memory์™€ ๋Œ€์กฐ๋˜๋Š” ๊ฐœ๋…์œผ๋กœ, (key, value)์˜ ์ง‘ํ•ฉ์„ ์ €์žฅํ•ด๋†“๊ณ  ์ฝ์„ ๋•Œ๋Š” key์— ๋Œ€์‘๋˜๋Š” ๊ฐ’ value๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.
Set associative cache์—์„œ๋Š” tag๊ฐ€ ๋ฐ”๋กœ key์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, set associative cache์˜ ๊ฐ set์€ associative memory์ด๋‹ค.

Miss ๋ฐœ์ƒ ์‹œ์˜ line replacement
Set associative cache๋Š” direct mapped cache์™€ ๋‹ฌ๋ฆฌ set line์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์œผ๋ฏ€๋กœ miss ๋ฐœ์ƒ ์‹œ์—๋Š” ์–ด๋Š line์„ evictํ•  ์ง€๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.

์•ž์—์„œ๋„ ์‚ดํŽด๋ดค๋“ฏ์ด ์ด๋ฅผ ์œ„ํ•ด replacement policy๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, random replacement, least frequently used(LFU), least recently used(LRU) ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค. Replacement policy๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋ณต์žกํ•œ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•˜์ง€๋งŒ, ํŠนํžˆ memory hierarchy์˜ ์•„๋ž˜์ชฝ์œผ๋กœ ๊ฐˆ์ˆ˜๋ก miss penalty๊ฐ€ ์ ์  ์ปค์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต์€ ๊ทธ๋Ÿด๋งŒ ํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค.

Fully Associative Cache

Fully associative cache๋Š” cache set์ด ํ•˜๋‚˜๋ฟ์œผ๋กœ, set selection ๊ณผ์ •์ด ์ž๋ช…ํ•ด์ง€๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์€ set associative cache์™€ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฒฝ์šฐ set line์ด ๋„ˆ๋ฌด ๋งŽ์•„์ ธ line matching์„ ์œ„ํ•œ ํ•˜๋“œ์›จ์–ด๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๊ณ  ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ fully associative cache๋Š” ์šฉ๋Ÿ‰์ด ์ž‘์€ ๊ฒฝ์šฐ์—๋งŒ ์˜ˆ์™ธ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

์บ์‹œ ์“ฐ๊ธฐ์— ๊ด€๋ จ๋œ ๋ฌธ์ œ์ 

์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ณผ์ •์€ ์•ž์—์„œ ์‚ดํŽด๋ณธ ๋ฐ”์™€ ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์บ์‹œ์— ์“ฐ๋Š” ๊ณผ์ •์€ ๋”์šฑ ๋ณต์žกํ•œ๋ฐ, ํฌ๊ฒŒ write hit์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹๊ณผ write miss๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ๊ฐ๊ฐ ๋‘ ๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋จผ์ € ์“ฐ๋ ค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ write hit(์ฆ‰ ํŠน์ • ์ฃผ์†Œ์— ์“ฐ๊ธฐ๋ฅผ ํ•˜๋ ค๋Š”๋ฐ ํ•ด๋‹น ์ฃผ์†Œ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์žˆ๋Š” ๊ฒฝ์šฐ)์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ์ด ์žˆ๋‹ค.

Write miss(์“ฐ๊ธฐ๋ฅผ ํ•˜๋ ค๋Š” ์ฃผ์†Œ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์—†๋Š” ๊ฒฝ์šฐ)๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ write-through์™€ no-write-allocate๊ฐ€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๊ณ , write-back์€ write-allocate์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค. ์ด์ค‘ ๋” ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์€ ํ›„์ž์ธ๋ฐ, ๋‹ค์Œ ์ ˆ์—์„œ ํ”„๋กœ๊ทธ๋žจ ์ตœ์ ํ™”๋ฅผ ์„ค๋ช…ํ•  ๋•Œ์—๋Š” ํ›„์ž์˜ ๋ชจ๋ธ์„ ๊ฐ€์ •ํ•œ๋‹ค.

์บ์‹œ์˜ ์‹ค์ œ ๊ตฌ์กฐ
์œ„์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์บ์‹œ(d-cache)๋งŒ์„ ๋‹ค๋ฃจ์—ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ ์บ์‹œ๋Š” ๋ฐ์ดํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ instruction ๋˜ํ•œ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ i-cache๋ผ๊ณ  ํ•œ๋‹ค. ๋‘˜์„ ํ•œ๊บผ๋ฒˆ์— ์ €์žฅํ•˜๋Š” unified cache๋„ ์กด์žฌํ•˜์ง€๋งŒ ์ตœ๊ทผ์— ๋‚˜์˜ค๋Š” ํ”„๋กœ์„ธ์„œ๋Š” ๋ณดํ†ต i-cache์™€ d-cache๋ฅผ ๋ถ„๋ฆฌ์‹œํ‚จ ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด

์บ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์ด ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

์บ์‹œ์˜ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•˜๋Š” ์ฒ™๋„๋กœ๋Š” ํฌ๊ฒŒ ๋‹ค์Œ์ด ์žˆ๋‹ค.

6.5. ์บ์‹œ์นœํ™”์ ์ธ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๋ฒ•

์บ์‹œ์นœํ™”์ ์ธ ์ฝ”๋“œ๋กœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ๋•Œ์—๋Š” ๋‘ ๊ฐ€์ง€ ์›์น™์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.

  1. Make the common case go fast
  2. Minimize number of cache misses in the inner loop

์œ„์—์„œ ๋ดค๋˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ๊ฐ€์ ธ์™€๋ณด์ž.

int sumvec(int v[N]){
    int i, sum = 0;
    for(i = 0, i < N; i++){
        sum += v[i];
    }
    return sum;
}

์œ„ ํ”„๋กœ๊ทธ๋žจ์„ ๋ณด๋ฉด,

๋‹ค์ค‘๋ฃจํ”„๋กœ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์„ ์ ‘๊ทผํ•  ๋•Œ ์บ์‹œ์นœํ™”์„ฑ์— ํŠนํžˆ ์œ ์˜ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๋ฐ˜๋ณต๋ฌธ์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ์‹ค์งˆ์  stride๊ฐ€ 1์ด ๋ ์ˆ˜๋„, ๋ฐฐ์—ด์˜ ํญ์ด ๋ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฑ…์˜ ์˜ˆ์‹œ์—์„œ๋Š” ๋ฌด๋ ค 25๋ฐฐ์˜ ์†๋„ ์ฐจ์ด๊ฐ€ ๋‚œ ๊ฒฝ์šฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค.