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

์ „์ฒด๋ณด๊ธฐ114

ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก(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.
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.