Process & Thread

Younยท2021๋…„ 5์›” 31์ผ
2

OS

๋ชฉ๋ก ๋ณด๊ธฐ
1/1
post-thumbnail

๐Ÿ’ก Program vs Process vs Thread

  • Program - ์–ด๋–ค ์ž‘์—…์„ ์œ„ํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ
  • Process - ์—ฐ์†์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ, ๊ณ ์œ  ๊ณต๊ฐ„๊ณผ ์ž์›์„ ํ• ๋‹น๋ฐ›์•„ ์‚ฌ์šฉ
  • Thread - ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ํ๋ฆ„ ๋‹จ์œ„, ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์™€ ๊ณต๊ฐ„, ์ž์›์„ ๊ณต์œ ํ•˜๋ฉฐ ์‚ฌ์šฉ

ํ”„๋กœ์„ธ์Šค(Process)

  • ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ, ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ธ์Šคํ„ด์Šค (๋…๋ฆฝ์ ์ธ ๊ฐœ์ฒด)

  • ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜์–ด CPU์˜ ํ• ๋‹น์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ.

  • ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ๋ณ„๋„์˜ ๋…๋ฆฝ์ ์ธ ์ฃผ์†Œ๊ณต๊ฐ„, ํŒŒ์ผ, *๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์„ ํ• ๋‹น๋ฐ›์Œ
    -> ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์‹œ์Šคํ…œ ์ž์›์„ ํ• ๋‹น๋ฐ›๋Š” ์ž‘์—…์˜ ๋‹จ์œ„

    *๋ฉ”๋ชจ๋ฆฌ - Code, Data, Stack, Heap์˜ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋Š” ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

    • Code : ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ฝ”๋“œ ๋˜๋Š” ํ•จ์ˆ˜๋“ค์ด ์ €์žฅ๋˜๋Š” ์˜์—ญ -> ์ฝ”๋“œ ์ž์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ(ํ”„๋กœ๊ทธ๋žจ ๋ช…๋ น)

    • Data : ์ „์—ญ๋ณ€์ˆ˜, ์ •์ ๋ณ€์ˆ˜, ๋ฐฐ์—ด ๋“ฑ์˜ ์ดˆ๊ธฐํ™”๋œ ๋ฐ์ดํ„ฐ๋“ค์ด ์ €์žฅ๋˜๋Š” ์˜์—ญ, ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ์ƒ์„ฑ๋˜๊ณ  ์ข…๋ฃŒ๋˜๋ฉด ์‹œ์Šคํ…œ์— ๋ฐ˜ํ™˜ ๋˜์–ด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋จ

    • Stack : ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ณต๊ท€ ์ฃผ์†Œ์™€ ๋กœ์ปฌ ๋ณ€์ˆ˜์™€ ์ž๋ฃŒ๋“ค์ด ์ €์žฅ๋˜๋Š” ์˜์—ญ, ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ƒ์„ฑ๋˜๋ฉฐ, ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋ฉด ๋ฐ˜ํ™˜ ๋˜์–ด ์ž ๊น ์‚ฌ์šฉ๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์†Œ๋ฉธ์‹œํ‚ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋จ.
      ์Šคํƒ ํฌ๊ธฐ๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ํ• ๋‹น๋˜๋ฉฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋  ๋•Œ ์‚ฌ์ด์ฆˆ๊ฐ€ ๊ณ ์ •๋จ -> ๋Ÿฐํƒ€์ž„์‹œ stack ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ X

    • Heap : ํ•„์š”์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋™์ ์œผ๋กœ ํ• ๋‹น ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ(new(), malloc()) -> ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋งˆ์Œ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ใ…‡์—ญ

      ** ์ฐธ๊ณ 
      Stack๊ณผ Heap ์€ ๊ฐ™์€ ๊ณต๊ฐ„์„ ๊ณต์œ  ( heap - ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ฎ์€ ์ฃผ์†Œ๋ถ€ํ„ฐ ํ• ๋‹น, stack - ๋†’์€ ์ฃผ์†Œ๋ถ€ํ„ฐ ํ• ๋‹น )
      -> stack overflow, heap overflow : ๊ฐ ์˜์—ญ์ด ์ƒ๋Œ€ ๊ณต๊ฐ„์„ ์นจ๋ฒ”ํ•˜๋Š” ๊ฒƒ

  • ํ”„๋กœ์„ธ์Šค๋‹น ์ตœ์†Œ 1๊ฐœ์˜ ์Šค๋ ˆ๋“œ (๋ฉ”์ธ ์Šค๋ ˆ๋“œ)๋ฅผ ๊ฐ€์ง

  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋ณ„๋„์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ์‹คํ–‰, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ, ๋ณ€์ˆ˜๋‚˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ง์ ‘ ์ ‘๊ทผ X
    ์ ‘๊ทผ ๋ฐฉ๋ฒ• : ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ (IPC) ์‚ฌ์šฉ ํ•„์š”

๐Ÿ’ก PCB (Process Control Block)

์šด์˜์ฒด์ œ๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค์˜ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ์ƒ์„ฑํ•œ ํŠน์ • ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ์šด์˜์ฒด์ œ์˜ ์ž๋ฃŒ๊ตฌ์กฐ

  • ํ”„๋กœ์„ธ์Šค๋Š” CPU๋ฅผ ํ• ๋‹น๋ฐ›์•„ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋‹ค๊ฐ€๋„ ํ”„๋กœ์„ธ์Šค ์ „ํ™˜์ด ๋ฐœ์ƒํ•˜๋ฉด ์ง„ํ–‰ํ•˜๋˜ ์ž‘์—…์„ ์ €์žฅํ•˜๊ณ  CPU๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ
  • ๋ฐ˜ํ™˜์‹œ ์ž‘์—…์˜ ์ง„ํ–‰ ์ƒํ™ฉ์„ ๋ชจ๋‘ PCB ์— ์ €์žฅ
  • ์ดํ›„ CPU๋ฅผ ๋‹ค์‹œ ํ• ๋‹น๋ฐ›๊ฒŒ ๋˜๋ฉด PCB์— ์ €์žฅ๋˜์–ด์žˆ๋˜ ๋‚ด์šฉ์„ ๋ถˆ๋Ÿฌ์™€ ์ด์ „์— ์ข…๋ฃŒ๋๋˜ ์‹œ์ ๋ถ€ํƒ€ ์ž‘์—… ์žฌ์ˆ˜ํ–‰
  • PCB ์ €์žฅ ์ •๋ณด
    • ํ”„๋กœ์„ธ์Šค ์‹๋ณ„์ž(Process ID, PID) : ํ”„๋กœ์„ธ์Šค ์‹๋ณ„๋ฒˆํ˜ธ
    • ํ”„๋กœ์„ธ์Šค ์ƒํƒœ : new, ready, running, waiting, terminated ๋“ฑ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅ
    • ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ : ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ
    • CPU ๋ ˆ์ง€์Šคํ„ฐ
    • CPU ์Šค์ผ€์ฅด๋ง ์ •๋ณด : ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„, ์Šค์ผ€์ค„ ํ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ๋“ฑ
    • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ •๋ณด : ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋˜๋Š” ์„ธ๊ทธ๋จผํŠธ ํ…Œ์ด๋ธ” ๋“ฑ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ํฌํ•จ
    • ์ž…์ถœ๋ ฅ ์ƒํƒœ ์ •๋ณด : ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ์ž…์ถœ๋ ฅ ์žฅ์น˜๋“ค๊ณผ ์—ด๋ฆฐ ํŒŒ์ผ ๋ชฉ๋ก
    • ์–ด์นด์šดํŒ… ์ •๋ณด : ์‚ฌ์šฉ๋œ CPU ์‹œ๊ฐ„, ์‹œ๊ฐ„์ œํ•œ, ๊ณ„์ •๋ฒˆํ˜ธ ๋“ฑ

๐Ÿ’ก ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹  (IPC, Inter-Process Communication)

ํ”„๋กœ์„ธ์Šค๋ผ๋ฆฌ ์ž์›์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋กœ ์ฃผ๊ณ ๋ฐ›๋Š” ํ–‰์œ„ ๋˜๋Š” ๊ทธ์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์ด๋‚˜ ๊ฒฝ๋กœ
์ž์„ธํ•œ ๋‚ด์šฉ ์ฐธ๊ณ 

IPC๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

  • ์ •๋ณด ๊ณต์œ  (Information sharing) : ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ผํ•œ ์ •๋ณด๋ฅผ ํ•„์š”๋กœ ํ•จ
  • ๊ณ„์‚ฐ ๊ฐ€์†ํ™” (Computation speedup) : ํŠน์ • ์ž‘์—…(task)๋ฅผ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด, ํ•ด๋‹น ์ž‘์—…์„ ๋ถ€๋ถ„ ์ž‘์—…(sub-task) ๋กœ ๋‚˜๋ˆ ์„œ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰
    - ๋ชจ๋“ˆ์„ฑ (Modularity) : ํŠน์ •ํ•œ ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ์„ ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค(์Šค๋ ˆ๋“œ)๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ชจ๋“ˆ์‹ ํ˜•ํƒœ๋กœ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ
  • ํŽธ์˜์„ฑ (Convenience) : ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๋“ค์ด ๋™์‹œ์— ๋งŽ์€ ์ž‘์—… ์ˆ˜ํ–‰

IPC ์ข…๋ฅ˜

  • ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ (Message Passing)
    • ์ปค๋„์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ, ์ž์›์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ฃผ๊ณ ๋ฐ›์Œ
    • ๋ณ„๋„์˜ ๊ตฌ์ถ•์—†์ด ์ปค๋„์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ต์  ๊ตฌํ˜„ ์‰ฌ์›€
    • ์ปค๋„์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ ์ฝœ์ด ํ•„์š” -> ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ
    • ํŒŒ์ดํ”„, ์‹œ๊ทธ๋„, ๋ฉ”์‹œ์ง€ํ, ์†Œ์ผ“ ๋“ฑ
  • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ (shared Memory)
    • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์ด ์˜์—ญ์„ ํ†ตํ•ด ์ž์›์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ฃผ๊ณ ๋ฐ›์Œ
    • ์ปค๋„ ์˜์กด์„ฑ์ด ๋‚ฎ์Œ -> ์†๋„ ๋น ๋ฆ„, ์œ ์ € ๋ ˆ๋ฒจ์—์„œ ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์œ ๋กœ์šด ํ†ต์‹ 
    • ์ž์›๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋™๊ธฐํ™” ์ด์Šˆ

  • ์ต๋ช… PIPE - ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ ๋ฐ˜์ด์ค‘ ํ†ต์‹ 
  • Named PIPE(FIFO) - ์ต๋ช… ํŒŒ์ดํ”„์˜ ํ™•์žฅ๋œ ์ƒํƒœ๋กœ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ๋ฌด๊ด€ํ•œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋„ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ
  • ๋ฉ”๋ชจ๋ฆฌ ๋งต - ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ . ์—ด๋ฆฐ ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋งตํ•‘์‹œ์ผœ์„œ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ์‹(์ฆ‰ ๊ณต์œ  ๋งค๊ฐœ์ฒด๊ฐ€ ํŒŒ์ผ+๋ฉ”๋ชจ๋ฆฌ)
  • ์†Œ์ผ“ - ๋„คํŠธ์›Œํฌ ์†Œ์ผ“ ํ†ต์‹ ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ 
  • IPC ํ†ต์‹ ์—์„œ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์„ธ๋งˆํฌ์–ด์™€ ๋ฎคํ…์Šค ๋ฅผ ์‚ฌ์šฉ
    (๊ณต์œ ๋œ ์ž์›์— ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ ‘๊ทผ์‹œํ‚ฌ ๋•Œ)

์Šค๋ ˆ๋“œ(Thread)

  • ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ํ๋ฆ„์˜ ๋‹จ์œ„, ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•˜๋Š” ์‹คํ–‰์˜ ๋‹จ์œ„

  • ํ”„๋กœ์„ธ์Šค์˜ ํŠน์ •ํ•œ ์ˆ˜ํ–‰ ๊ฒฝ๋กœ

  • ์Šค๋ ˆ๋“œ ID, ํ”„๋กœ๊ทธ๋žจ์นด์šดํ„ฐ, ๋ ˆ์ง€์Šคํ„ฐ ์ง‘ํ•ฉ, ์Šคํƒ์œผ๋กœ ๊ตฌ์„ฑ

  • Stack - ๋”ฐ๋กœ ํ• ๋‹น, Code, Data, Heap ์˜์—ญ์€ ๊ณต์œ 

    • ์Šค๋ ˆ๋“œ๋Š” ๋ณ„๋„์˜ ๋ ˆ์ง€์Šคํ„ฐ์™€ ์Šคํƒ ์„ ๊ฐ–๊ณ  ์žˆ์ง€๋งŒ, ํž™ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์„œ๋กœ ์ฝ๊ณ  ์“ธ ์ˆ˜ O
    • ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ํ”„๋กœ์„ธ์Šค ์ž์›์„ ๋ณ€๊ฒฝํ•˜๋ฉด, ๋‹ค๋ฅธ ์ด์›ƒ ์Šค๋ ˆ๋“œ๋„ ๊ทธ ๋ณ€๊ฒฝ ๊ฒฐ๊ณผ๋ฅผ ์ฆ‰์‹œ ๋ณผ ์ˆ˜ O
  • โœ… Stack์„ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ํ• ๋‹น ํ•˜๋Š” ์ด์œ 

    • Stack - ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ „๋‹ฌ๋˜๋Š” ์ธ์ž, ๋˜๋Œ์•„๊ฐˆ ์ฃผ์†Œ๊ฐ’ ๋ฐ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์„ ์–ธํ•˜๋Š” ๋ณ€์ˆ˜ ๋“ฑ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„
    • ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋…๋ฆฝ์ ์ด๋‹ค == ๋…๋ฆฝ์ ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค => ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ํ๋ฆ„ (์Šค๋ ˆ๋“œ์˜ ์ •์˜, ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ๋‹จ์œ„๋ฅผ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ์กฐ๊ฑด)
  • โœ… PC Register๋ฅผ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ํ• ๋‹น ํ•˜๋Š” ์ด์œ 
    • pc - ์Šค๋ ˆ๋“œ๊ฐ€ ๋ช…๋ น์–ด์˜ ์–ด๋””๊นŒ์ง€ ์ˆ˜ํ–‰ํ•˜์˜€๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ„
    • ์Šค๋ ˆ๋“œ๋Š” CPU๋ฅผ ํ• ๋‹น๋ฐ›๊ณ  ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ๋‹ค์‹œ ์„ ์ ๋‹นํ•จ -> ๋ช…๋ น์–ด๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ์ˆ˜ํ–‰X, ๋งˆ์ง€๋ง‰ ์ˆ˜ํ–‰ ์œ„์น˜๋ฅผ ๊ธฐ์–ตํ•ด์•ผ ํ•จ

๐Ÿ’ก ์Šค๋ ˆ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ณต์œ 

๋ณ„๋„์˜ ์ž์›์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ „์—ญ ๋ณ€์ˆ˜์˜ ๊ณต๊ฐ„ ์ด์šฉ
๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ณต์œ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ, ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์˜ ๊ฒฝ์šฐ ์ถฉ๋Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๋™๊ธฐํ™” ๋ฌธ์ œ ํ•ด๊ฒฐ ํ•„์š”

๐Ÿ’ก Thread-safe

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ํ•˜๋‚˜์˜ ๊ณต์œ ์ž์›์— ์ ‘๊ทผํ•  ๋•Œ, ์˜๋„๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ

  • ๊ตฌํ˜„๋ฐฉ๋ฒ• - ์ฐธ๊ณ 
    • ์ƒํ˜ธ๋ฐฐ์ œ - ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๋Š” ์ž„๊ณ„์˜์—ญ(Critical Section)์„ ๋™๊ธฐํ™” ๊ธฐ๋ฒ•์œผ๋กœ ์ œ์–ด
      ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž์›์— ์ ‘๊ทผํ•  ๋•Œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์˜ ์ ‘๊ทผ์„ ๋ง‰์Œ
      Mutex / Semaphore ์ด์šฉ
  • Reentrant
    • ์žฌ์ง„์ž…์„ฑ - ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•ด๋„ ์–ธ์ œ๋‚˜ ๊ฐ™์€ ์‹คํ–‰ ๊ฒฐ๊ณผ ๋ณด์žฅ
    • ํ•ด๋‹น ์„œ๋ธŒ๋ฃจํ‹ด์—์„œ๋Š” ๊ณต์œ ์ž์› ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ
      Ex) ์ •์ (์ „์—ญ)๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐ˜ํ™˜ X, ํ˜ธ์ถœ์‹œ ์ œ๊ณต๋œ ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ์œผ๋กœ ๋™์ž‘
    • Reentrant -> Thread-Safe
      Thread-Safe -> Reentrant (์—ญ์€ ์„ฑ๋ฆฝํ•˜์ง€ X)

๐Ÿ’ก ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™”

Thread-Safe๋Š” Synchronized ์™€ ๊ฐ™๋‚˜ โ“
โžก Thread-safe ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์˜ ์ ‘๊ทผ์œผ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ๊ฑฐ๊ณ 
ย  ย  Synchronized๋Š” ๋™๊ธฐํ™” ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ 2๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ํ•œ ํ•จ์ˆ˜ / ์ฝ”๋“œ๋ธ”๋Ÿญ์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰๋Š” ๊ฒƒ!

  • ๋™๊ธฐํ™” ๊ฐ์ฒด์˜ ์ข…๋ฅ˜
    • ๋™๊ธฐํ™”์šฉ ์ปค๋„ ๊ฐ์ฒด : Mutex, Semaphore, Event
    • ์œ ์ € ๋ชจ๋“œ ๋™๊ธฐํ™” ๊ฐ์ฒด : Critical Section
  • ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™” ๋ฐฉ๋ฒ•
    • ์‹คํ–‰ ์ˆœ์„œ์˜ ๋™๊ธฐํ™” : Event
      • ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰์ˆœ์„œ๋ฅผ ์ •์˜ํ•˜๊ณ , ์ด ์ˆœ์„œ์— ๋ฐ˜๋“œ์‹œ ๋”ฐ๋ฅด๋„๋ก ํ•˜๋Š” ๊ฒƒ
    • ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์— ๋Œ€ํ•œ ๋™๊ธฐํ™” : Mutex, Semaphore
      • ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์— ์žˆ์–ด์„œ ๋™์‹œ์ ‘๊ทผ์„ ๋ง‰๋Š” ๊ฒƒ
      • ์‹คํ–‰์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ์ƒํ™ฉ์ด ์•„๋‹ˆ๊ณ , ํ•œ ์ˆœ๊ฐ„์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์ ‘๊ทผํ•˜๋ฉด ๋˜๋Š” ์ƒํ™ฉ์„ ์˜๋ฏธ
  • ๋™๊ธฐํ™” ๊ธฐ๋ฒ•์˜ ์ข…๋ฅ˜
    • ์œ ์ € ๋ชจ๋“œ ๋™๊ธฐํ™”
      • ์ปค๋„์˜ ํž˜์„ ๋นŒ๋ฆฌ์ง€ ์•Š๋Š”(์ปค๋„ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”) ๋™๊ธฐํ™” ๊ธฐ๋ฒ•
      • ์„ฑ๋Šฅ์ƒ ์ด์ , ๊ธฐ๋Šฅ์ƒ์˜ ์ œํ•œ
      • Ex) Critical Section ๊ธฐ๋ฐ˜์˜ ๋™๊ธฐํ™”, ์ธํ„ฐ๋ฝ ํ•จ์ˆ˜ ๊ธฐ๋ฐ˜์˜ ๋™๊ธฐํ™”
    • ์ปค๋„ ๋ชจ๋“œ ๋™๊ธฐํ™”
      • ์ปค๋„์—์„œ ์ œ๊ณตํ•˜๋Š” ๋™๊ธฐํ™” ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
      • ์ปค๋„ ๋ชจ๋“œ๋กœ์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๊ณ  ์ด๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๋กœ ์ด์–ด์ง, ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ํ™œ์šฉ ๊ฐ€๋Šฅ
      • Ex) Mutex ๊ธฐ๋ฐ˜์˜ ๋™๊ธฐํ™”, Semaphore ๊ธฐ๋ฐ˜์˜ ๋™๊ธฐํ™”, ์ด๋ฆ„์žˆ๋Š” ๋ฎคํ…์Šค ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”, Event ๊ธฐ๋ฐ˜์˜ ๋™๊ธฐํ™”

โœ…Mutex vs Semaphore (์ƒํ˜ธ๋ฐฐ์ œ)

  • Mutex -locking
    • ๊ณต์œ ๋œ ์ž์›์˜ ๋ฐ์ดํ„ฐ์— ํ•˜๋‚˜์˜ Process ํ˜น์€ Thread๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ(=> ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ํ•˜๋‚˜)
    • Critical Section์„ ๊ฐ€์ง„ ์Šค๋ ˆ๋“œ์˜ Running time์ด ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๋„๋ก ๊ฐ๊ฐ ๋‹จ๋…์œผ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ 
    • synchronized ๋˜๋Š” lock์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์ค‘ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ๊ณต์œ  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ์กฐ์œจ
    • ๋ฎคํ…์Šค ๊ฐ์ฒด๋ฅผ ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ X
  • Semaphore -signaling
    • ๊ณต์œ ๋œ ์ž์›์˜ ๋ฐ์ดํ„ฐ์— ์—ฌ๋Ÿฌ Process ํ˜น์€ Thread๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ
    • wait๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์„ธ๋งˆํฌ์–ด์˜ ์นด์šดํŠธ๋ฅผ 1์ค„์ด๊ณ , ์„ธ๋งˆํฌ์–ด์˜ ์นด์šดํŠธ๊ฐ€ 0๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์•„์งˆ ๊ฒฝ์šฐ์— ๋ฝ์ด ์‹คํ–‰
    • ๋ฆฌ์†Œ์Šค ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ„๋‹จํ•œ ์นด์šดํ„ฐ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Œ
    • ์šด์˜์ฒด์ œ ๋˜๋Š” ์ปค๋„์˜ ํ•œ ์ง€์ •๋œ ์ €์žฅ์žฅ์น˜ ๋‚ด์˜ ๊ฐ’
    • ์ผ๋ฐ˜์ ์œผ๋กœ ๋น„๊ต์  ๊ธด ์‹œ๊ฐ„์„ ํ™•๋ณดํ•˜๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์ด์šฉ
    • ๊ณต์œ  ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ตœ๋Œ€ ํ—ˆ์šฉ์น˜๋งŒํผ ๋™์‹œ์— ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผํ•˜์—ฌ ์‚ฌ์šฉ
    • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์„ธ๋งˆํฌ์–ด ๊ฐ’์€ ํ™•์ธํ•˜๊ณ  ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
    • ์‚ฌ์šฉ ์ค‘์ด์ง€ ์•Š๋Š” ์ž์›์˜ ๊ฒฝ์šฐ ๊ทธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฆ‰์‹œ ์ž์›์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ์ด๋ฏธ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์‚ฌ์šฉ ์ค‘์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜๋ฉด ์žฌ์‹œ๋„ํ•˜๊ธฐ ์ „์— ์ผ์ • ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ฆผ
    • ์„ธ๋งˆํฌ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๊ทธ ๊ฐ’์„ ํ™•์ธํ•˜๊ณ , ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ์—๋Š” ๊ทธ ๊ฐ’์„ ๋ณ€๊ฒฝํ•จ์œผ๋กœ์จ ๋‹ค๋ฅธ ์„ธ๋งˆํฌ์–ด ์‚ฌ์šฉ์ž๋“ค์ด ๊ธฐ๋‹ค๋ฆฌ๋„๋ก ํ•ด์•ผ ํ•จ
    • ์„ธ๋งˆํฌ์–ด๋Š” ์ด์ง„์ˆ˜ (0 ๋˜๋Š” 1)๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋˜๋Š” ์ถ”๊ฐ€์ ์ธ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ์Œ
  • ์ฐจ์ด
    • ๋™๊ธฐํ™” ๋Œ€์ƒ์˜ ๊ฐœ์ˆ˜
      • Mutex - ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ํ•˜๋‚˜
      • Semaphore - ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ํ•˜๋‚˜ ์ด์ƒ
    • Semaphore๋Š” Mutex๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ Mutex๋Š” Semaphore๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค.
    • Mutex๋Š” ์ƒํƒœ๊ฐ€ 0, 1 ๋‘ ๊ฐœ ๋ฟ์ธ binary Semaphore -> lock ๊ฐ€์งˆ ์ˆ˜ O
    • Semaphore๋Š” ์†Œ์œ ํ•  ์ˆ˜ ์—†๋Š” ๋ฐ˜๋ฉด, Mutex๋Š” ์†Œ์œ ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์†Œ์œ ์ฃผ๊ฐ€ ์ด์— ๋Œ€ํ•œ ์ฑ…์ž„ ๊ฐ€์ง
    • ํ•ด์ œ
      • Mutex - Mutex๋ฅผ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ํ•ด๋‹น Mutex๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Œ
      • Semaphore - ํ•ด๋‹น Semaphore๋ฅผ ์†Œ์œ ํ•˜์ง€ ์•Š๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ Semaphore๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Œ
    • ๋ฒ”์œ„
      • Mutex - ํ”„๋กœ์„ธ์Šค ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๋ฉฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์ž๋™์œผ๋กœ Clean up
      • Semaphore - ์‹œ์Šคํ…œ ๋ฒ”์œ„์— ๊ฑธ์ณ์žˆ๊ณ  ํŒŒ์ผ์‹œ์Šคํ…œ์ƒ์˜ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์กด์žฌ

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค vs ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ

๐Ÿ’ก ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค

ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ์— ์—ฌ๋Ÿฌ CPU, ํ•˜๋‚˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค ๋™์‹œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ

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

๐Ÿ’ก ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ

ํ•˜๋‚˜์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ ๊ตฌ์„ฑ, ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ž‘์—… ์ฒ˜๋ฆฌ
์Šค๋ ˆ๋“œ๋“ค์ด ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋‹ค์ˆ˜์˜ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•จ

  • ์žฅ์ 
    • ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ฐจ์ง€, ๋น ๋ฅธ Context Switching
    • ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์  ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ž๋ฃŒ ๊ณต์œ  ๊ฐ€๋Šฅ
  • ๋‹จ์ 
    • ์˜ค๋ฅ˜๋กœ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ „์ฒด ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ์Œ, ์•ˆ์ „์„ฑ ๋ฌธ์ œ
    • ๋™๊ธฐํ™” ๋ฌธ์ œ

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ๋Œ€์‹  ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์„ ํ‚ค๋Š” ๋Œ€์‹ , ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ•ด๊ฒฐ

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

์ฐธ๊ณ 

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://github.com/WeareSoft/tech-interview/blob/master/contents/os.md#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://gyoogle.dev/blog/computer-science/operating-system/Process%20vs%20Thread.html
https://worthpreading.tistory.com/m/90

profile
youn

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