๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Life/Study

(54)
[์šด์˜์ฒด์ œ] ํŽ˜์ด์ง• ๊ธฐ๋ฒ•(์™ธ๋ถ€ ๋‹จํŽธํ™”, ๋‚ด๋ถ€ ๋‹จํŽธํ™”) ๊ธฐ์ดˆ ๊ฐœ๋…/๋œป ์šด์˜์ฒด์ œ ์ฃผ๊ธฐ์–ต์žฅ์น˜ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์˜ ์ดํ•ด: ํŽ˜์ด์ง•(Paging) ๊ธฐ๋ฒ• ์‹ฌ์ธต ๋ถ„์„ ์ปดํ“จํ„ฐ์—์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์ฃผ๊ธฐ์–ต์žฅ์น˜(Main Memory, RAM)์— ์ ์žฌ๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ณผ๊ฑฐ ์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ๊ทธ๋žจ์— ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ†ต์งธ๋กœ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์ด๋Š” ์‹คํ–‰ ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ๋ฉ”๋ชจ๋ฆฌ ๊ณณ๊ณณ์— ์ž‘์€ ๋นˆ ๊ณต๊ฐ„๋“ค์ด ์ƒ๊ฒจ๋‚˜ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง€๋Š” ์น˜๋ช…์ ์ธ ๋ฌธ์ œ(์™ธ๋ถ€ ๋‹จํŽธํ™”)๋ฅผ ๋‚ณ์•˜๋‹ค. ํŽ˜์ด์ง• ๊ธฐ๋ฒ•(Paging)์€ ์ด๋Ÿฌํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ๋‚˜์•„๊ฐ€ ์ฃผ๊ธฐ์–ต์žฅ์น˜์˜ ํฌ๊ธฐ๋ฅผ ๋›ฐ์–ด๋„˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฐ€์ƒ ๊ธฐ์–ต์žฅ์น˜(Virtual Memory)์˜ ๊ธฐ๋ฐ˜์„ ๋‹ค์ง€๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ํš๊ธฐ์ ์ธ ์ฃผ๊ธฐ์–ต์žฅ์น˜ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์ด๋‹ค.1. ํŽ˜์ด์ง• ๊ธฐ๋ฒ•์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ์ž‘๋™ ์›๋ฆฌํŽ˜์ด์ง• ๊ธฐ๋ฒ•์€..
[์ž๋ฃŒ๊ตฌ์กฐ] ํž™ (Heap) ์ˆ˜๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ, ์–ด๋–ค ๋ฐ์ดํ„ฐ๋Š” "์ง€๊ธˆ ๋‹น์žฅ, ๊ฐ€์žฅ ๋จผ์ €" ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š” ์ค‘์š”์„ฑ์„ ๊ฐ€์ง„๋‹ค(๋งˆ์น˜ ์‹œ์Šคํ…œ์˜ CPU ์Šค์ผ€์ค„๋Ÿฌ์ฒ˜๋Ÿผ). ์ด๋Ÿฌํ•œ ์šฐ์„ ์ˆœ์œ„(Priority) ๊ฐœ๋…์„ ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒŒ ๋ฐ”๋กœ ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)๊ณ , ์ด ํ๋ฅผ ๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๊ฐ€ ํž™(Heap) ์ด๋‹ค. ํž™์€ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ๋ณด๊ด€ํ•จ์ด ์•„๋‹ˆ๋ผ, ํ•ญ์ƒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งจ ์œ„์— ๋ฐฐ์น˜ํ•˜๋Š” '์ •๋ ฌ๋œ ๋”๋ฏธ'์˜ ์—ญํ• ์„ ํ•œ๋‹ค. ํž™(Heap)์€ ํ•œ๊ธ€๋กœ "๋”๋ฏธ" ๋˜๋Š” "์Œ“์•„๋†“์€ ๊ฒƒ"์„ ์˜๋ฏธํ•œ๋‹ค. ์‹ค์ œ๋กœ ํž™์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๋งˆ์น˜ ํŽธ์˜์ ์˜ ์œ ํ†ต๊ธฐํ•œ์ด ์ž„๋ฐ•ํ•œ ์ƒํ’ˆ์„ ๊ฐ€์žฅ ์•ž์— ์ง„์—ดํ•ด๋†“์€ ์ง„์—ด๋Œ€์™€ ๊ฐ™๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ญ์ƒ ๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ(์ตœ๋Œ“๊ฐ’ ๋˜๋Š” ์ตœ์†Ÿ๊ฐ’)๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋Š” ํŠน์„ฑ ๋•Œ๋ฌธ์—..
[์ž๋ฃŒ๊ตฌ์กฐ] ์Šค๋ ˆ๋“œ ํŠธ๋ฆฌ(Threaded Tree) ๊ธฐ์กด์˜ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•  ๋•Œ๋Š” ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๊ณ  ์ง€๋‚˜์ณ์˜จ ๋ถ€๋ชจ ๋…ธ๋“œ๋“ค์„ ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•ด ์Šคํƒ(Stack)์ด๋ผ๋Š” ๋ณ„๋„์˜ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์Šคํƒ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ณ , ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๊ฒƒ์ด ์Šค๋ ˆ๋“œ ํŠธ๋ฆฌ(Threaded Binary Tree)๋‹ค. ์Šค๋ ˆ๋“œ ํŠธ๋ฆฌ๋Š” "๋‹ค์Œ์— ์–ด๋””๋กœ ๊ฐ€์•ผ ํ•˜๋Š”์ง€"๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์ผ์ข…์˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ํ‘œ์ง€ํŒ์ธ '์Šค๋ ˆ๋“œ(Thread, ์‹ค)'๋ฅผ ํŠธ๋ฆฌ ๋‚ด๋ถ€์— ์ง์ ‘ ์‹ฌ์–ด๋†“์€ ๊ตฌ์กฐ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์Šคํƒ ์—†์ด๋„ ๋ฌผ ํ๋ฅด๋“ฏ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰˜๋Š”๋ฐ, ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ๊ทธ ํšจ์œจ์„ฑ์ด ๋‹ฌ๋ผ์ง„๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ 'ํฌ์ธํ„ฐ ํ•„๋“œ ..
[์ž๋ฃŒ๊ตฌ์กฐ] B Tree, B+, B* ํŠธ๋ฆฌ ๋น„๊ต & ์ฐจ์ด์  ๊ธฐ์กด์˜ ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree)๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ํ‚ค๋งŒ ๋ฉ€๋Œ€๊ฐ™์ด ์ปค์ง€๋Š” ์žญ๊ณผ ์ฝฉ๋‚˜๋ฌด์˜ ์ฝฉ๋‚˜๋ฌด์™€ ๊ฐ™์•„ ๋ถˆ์•ˆ์ •ํ–ˆ๋‹ค. ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ๋„ˆ๋ฌด ๋†’์•„์ง€๋‹ค ๋ณด๋‹ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ํ•˜๋“œ๋””์Šคํฌ๊ฐ€ ์ˆ˜์—†์ด ๋งŽ์€ ์ธต์„ ์˜ค๋ฅด๋‚ด๋ ค์•ผ ํ–ˆ๊ณ  ๊ณผ๋ถ€ํ•˜๋กœ ์ด์–ด์ง€๊ฒŒ ๋๋‹ค. ์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ๋“ฑ์žฅํ•œ B ๊ณ„์—ด ํŠธ๋ฆฌ๋Š” ๋” ํšจ์œจ์ ์ธ ์˜†์œผ๋กœ ๋šฑ๋šฑํ•˜๊ณ  ์ธต์ˆ˜๋Š” ๋‚ฎ์€ ๋•…๋”ธ๋ณด ํŠธ๋ฆฌ๋กœ ๊ฐœ์ข…ํ•˜๊ฒŒ ๋œ๋‹ค. ๋งˆ์น˜ ์ง€์ง„์— ์ทจ์•ฝํ•œ ๊ณ ์ธต ์•„ํŒŒํŠธ์—์„œ ํ•œ ์ธต์— ๋ฐฉ์ด ๋งŽ๊ณ  ๋„“์€ ์ €์ธต ๊ณ ๊ธ‰ ์ €ํƒ์œผ๋กœ ์ด์‚ฌ๋ฅผ ํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. ์ธต์ˆ˜๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ๋‚ฎ์ถฐ(Low Depth) ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ(I/O)๋ฅผ ํƒ€๋Š” ํšŸ์ˆ˜๊นŒ์ง€ ์ค„์ธ ์ƒ์กดํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค. ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” B-ํŠธ๋ฆฌ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ํ‰๋“ฑํ•œ ๋ฐ์ดํ„ฐ ๋ฏผ์ฃผ์ฃผ์˜๋ฅผ ํ‘œ๋ฐฉํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๊ผญ ๋ฐ”๋‹ฅ(leaf node)์—๋งŒ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ..