[OS] Process์™€ Thread

soheeยท2022๋…„ 9์›” 25์ผ
0

๐Ÿ“Œ ์˜ค๋Š˜์€ process์™€ thread์˜ ๊ฐ ๊ฐœ๋…๊ณผ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์ ์–ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์ด์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์„ค๋ช…ํ•˜๊ธฐ์—” ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋‚ด์šฉ์ด๊ธฐ๋„ ํ•œ ๊ฒƒ ๊ฐ™์•„, ์ฐจ๋ก€๋Œ€๋กœ ์ •๋ฆฌํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.๐Ÿง

Process

process๋Š” ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์ž์›์„ ํ• ๋‹น ๋ฐ›์€ ์ž์›์˜ ๋‹จ์œ„๋กœ์จ, ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ process๋ผ๊ณ  ํ•œ๋‹ค. ํ•˜๋“œ ๋””์Šคํฌ์—์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ๋ฉ”๋ชจ๋ฆฌ์— ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋‚ด์šฉ์ด ์ ์žฌ๊ฐ€ ๋œ๋‹ค.

ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›๊ฒŒ ๋˜๋ฉด code, data, heap, stack์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ, ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ์‹œ ํ”„๋กœ์„ธ์Šค ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” PCB Block์ด ํ•จ๊ป˜ ๋งŒ๋“ค์–ด์ง„๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

  • code: ์‹คํ–‰ ๋ช…๋ น์„ ํฌํ•จํ•˜๋Š” ์ฝ”๋“œ๋“ค
  • Data: static(์ •์ ) ๋ณ€์ˆ˜, global(์ „์—ญ) ๋ณ€์ˆ˜๊ฐ€ ํ• ๋‹น๋˜์–ด ์žˆ๋Š” ์˜์—ญ
  • heap: ๋™์  ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
  • stack: ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ฐ˜ํ™˜ ๊ฐ’ ๋“ฑ ์ผ์‹œ์ ์ธ ๋ฐ์ดํ„ฐ

PCB(Process Control Block)

  • Pointer: ํ”„๋กœ์„ธ์Šค์˜ ์ค€๋น„์ƒํƒœ๋‚˜ ๋Œ€๊ธฐ์ƒํƒœ์˜ ํ๋ฅผ ๊ตฌํ˜„
  • Process State: ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ(์ƒ์„ฑ, ์ค€๋น„, ์‹คํ–‰, ์™„๋ฃŒ ๋“ฑ)
  • Process ID: ํ”„๋กœ์„ธ์Šค ๊ณ ์œ ๋ฒˆํ˜ธ
  • Program Counter: ๋‹ค์Œ์— ์‹คํ–‰๋  ๋ช…๋ น์–ด์˜ ์œ„์น˜

Process State

  • new: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋œ ์ƒํƒœ, ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™€์„œ ์‹คํ–‰ ์ค€๋น„๋ฅผ ๋งˆ์นœ ์ƒํƒœ๋กœ PCB๋„ ๊ฐ™์ด ์ƒ์„ฑ๋จ
  • ready: ์ƒ์„ฑ๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ธธ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
  • running: ์ค€๋น„์ค‘์ด๋˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์–ป์–ด ์ž‘์—…์„ ์ˆ˜ํ–‰
  • terminated: ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ, PCB๋„ ๊ฐ™์ด ๊ฐ™์ด ์†Œ๋ฉธ

Context Switching


๋™์‹œ์— ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ํ”„๋กœ์„ธ์Šค ๋‘๊ฐœ P1๊ณผ P2๊ฐ€ ์žˆ๋‹ค๊ณ  ํ• ๋•Œ, P1์— ์ธํ„ฐ๋ŸฝํŠธ ๋˜๋Š” ์‹œ์Šคํ…œ ์ฝœ์ด ๋ฐœ์ƒํ•˜๋ฉด PCB1์— ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  PCB2๊ฐ€ ๋กœ๋“œ๋˜๋ฉด์„œ ํ”„๋กœ์„ธ์Šค2๊ฐ€ ์‹คํ–‰๋˜๊ฒŒ ๋œ๋‹ค. ์œ„์™€ ๊ฐ™์ด 2๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉด์„œ CPU์— ์ ์žฌ๋˜๋Š” ๊ณผ์ •์„ context switching์ด๋ผ๊ณ  ํ•œ๋‹ค. context switching์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚˜๋ฉด ์„ฑ๋Šฅ์ €ํ•˜์˜ ์›์ธ์ด ๋œ๋‹ค.

Thread

ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์‹ค์ œ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฃผ์ฒด๋ฅผ ๋งํ•œ๋‹ค. ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” ํ•œ๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, 2๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ํ•œ๋‹ค.

process์™€ thread์˜ ์ฐจ์ด์ 


thread๋Š” process์˜ code, data, heap์˜์—ญ์„ ๊ณต์œ ๋ฐ›์œผ๋ฉฐ stack์˜์—ญ๋งŒ ๋ณ„๋„๋กœ ํ• ๋‹น์„ ๋ฐ›๋Š”๋‹ค. ์ฆ‰, ์ž์‹ ์Šค๋ ˆ๋“œ๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ์˜์—ญ์„ ๊ณต์œ ํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

Multi-Process


๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

  • ์žฅ์ : ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ๋„ ํ”„๋กœ๊ทธ๋žจ์€ ๋™์ž‘ํ•œ๋‹ค.
  • ๋‹จ์ : ์Šค์ผ€์ฅด๋ง์— ๋”ฐ๋ฅธ context switching์ด ๋งŽ์•„์ง€๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜์— ์šฐ๋ ค๊ฐ€ ์žˆ๋‹ค.

Multi-Thread


๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋Š” ํ•˜๋‚˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ์ž‘์—…์ด๋‹ค.

  • ์žฅ์ : ์‹œ์Šคํ…œ ์ž์›์„ ๊ณต์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์› ๊ณต์œ ๊ฐ€ ์‰ฌ์šฐ๋ฉฐ, ์ฒ˜๋ฆฌ ๋น„์šฉ์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ : ๋””๋ฒ„๊น…์ด ์–ด๋ ค์šฐ๋ฉฐ, ๋™๊ธฐํ™” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์‹œ ์ „์ฒด ํ”„๋กœ์„ธ์Šค์— ๋ฌธ์ œ ๋ฐœ์ƒ

๋งˆ์น˜๋ฉด์„œ, ๋‹ค์Œ ๊ธ€์€ ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™”์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

์ด๋ฏธ์ง€ ์ฐธ๊ณ  ์ถœ์ฒ˜
1. https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37
2. https://forum.huawei.com/enterprise/en/context-switch-everything-you-need-to-know/thread/685119-895

profile
๊ธฐ์–ตํ•˜๋ ค๊ณ  ์ ๋Š” ๊ฐœ๋ฐœ ๋กœ๊ทธ๐ŸŒž

0๊ฐœ์˜ ๋Œ“๊ธ€