Process ๋ž€?


Process ๋ž€ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ์˜๋ฏธํ•œ๋‹ค. Process ๋Š” OS ๋กœ ๋ถ€ํ„ฐ ์ž์›์„ ํ• ๋‹น๋ฐ›์•„ Code Data Stack Heap ์˜์—ญ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ Process ๋Š” ์ตœ์†Œ 1๊ฐœ์˜ Thread(Main Thread) ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

Process ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

  • Code - ์ปดํŒŒ์ผ๋œ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ
  • Data - ์ „์—ญ ๋ณ€์ˆ˜ ๋˜๋Š” static ๋ณ€์ˆ˜ ๋“ฑ์ด ์ €์žฅ๋˜๋Š” ์˜์—ญ
  • Heap - ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ
  • Stack - ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜ ๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜ ๋“ฑ์ด ์ €์žฅ๋˜๋Š” ์˜์—ญ

Process Control Block

  • Process ID - ํ”„๋กœ์„ธ์Šค ์‹๋ณ„์ž
  • Process State - ํ”„๋กœ์„ธ์Šค ์ƒํƒœ (์ƒ์„ฑ, ์ค€๋น„, ์‹คํ–‰, ๋Œ€๊ธฐ, ์ข…๋ฃŒ)
  • Program Counter - ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ
  • Register Information - CPU Register, General Register ๋“ฑ์„ ํฌํ•จ
  • CPU Scheduling Information - ์šฐ์„  ์ˆœ์œ„, ์ตœ์ข… ์‹คํ–‰์‹œ๊ฐ„, CPU ์ ์œ ์‹œ๊ฐ„ ๋“ฑ์„ ํฌํ•จ

Thread ๋ž€?


Thread ๋ž€ Process ์—์„œ ์‹คํ–‰ ์ œ์–ด๋งŒ ๋ถ„๋ฆฌํ•œ ํ๋ฆ„์˜ ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. Thread ๋Š” Process ๋‚ด์—์„œ Stack ๋งŒ ๋”ฐ๋กœ ํ• ๋‹น๋ฐ›๊ณ  Code Data Heap ์˜์—ญ์€ ๊ณต์œ ํ•œ๋‹ค.

ํŠน์ง•

  • Process ๋Š” Process Control Block ๋‚ด๋ถ€์˜ Register Block ์„ ํ†ตํ•ด Thread ๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  • Process ์˜ Code Data Heap ์˜์—ญ์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด๋‹ค ํšจ์œจ์ ์ธ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋น„์šฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Context-Switching ๋น„์šฉ์ด ์ €๋ ดํ•˜๋‹ค.
  • ์ž์› ๊ณต์œ ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋™๊ธฐํ™”์— ์‹ ๊ฒฝ์„ ๋งŽ์ด ์จ์•ผํ•œ๋‹ค.

Context-Switching ์ด๋ž€?


Context-Switching ์ด๋ž€ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ํ•œ ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์ž‘์—…์ด ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰ํ•˜์—ฌ ๋™์‹œ์— ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•œ๋‹ค.

Context-Switching ์€ Process ์˜ ์ƒํƒœ๋ฅผ PCB ์— ์ €์žฅํ•˜๊ณ  ์ƒˆ๋กœ์šด Process ์˜ ์ƒํƒœ๋ฅผ Register ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ด๋•Œ CPU ๋Š” ์•„๋ฌด์ผ๋„ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์žฆ์€ Context-Switching ์€ ์„ฑ๋Šฅ์ €ํ•˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

Thread ๊ฐ„์˜ Context-Switching ์€ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ PCB ์— ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ๋‚ด์šฉ๊ณผ ๋น„์›Œ์•ผํ•˜๋Š” ๋‚ด์šฉ์ด ์ ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Œ€์ ์œผ๋กœ ๋” ๋น ๋ฅธ Context-Switching ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค.

Multi Process


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

Multi Thread


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

Multi Process ๋Œ€์‹  Multi Thread ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 


  • ํ”„๋กœ๊ทธ๋žจ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ํ‚ค๋Š” ๊ฒƒ๋ณด๋‹ค ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ
  • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์„ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋กœ ๋‚˜๋ˆ ์„œ ํ•˜๋Š” ์ด์œ 
    • ์ž์›์˜ ํšจ์œจ์„ฑ ์ฆ๋Œ€
      • ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ž์›์„ ํ• ๋‹นํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ์ด ์ค„์–ด๋“ค์–ด ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ
      • ํ”„๋กœ์„ธ์Šค ๊ฐ„ Context Switching ์‹œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๊ธฐ ๋•Œ๋ฌธ
    • ์ฒ˜๋ฆฌ ๋น„์šฉ ๊ฐ์†Œ ๋ฐ ์‘๋‹ต ์‹œ๊ฐ„ ๋‹จ์ถ•
      • ์Šค๋ ˆ๋“œ๋Š” Stack ์˜์—ญ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Inter-Process Communication ๋ณด๋‹ค ํ†ต์‹  ๋น„์šฉ์ด ์ ์Œ
      • ์Šค๋ ˆ๋“œ ๊ฐ„ Context Switching ์‹œ Stack ์˜์—ญ๋งŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ ๊ฐ„์˜ ์ „ํ™˜ ์†๋„๊ฐ€ ๋น ๋ฆ„

References