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

์ „์ฒด ๊ธ€106

ํด๋ž˜์Šค์˜ ํฌ๊ธฐ์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ํด๋ž˜์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์€ ๊ฒฐ๊ตญ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์œผ๋กœ ํ™˜์›๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€์„œ CPU๊ฐ€ ์‹คํ–‰ํ•˜๊ณ  ์‹คํ–‰ ์ค‘์— ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ด์šฉ์„ ์ฝ๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๋‚ด์šฉ์„ ์“ฐ๋Š” ๊ฒƒ์ด ๊ฑฐ์˜ ์ „๋ถ€๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๋Š” ๋ง์ž…๋‹ˆ๋‹ค. class CTest { public: char m_Char; int m_Int; double m_Double; static int m_SInt; int MemberFunc() { return m_Int; } }; ์œ„ ํด๋ž˜์Šค CTest์˜ ์ •์  ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ m_SInt์™€ ๋ฉค๋ฒ„ ํ•จ์ˆ˜ MemberFunc๋Š” CTest t ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋Š” ๊ฐ.. 2023. 9. 14.
์ปค๋„(Kernel)๊ณผ ์ธํ„ฐํŽ˜์ด์Šค(Interface) ์ปค๋„(Kernel) ์šด์˜์ฒด์ œ์˜ ์ปค๋„์€ ์šด์˜์ฒด์ œ์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„์œผ๋กœ, ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•ต์‹ฌ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์ปค๋„์€ ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ๊ฒƒ์„ ์™„์ „ํžˆ ์ œ์–ดํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ ์ž์›๊ณผ ํ”„๋กœ์„ธ์Šค, ์ž…์ถœ๋ ฅ ๋“ฑ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 1. ์—ญํ• ๊ณผ ๊ธฐ๋Šฅ ์ž์› ๊ด€๋ฆฌ: ์ปค๋„์€ ์‹œ์Šคํ…œ ์ž์›์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž์›์—๋Š” CPU ์‹œ๊ฐ„, ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„, ์ž…์ถœ๋ ฅ ์žฅ์น˜ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ปค๋„์€ ์ด๋Ÿฌํ•œ ์ž์›์„ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ๊ณต์ •ํ•˜๊ฒŒ ํ• ๋‹นํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋“œ์›จ์–ด ์ถ”์ƒํ™”: ์ปค๋„์€ ํ•˜๋“œ์›จ์–ด์™€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ํ•˜๋“œ์›จ์–ด๋ฅผ ์ง์ ‘ ๋‹ค๋ฃจ์ง€ ์•Š๊ณ ๋„ ์ปค๋„์„ ํ†ตํ•ด ํ•˜๋“œ์›จ์–ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ: ์ปค๋„์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑ, ์ข…๋ฃŒ ๋ฐ ์Šค์ผ€์ค„๋งํ•˜๋ฉฐ, ๋‹ค์ค‘ ํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ์—์„œ ๊ฐ.. 2023. 9. 12.
ํฐ๋…ธ์ด๋งŒ ๊ตฌ์กฐ๋ž€? ํฐ๋…ธ์ด๋งŒ ๊ตฌ์กฐ(Von Neumann architecture) ํฐ๋…ธ์ด๋งŒ ๊ตฌ์กฐ(Von Neumann architecture)๋Š” ํ˜„๋Œ€ ์ปดํ“จํ„ฐ ์•„ํ‚คํ…์ฒ˜์˜ ์ค‘์š”ํ•œ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋กœ, ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์˜ ์„ค๊ณ„์™€ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด ์•„ํ‚คํ…์ฒ˜๋Š” ์ปดํ“จํ„ฐ ํ•˜๋“œ์›จ์–ด์™€ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ์ผ๋ฐ˜์ ์ธ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์ด ์ด๋Ÿฌํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํฐ๋…ธ์ด๋งŒ ๊ตฌ์กฐ์˜ ์ฃผ์š” ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 1. ์ค‘์•™ ์ฒ˜๋ฆฌ ์žฅ์น˜(Central Processing Unit, CPU): ํฐ๋…ธ์ด๋งŒ ๊ตฌ์กฐ์˜ ํ•ต์‹ฌ์€ CPU๋กœ, ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. 2. ๋ฉ”๋ชจ๋ฆฌ(Memory): ํฐ๋…ธ์ด๋งŒ ๊ตฌ์กฐ์—์„œ๋Š” ๋ฐ์ดํ„ฐ์™€ ํ”„๋กœ๊ทธ๋žจ ๋ช…๋ น์–ด๊ฐ€ ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ.. 2023. 9. 5.
[C++] 22. ์Šค๋ ˆ๋“œ ํ’€(Thread Pool), ์ƒ์‚ฐ์ž ์†Œ๋น„์ž ํŒจํ„ด(Producer-consumer) ์ง€๋‚œ ์‹œ๊ฐ„์—์„œ๋Š” ์Šค๋ ˆ๋“œ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ๊ณผ ์Šค๋ ˆ๋“œ์˜ ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค. [C++] 21. ์Šค๋ ˆ๋“œ ๊ฒฝ์Ÿ ์ƒํƒœ(Race condition), ๋ฎคํ…์Šค(mutex), ๋ฐ๋“œ๋ฝ, std::conditional_variable, std::async ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์Šค๋ ˆ๋“œ ํŒจํ‚ค์ง€์˜ ๋งˆ์ง€๋ง‰ ์‹œ๊ฐ„, ์Šค๋ ˆ๋“œ ํ’€์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด์‹œ์ฃ ! ์ƒ์‚ฐ์ž-์†Œ๋น„์ž ํŒจํ„ด(Producer-Consumer) Producer-Consumer ํŒจํ„ด์€ ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ค‘์š”ํ•œ ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ, ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์ž‘์—…์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์กฐ์ ˆํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์€ ๋‹ค์ˆ˜์˜ ์ƒ์‚ฐ์ž(Producer)์™€ ์†Œ๋น„์ž(Consumer) ๊ฐ„์˜ ํ˜‘๋ ฅ์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ƒ์‚ฐ์ž ์†Œ๋น„์ž ํŒจํ„ด์€ ๋ฐ์ดํ„ฐ์˜ ์ง„์ž…(income).. 2023. 9. 4.
ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก(PCB, Process Control Block) ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก(PCB)์€ ์šด์˜ ์ฒด์ œ์—์„œ ๋‹ค์ค‘ ์ž‘์—…์„ ๊ด€๋ฆฌํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด ํฌ์ŠคํŒ…์—์„œ๋Š” PCB์˜ ๊ฐœ๋…๊ณผ ์—ญํ• , ๊ทธ๋ฆฌ๊ณ  ์šด์˜ ์ฒด์ œ์™€์˜ ๊ด€๋ จ์„ฑ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก(PCB, Process Control Block) ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก(PCB)์€ ์šด์˜ ์ฒด์ œ์™€ ๋ฐ€์ ‘ํ•œ ์—ฐ๊ด€์ด ์žˆ๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์šด์˜ ์ฒด์ œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์‹œ์— ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์œ„ํ•ด PCB๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. PCB๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์ถ”์ ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. PCB๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ, ๊ฐ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. PCB์—๋Š” ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์™€ ๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ •๋ณด๋“ค์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด ์ •๋ณด.. 2023. 8. 30.
IPC(Inter-Process Communication, ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ) IPC(Inter-Process Communication) ์ด๋ž€? ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ (Inter-Process Communication, IPC)์€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ IPC ๊ธฐ๋ฒ•์ด ์กด์žฌํ•˜๋ฉฐ, ๊ฐ๊ฐ์˜ ๊ธฐ๋ฒ•์€ ๋‹ค๋ฅธ ์ƒํ™ฉ์ด๋‚˜ ์š”๊ตฌ์— ๋งž๊ฒŒ ์„ ํƒ๋˜์–ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์™€ ํ•จ๊ป˜ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์˜ ๋ฐ์ดํ„ฐ ์ „์†ก ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋Œ€ํ‘œ์ ์ธ IPC ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. 1. ํŒŒ์ดํ”„(Pipes): ํŒŒ์ดํ”„๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹  ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. 2. ๋ช…๋ช…๋œ ํŒŒ์ดํ”„(Named Pipes): ๋ช…๋ช…๋œ ํŒŒ์ดํ”„๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ๋‚ด์˜ ํŠน๋ณ„ํ•œ ํŒŒ์ผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, .. 2023. 8. 29.