Multi Process VS Multi Thread

์ตœ์ œ์›ยท2024๋…„ 7์›” 23์ผ

์šด์˜์ฒด์ œ

๋ชฉ๋ก ๋ณด๊ธฐ
2/2

Multi Process

๐Ÿ’ก Multi Process

Multi process๋ž€ 2๊ฐœ ์ด์ƒ์˜ process๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค ๋™์‹œ์—๋ผ๋Š” ๋ง์€ *๋™์‹œ์„ฑ(concurrency)์™€ *๋ณ‘๋ ฌ์„ค(parallelism) ๋‘๊ฐ€์ง€๋ฅผ ์˜๋ฏธํ•จ

๐Ÿ’ก ๋™์‹œ์„ฑ(concurrency)

CPU๊ฐ€ 1 core์ธ ๊ฒฝ์šฐ์—, ์—ฌ๋Ÿฌ process๋ฅผ ์งง์€ ์‹œ๊ฐ„๋™์•ˆ ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉด์„œ ์—ฐ์‚ฐ์„ ํ•˜๊ฒŒ ๋˜๋Š” ์‹œ๋ถ„ํ• (time sharing system)์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ

๐Ÿ’ก ๋ณ‘๋ ฌ์„ค(parallelism)

CPU core๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ผ ๋•Œ, ๊ฐ๊ฐ์˜ core๊ฐ€ ๊ฐ๊ฐ์˜ process๋ฅผ ์—ฐ์‚ผํ•จ์œผ๋กœ์จ process๊ฐ€ ๋ง ๊ทธ๋Œ€๋กœ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋ž€ 2๊ฐœ ์ด์ƒ์˜ process๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด๋Š”๊ฒƒ์„ ๋งํ•œ๋‹ค ์•ž์„œ ์ž‘์„ฑํ•œ memory์˜ ๊ฒฝ์šฐ์— ์—ฌ๋Ÿฌ process๋“ค์ด ๊ฐ์ž์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ–์€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ

๋ฐ˜๋ฉด์— ํ•˜๋‚˜์˜ CPU๋Š” ๋งค ์ˆœ๊ฐ„ ํ•˜๋‚˜์˜ process๋งŒ์„ ์—ฐ์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค ํ•˜์ง€๋งŒ CPU์˜ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๊ต‰์žฅํžˆ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์—

์—ฌ๋Ÿฌ process๋“ค์ด ๋™์‹œ์— ์‹คํ–‰๋˜๋Š”๊ฒƒ์œผ๋กœ ์ฐฉ๊ฐํ•˜๊ฒŒ ๋งŒ๋“œ๋Š”๋ฐ ์ด์ฒ˜๋Ÿผ CPU ์ž‘์—…์‹œ๊ฐ„์„ ์—ฌ๋Ÿฌ process๋“ค์ด ๋‚˜๋ˆ„์–ด ์“ฐ๋Š” ์‹œ์Šคํ…œ์„ ์‹œ๋ถ„ํ• (time sharing system)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ฉ”๋ชจ๋ฆฌ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ฌ๋ผ๊ฐˆ ๋•Œ ๊ฐ๊ฐ์˜ ๊ณต๊ฐ„์„ ์นจ๋ฒ”ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋‚˜๋‰˜์–ด ํ• ๋‹น๋ฐ›๊ฒŒ ๋œ๋‹ค

CPU, PC register

CPU๋Š” PC(Prgram counter) register๊ฐ€ ๊ฐ€๋ฅดํ‚ค๊ณ  ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ์ฝ์–ด๋“ค์—ฌ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•จ(์œ„ ๊ทธ๋ฆผ ์ฐธ๊ณ ) pc register๋Š” ๋‹ค์Œ ์‹คํ–‰ ๋  process์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์žˆ์Œ

๋งŒ์•ฝ process1, process2๊ฐ€ ์กด์žฌํ•˜๊ณ  process1์ด ํ˜„์žฌ ์ง„ํ–‰์ค‘์ด๋ผ๋ฉด process1์˜ code์˜์—ญ์„ pc register๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋‹ค
process2๊ฐ€ ์ง„ํ–‰๋˜๋ฉด process2์˜ code ์˜์—ญ์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋จ

Context

์‹œ๋ถ„ํ• (time sharing system) ์‹œ์Šคํ…œ์—์„œ๋Š” ํ•œ process๊ฐ€ ๋งค์šฐ ์งง์€ ์ฃผ๊ธฐ๋กœ CPU๋ฅผ ์ ์œ ํ•˜์—ฌ ์ผ์ •๋ถ€๋ถ„ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ณ ,
๋‹ค๋ฅธ process์— CPU ์ ๊ฑฐ๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” Context-switch๊ฐ€ ์ผ์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ „ ํ”„๋กœ์„ธ์Šค์˜ ์–ด๋А ๋ช…๋ น์–ด๊นŒ์ง€ ์ˆ˜ํ–‰์„ ์™„๋ฃŒํ•˜์˜€๋Š”์ง€์˜ ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ด ๋ฐ”๋กœ context์ด๋‹ค context์˜ ์ •๋ณด๋Š” PCB์— ์ €์žฅ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

PCB

PCB๋Š” ์šด์˜ ์ฒด์ œ๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ‘œํ˜„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค PCB์—๋Š” ์ค‘์š” ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ณดํ˜ธ๋œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค

์ผ๋ถ€ ์šด์˜ ์ฒด์ œ๋Š” PCB๋ฅผ ์ปค๋„ ์Šคํƒ(๊ทธ๋ฆผ ์™ผ์ชฝ OS)์— ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค ๊ทธ๋Ÿฌํ•œ ์ด์œ ๋Š” ๋ณดํ˜ธ๋ฅผ ๋ฐ›์œผ๋ฉด์„œ๋„ ๋น„๊ต์  ์ ‘๊ทผํ•˜๊ธฐ๊ฐ€ ํŽธ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค

์ถ”๊ฐ€๋กœ PCB๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค(๊ทธ๋ฆผ ์˜ค๋ฅธ์ชฝ)

  • Process State: new, running, wating, halted๋“ฑ์˜ state
  • Process Number: ํ•ด๋‹น process์˜ id
  • Process counter: ํ•ด๋‹น process๊ฐ€ ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ช…๋ น์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ด
  • Registers: ์ปดํ“จํ„ฐ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์ˆ˜์™€ ์œ ํ˜•์„ ๊ฐ€์ง„ register
  • Memory limits: base rigister, limit register, page, table ๋˜๋Š” segment table๋“ฑ

Context switch

Context switch๋ž€ ์œ„์—์„œ๋„ ์งง๊ฒŒ ์„ค๋ช…ํ–ˆ๋“ฏ์ด ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ CPU ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค
์ด ๋•Œ ์ด์ „์˜ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๋ฅผ *PCB์— ์ €์žฅํ•˜์—ฌ ๋ณด๊ด€ํ•˜๊ณ  ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์˜ PCB๋ฅผ ์ฝ์–ด ๋ณด๊ด€๋œ ์ƒํƒœ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง„๋‹ค

Multi Thread

๐Ÿ’ก Thread

Thread๋Š” ํ•œ process์˜ ๊ฐ€์žฅ ์ž‘์€ ๋™์ž‘์˜(function)์˜ ๋‹จ์œ„์ด๋‹ค

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์€ ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ "์ปจํ…์ŠคํŠธ" ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ(์ฆ‰, ์Šค๋ ˆ๋“œ)๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์‹คํ–‰ ๋ชจ๋ธ์ด๋‹ค
์Šค๋ ˆ๋“œ๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•˜์ง€๋งŒ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค
๋‹จ์ผ ํ”„๋กœ์„ธ์Šค์˜ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋Š” ๋‹จ์ผ CPU ์‹œ์Šคํ…œ์—์„œ CPU๋ฅผ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜(์ˆœ์ˆ˜ํ•˜๊ฒŒ) ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ ์‹œ์Šคํ…œ์—์„œ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค

Stack Memory & PC register

Thread๋Š” Process์˜ code, data, stack, heap ์˜์—ญ์„ ๊ณต์œ  ๋ฐ›๋Š”๋‹ค ๋ฐ˜๋ฉด์— stack์˜์—ญ์€ ๊ฐœ๋ณ„๋กœ ํ• ๋‹น๋˜๊ฒŒ ๋˜๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” ์œ„์— ์„ค๋ช…ํ–ˆ๋˜๊ฒƒ๊ณผ ๊ฐ™๋‹ค(์Šค๋ ˆ๋“œ๋Š” ํ•œ process์˜ ๊ฐ€์žฅ ์ž‘์€ ๋™์ž‘์˜ ๋‹จ์œ„์ด๋‹ค)

์Šค๋ ˆ๋“œ๊ฐ€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ธ์ž ์ „๋‹ฌ, return address์ €์žฅ, ํ•จ์ˆ˜ ๋‚ด ์ง€์—ญ๋ณ€์ˆ˜ ์ €์žฅ๋“ฑ์„ ์œ„ํ•œ ๋…๋ฆฝ์ ์ธ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ stack ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค

๋˜ํ•œ multi thread์—์„  ๊ฐ๊ฐ์˜ PC register๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” thread๋ผ๋ฆฌ๋„ *context swtich๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค

์ถœ์ฒ˜

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