CS/์šด์˜์ฒด์ œ

[์šด์˜์ฒด์ œ] ์บ์‹œ(Cache)

1eehyunji 2023. 7. 11. 01:51

์บ์‹œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ณต์‚ฌํ•ด๋†“์€ ์ž„์‹œ์ €์žฅ์†Œ์ด์ž, ๋น ๋ฅธ ์žฅ์น˜์™€ ๋А๋ฆฐ ์žฅ์น˜์—์„œ ์†๋„ ์ฐจ์ด์— ๋”ฐ๋ฅธ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์ค„์ด๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. 

์บ์‹œ๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ๋ฌด์–ธ๊ฐ€๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์‹ค์ œ๋กœ, ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์‚ฌ์ด์˜ ์†๋„ ์ฐจ์ด๊ฐ€ ๋„ˆ๋ฌด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๊ฐ„์— ๋ ˆ์ง€์Šคํ„ฐ ๊ณ„์ธต์„ ๋‘๊ณ  ์†๋„ ์ฐจ์ด๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค. 

์ด์™€ ๊ฐ™์ด ์†๋„ ์ฐจ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„์ธต๊ณผ ๊ณ„์ธต ์‚ฌ์ด์— ์žˆ๋Š” ๊ณ„์ธต์„ '์บ์‹ฑ ๊ณ„์ธต'์ด๋ผ ํ•œ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„ ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต ๊ตฌ์กฐ์™€ ๊ฐ™์ด ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜์™€ ์บ์‹œ ์‚ฌ์ด์˜ ์ฃผ๊ธฐ์–ต์žฅ์น˜๋ฅผ ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜์˜ ์บ์‹ฑ ๊ณ„์ธต์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์ง€์—ญ์„ฑ์˜ ์›๋ฆฌ

์บ์‹œ๋ฅผ ์ง์ ‘ ์„ค์ •ํ•  ๋•Œ๋Š” ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

์ง€์—ญ์„ฑ์€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ทผ๊ฑฐ๊ฐ€ ๋œ๋‹ค.

์‹œ๊ฐ„ ์ง€์—ญ์„ฑ(temporal locality)๊ณผ ๊ณต๊ฐ„ ์ง€์—ญ์„ฑ(spatial locality)์ด ์žˆ๋‹ค. 

 

์‹œ๊ฐ„ ์ง€์—ญ์„ฑ(temporal locality)

์ตœ๊ทผ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ์— ๋‹ค์‹œ ์ ‘๊ทผํ•˜๋ ค๋Š” ํŠน์„ฑ์„ ๋งํ•œ๋‹ค. 

๋ฐ˜๋ณต๋ฌธ์„ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ฝ”๋“œ ์•ˆ์—์„œ ๋ณ€์ˆ˜ i์— ๊ณ„์†ํ•ด์„œ ์ ‘๊ทผ์ด ์ด๋ฃจ์–ด์ง„๋‹ค. 

์ด๋ ‡๊ฒŒ ๋ฐฉ๊ธˆ ์ „์— ์ ‘๊ทผํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์ฐธ๊ณ ํ•˜๊ฒŒ ๋  ํ™•๋ฅ ์ด ๋†’์•„์ง€๋Š” ๊ฒƒ์ด ์‹œ๊ฐ„์  ์ง€์—ญ์„ฑ์ด๋‹ค. 

let arr=Array.from({length:10}, ()=>0);

for (let i=0; i<10; i+=1){
	arr[i]=i;
}

 

๊ณต๊ฐ„ ์ง€์—ญ์„ฑ(spatial locality)

๊ณต๊ฐ„ ์ง€์—ญ์„ฑ์€ ์ตœ๊ทผ ์ ‘๊ทผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๊ณต๊ฐ„์ด๋‚˜ ๊ทธ ๊ฐ€๊นŒ์šด ๊ณต๊ฐ„์— ์ ‘๊ทผํ•˜๋Š” ํŠน์„ฑ์„ ๋งํ•œ๋‹ค.

์œ„์˜ for ๋ฐ˜๋ณต๋ฌธ ์ฝ”๋“œ๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค๋ฉด, ๋ฐฐ์—ด arr์˜ ๊ฐ ์š”์†Œ๋“ค์— i๊ฐ€ ํ• ๋‹น๋˜๋ฉด์„œ ํ•ด๋‹น ๋ฐฐ์—ด์— ์—ฐ์†์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ์‹œ๊ฐ„ ์ง€์—ญ์„ฑ๊ณผ ๊ณต๊ฐ„ ์ง€์—ญ์„ฑ์„ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ์ค‘ ์ ‘๊ทผํ•œ ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ ์‹œ์ ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ํ‘œ์‹œํ•œ ์•„๋ž˜ ๊ทธ๋ฆผ์ด ์ž˜ ์„ค๋ช…ํ•ด์ค€๋‹ค.

์ถœ์ฒ˜ : https://parksb.github.io/article/29.html

 

์บ์‹œํžˆํŠธ์™€ ์บ์‹œ๋ฏธ์Šค

์บ์‹œ์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์€ ๊ฒƒ์„ ์บ์‹œํžˆํŠธ,

ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์—†์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๊ฐ€์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„์˜ค๋Š” ๊ฒƒ์„ ์บ์‹œ๋ฏธ์Šค๋ผ ํ•œ๋‹ค.

์บ์‹œํžˆํŠธ์™€ ์บ์‹œ๋ฏธ์Šค

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์บ์‹œํžˆํŠธ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ์ œ์–ด ์žฅ์น˜๋ฅผ ๊ฑฐ์ณ ์บ์‹œ์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค.

์บ์‹œํžˆํŠธ์˜ ๊ฒฝ์šฐ ์œ„์น˜๋„ ๊ฐ€๊น๊ณ  CPU ๋‚ด๋ถ€ ๋ฒ„์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๋‹ค.

 

๋ฐ˜๋ฉด์—, ์บ์‹œ๋ฏธ์Šค๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ์›๋ณธ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋Š” ์‹œ์Šคํ…œ ๋ฒ„์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋А๋ฆฌ๋‹ค. 

๋˜, ์บ์‹œ๋ฏธ์Šค๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ€์ ธ์˜ค๋ฉด ์บ์‹œ์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ๊ฐฑ์‹ ํ•œ๋‹ค.

 

์บ์‹œ ๋งคํ•‘

์บ์‹œ ๋งคํ•‘์€ ์บ์‹œ๊ฐ€ ํžˆํŠธ๋˜๊ธฐ ์œ„ํ•ด ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค. ์ด ์„ค๋ช…์—์„  CPU์˜ ๋ ˆ์ง€์Šคํ„ฐ์™€ ์ฃผ๋ฉ”๋ชจ๋ฆฌ RAM๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๋ช…ํ•œ๋‹ค. 

๋ ˆ์ง€์Šคํ„ฐ๋Š” RAM์— ๋น„ํ•ด ๊ต‰์žฅํžˆ ์ž‘๊ธฐ ๋•Œ๋ฌธ์—, ์ž‘์€ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์บ์‹ฑ ๊ณ„์ธต์œผ๋กœ์จ ์—ญํ• ์„ ์ž˜ ํ•ด์ฃผ๋ ค๋ฉด ์ด ๋งคํ•‘์„ ์–ด๋–ป๊ฒŒ ํ•˜๋А๋ƒ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.

์ด๋ฆ„ ์„ค๋ช…
์ง์ ‘ ๋งคํ•‘
(directed mapping)
๋ฉ”๋ชจ๋ฆฌ๊ฐ€ 1~100์ด ์žˆ๊ณ , ์บ์‹œ๊ฐ€ 1~10์ด ์žˆ๋‹ค๋ฉด, ์บ์‹œ์˜ ์œ„์น˜ 1์— ๋ฉ”๋ชจ๋ฆฌ 1~10์„ ๋งคํ•‘ํ•˜๊ณ , ์œ„์น˜ 2์— ๋ฉ”๋ชจ๋ฆฌ 11~20์„ ๋งคํ•‘ํ•˜๊ณ , ์œ„์น˜ 3์— ๋ฉ”๋ชจ๋ฆฌ 21~30์„ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•จ. ๊ตฌํ˜„์ด ์‰ฝ๊ณ  ์ฒ˜๋ฆฌ๊ฐ€ ๋น ๋ฅด์ง€๋งŒ
์ ์ค‘๋ฅ (Hit rate)์ด ๋‚ฎ์Œ. 
์—ฐ๊ด€ ๋งคํ•‘
(associative mapping)
์ˆœ์„œ๋ฅผ ์ผ์น˜์‹œํ‚ค์ง€ ์•Š๊ณ  ๊ด€๋ จ ์žˆ๋Š” ์บ์‹œ์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งคํ•‘ํ•จ. ์ ์ค‘๋ฅ ์ด ๋†’์ง€๋งŒ ๋ชจ๋“  ๋ธ”๋ก์„ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋А๋ฆผ.
์ง‘ํ•ฉ ์—ฐ๊ด€ ๋งคํ•‘
(set associative mapping)
์ง์ ‘ ๋งคํ•‘๊ณผ ์—ฐ๊ด€ ๋งคํ•‘์„ ํ•ฉ์ณ ๋†“์€ ๊ฒƒ. ์ˆœ์„œ๋Š” ์ผ์น˜์‹œํ‚ค์ง€๋งŒ ์ง‘ํ•ฉ์„ ๋‘ฌ์„œ ์ €์žฅํ•˜๋ฉฐ ๋ธ”๋กํ™”๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์€ ๋” ํšจ์œจ์ ์ž„. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ 1~100์ด ์žˆ๊ณ  ์บ์‹œ๊ฐ€ 1~10์ด ์žˆ๋‹ค๋ฉด ์บ์‹œ 1~5์— ๋ฉ”๋ชจ๋ฆฌ 1~50์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ €์žฅ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋งํ•จ. 

์บ์‹œ ๋งคํ•‘ ๋ฐฉ์‹์€ ๊ฐ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋””ํ…Œ์ผํ•œ ์„ค๋ช…์ด ํ•„์š”ํ•ด์„œ, ์ถ”ํ›„ ์บ์‹œ ๋งคํ•‘ ๊ฒŒ์‹œ๊ธ€์„ ์ถ”๊ฐ€๋กœ ์ž‘์„ฑํ•  ์˜ˆ์ •์ด๋‹ค!