KR_CS_Process_Thread - somaz94/DevOps-Engineer GitHub Wiki

Q4: ํ”„๋กœ์„ธ์Šค(Process)์™€ ์Šค๋ ˆ๋“œ(Thread)์˜ ์ฐจ์ด ๋ฐ IPC

์งˆ๋ฌธ: ํ”„๋กœ๊ทธ๋žจ, ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ์˜ ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•˜์„ธ์š”. ๋˜ํ•œ IPC ๋ฐฉ๋ฒ•๊ณผ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์˜ ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜์„ธ์š”.


์ฃผ์š” ์šฉ์–ด

์šฉ์–ด ์„ค๋ช…
Program ๋””์Šคํฌ์— ์ €์žฅ๋œ ์ •์  ์‹คํ–‰ ํŒŒ์ผ
Process ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ ์ธ์Šคํ„ด์Šค (๋…๋ฆฝ์  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„)
Thread ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๊ฒฝ๋Ÿ‰ ์‹คํ–‰ ๋‹จ์œ„ (๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ)
IPC Inter-Process Communication โ€” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ๋ฉ”์ปค๋‹ˆ์ฆ˜
Context Switching CPU๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ๋ฅผ ์ „ํ™˜ํ•˜๋Š” ์ž‘์—…
Race Condition ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ  ์ž์›์— ๋™์‹œ ์ ‘๊ทผํ•˜์—ฌ ๊ฒฐ๊ณผ๊ฐ€ ๋ถˆํ™•์ •์ ์ธ ์ƒํƒœ
Deadlock ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ์˜ ๋ฝ์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ๋ฌดํ•œ ๋Œ€๊ธฐํ•˜๋Š” ์ƒํƒœ
Mutex ์ƒํ˜ธ ๋ฐฐ์ œ ๋ฝ โ€” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ Critical Section ์ง„์ž… ํ—ˆ์šฉ

ํ”„๋กœ๊ทธ๋žจ โ†’ ํ”„๋กœ์„ธ์Šค โ†’ ์Šค๋ ˆ๋“œ

Program (์ •์  ํŒŒ์ผ)
    โ†“ ์‹คํ–‰
Process (๋…๋ฆฝ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„, PID ๋ถ€์—ฌ)
    โ†“ ๋‚ด๋ถ€ ํฌํ•จ
Thread (๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ, TID ๋ถ€์—ฌ)

๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ๋น„๊ต

ํ”„๋กœ์„ธ์Šค (๋…๋ฆฝ):                   ์Šค๋ ˆ๋“œ (๊ณต์œ ):
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Stack (A)  โ”‚ โ”‚  Stack (B)  โ”‚   โ”‚  Stack T1 โ”‚ Stack T2 โ”‚ ...  โ”‚ โ† ๋…๋ฆฝ
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค   โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  Heap  (A)  โ”‚ โ”‚  Heap  (B)  โ”‚   โ”‚         Shared Heap          โ”‚ โ† ๊ณต์œ 
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค   โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  Data  (A)  โ”‚ โ”‚  Data  (B)  โ”‚   โ”‚       Shared Data Segment    โ”‚ โ† ๊ณต์œ 
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค   โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  Code  (A)  โ”‚ โ”‚  Code  (B)  โ”‚   โ”‚       Shared Code Segment    โ”‚ โ† ๊ณต์œ 
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  Process A       Process B              Single Process

ํ”„๋กœ์„ธ์Šค vs ์Šค๋ ˆ๋“œ ๋น„๊ต

ํ•ญ๋ชฉ Process Thread
๋ฉ”๋ชจ๋ฆฌ ๋…๋ฆฝ์  (๋ชจ๋‘ ๋ถ„๋ฆฌ) ๊ณต์œ  (Stack๋งŒ ๋…๋ฆฝ)
์ƒ์„ฑ ๋น„์šฉ ๋†’์Œ (fork) ๋‚ฎ์Œ (pthread_create)
ํ†ต์‹  IPC ํ•„์š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ง์ ‘ ํ†ต์‹ 
๋…๋ฆฝ์„ฑ ์™„์ „ ๋…๋ฆฝ ์˜์กด์  (Crash ์‹œ ์ „์ฒด ์ข…๋ฃŒ)
Context Switching ๋А๋ฆผ ๋น ๋ฆ„
ํ‚ค์›Œ๋“œ Isolation Concurrency

IPC (Inter-Process Communication)

๋ฐฉ๋ฒ• ํŠน์ง• ์†๋„ ์‚ฌ์šฉ ์‚ฌ๋ก€
Pipe ๋‹จ๋ฐฉํ–ฅ, ๋ถ€๋ชจ-์ž์‹ ๊ฐ„ ๋น ๋ฆ„ ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
Message Queue ๋ฉ”์‹œ์ง€ ๋‹จ์œ„ ๋น„๋™๊ธฐ ์ค‘๊ฐ„ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€
Shared Memory ๋ฉ”๋ชจ๋ฆฌ ์ง์ ‘ ๊ณต์œ  ๋งค์šฐ ๋น ๋ฆ„ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๊ณต์œ 
Socket ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๊ฐ€๋Šฅ ๋А๋ฆผ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๊ฐ„ ํ†ต์‹ 

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๋™์‹œ์„ฑ ๋ฌธ์ œ

Race Condition

์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ  ๋ณ€์ˆ˜์— ๋™์‹œ ์ ‘๊ทผ โ†’ ๊ฒฐ๊ณผ๊ฐ’์ด ์‹คํ–‰ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง.

ํ•ด๊ฒฐ: Mutex (Lock) Critical Section ์ง„์ž…์„ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋กœ ์ œํ•œ.

Deadlock

์Šค๋ ˆ๋“œ A๊ฐ€ Lock1์„ ๋ณด์œ ํ•œ ์ฑ„ Lock2๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ , ์Šค๋ ˆ๋“œ B๋Š” Lock2๋ฅผ ๋ณด์œ ํ•œ ์ฑ„ Lock1์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ™ฉ.

ํ•ด๊ฒฐ: Lock Ordering ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์ผํ•œ ์ˆœ์„œ๋กœ ๋ฝ์„ ํš๋“ํ•˜๋„๋ก ๊ฐ•์ œ.

๋™์‹œ์„ฑ vs ๋ณ‘๋ ฌ์„ฑ

๊ฐœ๋… ์„ค๋ช…
Concurrency (๋™์‹œ์„ฑ) ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ์ฒ˜๋ฆฌ (1 CPU์—์„œ๋„ ๊ฐ€๋Šฅ)
Parallelism (๋ณ‘๋ ฌ์„ฑ) ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์‹ค์ œ๋กœ ๋™์‹œ์— ์ฒ˜๋ฆฌ (๋ฉ€ํ‹ฐ CPU ํ•„์š”)

์ฐธ๊ณ 

โš ๏ธ **GitHub.com Fallback** โš ๏ธ