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

์ „์ฒด ๊ธ€106

Context Switching(๋ฌธ๋งฅ ๊ตํ™˜) Context Switching(๋ฌธ๋งฅ ๊ตํ™˜) ์ด๋ž€? ๋ฌธ๋งฅ๊ตํ™˜(Context Switching)์€ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์—์„œ ์—ฌ๋Ÿฌ ์ž‘์—…(ํ˜น์€ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ์Šค๋ ˆ๋“œ)์ด ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ, ํ•œ ์ž‘์—…์—์„œ ๋‹ค๋ฅธ ์ž‘์—…์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์ค‘ ์ž‘์—…(multitasking) ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ค‘์š”ํ•œ ๊ฐœ๋…์œผ๋กœ, ์šด์˜์ฒด์ œ๊ฐ€ ๊ฐ ์ž‘์—…์— CPU ์‹œ๊ฐ„์„ ํ• ๋‹นํ•˜๊ณ  ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ์‹คํ–‰๋˜๋„๋ก ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ๋งฅ๊ตํ™˜์ด ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 1. ์ธํ„ฐ๋ŸฝํŠธ(Interrupts): ํ•˜๋“œ์›จ์–ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์„ ๋ฉˆ์ถ”๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ์‹คํ–‰ํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ž…์ถœ๋ ฅ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ ํ•˜๋“œ์›จ์–ด๊ฐ€ CPU์— ์•Œ๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. 2. ์Šค์ผ€์ค„๋ง: ์šด์˜.. 2023. 8. 28.
OS๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์šด์˜์ฒด์ œ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์—์„œ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์‹คํ–‰๋˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰๋˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ ๊ฒฉ๋ฆฌ๋˜๋„๋ก ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ๋‹จ๊ณ„์™€ ์—ญํ• ์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 1. ์ฝ”๋“œ(Code) ์˜์—ญ: - ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. - ํ”„๋กœ์„ธ์Šค์˜ ๋ช…๋ น์–ด๋“ค์ด ์ €์žฅ๋˜์–ด CPU์— ์˜ํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. - ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. 2. ๋ฐ์ดํ„ฐ(Data) ์˜์—ญ: - ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์ (static) ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. - ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ .. 2023. 8. 27.
๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ(Virtual Memory)๋ž€ ๋ฌด์—‡์ผ๊นŒ? ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ(Virtual Memory) ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์—์„œ ์‹ค์ œ ๋ฌผ๋ฆฌ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ(RAM)๋ณด๋‹ค ๋” ํฐ ์šฉ๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด ์ผ๋ถ€ ๋˜๋Š” ์ „์ฒด๊ฐ€ ์‹ค์ œ RAM์— ๋กœ๋“œ๋˜์ง€๋งŒ, ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ ๋ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ ๋ฒˆ์— ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ถ€์กฑ์„ ๋ณด์™„ํ•˜์—ฌ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ž‘์€ ๋‹จ์œ„์ธ ํŽ˜์ด์ง€๋กœ ๋ถ„ํ• ํ•˜๊ณ , ์ด ํŽ˜์ด์ง€๋“ค์„ ๋ฌผ๋ฆฌ์  RAM๊ณผ ์ €์žฅ์žฅ์น˜(ํ•˜๋“œ ๋””์Šคํฌ ๋“ฑ)์˜ ์ผ๋ถ€์ธ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€ ํŽ˜์ด์ง€๋งŒ ์‹ค์ œ RAM์— ์ ์žฌ๋˜๊ณ , ํ•„์š”ํ•œ ํŽ˜์ด์ง€๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ต์ฒดํ•˜์—ฌ ๋ฌผ.. 2023. 8. 23.
[C++] 21. ์Šค๋ ˆ๋“œ ๊ฒฝ์Ÿ ์ƒํƒœ(Race condition), ๋ฎคํ…์Šค(mutex), ๋ฐ๋“œ๋ฝ, std::conditional_variable, std::async ์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์™€ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค, std::thread์— ๋Œ€ํ•ด ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค. [C++] 20. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Multi-Threads) ์˜ค๋Š˜์€ ์ด์–ด์„œ ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ์˜ ์ถฉ๋Œ ๋ฌธ์ œ์™€ lock ๋ฌธ์ œ๋ฅผ ์‚ดํŽด๋ณด๊ณ , ์Šค๋ ˆ๋“œ๋“ค(workers)์ด wait์ƒํƒœ์—์„œ ๋Œ€๊ธฐํ•˜๋‹ค๊ฐ€ ์ž‘์—…์ด ์žˆ์„ ๋•Œ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค๋งˆํŠธํ•œ ์šด์˜๋ฐฉ์‹์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์œ ์ž์›(Shared Resources)๊ณผ ์ž„๊ณ„์˜์—ญ(Critical Section) ์Šค๋ ˆ๋“œ(Thread)๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์ž‘์€ ์‹คํ–‰ ๋‹จ์œ„๋กœ, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์Šค๋ ˆ๋“œ ๊ฐ„์—๋Š” ๊ณต์œ ์ž์›(Shared Resource)๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณต์œ ์ž์›์„ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ž„๊ณ„์˜.. 2023. 8. 22.
[C++] 20. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Multi-Threads) ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ(Multi-Threads) ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‹คํ–‰ ํ๋ฆ„์ธ ์Šค๋ ˆ๋“œ(thread)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ‘๋ ฌ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ "๋ถ€๋ถ„ ์ž‘์—…"์„ ๋™์‹œ์— ์‹คํ–‰ํ•˜์—ฌ ์ „์ฒด ์ž‘์—…์„ ๋” ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฃผ์š” ๊ฐœ๋…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: 1. ์Šค๋ ˆ๋“œ (Thread): ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ, ๋™์‹œ์— ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2. ๋ณ‘๋ ฌ์„ฑ (Concurrency): ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜์ง€๋งŒ, ์‹ค์ œ๋กœ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ํ”„๋กœ์„ธ์„œ์˜ ๋ฌผ๋ฆฌ์  ํ•œ๊ณ„ ๋•Œ๋ฌธ์— ์ œํ•œ๋  ์ˆ˜ .. 2023. 8. 18.
์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ(Linear Data Structure) ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ(Linear Data Structure) ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ ์š”์†Œ๋“ค์ด ์ผ๋ ฌ๋กœ ๋ฐฐ์น˜๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋ฐ์ดํ„ฐ ์š”์†Œ๋Š” ์ˆœ์„œ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๊ฐ๊ฐ์˜ ์š”์†Œ๋Š” ๋ฐ”๋กœ ์ด์ „ ์š”์†Œ์™€ ๋ฐ”๋กœ ๋‹ค์Œ ์š”์†Œ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๊ณ  ์กฐ์ž‘ํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜๋ฉฐ, ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ๋กœ์„œ ๋‹ค์–‘ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์‘์šฉ ๋ถ„์•ผ์—์„œ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์˜ˆ์‹œ์™€ ํŠน์ง•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค 1. ๋ฐฐ์—ด (Array) - ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ์š”์†Œ๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. - ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ณ , ํŠน์ • ์œ„์น˜์— ์š”์†Œ๋ฅผ ์‚ฝ์ž…, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰๊ณผ ์ ‘๊ทผ์ด ๋น ๋ฅด์ง€๋งŒ, ์ค‘๊ฐ„์— ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๊ฒฝ์šฐ .. 2023. 8. 11.