Table of Contents
๊ธฐ์ ์ ๋ฐ์ ์ผ๋ก ํ๋ก์ธ์ ์๋๋ ๋น ๋ฅด๊ฒ ์ฆ๊ฐํด์จ ๋ฐ๋ฉด, ๋ฉ๋ชจ๋ฆฌ์ ์๋๋ ์ด๋ฅผ ๋ฐ๋ผ๊ฐ์ง ๋ชปํ๋ค. ํ๋ก์ธ์๊ฐ ์๋ฌด๋ฆฌ ๋นจ๋ผ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ฆฌ๋ฉด ๊ฒฐ๊ณผ์ ์ผ๋ก ์ ์ฒด ์์คํ ์๋๋ ๋๋ ค์ง๋ค. ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํ ์ฅ์น๊ฐ ๋ฐ๋ก ์บ์(Cache)๋ค.
์บ์๋ CPU ์นฉ ์์ ๋ค์ด๊ฐ๋ ์๊ณ ๋น ๋ฅธ ๋ฉ๋ชจ๋ฆฌ๋ค. (๊ทธ๋ฆฌ๊ณ ๋น์ธ๋ค.) ํ๋ก์ธ์๊ฐ ๋งค๋ฒ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์บ์์ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์๋๊ณ , ํด๋น ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋ ํ๋ก์ธ์๊ฐ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ ๋์ ์บ์์ ์ ๊ทผํ๋๋กํด ์ฒ๋ฆฌ ์๋๋ฅผ ๋์ธ๋ค.
Principle of Locality
'์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐโ์ ๊ดํ ํ๋จ์ ์ง์ญ์ฑ์ ์๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ฉฐ, ์ง์ญ์ฑ ์๋ฆฌ๋ ์๊ฐ ์ง์ญ์ฑ(Temporal locality)๊ณผ ๊ณต๊ฐ ์ง์ญ์ฑ(Spatial locality)์ผ๋ก ๊ตฌ๋ถํด์ ๋ณผ ์ ์๋ค.
์๊ฐ ์ง์ญ์ฑ์ ์ต๊ทผ ์ ๊ทผํ ๋ฐ์ดํฐ์ ๋ค์ ์ ๊ทผํ๋ ๊ฒฝํฅ์ ๋งํ๋ค. ๊ฐ๋ น ๋ฃจํ์์ ์ธ๋ฑ์ค ์ญํ ์ ํ๋ ๋ณ์ i
์๋ ์งง์ ์๊ฐ์์ ์ฌ๋ฌ ๋ฒ ์ ๊ทผ์ด ์ด๋ค์ง๋ค.
for (i = 0; i < 10; i += 1) {
arr[i] = i;
}
๊ณต๊ฐ ์ง์ญ์ฑ์ ์ต๊ทผ ์ ๊ทผํ ๋ฐ์ดํฐ์ ์ฃผ๋ณ ๊ณต๊ฐ์ ๋ค์ ์ ๊ทผํ๋ ๊ฒฝํฅ์ ๋งํ๋ค. ์ ๋ฃจํ์ ๊ฒฝ์ฐ ๋ฐฐ์ด arr
์ ๊ฐ ์์๋ฅผ ์ฐธ์กฐํ๋ฉด์ ๊ฐ๊น์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐ์์ ์ผ๋ก ์ ๊ทผํ๊ณ ์๋ค. ๋ฐฐ์ด์ ์์๋ค์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐ์์ ์ผ๋ก ํ ๋น๋๊ธฐ ๋๋ฌธ์ด๋ค.
ํ๋ก์ธ์ค ์คํ ์ค ์ ๊ทผํ ๋ฐ์ดํฐ์ ์ ๊ทผ ์์ ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํ์ํ ์๋ ๊ทธ๋ฆผ์ ์๊ฐ ์ง์ญ์ฑ๊ณผ ๊ณต๊ฐ ์ง์ญ์ฑ์ ํน์ฑ์ ์ ๋ณด์ฌ์ค๋ค.
ํ ํ๋ก์ธ์ค ์์๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ถ๋ถ๊ณผ ๊ทธ๋ ์ง ์์ ๋ถ๋ถ์ด ์๊ธฐ ๋๋ฌธ์ ์ด์์ฒด์ ๋ ํ๋ก์ธ์ค๋ฅผ ํ์ด์ง(Page)๋ผ๋ ๋จ์๋ก ๋๋ ๊ด๋ฆฌํ๋ฉฐ, ์ ๊ทธ๋ฆผ์ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ ๊ธฐ๋ก์ด๋ค. ๊ฐ๋ก ์ถ์ ์คํ ์๊ฐ์ด๊ณ , ์ธ๋ก ์ถ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ค. ์ฆ, ์ํ์ผ๋ก ์ด์ด์ง ์ฐธ์กฐ ๊ธฐ๋ก์ ๊ธด ์๊ฐ์ ๊ฑธ์ณ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ ๊ฒ์ด๊ณ , ์์ง์ผ๋ก ์ด์ด์ง ์ฐธ์กฐ ๊ธฐ๋ก์ ๊ฐ์ ์๊ฐ์ ๋ฐ์ ํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ค์ ์ฐธ์กฐํ ๊ฒ์ด๋ค. ํ์ด์ง์ ์ ๊ทผํ ๋๋ ์ง์ญ์ฑ ์๋ฆฌ๊ฐ ์ ์ฉ๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
Caches
CPU ์นฉ์๋ ์ฌ๋ฌ ๊ฐ์ ์บ์๊ฐ ๋ค์ด๊ฐ๋ฉฐ, ๊ฐ๊ฐ์ ์บ์๋ ๊ฐ์์ ๋ชฉ์ ๊ณผ ์ญํ ์ ๊ฐ์ง๊ณ ์๋ค.
+-------------+------+------+ +---------------+ +--------+
| | I$ | | <-- | | <-- | |
+ Processor +------+ L2 | | Main Memory | | Disk |
| | D$ | | --> | | --> | |
+-------------+------+------+ +---------------+ +--------+
- L1 Cache: ํ๋ก์ธ์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์บ์. ์๋๋ฅผ ์ํด I$์ D$๋ก ๋๋๋ค.
- Instruction Cache (I$): ๋ฉ๋ชจ๋ฆฌ์ TEXT ์์ญ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์บ์.
- Data Cache (D$): TEXT ์์ญ์ ์ ์ธํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์บ์.
- L2 Cache: ์ฉ๋์ด ํฐ ์บ์. ํฌ๊ธฐ๋ฅผ ์ํด L1 ์บ์์ฒ๋ผ ๋๋์ง ์๋๋ค.
- L3 Cache: ๋ฉํฐ ์ฝ์ด ์์คํ ์์ ์ฌ๋ฌ ์ฝ์ด๊ฐ ๊ณต์ ํ๋ ์บ์.
์บ์์ ๋ฌ๋ฌ ๊ธฐํธ($)๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์บ์(Cache)์ ๋ฐ์์ด ํ๊ธ์ ๋ปํ๋ 'Cashโ์ ๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค :)
์ค๋๋ CPU ์นฉ์ ๋ฉด์ 30~70%๋ ์บ์๊ฐ ์ฐจ์งํ๋ค. 1989๋ ์์ฐ๋ ์ฑ๊ธ ์ฝ์ด ํ๋ก์ธ์์ธ i486์ ๊ฒฝ์ฐ 8KB์ง๋ฆฌ I/D ์บ์ ํ๋๋ง ์์๋ค. ํํธ ์ธํ ์ฝ์ด i7 ์ฟผ๋ ์ฝ์ด ์นฉ์ ๋ค์ด ๋งต(Die map)์ ๋ณด๋ฉด 4๊ฐ์ ์ฝ์ด์ ๊ฐ๊ฐ 256KB L2 ์บ์๊ฐ ์๊ณ , ๋ชจ๋ ์ฝ์ด๊ฐ ๊ณต์ ํ๋ 8MB L3 ์บ์๊ฐ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. (L2 ์บ์ ์์ ์๋ ๊ตฌ์ญ์ด L1 ์บ์๋ก ๋ณด์ด๋๋ฐ, ํ์คํ์ง ์์์ ๋ฐ๋ก ํ์ํ์ง ์์๋ค.)
Cache Metrics
์บ์์ ์ฑ๋ฅ์ ์ธก์ ํ ๋๋ ํํธ ๋ ์ดํด์(Hit latency)์ ๋ฏธ์ค ๋ ์ดํด์(Miss latency)๊ฐ ์ค์ํ ์์ธ์ผ๋ก ๊ผฝํ๋ค.
CPU์์ ์์ฒญํ ๋ฐ์ดํฐ๊ฐ ์บ์์ ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ฅผ ์บ์ ํํธ(Hit)๋ผ๊ณ ํ๋ค. ํํธ ๋ ์ดํด์๋ ํํธ๊ฐ ๋ฐ์ํด ์บ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์์๋๋ ์๊ฐ์ ์๋ฏธํ๋ค. ๋ฐ๋ฉด ์์ฒญํ ๋ฐ์ดํฐ๊ฐ ์บ์์ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ์บ์ ๋ฏธ์ค(Miss)๋ผ๊ณ ํ๋ฉฐ, ๋ฏธ์ค ๋ ์ดํด์๋ ๋ฏธ์ค๊ฐ ๋ฐ์ํด ์์ ์บ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋(L1 ์บ์์ ๋ฐ์ดํฐ๊ฐ ์์ด์ L2 ์บ์์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ฒฝ์ฐ) ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์์๋๋ ์๊ฐ์ ๋งํ๋ค.
ํ๊ท ์ ๊ทผ ์๊ฐ(Average access time)์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ๋ค:
์บ์์ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด์๋ ์บ์์ ํฌ๊ธฐ๋ฅผ ์ค์ฌ ํํธ ๋ ์ดํด์๋ฅผ ์ค์ด๊ฑฐ๋, ์บ์์ ํฌ๊ธฐ๋ฅผ ๋๋ ค ๋ฏธ์ค ๋น์จ์ ์ค์ด๊ฑฐ๋, ๋ ๋น ๋ฅธ ์บ์๋ฅผ ์ด์ฉํด ๋ ์ดํด์๋ฅผ ์ค์ด๋ ๋ฐฉ๋ฒ์ด ์๋ค.
Cache Organization
์บ์๋ ๋ฐ์ ์๋๊ฐ ๋น ๋ฅธ SRAM(Static Random Access Memory)์ผ๋ก, ์ฃผ์๊ฐ ํค(Key)๋ก ์ฃผ์ด์ง๋ฉด ํด๋น ๊ณต๊ฐ์ ์ฆ์ ์ ๊ทผํ ์ ์๋ค. ์ด๋ฌํ ํน์ฑ์ DRAM(Dynamic Random Access Meomry)์์๋ ๋์ผํ์ง๋ง ํ๋์จ์ด ์ค๊ณ์ DRAM์ SRAM๋ณด๋ค ๋๋ฆฌ๋ค. ํต์์ ์ผ๋ก '๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌโ๋ผ๊ณ ๋งํ ๋๋ DRAM์ ์๋ฏธํ๋ค.
์ฃผ์๊ฐ ํค๋ก ์ฃผ์ด์ก์ ๋ ๊ทธ ๊ณต๊ฐ์ ์ฆ์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์ ์บ์๊ฐ ํ๋์จ์ด๋ก ๊ตฌํํ ํด์ ํ
์ด๋ธ(Hash table)๊ณผ ๊ฐ๋ค๋ ์๋ฏธ๋ค. ์บ์๊ฐ ๋น ๋ฅธ ์ด์ ๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ง์ ๋ด์๋๊ธฐ ๋๋ฌธ์ด๊ธฐ๋ ํ์ง๋ง, ํด์ ํ
์ด๋ธ์ ์๊ฐ ๋ณต์ก๋๊ฐ
์บ์๋ ๋ธ๋ก(Block)์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ๊ฐ๊ฐ์ ๋ธ๋ก์ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์์ผ๋ฉฐ, ์ฃผ์๊ฐ์ ํค๋ก์จ ์ ๊ทผํ ์ ์๋ค. ๋ธ๋ก์ ๊ฐ์(Blocks)์ ๋ธ๋ก์ ํฌ๊ธฐ(Block size)๊ฐ ์บ์์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ๋ค.
Indexing
์ฃผ์๊ฐ ์ ์ฒด๋ฅผ ํค๋ก ์ฌ์ฉํ์ง๋ ์๊ณ , ๊ทธ ์ผ๋ถ๋ง์ ์ฌ์ฉํ๋ค. ๊ฐ๋ น ๋ธ๋ก ๊ฐ์๊ฐ 1024๊ฐ์ด๊ณ , ๋ธ๋ก ์ฌ์ด์ฆ๊ฐ 32๋ฐ์ดํธ์ผ ๋, 32๋นํธ ์ฃผ์๊ฐ ์ฃผ์ด์ง๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ธ๋ฑ์ฑ ํ ์ ์๋ค.
์ ์ฒด ์ฃผ์์์ ํ์ 5๋นํธ๋ฅผ ์คํ์
(Offset)์ผ๋ก ์ฐ๊ณ , ์ดํ 10๋นํธ๋ฅผ ์ธ๋ฑ์ค(Index)๋ก ์ฌ์ฉํ์ฌ ๋ธ๋ก์ ์ ๊ทผํ๋ค. ์ธ๋ฑ์ค๊ฐ 10๋นํธ์ธ ์ด์ ๋
๊ทธ๋ฌ๋ ์ด๋ ๊ฒ๋ง ํ๋ฉด ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๊ฐ ์ค๋ณต๋ ์ํ์ด ๋๋ฌด ํฌ๋ค.
Tag Matching
์ธ๋ฑ์ค์ ์ถฉ๋์ ์ค์ด๊ธฐ ์ํด ์ฃผ์๊ฐ์ ์ผ๋ถ๋ฅผ ํ๊ทธ(Tag)๋ก ์ฌ์ฉํ๋ค. ๋ธ๋ก ๊ฐ์๊ฐ 1024๊ฐ์ด๊ณ , ๋ธ๋ก ์ฌ์ด์ฆ๊ฐ 32๋ฐ์ดํธ์ผ ๋, 32๋นํธ ์ฃผ์ 0x000c14B8์ ์ ๊ทผํ๋ค๊ณ ๊ฐ์ ํด๋ณด์:
- ๋จผ์ ์ธ๋ฑ์ค(
0010100101
)์ ๋์ํ๋ ํ๊ทธ ๋ฐฐ์ด(Tag array)์ ํ๋์ ์ ๊ทผํ๋ค. - ์ด์ด์ ํด๋น ํ๊ทธ ํ๋์ ์ ํจ ๋นํธ(Valid bit)๋ฅผ ํ์ธํ๋ค.
- ์ ํจ ๋นํธ๊ฐ
1
์ด๋ผ๋ฉด ํ๊ทธ ํ๋(00000000000011000
)์ ์ฃผ์์ ํ๊ทธ(00000000000011000
)๊ฐ ๊ฐ์์ง ๋น๊ตํ๋ค. - ๋น๊ต ๊ฒฐ๊ณผ(
true
,1
)๋ฅผ ์ ํจ ๋นํธ(1
)์ AND ์ฐ์ฐํ๋ค.
์ ํจ ๋นํธ๊ฐ 1
์ด๋ผ๋ ๊ฒ์ ํด๋น ๋ธ๋ก์ ์ฌ๋ฐ๋ฅธ ๊ฐ์ด ์กด์ฌํ๋ค๋ ์๋ฏธ๋ค. ํ๊ทธ ํ๋์ ์ฃผ์์ ํ๊ทธ๊ฐ ๊ฐ๊ณ , ์ ํจ ๋นํธ๋ 1
์ด๋ฏ๋ก ์ ์์์ ๊ฒฐ๊ณผ๋ ํํธ๋ค. ํํธ๊ฐ ๋ฐ์ํ๋ฉด ๋ฐ์ดํฐ ๋ฐฐ์ด(Data array)์์ ํด๋น ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๋ค. (์ฐธ๊ณ ๋ก ๋ฐ์ดํฐ ๋ฐฐ์ด๊ณผ ํ๊ทธ ๋ฐฐ์ด๋ ๋ชจ๋ ํ๋์จ์ด๋ค.)
๋ง์ฝ ์ ํจ ๋นํธ๊ฐ 0
์ด๋ผ๋ฉด ๋ธ๋ก์ ๊ฐ์ด ์๊ฑฐ๋ ์ฌ๋ฐ๋ฅด์ง ์๋ค๋ ๋ป์ด๋ฏ๋ก ๋ฏธ์ค๊ฐ ๋ฐ์ํ๋ค. ๊ทธ๋ฌ๋ฉด ์ฃผ์์ ํ๊ทธ๋ฅผ ํ๊ทธ ํ๋์ ์์ฑํ๊ณ , ๋ฐ์ดํฐ ํ๋์๋ ์์ ์บ์๋ ๋ฉ๋ชจ๋ฆฌ์์ ์์ฒญํ ๊ฐ์ ๊ฐ์ ธ์ ์์ฑํ ๋ค, ์ ํจ ๋นํธ๋ฅผ 1
๋ก ๋ฐ๊ฟ์ค๋ค.
์ ํจ ๋นํธ๊ฐ 1
์ด๋ผ๋ ํ๊ทธ๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด ๋ฏธ์ค๊ฐ ๋ฐ์ํ๋ค. ์ด ๊ฒฝ์ฐ ๊ต์ฒด ์ ์ฑ
(Replacement policy)์ ๋ฐ๋ผ ์ฒ๋ฆฌ๊ฐ ๋ฌ๋ผ์ง๋ค. ๋จผ์ ์
๋ ฅ๋ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๊ต์ฒด๋๋ FIFO(First-In First-Out) ์ ์ฑ
์ ์ฌ์ฉํ๋ค๋ฉด ๋ฌด์กฐ๊ฑด ๊ธฐ์กด ๋ธ๋ก๋ฅผ ๊ต์ฒดํ๋ค. ํ๊ทธ ๋ฐฐ์ด์ ํ๋๋ฅผ ์ฃผ์์ ํ๊ทธ๋ก ๋ฐ๊พธ๊ณ , ์์ ์บ์๋ ๋ฉ๋ชจ๋ฆฌ์์ ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๋ฐ์ดํฐ ํ๋์ ๊ฐ๋ ์ ๋ฐ์ดํฐ๋ก ๋ฐ๊ฟ์ค๋ค. (์ค์ ๋ก๋ ์์ฒญํ ๋ฐ์ดํฐ๋ฟ ์๋๋ผ ๊ทธ ์ฃผ๋ณ ๋ฐ์ดํฐ๊น์ง ๊ฐ์ ธ์จ๋ค.) ๊ธฐ์กด ๋ฐ์ดํฐ๋ ์์ ์บ์๋ก ๋ฐ๋ ค๋๋ค.
์ฃผ์์ ์์ 15๋นํธ๊ฐ ํ๊ทธ ๋นํธ๋ก ์ฌ์ฉ๋ ์ด์ ๋ ํ๊ทธ ๋นํธ๊ฐ
Tag Overhead
ํ๊ทธ ๋ฐฐ์ด์ด ์ถ๊ฐ๋๋ฉด์ ๋ ๋ง์ ๊ณต๊ฐ์ด ํ์ํ๊ฒ ๋์๋ค. ํ์ง๋ง ์ฌ์ ํ '32KB ์บ์โ๋ 32KB ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ์บ์๋ผ๋ ์๋ฏธ๋ค. ํ๊ทธ๋ฅผ ์ํ ๊ณต๊ฐ์ ๋ธ๋ก ํฌ๊ธฐ์ ์๊ด์๋ ์ค๋ฒํค๋(Overhead)๋ก ์ทจ๊ธํ๊ธฐ ๋๋ฌธ์ด๋ค.
1024๊ฐ์ 32B ๋ธ๋ก์ผ๋ก ๊ตฌ์ฑ๋ 32KB ์บ์์ ํ๊ทธ ์ค๋ฒํค๋๋ฅผ ๊ตฌํด๋ณด์:
์ฆ, 7%์ ํ๊ทธ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
๊ณต๊ฐ๋ฟ ์๋๋ผ ์๊ฐ ๋น์ฉ๋ ๋ฐ์ํ๋ค. ํ๊ทธ ๋ฐฐ์ด์ ์ ๊ทผํด ํํธ๋ฅผ ํ์ธํ๊ณ , ๊ทธ ์ดํ์ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ์ ๊ทผํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ์ ์ผ๋ก ํํธ ๋ ์ดํด์๊ฐ ์ฆ๊ฐํ๊ฒ ๋๋ค.
๊ทธ๋์ ๋ ๊ณผ์ ์ ๋ณ๋ ฌ์ ์ผ๋ก ์คํํ๋ค. ํ๊ทธ ๋ฐฐ์ด์์ ํํธ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋์์ ๋ฏธ๋ฆฌ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ์ ๊ทผํ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํํธ ๋ ์ดํด์๊ฐ ์ค์ด๋ค์ง๋ง, ๋ฏธ์ค๊ฐ ๋ฐ์ํ์ ๋์ ๋ฆฌ์์ค ๋ญ๋น๋ฅผ ๊ฐ์ํด์ผ ํ๋ค.
Associative Cache
์๋ก ๋ค๋ฅธ ๋ ์ฃผ์๊ฐ ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๋ฉด ์ถฉ๋์ด ๋ฐ์ํ๊ณ , ๊ต์ฒด ์ ์ฑ ์ ๋ฐ๋ผ ๋ธ๋ก์ ๊ต์ฒดํ๋ค. ํ์ง๋ง ์ถฉ๋์ด ๋ฐ์ํ ๋๋ง๋ค ์บ์ ๋ด์ฉ์ ๋ฐ๊พธ๋ฉด ๋ ๋ง์ ๋ฏธ์ค๊ฐ ๋ฐ์ํ๊ฒ ๋๊ณ , ํ ์๋ฆฌ์ ๋ด์ฉ์ ๋์์ด ๋ฐ๊พธ๋ ํํ ๋ฌธ์ (Ping-pong problem)๊ฐ ์ผ์ด๋ ์ ์๋ค.
์ด ๋ฌธ์ ๋ ํ๊ทธ ๋ฐฐ์ด๊ณผ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ์ฌ๋ฌ ๊ฐ ๋ง๋๋ ์์ผ๋ก ๊ฐ์ ํ ์ ์๋ค. ์ฆ, ์ธ๋ฑ์ค๊ฐ ๊ฐ๋ฆฌํค๋ ๋ธ๋ก์ด ์ฌ๋ฌ ๊ฐ๊ฐ ๋๋ ๊ฒ์ด๋ค. ์ธ๋ฑ์ค๊ฐ ๊ฐ๋ฆฌํค๋ ๋ธ๋ก์ ๊ฐ์์ ๋ฐ๋ผ ์บ์์ ์ข ๋ฅ๋ฅผ ๋ถ๋ฅํ๋ฉด ์๋์ ๊ฐ๋ค:
- Direct mapped: ์ธ๋ฑ์ค๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณต๊ฐ์ด ํ๋์ธ ๊ฒฝ์ฐ. ์ฒ๋ฆฌ๊ฐ ๋น ๋ฅด์ง๋ง ์ถฉ๋ ๋ฐ์์ด ์ฆ๋ค.
- Fully associative: ์ธ๋ฑ์ค๊ฐ ๋ชจ๋ ๊ณต๊ฐ์ ๊ฐ๋ฆฌํค๋ ๊ฒฝ์ฐ. ์ถฉ๋์ด ์ ์ง๋ง ๋ชจ๋ ๋ธ๋ก์ ํ์ํด์ผ ํด์ ์๋๊ฐ ๋๋ฆฌ๋ค.
- Set associative: ์ธ๋ฑ์ค๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณต๊ฐ์ด ๋ ๊ฐ ์ด์์ธ ๊ฒฝ์ฐ. n-way set associative ์บ์๋ผ๊ณ ๋ถ๋ฅธ๋ค.
direct mapped ์บ์์ fully associative ์บ์ ๋ชจ๋ ์ฅ๋จ์ ์ด ๊ทน๋จ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ณดํต์ set associative ์บ์๋ฅผ ์ฌ์ฉํ๋ค.
Set Associative Cache Organization
๊ฐ๋จํ๊ฒ 2-way set associative ์บ์์ ๋์์ ์ดํด๋ณด์:
์ฃผ์์ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ธ๋ก์ ์ ๊ทผํ๋ ๊ฒ์ ์ง๊ธ๊น์ง ๋ณธ direct mapped ์บ์์ ๋์ผํ๋ค. ๋ค๋ง 2๊ฐ์ ์จ์ด(Way)๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ์บ์ฑ๋์ด ์๋์ง ํ์ธํ๋ ค๋ฉด ํ๋์ ๋ธ๋ก๋ง์ด ์๋ 2๊ฐ์ ๋ธ๋ก์ ๋ชจ๋ ํ์ธํด์ผ ํ๋ค. ๋ง์ง๋ง์ผ๋ก ๋ ์จ์ด์ ๊ฒฐ๊ณผ๋ฅผ OR ์ฐ์ฐํ๋ฉด ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋ผ ์ ์๋ค. ๋ชจ๋ ์จ์ด์์ ๋ฏธ์ค๊ฐ ๋ฐ์ํ๋ฉด ๊ต์ฒด ์ ์ฑ ์ ๋ฐ๋ผ 2๊ฐ์ ๋ธ๋ก ์ค ํ ๊ณณ์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ค.
direct mapped ์บ์์ ๋น๊ตํด์ ํํธ ๋ ์ดํด์๋ฅผ ๋์ด๋ ๋์ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ ์ค์ธ ๊ฒ์ด๋ค.
Concrete Example
2๋ฐ์ดํธ ์บ์ ๋ธ๋ก์ผ๋ก ๊ตฌ์ฑ๋ 8๋ฐ์ดํธ 2-way ์บ์๊ฐ ์๊ณ , 4๋นํธ ์ฃผ์๊ฐ ์ฃผ์ด์ง๋ค๊ณ ๊ฐ์ ํด๋ณด์.
๋ฉ๋ชจ๋ฆฌ ์ฃผ์ 0001
์ ์ฐธ์กฐํ๋ ๋ช
๋ น์ด ์คํ๋์๋ค. ์ธ๋ฑ์ค ๋นํธ๋0001
์ ์ธ๋ฑ์ค๋ 0, ํ๊ทธ๋ 00์ด๋ค. ์ฆ, ํด๋น ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์์นํ ๋ฐ์ดํฐ๋ ์ธ๋ฑ์ค๊ฐ 0
์ธ ๋ ๊ณต๊ฐ ์ค ํ ๊ณณ์ ์บ์ฑ๋ ์ ์๋ค.
Way 0
์ ๋ธ๋ก์ด ๋น์ด์์ผ๋ฏ๋ก Way 0
์์ ์ธ๋ฑ์ค๊ฐ 0
์ธ ๋ธ๋ก์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ์ด๋ ์ฃผ์ 0010
๋ ๊ฐ์ด ์บ์ฑ๋์๋๋ฐ, ์ด๋ ์บ์ ํํธ ๋น์จ์ ๋์ด๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋ฒ์ ์บ์ ๋ธ๋ก ํฌ๊ธฐ(2B)๋งํผ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ด๋ค. (๊ณต๊ฐ ์ง์ญ์ฑ์ ํ์ฉํ ๊ฒ์ด๋ค.) ์ฌ๊ธฐ์๋ ์ฐธ์กฐํ ๋ฐ์ดํฐ(0001
)์ ์ฃผ๋ณ ๊ณต๊ฐ์ธ 0010
์ ํจ๊ป ์บ์ฑํ๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฃผ์ 0101
์ ์ฐธ์กฐํ๋ ๋ช
๋ น์ด ์คํ๋์๋ค. ์ด๋ฒ์๋ ์ธ๋ฑ์ค๊ฐ 0
์ธ ๋ ๊ณต๊ฐ์ ๋ค์ด๊ฐ ์ ์๋ค.
ํ์ง๋ง Way 0
์์ ์ธ๋ฑ์ค๊ฐ 0
์ธ ๋ธ๋ก์ ์ด๋ฏธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ์๋ Way 1
์ ์บ์ฑ๋๋ค. ์ด๋ฒ์๋ ์์ ์๋ 0110
๋ฐ์ดํฐ๊ฐ ํจ๊ป ์บ์ฑ๋์๋ค. ๋ํ Way 0
์ ์ํ ๋ ๋ธ๋ก์ LRU(Least Recently Used) ๊ฐ์ด ์ฆ๊ฐํ๋ค. LRU๋ ์ฌ์ฉํ์ง ๋ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ์ ์ ์ผ๋ก ๊ต์ฒดํ๋ ์ ์ฑ
์ผ๋ก, ์ด์์ฒด์ ์ ํ๋ก์ธ์ค ์ค์ผ์ค๋ง์ด๋ ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ์ฌ์ฉ๋๋ค. LRU ๊ฐ์ด ์ฆ๊ฐํ๋ค๋ ๊ฒ์ ์บ์ ๋ฏธ์ค๊ฐ ๋ฐ์ํ์ ๋ ์ฐ์ ์ ์ผ๋ก ๊ต์ฒด๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ก๋ค๋ ์๋ฏธ๋ค.
์ด์ด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ 1000
์ ์ฐธ์กฐํ๋ ๋ช
๋ น์ด ์คํ๋์๋ค. ์ธ๋ฑ์ค๊ฐ 0
์ธ ๋ ๋ธ๋ก์ ํ์ธํ์ผ๋, ํ๊ทธ๊ฐ 10
์ธ ๋ฐ์ดํฐ๊ฐ ์์ด ์บ์ค ๋ฏธ์ค๊ฐ ๋ฐ์ํ๋ค.
๊ฒฐ๊ตญ ์บ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๊ต์ฒดํ๋ค. ๋ ๊ณต๊ฐ ์ค Way 0
๋ธ๋ก์ LRU ๊ฐ์ด ๋ ํฌ๊ธฐ ๋๋ฌธ์ Way 0
์ ์ฒซ ๋ฒ์งธ ๋ธ๋ก์ด ๊ต์ฒด ๋์๊ณ , ์ฐธ์กฐ๊ฐ ์ผ์ด๋ฌ์ผ๋ฏ๋ก LRU ๊ฐ์ 0
์ผ๋ก ์ด๊ธฐํํ๋ค. (์บ์ ํํธ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ์๋ LRU ๊ฐ์ ์ด๊ธฐํํ๋ค.) ์ฐธ์กฐํ ๋ฐ์ดํฐ์ ์ฃผ๋ณ ๊ณต๊ฐ์ธ 0111
์ ๋ฐ์ดํฐ๋ ๊ฐ์ ์๋ฆฌ๋ก ์บ์ฑํ๋ค. ์ด๋ Way 1
์ ์ํ ๋ ๋ธ๋ก์ ์ฐธ์กฐ๋์ง ์์๊ธฐ ๋๋ฌธ์ LRU ๊ฐ์ด ์ฆ๊ฐํ๋ค.
Handling Cache Writes
๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋์์ด ์๋๋ผ ์ ๋ ฅํ๋ ๋์์ด ๋ฐ์ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ฃผ์๊ฐ ์บ์ฑ๋ ์ํ(Write hit)๋ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ๋๋ ๋์ ์บ์ ๋ธ๋ก์ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ๋๋ค. ์ด์ '์บ์์์ ์ ๋ฐ์ดํธ๋ ๋ฐ์ดํฐ๋ฅผ ์ธ์ ๋ฉ๋ชจ๋ฆฌ์ ์ธ ๊ฒ์ธ๊ฐ?'์ ๊ดํ ๋ฌธ์ ๊ฐ ์๊ธด๋ค. ์ฌ๊ธฐ ๋ ๊ฐ์ง ์ฐ๊ธฐ ์ ์ฑ (Write policies)์ด ์๋ค.
ํ๋๋ Write-through ๋ฐฉ์์ด๋ค. ์บ์์ ๋ฐ์ดํฐ๊ฐ ์์ฑ๋ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ง์ ํธ๋ํฝ์ด ๋ฐ์ํ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ์ ์บ์์ ๋ฐ์ดํฐ๋ฅผ ๋์ผํ๊ฒ ์ ์งํ ์ ์๋ค.
๋ ๋ค๋ฅธ ๋ฐฉ์์ Write-back ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ์์ ๋ธ๋ก์ด ๊ต์ฒด๋ ๋๋ง ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธํ๋ค. ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋์ง ํ์ธํ๊ธฐ ์ํด ์บ์ ๋ธ๋ก๋ง๋ค dirty
๋นํธ๋ฅผ ์ถ๊ฐํด์ผ ํ๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์๋ค๋ฉด 1
๋ก ๋ฐ๊ฟ์ค๋ค. ์ดํ ํด๋น ๋ธ๋ก์ด ๊ต์ฒด๋ ๋ dirty
๋นํธ๊ฐ 1
์ด๋ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด๋ค.
๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ฃผ์๊ฐ ์บ์ฑ๋ ์ํ๊ฐ ์๋๋ผ๋ฉด(Write miss) Write-allocate ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ๋น์ฐํ ์๊ธฐ์ง๋ง, ๋ฏธ์ค๊ฐ ๋ฐ์ํ๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ๋ ๊ฒ์ด๋ค. write-allocate๋ฅผ ํ์ง ์๋๋ค๋ฉด ๋น์ฅ์ ๋ฆฌ์์ค๋ฅผ ์๋ ์ ์๊ฒ ์ง๋ง ์บ์์ ๋ชฉ์ ์ ๋ฌ์ฑํ์ง๋ ๋ชปํ ๊ฒ์ด๋ค.
Software Restructuring
์ฌ๊ธฐ๊น์ง ๋ก์ฐ ๋ ๋ฒจ์์์ ์บ์ ๊ตฌ์กฐ์ ๋์์ ์ดํด๋ดค๋๋ฐ, ์ฝ๋ ๋ ๋ฒจ์์ ์บ์์ ํจ์จ์ ์ฆ๊ฐ์ํฌ ์๋ ์๋ค. ๋ค์ ์ด์ค ๋ฃจํ๋ฅผ ๋ณด์:
for (i = 0; i < columns; i += 1) {
for (j = 0; j < rows; j += 1) {
arr[j][i] = pow(arr[j][i]);
}
}
2์ฐจ์ ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ์ ๊ณฑํ๋ ๋ฃจํ๋ค. ํฐ ๋ฌธ์ ๊ฐ ์์ด๋ณด์ด์ง๋ง ๊ณต๊ฐ ์ง์ญ์ฑ์ ๋ฐ์ ธ๋ณด๋ฉด ๋นํจ์จ์ ์ธ ์ฝ๋๋ค. ๋ฐฐ์ด arr
์ ์์๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ์ ์ฅ๋๋๋ฐ, ์ ๊ทผ์ ์์ฐจ์ ์ผ๋ก ์ด๋ค์ง์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
0 4 8 12 16 20 24
+----------+----------+----------+----------+----------+----------+
| [0, 0] | [0, 1] | [0, 2] | [1, 0] | [1, 1] | [1, 2] |
+----------+----------+----------+----------+----------+----------+
i = 0
,j = 0
: ์ฒซ ๋ฒ์งธ ๊ณต๊ฐ[0, 0]
์ ์ ๊ทผํ๋ค.i = 0
,j = 1
: ๋ค ๋ฒ์งธ ๊ณต๊ฐ[1, 0]
์ ์ ๊ทผํ๋ค.i = 1
,j = 0
: ๋ ๋ฒ์งธ ๊ณต๊ฐ[0, 1]
์ ์ ๊ทผํ๋ค.
์ด์ฒ๋ผ ๊ณต๊ฐ์ ๋ง๊ตฌ ๊ฑด๋๋ฐ๋ฉฐ ์ ๊ทผํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์๋ ์ฝ๋์ฒ๋ผ ์ธ๋ถ ๋ฃจํ๋ rows
๋ฅผ, ๋ด๋ถ ๋ฃจํ๋ columns
๋ฅผ ์ํํด์ผ ํ๋ค.
for (i = 0; i < rows; i += 1) {
for (j = 0; j < columns; j += 1) {
arr[i][j] = pow(arr[i][j]);
}
}
๋น์ทํ์ง๋ง ์๊ฐ ์ง์ญ์ฑ์ ํ์ฉํ๋ ์์๋ ์๋ค. ๋ค์ ๋ฃจํ๋ฅผ ๋ณด์:
for (i = 0; i < n; i += 1) {
for (j = 0; j < len; j += 1) {
arr[j] = pow(arr[j]);
}
}
๋ฐฐ์ด arr
์ ๋ชจ๋ ์์๋ฅผ ์ ๊ณฑํ๋ ๋์์ n
ํ ๋ฐ๋ณตํ๋ ์ด์ค ๋ฃจํ๋ค. ํ์ฌ ์ฝ๋๋ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ ๋ค, ๋ค์ ์ ๊ทผ ๋ ์บ์ฑํ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ค๋ ๋ณด์ฅ์ด ์๋ค. ์ ์ฒด ๋ฐ์ดํฐ๊ฐ ์บ์ ํฌ๊ธฐ๋ณด๋ค ํฌ๋ค๋ฉด ๋ฐฐ์ด์ ์ํํ๋ ๊ณผ์ ์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
๋ฃจํ์ ์ ๋ฐ๋ถ์์ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ์ง๋ง, ๋ฃจํ๊ฐ ๋๋ ๋ ์บ์๋ ํ๋ฐ๋ถ์ ์ ๊ทผํ ๋ฐ์ดํฐ๋ก ๋ฎ์ด์์์ง ์ํ๊ฐ ๋๋ค. ๊ทธ๋์ ๋ ๋ฒ์งธ ๋ฃจํ๋ฅผ ๋ ๋๋ ์ ๋ฐ๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์บ์ฑํด์ผ ํ๋ค. ์บ์ฑํ ๋ฐ์ดํฐ์ ๋ค์ ์ ๊ทผํ๊ธฐ๋ ์ ์ ์บ์ ๋ธ๋ก ์ ์ฒด๊ฐ ๊ต์ฒด๋์ด ๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ค. ๋ฐฐ์ด ์ํ ์ฃผ๊ธฐ๋ฅผ ์บ์ ํฌ๊ธฐ๋งํผ ๋์ด์ฃผ๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๋ฃจํ๋ฅผ ๋๋ ํ์๋ ๋์์ง๋ง ์บ์ ํํธ ๋น์จ์ ๋ ๋์์ก๋ค. ์ธ ๋ฒ์งธ ๋ฃจํ๊น์ง๋ ์ ๋ฐ๋ถ ๋ฐ์ดํฐ๋ง ์ฒ๋ฆฌํ๊ณ , ๊ทธ ์ดํ๋ก๋ ํ๋ฐ๋ถ ๋ฐ์ดํฐ๋ง ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค. ์ฝ๋๋ก ๊ตฌํํ๋ฉด ์ผ์ค๋ฃจํ(!)๊ฐ ๋๋ค:
for (i = 0; i < len; i += CACHE_SIZE) {
for (j = 0; j < n; j += 1) {
for (k = 0; k < CACHE_SIZE; k += 1) {
arr[i + k] = pow(arr[i + k]);
}
}
}
๋ฌผ๋ก ์์ฆ์ ์ปดํ์ผ๋ฌ๊ฐ ๋ชจ๋ ์ต์ ํ๋ฅผ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๊ฐ ์ด๋ฐ ๋ถ๋ถ๊น์ง ์ ๊ฒฝ์ธ ํ์๋ ์๋ค. โ๋ก์ฐ ๋ ๋ฒจ์์ ์ด๋ฐ ์์ผ๋ก ์ฝ๋๋ฅผ ์ต์ ํํ ์ ์๊ตฌ๋โ ์ ๋๋ง ์๊ณ ์์ด๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ๋ค.
References
- David Patterson, John Hennenssy, โComputer Organization and Design 5th Ed.โ, MK, 2014.
- Abraham Silberschatz, Peter Galvin, Greg Gagne, โOperating System Concepts 9th Ed.โ, Wiley, 2014.
- K. G. Smitha, โPara Cache Simulatorโ.