์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[์šด์˜์ฒด์ œ] 8. ์Šค๋ ˆ๋“œ

CS/์šด์˜์ฒด์ œ๐Ÿฃ

by :ํ•ดํ”ผ๋ž˜๋น—๐Ÿพ 2021. 3. 23. 21:26

๋ณธ๋ฌธ

Process - Abstraction for
* Execution Unit : Scheduling ๋‹จ์œ„
* Protection Domain : ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž์›์— ๋Œ€ํ•œ ๋ณดํ˜ธ
⇒ ์ง€๊ธˆ๊นŒ์ง€์˜ Process ๊ฐœ๋… = ํ•˜๋‚˜์˜ ์‹คํ–‰ ํ๋ฆ„์„ ๊ฐ–๊ณ  ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ

Process vs Threads

Process Thread
ํ•˜๋‚˜์˜ Thread์™€ ๊ฐ™์€ ์‹คํ–‰ ํ๋ฆ„.
Process๊ฐ„์˜ Memory๋Š” ๋…๋ฆฝ์ , ์„œ๋กœ์˜ ์˜์—ญ์— ์ ‘๊ทผํ•˜๊ธฐ ์–ด๋ ค์›€. (IPC์—†์œผ๋ฉด ์ ‘๊ทผ ๋ถˆ๊ฐ€)
Process๊ฐ„์˜ Switch๋น„์šฉ์ด ํผ.
ํ•˜๋‚˜์˜ Process์•ˆ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ Thread
Process์˜ Code ์˜์—ญ๊ณผ Data ์˜์—ญ์€ Thread๊ฐ„์— ๊ณต์œ .
Thread๋“ค์€ ๊ฐ™์€ Memory ์˜์—ญ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, Thread๊ฐ„ Switch๋น„์šฉ์ด ์ ์Œ.

Thread

- Execution Unit

- Process ๋‚ด์˜ ์‹คํ–‰ ํ๋ฆ„

- Process๋ณด๋‹ค ์ž‘์€ ๋‹จ์œ„

(Process์—์„œ ํ•  ์ž‘์—…์„ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋‚˜๋ˆˆ ํ›„์— ๊ฐ๊ฐ์„ Threadํ™” ํ•ด์„œ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ž‘์—…์„ ์™„์ˆ˜ํ•œ๋‹ค.)

 

Cooperative Process์™€์˜ ์ฐจ์ด์ 

- Cooperative Process๋Š” IPC๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

- Context Switching ๋น„์šฉ์ด ๋“ ๋‹ค.

- Thread๋ฅผ ์ด์šฉํ•  ๊ฒฝ์šฐ, Process๋ณด๋‹ค ์ ์€ ๋น„์šฉ์œผ๋กœ Cooperative Process๊ฐ€ ํ•˜๋Š” ์ผ์„ ๋™์ผํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Thread์ˆ˜์™€ Throughput

Thread ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก CPU Utilization์ด ์ฆ๊ฐ€ํ•˜๋‹ค๊ฐ€ ์ž„๊ณ—๊ฐ’์„ ๋„˜์–ด๊ฐ€๋ฉด ๋‹ค์‹œ ๊ฐ์†Œํ•œ๋‹ค.์ด์œ , Thread Switching ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•˜๊ธฐ์—.CPU์˜ ์ˆ˜๊ฐ€ ๋งŽ์€ System์ผ ์ˆ˜๋ก Thread๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค.Multi-processor : CPU์˜ ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ํ•œ Process์—์„œ ์—ฌ๋Ÿฌ Thread๋ฅผ Parallelํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌ.

 

Thread๊ตฌ์กฐ

Code, Data, File์€ ๊ฐ™์€ Process ๋‚ด์˜ ๋‹ค๋ฅธ Thread์™€ ๊ณต์œ ํ•œ๋‹ค.

Thread ID, PC, Register Set, Stack

 

Multi-Thread Program์˜ ์žฅ์ 

1. Responsiveness

: ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” Thread๊ฐ€ ์žˆ๋”๋ผ๋„ ๋‹ค๋ฅธ Thread๋“ค์€ ์‹คํ–‰๋˜๊ณ  ์žˆ๊ธฐ์— User ์ž…์žฅ์—์„œ๋Š” ๊ทธ Program์ด Interactiveํ•˜๋‹ค

2. Resource Sharing

: Process๋‚ด Thread๋ผ๋ฆฌ๋Š” Code,Data,File ์˜์—ญ์„ ๊ณต์œ ํ•จ.

3. Economy

4. Scalability

: ์—ฌ๋Ÿฌ ๊ฐœ์˜ Thread๊ฐ€ ๊ฐ๊ฐ ๋‹ค๋ฅธ Processor์—์„œ ๋™์‹œ์— ์‹คํ–‰๊ฐ€๋Šฅ.

 

Multicore Programming

์—ฌ๋Ÿฌ๊ฐœ์˜ Core. ๊ฐ๊ฐ์˜ Core๋ฅผ ํ•˜๋‚˜์˜ Processor๋กœ ์ธ์‹ํ•˜๊ณ  Schedulingํ•˜์—ฌ ๊ฐ๊ฐ์˜ Core์— ์—ฌ๋Ÿฌ Thread๊ฐ€ ํ• ๋‹น๋˜์–ด ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ.

Multiple Processor๊ฐ€ ๋‹ฌ๋ฆฐ Multicore๋Š” Cache๋ฅผ ๊ณต์œ ํ•จ.

 

User Threads vs Kernel Threads

- User Threads

Kernel ์˜์—ญ ์œ„์—์„œ ์ง€์›๋˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ User level์˜ library๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๋œ๋‹ค. library์—์„œ thread๋ฅผ ์ƒ์„ฑ, scheduling๊ณผ ๊ด€๋ จ๋œ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค. ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์—์„œ thread๊ฐ€ ์ƒ์„ฑ, ๊ด€๋ฆฌ๋˜๊ธฐ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋น ๋ฅด์ง€๋งŒ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ User Thread ์ค‘ ํ•˜๋‚˜์˜ Thread๊ฐ€ System Call ์š”์ฒญ์œผ๋กœ Block์ด ๋œ๋‹ค๋ฉด, ๋‚˜๋จธ์ง€ ๋ชจ๋“  Thread ์—ญ์‹œ Block ๋œ๋‹ค. Kernel์€ ์—ฌ๋Ÿฌ User Thread๋“ค์„ ํ•˜๋‚˜์˜ Process๋กœ ๊ฐ„์ฃผํ•˜๊ธฐ ๋–„๋ฌธ.

 

- Kernel Thread

์šด์˜์ฒด์ œ์—์„œ thread๋ฅผ ์ง€์›.
thread๊ฐ€ system call์„ ํ˜ธ์ถœํ•˜์—ฌ block์ด ๋˜๋ฉด, kernel์€ ๋‹ค๋ฅธ thread๋ฅผ ์‹คํ–‰ํ•จ์œผ๋กœ์จ ์ „์ฒด์ ์ธ Thread Blocking์ด ์—†์Œ.
Multiprocessor ํ™˜๊ฒฝ์—์„œ kernel์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ Thread๋ฅผ ๋‹ค๋ฅธ Processor์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Œ.
User Thread๋ณด๋‹ค ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ๊ฐ€ ๋А๋ฆผ

 


User Threads๋ฅผ Kernel Threads๋กœ ๋งคํ•‘์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•

Many-to-One
์—ฌ๋Ÿฌ๊ฐœ์˜ user level thread ๋“ค์ด ํ•˜๋‚˜์˜ kernel thread๋กœ mapping๋จ.
ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ Thread ๋งŒ kernel์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
kernel ์ž…์žฅ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ thread๋Š” ํ•˜๋‚˜์˜ process ์ด๊ธฐ ๋•Œ๋ฌธ์— Multiporcessor๋”๋ผ๋„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Processor์—์„œ ๋™์‹œ์— ์ˆ˜ํ–‰ ๋ถˆ๊ฐ€๋Šฅ.
One-to-One
๋ฌดํ•œ์ •์œผ๋กœ kernel thread๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Œ.

Many-to-Many
kernel์€ ์ ์ ˆํžˆ user thread์™€ kernel thread ์‚ฌ์ด์˜ mapping์„ ์กฐ์ ˆํ•˜์—ฌ, ์œ„์™€ ๊ฐ™์€ ์žฅ์ ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Œ

 


Thread๋กœ ์ธํ•œ ์šด์˜์ฒด์ œ์˜ ๋ณ€ํ™”

Process ๊ธฐ๋ฐ˜์˜ ์šด์˜์ฒด์ œ system call

⇒ thread์˜ ๊ฐœ๋…์— ๋Œ€ํ•œ ๊ณ ๋ ค ํ•„์š”

1. Multi-threaded Programming์— ๋Œ€ํ•œ ์ง€์›

- fork(), exec() : thread ์ง€์›์„ ์œ„ํ•ด์„œ๋Š” ๋ณ€ํ™”๊ฐ€ ํ•„์š”

ex)
๋ชจ๋“  Thread๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Process๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ธ์ง€

fork๋ฅผ ์š”์ฒญํ•œ thread๋งŒ์„ ๋ณต์‚ฌํ•œ Process๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ธ์ง€

fork๋ฅผ ํ•˜๊ณ  exec๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ฒฝ์šฐ fork๋ฅผ ์š”์ฒญํ•œ thread๋งŒ์ด ๋ณต์‚ฌ๋˜๋Š” ๊ฒƒ์ด ๋” ๋ฐ”๋žŒ์งํ•จ.

์•„๋‹Œ ๊ฒฝ์šฐ, ๋ชจ๋“  thread์˜ ๋ณต์‚ฌ๊ฐ€ ํ•„์š”

fork
ํ•˜๋‚˜์˜ Program ๋‚ด์˜ Thread๊ฐ€ fork๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด,
exec


2. thread ์ข…๋ฃŒ ๋ฌธ์ œ: Multi-thread์ผ ๊ฒฝ์šฐ, ํ•จ๊ป˜ ์ผํ•˜๋Š” thread์˜ ์ข…๋ฃŒ๋Š” process๋ณด๋‹ค ๋ณต์žกํ•ด์ง

thread ์ž‘์—…์ด ๋๋‚˜๊ธฐ ์ „์— ์™ธ๋ถ€์—์„œ ์ž‘์—…์„ ์ค‘์ง€์‹œํ‚ค๋Š” ๊ฒƒ
ํ•˜๋‚˜์˜ thread์—์„œ ์ค‘์ง€ ๋ช…๋ น์ด ๊ฒฐ๊ตญ์€ ๋‹ค๋ฅธ thread์˜ ๋ชจ๋“  ์ž‘์—…์„ ์ค‘์ง€์‹œ์ผœ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
์ž์›์ด thread์—๊ฒŒ ํ• ๋‹น๋œ ๊ฒฝ์šฐ Cancellation์˜ ๋ฌธ์ œ


3. Thread Pools

์ƒˆ๋กœ์ด Thread๋ฅผ ๋งŒ๋“œ๋Š” ์‹œ๊ฐ„์ด ์‹ค์ œ Thread๊ฐ€ ๋™์ž‘ํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ๊ธด ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ
Thread Pool์„ ๋งŒ๋“ค์–ด Process๊ฐ€ ์ƒˆ๋กœ์ด ์‹คํ–‰ํ•  ๋•Œ, ์ •ํ•ด์ง„ ์ˆ˜ ๋งŒํผ์˜ Thread๋ฅผ ๋งŒ๋“  ํ›„, Pool์— ํ• ๋‹น
์ƒˆ๋กœ์šด thread๊ฐ€ ํ•„์š”ํ•˜๋ฉด pool์—์„œ ๊ฐ€์ ธ์˜ค๊ณ , ์ž‘์—…์ด ๋๋‚˜๋ฉด ๊ทธ thread๋ฅผ pool์— ๋„ฃ์Œ

4. Thread๊ฐ„ IPC

Multithreaded Programming์—์„œ๋Š” Thread๊ฐ„ ํ†ต์‹ ์ด ํ•„์š”ํ•œ๋ฐ

Thread๊ฐ„ IPC ๊ตฌํ˜„์€ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€?

=> ๊ณต์œ  Memory๊ฐ€ ํšจ์œจ์ ์ด๋‹ค.

(์ด๋ฏธ ๊ฐ™์€ Process์˜ Data ์˜์—ญ์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ณต์œ  Memory๊ฐ€๋Šฅ)

๊ฒฐ๊ตญ IPC๊ฐ€ ์ตœ์†Œํ™” ๋จ. (Thread๋“ค ๊ฐ„์˜ ์ž์› ๊ณต์œ ๋กœ ์ธํ•˜์—ฌ ๊ฐ€๋Šฅํ•ด์ง)

๋‹ค๋ฅธ Process์— ์กด์žฌํ•˜๋Š” ๋‹ค๋ฅธ Thread์™€์˜ ํ†ต์‹ ์€?

- Process์˜ ๊ฒฝ์šฐ์™€ ๋น„์Šทํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ž„.

- ์ด๋Ÿฐ ํ†ต์‹ ์ด ๋นˆ๋ฒˆํ•˜๋‹ค๋ฉด, Program ์„ค๊ณ„์˜ ์ž˜๋ชป.

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ