๐Ÿ‘จโ€๐Ÿ’ป Seungineer's GitHub Contribution

๐Ÿงญ KAIST JUNGLE 42

[PintOS] Virtual Memory - ๋“ค์–ด๊ฐ€๊ธฐ(Project 3, TIL)

Virtual Memory๋Š” ์™œ ํ•„์š”ํ• ๊นŒ?๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ์ƒํ•ด ๋ณด์ž. ์Œ์•… ์žฌ์ƒ ํ”Œ๋ ˆ์ด์–ด์™€ ๊ฒŒ์ž„ ํ”„๋กœ์„ธ์Šค์—์„œ ๊ฐ™์€ ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ๊ฐ๊ฐ ์žฌ์ƒ ์‹œ๊ฐ„๊ณผ ์บ๋ฆญํ„ฐ์˜ ์ฒด๋ ฅ ์ •๋ณด๊ฐ€ ๋‹ด๊ธฐ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ฐธ๊ณ ํ•  ๋•Œ๋งˆ๋‹ค ์„œ๋กœ์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ์‚ฌ์šฉํ•˜๋˜ ์ •๋ณด๋ฅผ ์ฝ์–ด์˜ค๊ธฐ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค. ์˜๋„์น˜ ์•Š๊ฒŒ ์บ๋ฆญํ„ฐ์˜ ์ฒด๋ ฅ์ด ์ ์  ์ฆ๊ฐ€ํ•œ๋‹ค๋˜๊ฐ€, ์บ๋ฆญํ„ฐ์˜ ์ฒด๋ ฅ์ด ๋‹ณ์„ ๋•Œ ์Œ์•… ์žฌ์ƒ ์‹œ๊ฐ„์ด ๋’ค๋กœ ์ด๋™ํ•œ๋‹ค๋˜๊ฐ€ ๐Ÿ™„.Virtual Memory๋ฅผ ๋„์ž…ํ•ด ์œ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” Virtual Memory ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ธฐ์— ํ”„๋กœ์„ธ์Šค๋ณ„ ๊ฐ™์€ ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค ํ•˜๋”๋ผ๋„ ์‹ค์ œ ๋ฌผ๋ฆฌ Memory(RAM)์— ๋งคํ•‘๋˜์–ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์€ ๋‹ค๋ฅด๊ฒŒ ๋œ๋‹ค! ์ด๋Š” data security ์ธก๋ฉด์—์„œ์˜ Virtu..

[PintOS] User Program - System Call2 (Project 2, TIL)

KAIST PintOS ๊ฐ•์˜ ๋ฐ Instruction, ํ•œ์–‘๋Œ€ PintOS Slides๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉฐ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.ํ•™์Šต ๋„์ค‘ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์ด๋ผ ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.fork() ํ•จ์ˆ˜ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ์„œ ์‹œ๊ฐ„์„ ๋„ˆ๋ฌด ๋งŽ์ด ์ผ๋‹ค. ์œ„ ์งค์ฒ˜๋Ÿผ ๋ฒ„๊ทธ๋ฅผ ๊ณ ์น˜๋ฉด, ๋‹ค๋ฅธ ๋ฐ์„œ ๋ฒ„๊ทธ๊ฐ€ ๋‚ฌ๊ณ , ๊ทธ ๋ฒ„๊ทธ๋ฅผ ๊ณ ์น˜๋ฉด ์ด์ „ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ํ†ต๊ณผ๊ฐ€ ์•ˆ ๋˜๋Š” ์ผ์ด ์—„์ฒญ ๋งŽ์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌดํ•œ ๋ฒ„๊ทธ์˜ ๊ตด๋ ˆ ๋์— 'ALL PASSED' ๋ฌธ๊ตฌ๋ฅผ ๋ดค์„ ๋•Œ์˜ ๊ฐ๋™์„ ์•„์ง๋„ ์žŠ์ง€ ๋ชป ํ•˜๊ฒ ๋‹ค(์งœ๋ฆฟํ•ด).ํ”„๋กœ์„ธ์Šค ๊ณ„์ธต ๊ตฌ์กฐ ๊ฐœ์š”Process์˜ ์ •๋ณด์— ๋ถ€๋ชจ์™€ ์ž์‹ field๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ œ์ž‘ํ•œ๋‹ค. ์ด๋•Œ, project1์—์„œ ์‚ฌ์šฉ๋˜์—ˆ๋˜ semaphore ๊ฐœ๋…์ด ์‚ฌ์šฉ๋œ๋‹ค. Process ๊ด€๋ จ system call์—๋Š” ..

[PintOS] User Program - System Call (Project 2, TIL)

KAIST PintOS ๊ฐ•์˜ ๋ฐ Instruction, ํ•œ์–‘๋Œ€ PintOS Slides๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉฐ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.ํ•™์Šต ๋„์ค‘ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์ด๋ผ ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋“ค์–ด๊ฐ€๊ธฐ ์ „์—๋ ˆ์ง€์Šคํ„ฐ ์—ญํ•  ์ •๋ฆฌ%rax : system call number ์ €์žฅ โ–ถ๏ธ ์šด์˜์ฒด์ œ๊ฐ€ ์–ด๋–ค ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋จ%rdi, %rsi, %r10, % r8, %r9 : system call arguments ์ „๋‹ฌ์— ์‚ฌ์šฉ(ํ˜ธ์ถœ์— ๋”ฐ๋ผ ์ผ๋ถ€๋งŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋จ)%rcx : syscall ๋ช…๋ น์–ด ์‚ฌ์šฉ ์‹œ %rcx ๋ ˆ์ง€์Šคํ„ฐ์— ๋ณต๊ท€ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋จ(์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ์—๋Š” ์Šคํƒ์— ์ €์žฅ!) โฌ…๏ธ ์šด์˜์ฒด์ œ์—์„œ ์ž๋™ ์ฒ˜๋ฆฌ%r11 : syscall ๋ช…๋ น์–ด ์‚ฌ์šฉ ์‹œ ํ˜„์žฌ process stat..

[PintOS] User Program - Arguments parsing (Project 2, TIL)

KAIST PintOS ๊ฐ•์˜ ๋ฐ Instruction, ํ•œ์–‘๋Œ€ PintOS Slides๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉฐ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.ํ•™์Šต ๋„์ค‘ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์ด๋ผ ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Arguments ParsingCommand Line์— ๋Œ€ํ•ด ๊ณต๋ฐฑ(' ') ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ํ˜„์žฌ๋Š” Arguments๊ฐ€ ๋ถ„ํ• ๋˜์ง€ ์•Š์•„ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ์ž…๋ ฅ๋˜๊ณ  ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ž…๋ ฅ๋˜๋ฉด, filename์„ ์ฐพ์„ ์ˆ˜๋„ ์—†๊ฑฐ๋‹ˆ์™€ ์—ฌ๋Ÿฌ ๋ช…๋ น ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ํ•€ํ† ์Šค์—์„œ๋Š” '๋ฌธ์ž์—ด ๋ถ„๋ฆฌ' ํ•จ์ˆ˜(strtok_r())๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.strtok_r()tid_tprocess_create_initd (const char *file_name) { char *fn_copy; char *temp_ptr; char..

[PintOS] User Program - ๋ฐฐ๊ฒฝ์ง€์‹(Project 2, TIL)

KAIST PintOS ๊ฐ•์˜ ๋ฐ Instruction, ํ•œ์–‘๋Œ€ PintOS Slides๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉฐ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.ํ•™์Šต ๋„์ค‘ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์ด๋ผ ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.Project 2 : User Programs์ตœ์ข… ๊ตฌํ˜„๋˜์–ด์•ผ ํ•  ๊ฒƒํ˜„์žฌ ํ•€ํ† ์Šค๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค(User process)๋ฅผ ์ƒ์„ฑํ•œ ํ›„ scheduling() ๋  ๋•Œ Init process๊ฐ€ ์ข…๋ฃŒ(exit)๋˜๊ธฐ์— User process ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ตœ์ข… ๊ตฌํ˜„ ํ›„์—๋Š” Init process๊ฐ€ mother of all process๋กœ, '์ž์‹ process์˜ ์™„๋ฃŒ ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋˜๊ณ , User process ์ข…๋ฃŒ ํ›„์— exit ๋ฐ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•œ๋‹ค.thread_create()์ปค๋„ ์Šคํƒ์— 4KB ๊ณต๊ฐ„์˜ Page๋ฅผ ํ•˜๋‚˜..

[PintOS] Thread - Priority Scheduling (Project 1, WIL)

๋“ค์–ด๊ฐ€๊ธฐ ์ „์—์šด์˜์ฒด์ œ์˜ ๋™์ž‘ ๊ณผ์ •(Dual-Mode Execution)User Mode : ์ผ๋ฐ˜์  ์‘์šฉํ”„๋กœ๊ทธ๋žจ ๊ตฌ๋™ ํ™˜๊ฒฝKernel Mode : ์ปค๋„ ๊ตฌ๋™ ํ™˜๊ฒฝ(User Mode์™€ ๋‹ฌ๋ฆฌ system call(H/W ๊ด€๋ จ) ํ˜ธ์ถœ ๊ฐ€๋Šฅ) โ—€๏ธ PintOS ํ™˜๊ฒฝ์ฒซ ์šด์˜์ฒด์ œ ๊ตฌ๋™ ์‹œ ์ดˆ๊ธฐํ™” ์ž‘์—… ๋ฐ ๋ถ€ํŒ… ์ž‘์—…์œผ๋กœ ์ธํ•ด ์ปค๋„ ๋ชจ๋“œ๋กœ ์‹œ์ž‘๋˜๊ณ , ๊ณง๋ฐ”๋กœ ์‚ฌ์šฉ์ž ๋ชจ๋“œ๋กœ ์ „ํ™˜๋œ๋‹ค. ์ด๋Š” Kernel Mode์—์„œ์˜ ์ž‘์—…์ด ์ปดํ“จํ„ฐ ์ „๋ฐ˜์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด๊ธฐ์— ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์˜ ์ ‘๊ทผ์„ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.User Mode์—์„œ 'system call'์„ ํ˜ธ์ถœUser Mode์—์„œ ์ž‘์—…์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ์šด์˜์ฒด์ œ์— ์œ„์ž„Interrupt?Interrupt(์ธํ„ฐ๋ŸฝํŠธ)๋ž€ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” '์ค‘๋‹จ ์‹ ํ˜ธ'๋กœ CPU๊ฐ€ ํŠน์ • ํ”„๋กœ๊ทธ..

[PintOS] Thread - Alarm Clock (Project 1)

KAIST Jungle 7์ฃผ์ฐจ, OS ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—ํ”„๋กœ์„ธ์Šค๋Š” ๋ญ๊ณ  ์Šค๋ ˆ๋“œ๋Š” ๋ญ”๊ฐ€์š”? [์œ ํŠœ๋ธŒ ์˜์ƒ ๊ฐ•์˜]CPU์˜ ๋™์‹œ์„ฑ์€ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ผ๋ถ€๋ถ„์”ฉ context switching ํ•˜๋ฉด์„œ ์ง„ํ–‰๋จA, B, C ์ž‘์—… ๋™์‹œ ์ฒ˜๋ฆฌ ์‹œ ์ˆœ์„œ๋Œ€๋กœ A(5% ์ˆ˜ํ–‰)โ–ถ๏ธ B(5% ์ˆ˜ํ–‰) โ–ถ๏ธ C(5% ์ˆ˜ํ–‰) โ–ถ๏ธ A(10% ์ˆ˜ํ–‰)โ–ถ๏ธ B(10% ์ˆ˜ํ–‰) โ–ถ๏ธ C(10% ์ˆ˜ํ–‰) ... (๋ฐ˜๋ณต) โ–ถ๏ธ A(100% ์ˆ˜ํ–‰)โ–ถ๏ธ B(100% ์ˆ˜ํ–‰) โ–ถ๏ธC(100% ์ˆ˜ํ–‰)๋ณ‘๋ ฌ์„ฑ์€ ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜์— ์ฝ”์–ด ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋‹ฌ๋ ค์„œ ๊ฐ๊ฐ์ด ์ž‘์—…์„ ๋™์‹œ์— ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ(์ž‘์—…๋ถ„๋‹ด)์ฒซ ๋ฒˆ์งธ ์ฝ”์–ด์—์„œ A์ž‘์—…, ๋‘ ๋ฒˆ์งธ ์ฝ”์–ด์—์„œ B์ž‘์—…, ์„ธ ๋ฒˆ์งธ ์ฝ”์–ด์—์„œ C์ž‘์—…์„ ๊ฐ™์€ ์‹œ์ ์— ์ž‘์—…ํ•จํ•œ ํ”„๋กœ์„ธ์Šค(ex. ํฌ๋กฌ) ๋‚ด..

[CS:APP] 11. ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(์„ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—)

6์ฃผ์ฐจ๋Š” CS:APP์˜ 11์žฅ์„ ์ฐธ๊ณ ํ•˜์—ฌ '์›น์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ'๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. 11์žฅ์„ ์ฝ๊ธฐ ์ „์— ๊ธฐ๋ณธ์ ์ธ ์„ ์ˆ˜์ง€์‹์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค. โ˜‘๏ธ TCP/IP, HTTP๋Š” ๋ฌด์—‡์ผ๊นŒ? ๊ณ„์ธต ์ „์†ก ๊ณ„์ธต ๋„คํŠธ์›Œํฌ ๊ณ„์ธต ์‘์šฉ ๊ณ„์ธต ์ฃผ ๊ธฐ๋Šฅ ๋ฐ์ดํ„ฐ ์ „์†ก์˜ ์‹ ๋ขฐ์„ฑ ๋ณด์žฅ ๋ฐ์ดํ„ฐ ํŒจํ‚ท์˜ ์ฃผ์†Œ ์ง€์ • ๋ฐ ๊ฒฝ๋กœ ์„ค์ • ์›น ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ๋ฐ์ดํ„ฐ ๋‹จ์œ„ ์„ธ๊ทธ๋จผํŠธ ํŒจํ‚ท ๋ฉ”์‹œ์ง€ ํ”„๋กœํ† ์ฝœ ์—ฐ๊ฒฐ ์ง€ํ–ฅ์  ๋น„์—ฐ๊ฒฐ ์ง€ํ–ฅ์  ์ƒํƒœ๊ฐ€ ์—†์Œ TCP(Transmission Control Protocol) ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•ํ•œ ์ „์†ก์„ ๋ณด์žฅํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์„ธ๊ทธ๋จผํŠธ๋กœ ๋‚˜๋ˆ„๊ณ , ์ˆœ์„œ๋Œ€๋กœ ์ „์†กํ•˜๋ฉฐ, ์†์‹ค๋œ ๋ฐ์ดํ„ฐ๋Š” ์žฌ์ „์†กํ•จ ๋ฐ์ดํ„ฐ ์ „์†ก ์ „์— ํ†ต์‹ ํ•˜๋Š” ๋‘ ์ง€์  ๊ฐ„์— ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•จ(์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก ๋ณด์žฅ) IP(Internet Protocol) ๊ฐ..

[CS:APP] 9.9 ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น(#์—ฐ์Šต๋ฌธ์ œ 9.6 #์—ฐ์Šต๋ฌธ์ œ9.7 #malloc)

9.9 ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น "๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ์˜์—ญ์„ ์ €์ˆ˜์ค€์˜ mmap๊ณผ munmap ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์„ฑํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, C ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ๋Œ€๊ฐœ ์ถ”๊ฐ€์ ์ธ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋Ÿฐํƒ€์ž„์— ํš๋“ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ, '๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ธฐ'๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ข€ ๋” ํŽธ๋ฆฌํ•˜๊ณ  ํ˜ธํ™˜์„ฑ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋ช…์‹œ์  ํ• ๋‹น๊ธฐ : Application์ด ๋ช…์‹œ์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ธ”๋ก์„ ๋ฐ˜ํ™˜ํ•ด ์ค„ ๊ฒƒ์„ ์š”๊ตฌ C ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” malloc ํŒจํ‚ค์ง€๋ผ๊ณ  ํ•˜๋Š” ๋ช…์‹œ์  ํ• ๋‹น๊ธฐ๋ฅผ ์ œ๊ณตํ•จ(malloc, free, C++์˜ new, delete) ๋ฌต์‹œ์  ํ• ๋‹น๊ธฐ : ์–ธ์ œ ํ• ๋‹น๋œ ๋ธ”๋ก์ด ๋” ์ด์ƒ ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ๋ธ”๋ก์„ ๋ฐ˜ํ™˜ํ•˜๋Š”์ง€๋ฅผ ํ• ๋‹น๊ธฐ๊ฐ€ ๊ฒ€์ถœํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์„ ์š”๊ตฌ ๋ฌต์‹œ์  ํ• ๋‹น๊ธฐ๋Š” garbage collector๋ผ๊ณ  ์•Œ๋ ค์ ธ ์žˆ์œผ๋ฉฐ, ์ž๋™์œผ..

[SW ์ •๊ธ€ 26์ผ์ฐจ] Red-Black tree (#์‚ฝ์ž…)

RB tree๋Š” ์ž๊ฐ€ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(Self-Balanced Binary Search Tree)์˜ ํ•œ ์ข…๋ฅ˜๋กœ, ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ๋“ฑ์˜ ๋™์ž‘์„ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(log n) ๋‚ด์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. RB tree๋Š” ๊ฐ ๋…ธ๋“œ๊ฐ€ ๋นจ๊ฐ• ๋˜๋Š” ๊ฒ€์ •์˜ ์ƒ‰๊น”์„ ๊ฐ€์ง€๋ฉฐ, root๋ถ€ํ„ฐ leaf(NIL)๊นŒ์ง€์˜ ๋ชจ๋“  ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ๋ธ”๋ž™ ๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜๋„๋ก ๊ทœ์น™์„ ์ ์šฉํ•˜์—ฌ ๊ท ํ˜•์„ ๋งž์ถ˜๋‹ค. RB tree๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…, ์‚ญ์ œ, ๊ฒ€์ƒ‰ ์ž‘์—… ์‹œ 'ํ•ญ์ƒ ๊ท ํ˜• ์ƒํƒœ๋ฅผ ์œ ์ง€'ํ•จ์œผ๋กœ์จ, ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ์ตœ์†Œํ•œ์œผ๋กœ ์œ ์ง€๋˜์–ด ํšจ์œจ์ ์ธ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋ณด์žฅํ•œ๋‹ค. Binary Search Tree๋ž€, ์ •๋ ฌ๋œ(ordered, or sorted) binary tree์ด๋ฉฐ ๋…ธ๋“œ๋Š” 2๊ฐœ์˜ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๊ฐ€์งˆ ..