๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[ํ”„๋กœ์„ธ์Šค์™€ ์‹œ๊ทธ๋„] ํ”„๋กœ์„ธ์Šค (Process) ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป IoT (Embedded)/Raspberry Pi

[ํ”„๋กœ์„ธ์Šค์™€ ์‹œ๊ทธ๋„] ํ”„๋กœ์„ธ์Šค (Process)

์ง•์ง•์•ŒํŒŒ์นด 2024. 1. 8. 20:30
728x90
๋ฐ˜์‘ํ˜•

<์„œ์˜์ง„ ๋‹˜์˜ ์‚ฌ๋ฌผ์ธํ„ฐ๋„ท์„ ์œ„ํ•œ ๋ฆฌ๋ˆ…์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ with ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด ์„œ์ ์„ ์ฐธ๊ณ ํ•ด์„œ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

 

โญ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์—์„œ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ

fork() ํ•จ์ˆ˜๋กœ ์ƒ์„ฑํ•œ๋‹ค

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„์„œ ๋™์ผํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋„คํŠธ์›Œํฌ ์„œ๋ฒ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณต์ œํ•˜์—ฌ ๋ถ€๋ชจ์™€ ์ž์‹์ด ๋™์‹œ์— ๊ฐ๊ฐ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค

 

์…ธ์—์„œ์™€ ๊ฐ™์ด ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” fork() ํ•จ์ˆ˜๋กœ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„์— exec() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•œ๋‹ค

SUS ์—์„œ๋Š” fork()/exec() ์„ ํ•จ๊ป˜ ์ˆ˜ํ–‰ํ•˜๋Š” posix_spawn() ํ•จ์ˆ˜ ์ œ๊ณตํ•จ

 

โญ IPC (Inter-Process Communication)

ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์—๋Š” ์„œ๋กœ ๊ณต์œ ํ•˜๋Š” ๊ณต๊ฐ„์ด ์—†์Œ

์„œ๋กœ ๊ฐ„์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณ„๋„์˜ IPC ๊ฐ€ ํ•„์š”ํ•จ

IPC ๋กœ ํŒŒ์ดํ”„๋‚˜, FIFO, ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์˜ ๋ฐฉ๋ฒ•์ด ์‚ฌ์šฉ๋จ

 

ํŒŒ์ดํ”„ ๋Š” ๋ถ€๋ชจ์™€ ์ž์‹ ๊ด€๊ณ„์—์„œ๋งŒ ํ†ต์‹ 

FIFO ๋Š” ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๊ฐ€ ์•„๋‹Œ ํ”„๋กœ์„ธ์Šค๋“ค๋„ ํ†ต์‹  ๊ฐ€๋Šฅ

 

โญ ์Šค๋ ˆ๋“œ

์ผ์˜ ์ฒ˜๋ฆฌ์˜ ๋‹จ์œ„

ํ”„๋กœ์„ธ์Šค์— ๋น„ํ•ด์„œ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑ๋จ

์„œ๋กœ ๊ณต์œ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ์„œ๋กœ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•จ

But, ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋™๊ธฐํ™” ๋ฌธ์ œ ๋ฐœ์ƒ

์„ธ๋งˆํฌ์–ด๋‚˜ ๋ฎคํ…์Šค ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐํ•จ

 

โญ ํ”„๋กœ์„ธ์Šค

์ปดํ“จํ„ฐ ๋‚ด์—์„œ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ ( == ํƒœ์Šคํฌ task )

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค : ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ

๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น : ์‹œ๋ถ„ํ•  ์‹œ์Šคํ…œ ๊ฒฝ์šฐ

 

์ƒ์„ฑ (New), ์ค€๋น„ (Ready), ๋Œ€๊ธฐ (Waiting), ์‹คํ–‰ (Running), ์™„๋ฃŒ (Terminated)

๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ์‹œ๋ถ„ํ•  ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค์„ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ ์ œ๊ณต

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ผ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น์„ ์ง€์›ํ•จ

 

โ˜‘๏ธ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ

CPU ์˜ ์ฝ”์–ด๋Š” ํ•œ์ˆœ๊ฐ„์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ

๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋Œ€๊ธฐํ•ด์•ผํ•จ

ํ”„๋กœ์„ธ์Šค๋“ค์€ ๊ฐ๊ฐ์˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ, ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” PCB (Process Control Block)์— ํ˜„์žฌ์˜ ์‹คํ–‰๊ณผ ๊ด€๋ จ๋œ ์ƒํƒœ๊ฐ€ ์ €์žฅ๋จ

 

CPU ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ „์ฒด์˜ CPU ์‹œ๊ฐ„์„ ๋ถ„ํ• ํ•ด์„œ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹นํ•œ๋‹ค

ํ”„๋กœ์„ธ์Šค๋“ค์€ ์—ฌ๋Ÿฌ ์ƒํƒœ๋“ค ์‚ฌ์ด๋ฅผ ์ „ํ™˜ํ•˜๋ฉด์„œ ์ผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค

 

์œ ์ € ๋ชจ๋“œ ์ˆ˜ํ–‰ ์ค‘์ธ ์ƒํƒœ

์ปค๋„ ๋ชจ๋“œ ์ˆ˜ํ–‰ ์ค‘์ธ ์ƒํƒœ

์ˆ˜ํ–‰ ๋Œ€๊ธฐ ์ƒํƒœ 

CPU time ์„ ํ• ๋‹น๋ฐ›์€ ์ƒํƒœ๋กœ ์œ ์ € ๋ชจ๋“œ์—์„œ ์‹คํ–‰๋˜๋‹ค๊ฐ€, ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ์˜ํ•ด ์ปค๋„ ๋ชจ๋“œ๋กœ ๋ณ€๊ฒฝ

 

์‹œ๋ถ„ํ•  ์‹œ์Šคํ…œ์—์„œ๋Š” CPU ์—์„œ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋Œ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰๋œ๋‹ค

CPU์˜ ์ฝ”์–ด๋Š” ๋งค์ˆœ๊ฐ„ ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ ์‹คํ–‰ํ•˜์ง€๋งŒ, ์‹คํ–‰ํ•˜๋Š” ์ฃผ๊ธฐ๋ฅผ ์•„์ฃผ ์งง๊ฒŒ ๋‚˜๋ˆ„๋ฉด ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์ง„๋‹ค

ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰์„ ์œ„ํ•ด ๋‚˜๋‰œ ์งง์€ ์‹œ๊ฐ„์„ ํ€€ํ„ด ํƒ€์ž„ (Quantum Time)

ํ€€ํ…€ ํƒ€์ž„ ๋‹จ์œ„๋กœ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋Œ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰๋˜๋Š”๋ฐ, ์ด ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์€ ํ”„๋กœ์„ธ์Šค ํ์— ์˜ํ•ด ๊ด€๋ฆฌ๋œ๋‹ค

 

์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋Š” ์‚ฌ์šฉ์ž๊ฐ€ Ctrl+C or Ctrl+Z ๋ˆ„๋ฅด๋ฉด ๋ฐœ์ƒํ•˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ์— ์˜ํ•ด ์ค‘์ง€๋˜๊ฑฐ๋‚˜ ๋ฉˆ์ถค

์ด ๋•Œ ์šด์˜์ฒด์ œ์—์„œ ์‹œ๊ทธ๋„์ด ๋ฐœ์ƒํ•ด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์— ์ „๋‹ฌ๋œ๋‹ค

 

โ˜‘๏ธํ”„๋กœ์„ธ์Šค์˜ ์ž๋ฃŒ ๊ตฌ์กฐ

์œ ๋‹‰์Šค์—์„œ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์‹คํ–‰๋˜๋ฉด, ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค

์‚ฌ์šฉ์ž ๊ตฌ์กฐ -> ํ”„๋กœ์„ธ์Šค ํ…Œ์ด๋ธ” (์—”ํŠธ๋ฆฌ) -> ํ”„๋กœ์„ธ์Šค ์˜์—ญ ํ…Œ์ด๋ธ” (ํ…์ŠคํŠธ, ๋ฐ์ดํ„ฐ, ์Šคํƒ) -> ๋ฉ”๋ชจ๋ฆฌ (์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ)

 

์‚ฌ์šฉ์ž ๊ตฌ์กฐ: ํ”„๋กœ์„ธ์Šค ์ˆ˜ํ–‰ ์ค‘์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•จ

ํ”„๋กœ์„ธ์Šค ํ…Œ์ด๋ธ”: ํ”„๋กœ์„ธ์Šค ๊ณ ๋‚˜๋ฆฌ์— ํ•„์š”ํ•œ ์ •๋ณด๋“ค ์ €์žฅํ•จ

ํ…์ŠคํŠธ, ๋ฐ์ดํ„ฐ, ์Šคํƒ์˜ ์„ธ๊ทธ๋จผํŠธ ํฌ๊ธฐ๋‚˜ ์‹œ๊ทธ๋„ ํ•จ์ˆ˜์˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์‹œ๊ทธ๋„ ๋ฒˆํ˜ธ, ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ •๋ณด ๋“ฑ ๋‹ค์–‘ํ•œ ์ •๋ณด ์ €์žฅ

๋ฆฌ๋ˆ…์Šค์—์„œ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋Š” task_struct ๊ตฌ์กฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋œ๋‹ค

ํ”„๋กœ์„ธ์Šค์— ๊ด€ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ์„œ์ˆ ์ž, ๋งŽ์€ ๊ตฌ์กฐ์ฒด์™€ ๋ฉค๋ฒ„๋กœ ์ด๋ค„์ง

ps ๋ช…๋ น์–ด๋กœ ์ •๋ณด ๊ฐ€์ ธ์˜ด

proc ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ํ˜„์žฌ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค ์ •๋ณด ํ™•์ธ

์‹คํ–‰์ค‘์ธ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋Š” /proc ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์˜ PID ์ˆซ์ž ์ด๋ฆ„์˜ ์„œ๋ธŒ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์กด์žฌํ•จ

ls /proc/

๊ด€๋ จ ์ •๋ณด๋Š” status ํŒŒ์ผ์„ ํ†ตํ•ด ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Œ

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•
Comments