ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

ํ”„๋กœ์„ธ์Šค

 ์ด์ „ ๊ธ€์—์„œ๋„ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ํ”„๋กœ์„ธ์Šค๋Š” ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ ๋Œ€๋˜์–ด ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ๋งํ•œ๋‹ค. ์šด์˜์ฒด์ œ์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค๋ฅผ job, task ๋“ฑ์œผ๋กœ ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค. 

ํ”„๋กœ์„ธ์Šค ๊ณ„์ธต ๊ตฌ์กฐ

Figure 1. Process Hierarchy

 ๋ฆฌ๋ˆ…์Šค๋Š” ์ €์žฅ์žฅ์น˜๋กœ ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ตœ์ดˆ ์ ์žฌ ์‹œ์—๋Š” PID (Process ID : ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ  ์‹๋ณ„ ๋ฒˆํ˜ธ)๊ฐ€ 0์ธ root process๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. root process๋Š” init process๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. root process๋Š” ์ตœ์ดˆ ์ƒ์„ฑ ํ›„์—, ํ”„๋กœ์„ธ์Šค๋“ค์„ ์Šค์ผ€์ค„๋ง ํ•  ๋•Œ swapper์˜ ์—ญํ™œ์„ ํ•œ๋‹ค. init process์˜ ๊ฒฝ์šฐ ์ƒ์„ฑ๋œ ํ›„, ์‚ฌ์šฉ์ž๊ฐ€ ์šด์˜์ฒด์ œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•œ๋‹ค.

 ์˜ˆ์ œ์˜ ํ”„๋กœ์„ธ์Šค ๊ณ„์ธต ๊ตฌ์กฐ๋Š” depth๊ฐ€ 3์ด์ง€๋งŒ depth 2์˜ ํ”„๋กœ์„ธ์Šค๋“ค๋„ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ™์€ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋กœ ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ํ”„๋กœ์„ธ์Šค๋“ค์„ ํ˜•์ œ(Sibiling) ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ํ•œ๋‹ค. ๊ฐ ํ”„๋กœ์„ธ์Šค๋“ค์€ PPID (Parent Process ID)๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ

 ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋Š” ์‹œ์Šคํ…œ ์ฝœ ์ค‘์— fork()๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ๋‹ค. ์ƒ์„ฑ๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” exec()์„ ์ƒ์„ฑํ•œ๋‹ค. ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ - ์‹คํ–‰๊ณผ ๊ฐ™์€ ๋™์ž‘์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด A, B, C๋ผ๋Š” ํ”„๋กœ์„ธ์Šค ์ˆœ์œผ๋กœ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ ์ƒ์„ฑ, ์‹คํ–‰ ๊ณผ์ •์„ ๋ถ„๋ฆฌํ•˜์ง€ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋‘ ํ•œ๋ฒˆ์— ์‹คํ–‰ํ•ด์•ผ ๋˜๋Š” ์ƒํ™ฉ์„ ๊ฒช๊ฒŒ ๋œ๋‹ค.

 

ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ

 ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋Š” ์‹œ์Šคํ…œ ์ฝœ ์ค‘์— exit()๋ฅผ ํ†ตํ•ด ์ง„ํ–‰๋œ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์‚ฌ์šฉํ•˜๋˜ ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ด€๋ จ๋œ ์ •๋ณด๋“ค์€ ์œ ์ง€ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ• ๋‹น๋œ ์ž์›๋“ค์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.

 

์“ฐ๋ ˆ๋“œ (Thread)

 ์‚ฌ์ „์  ์˜๋ฏธ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์—ฌ๋Ÿฌ ํ๋ฆ„์˜ ๋‹จ์œ„๋ผ๊ณ  ์ •์˜๋˜์ง€๋งŒ, ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์œ„๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ์ง๊ด€์ ์ผ ๊ฒƒ ๊ฐ™๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋Š” ์ตœ์†Œ 1๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ผ๊ณ  ํ•œ๋‹ค.

 

๋‹ค์ค‘ ์“ฐ๋ ˆ๋“œ (Multi Thread)

 ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๋“ค์ด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋‹ค์ค‘ ์“ฐ๋ ˆ๋“œ๋ผ๊ณ  ํ•œ๋‹ค. ์“ฐ๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค์™€ ๋‹ฌ๋ฆฌ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ Code, Data, Heap ์˜์—ญ์„ ๊ณต์œ ํ•˜๋ฉฐ ์“ฐ๋ ˆ๋“œ ๋‚ด์˜ Stack๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ๋‹ค. ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ๋„ ์žˆ์ง€๋งŒ, ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ/์“ฐ๊ธฐ์™€ ๊ฐ™์€ ์ž‘์—… ์ค‘ ์ˆœ์„œ ๋ณด์žฅ์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์†์‹ค์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด ๋™๊ธฐํ™” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

 

 

ํ”„๋กœ์„ธ์Šค VS ์“ฐ๋ ˆ๋“œ

Figure 2. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์™€ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ

 ๊ทธ๋ฆผ 2์™€ ๊ฐ™์ด ๋ฉ€ํ‹ฐ-ํ”„๋กœ์„ธ์Šค์ธ ์ƒํ™ฉ์—์„œ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ์ž‘์—… ์ „ํ™˜์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ํ”„๋กœ์„ธ์Šค์™€ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ PCB๋ฅผ ์ €์žฅ ํ›„ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์˜ PCB๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” Context Switching ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. ๋นˆ๋ฒˆํ•œ Context Switchig์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋˜๋ฉฐ, ํ”„๋กœ์„ธ์Šค์™€ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ์ž‘์—…์„ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ํ”„๋กœ๊ทธ๋žจ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค.

 ์ด์™€ ๋‹ฌ๋ฆฌ ๋ฉ€ํ‹ฐ-์“ฐ๋ ˆ๋“œ์ธ ๊ฒฝ์šฐ๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ์ž‘์—…์ „ํ™˜์ธ Context Switching์ด ๋ถˆํ•„์š”ํ•˜์—ฌ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ๋„ ์“ฐ๋ ˆ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ณต์œ ์— ๋Œ€ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ค„์–ด๋“ ๋‹ค.

 

์ฆ‰, ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ์˜ ์ฐจ์ด๋Š” ๋ฉ€ํ‹ฐ-์“ฐ๋ ˆ๋“œ์˜ ๊ฒฝ์šฐ kernel mode์—์„œ ์‹คํ–‰๋˜๋Š” Context Switchig์ด ํ•„์š” ์—†์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ์ •๋ณด ๊ตํ™˜๊ณผ ๋‹ฌ๋ฆฌ ์ƒ๋Œ€์ ์œผ๋กœ ์ ์€ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์™€ ๋‹ฌ๋ฆฌ ๋ฉ€ํ‹ฐ-ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ์ •๋ณด ๊ตํ™˜์„ ์œ„ํ•ด kernel mode๋กœ ์ „ํ™˜ํ•˜์—ฌ kernel์—์„œ Context Switchig ์ž‘์—…์„ ์ง„ํ–‰ ํ•œ๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€