Concurrency, Parallelism
1 ์ฝ์ด ๋จ์ผ CPU์ 4๊ฐ์ ์ค๋ ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์.
๋์์ฑ์ 4๊ฐ์ ์ค๋ ๋๊ฐ ํ๋์ ์ฝ์ด์ ์๋ก interleaved ํ๋ฉด์ ๋ชจ๋ ์์ ์ด ์งํ๋๋๋ก ํ๋ ๊ฒ์ด๋ค.
๋ณ๋ ฌ์ฑ์ 1์ฝ์ด๊ฐ ์๋ ๋ฉํฐ์ฝ์ด๋ผ ์๊ฐํ๊ณ , ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ์คํ๋๋๋ก ํ๋ ๊ฒ ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋ณ๋ ฌ์ฑ์ ๊ฐ์ง์ง ์์ผ๋ฉด์ ๋์์ฑ์ ๊ฐ์ง๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. (์ค์ ๋ก ์ด์ ์ฑ๊ธ ํ๋ก์ธ์ค ์์ ์๋ ๋ณ๋ ฌ์ฑ์ ๊ฐ์ง๊ฒ ์ฒ๋ผ ๋ณด์ด๋ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ด์๋ค.)
Types of Parallelism
data parallelism -> ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ๊ฐ์ ์ฝ์ด๋ก ๋๋ ์์ ํ๋๋ก ํ๋ ๊ฒ. (arr[N]์ ํฉ์ ๊ตฌํ ๋ 1๋ฒ ์ฝ์ด์ [0:N/2], 2๋ฒ ์ฝ์ด์ [N/2:N]์ ์ฃผ์ด ๋ณ๋ ฌ์ ์ผ๋ก ํฉ์ ๊ตฌํ๋๊ฑฐ๊ฐ์๊ฑฐ)
task parallelism -> task, ์ฆ ์คํ ๋จ์์ธ thread๋ฅผ ์ฌ๋ฌ๊ฐ์ ์ฝ์ด์ ๋๋๋ ๊ฒ.
data parallelism๊ณผ task parallelism์ ์ํธ ๋ฐฐํ์ ์ด์ง ์๋ค.
Multithreading Models
User threads -> user level์์ ์์ฑ๋ ์ค๋ ๋
kernel threads -> kernel level์์ ์์ฑ๋ ์ค๋ ๋
Many to One Model
์ฌ๋ฌ๊ฐ์ user threads ๊ด๋ฆฌ๊ฐ user space์ thread library์ ์ํด ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ด์ง๋ง, ๋์์ ํ๋์ ์ค๋ ๋๋ง kernel์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ฉํฐ์ฝ์ด ์์คํ ์์ ๋ณ๋ ฌ์ฑ์ ๊ฐ์ง ์ ์๋ค.
One to One Model
๋ ๋์ ๋์์ฑ๊ณผ, ๋ณ๋ ฌ์ฑ์ ๊ฐ์ง ์ ์์ง๋ง ํ๋์ user thread์ ๋ํ kernel thread๊ฐ ๋ฌด์กฐ๊ฑด ์์ฑ๋จ์ ๋ฐ๋ฅธ overhead๊ฐ ์๋ค.
Linux, Windows OS ๊ฐ one - to - one์ผ๋ก ๋์ด์๋ค.
Many to Many Model (and Two-level model)
User-level threads๋ณด๋ค ๋ ์ ์ ์์ kernel threads๋ฅผ ๊ฐ์ง๋ค.
์๊ธฐ์ ์์ ํ ๋ ๋ชจ๋ธ๊ณผ๋ ๋ฌ๋ฆฌ, ์ฌ์ฉ์๋ user threads๋ฅผ ํ์ํ ๋งํผ ๋ง๋ค ์ ์๊ณ , ๊ทธ์ ๋ฐ๋ฅธ kernel threads๊ฐ ๋์ด๋จ์ ๋ฐ๋ฅธ overhead๋ฅผ ๋๋ผ์ง ์๋๋ค. ๋ํ kernel thread๊ฐ ์ฌ๋ฌ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ณ๋ ฌ์ฑ๋ ๊ฐ์ง ์ ์๋ค.
์์ฉ์ผ๋ก Many to Many์ ํน์ user thread๋ฅผ kernel thread์ ๋์์ํฌ ์ ์๋ค. ์ด ๋ชจ๋ธ์ Two-level model์ด๋ผ ๋ถ๋ฆฐ๋ค.
๊ตฌํ์ด ์ด๋ ต๊ณ , kernel threads์ ์๋ฅผ ์ ํด๋์ผ ํ๋ค๋ ์ ์์(์ ํ๋ kernel thread๋ฅผ ๊ฐ์ง) ํ๋ OS๋ one to one ๋ชจ๋ธ์ ๋ ๋ง์ด ์ฌ์ฉํ๊ณ ์๋ค.
Implicit Threading
์ค๋ ๋์ ์์ฑ ๋ฐ ์ฑ ์/๊ด๋ฆฌ๋ฅผ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ๋๊ฒ์ด ์๋ ์ปดํ์ผ๋ฌ, ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๊ฒจ์ฃผ๋ ๊ฒ ์ด๋ค.
Thread Pools
Web server๋ฅผ ์์๋ก, ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์๋ก์ด thread๋ฅผ ์์ฑํด์ ์ด์ ๋ฐ๋ฅธ ์๋ต์ ๋ง๋ ๋ค. ํ์ง๋ง ์ด๋ฌํ ์ค๋ ๋ ๊ด๋ฆฌ ๊ธฐ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง ์ ์ฌ์ ๋ฌธ์ ๊ฐ ์๋ค.
1. thread ์์ฑ ์๊ฐ ๋ฌธ์
2. thread ์ ์ฆ๊ฐ์ ๋ฐ๋ฅธ ์ฑ๋ฅ์ ํ
Thread Pool์ ์ ํด์ง ์์ ์ค๋ ๋๋ฅผ ๋๊ธฐ์์ผ๋๊ณ , ์์ฒญ์ด ๋ค์ด์์๋ ์๋ก์ด ์ค๋ ๋๋ฅผ ๋ง๋๋ ๋์ thread pool์ ์์ฒญ์ ๋ณด๋ด ์ด๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๊ฒ ์ด๋ค.
Thread pool์ ์์ฒญ์ด ๊ฐ๋ฉด ๋๊ธฐ์ค์ธ ์ค๋ ๋๊ฐ ์์ฒญ์ ์ฆ์ ์ฒ๋ฆฌํ๊ณ , ๋ง์ฝ ๋๊ธฐ์ค์ธ ์ค๋ ๋๊ฐ ์๋ค๋ฉด ๋๊ธฐ ์ค๋ ๋๊ฐ ์๊ธธ ๋ ๊น์ง ์์ฒญ์ queued ํ๋ค.
Thread Pool์ ์ฌ์ฉํ๋ค๋ฉด
1. ์ค๋ ๋ ์์ฑ ์๊ฐ์ ์์ค๋ค. ๊ณ ๋ก ๋ ๋นจ๋ผ์ง๋ค.
2. ๋์ ๊ฐ๋ฅ ์ค๋ ๋์๊ฐ ์ ์ ์์คํ ์ด ์ํํ๊ฒ ์๋ํ ์ ์๋๋ก ํ๋ค.
3. task ๋ณ๋ก ๋ค๋ฅธ ์ ๋ต์ผ๋ก ์คํํ ์ ์๋๋ก ํ๋ค.
์ถํ ์์ฑ...
Threading Issues
multithreading-program์ designํ ๋ ์๊ธฐ๋ ๋ฌธ์ ์ ๋ํด ์์๋ณด์.
Fork() and exec() System Call
fork
fork ๋ ํ๋ก์ธ์ค๋ฅผ ๋ณต์ ํ๋ ์์คํ ์ฝ์ธ๋ฐ, ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋ค์ค ์ค๋ ๋ ํ๋ก์ธ์ค์ธ ๊ฒฝ์ฐ ๋ชจ๋ ์ค๋ ๋๋ฅผ ๋ณต์ ํ ๊ฒ์ธ์ง์ ๋ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ด์ ๋ฐ๋ผ์ ์ ๋์ค ์์คํ ์์๋ ๋๊ฐ์ง ๋ฒ์ ์ fork๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
1. ๋ชจ๋ ์ค๋ ๋๋ฅผ ๋ณต์ ํ๋ fork
๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋ชจ๋ ์ค๋ ๋๊ฐ ์์ ํ๋ก์ธ์ค๋ก ๋ณต์ ๋๋ค.
์ด ๋ฐฉ๋ฒ์ ๋ค์ค ์ค๋ ๋ ๊ฐ ๋ฉ๋ชจ๋ฆฌ, FD, ๋ฝ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์ ๋๋ก ๋ณต์ ๋์ง ์๋ ๊ฒฝ์ฐ ๋์์ด ๋ถ๋ช ํํด์ง๋ฉฐ, ๋ค์ค ์ค๋ ๋ ํ๋ก์ธ์ค ํน์ฑ์ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ฐ๋ ค๊ฐ ๋์ฑ ์ปค์ง๋ค๋ ์ ์์ ํ๋ ์์คํ ์์ ์ ์ฌ์ฉํ์ง ์๋๋ค.
2. fork() ํธ์ถ ์ค๋ ๋๋ง ๋ณต์ . (๋จ์ผ ์ค๋ ๋ ๋ณต์ฌ)
์์ ํ๋ก์ธ์ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์ํ ์ค ํธ์ถ ์ค๋ ๋์ ์ํ๋ง์ ๊ฐ์ง๊ณ ์๋ก์ด ๋ ๋ฆฝ์ ์ธ ํ๋ก์ธ์ค๋ก ์คํ๋๋ค.
์๊ธฐ์ ์์ ํ ๋ด์ฉ์ exec()์ ๊ฒฐํฉํด์ ์ดํด๋ณด์.
exec()๋ ์๋ก์ด ํ๋ก์ธ์ค๋ก ํ์ฌ ํ๋ก์ธ์ค๋ฅผ ๋ฎ์ด ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก fork()ํ์ exec()๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ๋ ํจํด์ ๊ฐ์ง๋ฉด ๋ชจ๋ ์ค๋ ๋๋ฅผ ๋ณต์ ํ ํ์ ์์ฒด๊ฐ ์์ด์ง๋ค.
๊ทธ๋ฌ๋ฏ๋ก fork() ์ดํ exec()๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ๋ ๋ชจ๋ ์ค๋ ๋๋ฅผ ๋ณต์ ํ๋ ๊ฒ์ด ์ข์ผ๋ฉฐ, ์๋๋ฉด ๋จ์ผ ์ค๋ ๋ ๋ณต์ฌ๋ฅผ ํ๋ ๊ฒ์ด ์ข๋ค. (์ ๋งํ๋ฉด fork()์ดํ exec()๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋จ์ผ ์ค๋ ๋ ๋ณต์ฌ๋ ์ฌ์ฉ์ ์ ์ํ๋ค๊ณ ํ๋ค.)
Signal Handling
์๊ทธ๋์
1. ํน์ ์ด๋ฒคํธ์ ์ํด ์์ฑ
2. ํ๋ก์ธ์ค๋ก ์ ๋ฌ
3. ์ ๋ฌ๋๋ค๋ฉด, ์๊ทธ๋์ ๋ฐ๋ฅธ ํ๋์ ํด์ผ๋ง ํ๋ค
๋ผ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค. ๊ทธ๋ฆฌ๊ณ ์๊ทธ๋์ ๋๊ธฐ์ /๋น๋๊ธฐ ์๊ทธ๋๋ก ๋๋๋ค.
Synchronous signal
Out of bound, Segfault, division by zero์ ๊ฐ์ ์๊ทธ๋์ synchronous signal์ด๋ค.
Asynchronous signal
์คํ์ค์ธ ํ๋ก์ธ์ค ์ธ๋ถ์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ํ๋ก์ธ์ค๋ ์๊ทธ๋์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ๋๋ค.
Ctrl C, time expired์ ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ์๊ทธ๋์ ๊ธฐ๋ณธ ํธ๋ค๋ฌ, ์ฌ์ฉ์ ์์ฑ ํธ๋ค๋ฌ์ ์ํด ํ๋ก์ธ์ค ๋ด์์ ์ฒ๋ฆฌ๊ฐ ๋๋ค.
ํ์ง๋ง ํ๋ก์ธ์ค๊ฐ ๋ค์ค ์ค๋ ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค๋ฉด, ์ด๋์ ์๊ทธ๋์ด ์ ๋ฌ๋์ด์ผ ํ๋ ์ง๊ฐ ์์ ์ด ๋๋ค.
๋๊ธฐ ์๊ทธ๋์ ๊ฒฝ์ฐ๋ ์๊ทธ๋์ด ๋ฐ์ํ ์ฃผ์ฒด๊ฐ ๋ ์ค๋ ๋์ ์ ๋ฌํ๋ฉด๋๋ค.
ํ์ง๋ง ๋น๋๊ธฐ ์๊ทธ๋์ ๊ฒฝ์ฐ ์ ๋ฌํด์ผํ ์ค๋ ๋๊ฐ ๋ถ๋ช ํ์ง ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์๊ทธ๋ ์ฒ๋ฆฌ ๋ฐฉ์์ด ์กด์ฌํ๋ค.
์๊ทธ๋ ์ฒ๋ฆฌ ๋ฐฉ์
1. ์ค๋ ๋๋ณ ์๊ทธ๋ ๋ง์คํฌ
๊ฐ ์ค๋ ๋๋ ์์ ์ ์๊ทธ๋ ๋ง์คํฌ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ด๋ค ์๊ทธ๋์ ์ฒ๋ฆฌํ ์ง ๋๋ ๋ฌด์ํ ์ง ๊ฒฐ์ ํ๋ ์ญํ ์ ํ๋ค. ์ด๋ฅผ ํตํด ํน์ ์ค๋ ๋์์๋ง ์๊ทธ๋์ ์ฒ๋ฆฌํ๋๋ก ์ ์ดํ๋ค.
2. ์๊ทธ๋์ ์ฒ๋ฆฌํ ์ค๋ ๋์ ์ ํ๊ท์น.
2-1. ์๊ทธ๋์ด ์ ๋ฌ๋ ์ ์๋ ์ค๋ ๋์ค ํ ์ค๋ ๋.
2-2. ํ๋ก์ธ์ค ์ ์ฒด ์๊ทธ๋
ํ๋ก์ธ์ค์ ์ ๋ฌ๋๋ ์๊ทธ๋์ผ ๊ฒฝ์ฐ, ๊ฐ ์ค๋ ๋๋ ์๊ทธ๋์ ์์ ํ ์๊ฒฉ์ด ์์ผ๋ฉฐ ์๊ทธ๋ ๋ง์คํฌ๊ฐ ํ์ฉํ๋ ์ค๋ ๋๊ฐ ์๊ทธ๋์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.
2-3. ์ค๋ ๋ ์ ์ฉ ์๊ทธ๋
pthread_kill() ๊ณผ ๊ฐ์ ํจ์๋ก ํน์ ์ค๋ ๋์๋ง ์๊ทธ๋์ ๋ณด๋ผ ์ ์๋ค.
์๊ทธ๋ ์ฒ๋ฆฌ์ ๋ฌธ์ ์
์๊ทธ๋ ์ฒ๋ฆฌ๋ฅผ ํตํด์๋ ๋๊ฐ์ง ๋ฌธ์ ์ ์ด ๋ฐ์ํ ์ ์๋ค.
1. ๋๊ธฐํ ๋ฌธ์
์๊ทธ๋ ๋์ฐฉ ์์ ์ ๋ฐ๋ผ ์๊ทธ๋์ ์ฒ๋ฆฌํ๋ ์ค๋ ๋์ ๋ค๋ฅธ ์ค๋ ๋ ๊ฐ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
2. ์ค๋ ๋ ์์ ์ฑ
ํน์ ํจ์(malloc(), ~~~)๋ ์ค๋ ๋ ์์ ์ฑ์ ๋ณด์ฅํ์ง ์์ผ๋ฏ๋ก, ์๊ทธ๋ ํธ๋ค๋ฌ์์ ํธ์ถํ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
Thread Cancellation
์ข ๋ฃ ๋ ์ค๋ ๋๋ target thread๋ผ ๋ถ๋ฆฌ๊ณ , ๋๊ฐ์ ์๋๋ฆฌ์ค์ ๋ฐ๋ฅธ๋ค
1. Asynchronous cancellation : target thread๋ฅผ ์ฆ์ ์ข ๋ฃํ๋ค
2. Deferred cancellation : target thread๊ฐ ์ค์ค๋ก ์ข ๋ฃํ ์ ์๋๋ก ์ค์ค๋ก ์ฃผ๊ธฐ์ ์ผ๋ก ์ฒดํฌํ๋ค.
1. ๊ณผ ๊ฐ์ด ์ฆ์ ์ข ๋ฃํ ๊ฒฝ์ฐ, ํ ๋น๋์ด์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค. ์ค์ค๋ก ์ฒดํฌํ๊ณ ์ข ๋ฃํ ์ ์๋ 2. ์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
Thread-Local Storage
ํ๋ก์ธ์ค์ ๋ธ๋ฆฐ ์ค๋ ๋๋ ํ๋ก์ธ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ์ง๋ง, ๋ช๊ฐ์ง ์ํฉ์์๋ ์ค๋ ๋ ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค.
์๋ฅผ ๋ค์ด transaction-processing system์์, ๋ถ๋ฆฌ๋ ์ค๋ ๋๊ฐ ๊ฐ๊ฐ์ ๋ค๋ฅธ transaction์ ์ฒ๋ฆฌํด์ผ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ transaction์ ์๋ณ์๊ฐ ์์ด์ผ ํ๋ค. ์ด๋ฐ๊ฒฝ์ฐ์ Thread local storage๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ค๋ ๋ ๋ด ์ง์ญ๋ณ์์ ํท๊ฐ๋ฆด ์ ์๋๋ฐ, ์ง์ญ๋ณ์๋ ์ค์ง ํ๋์ ํจ์ ์ฒ๋ฆฌ ํ๋ฆ์๋ง ํ ๋น/์ ๊ฑฐ ๋๋ ๋ฐ์ดํฐ์ด๋ค. TLS๋ ํจ์์ฒ๋ฆฌ์ ์๊ด ์์ด ํน์ ์ค๋ ๋ ๋ด์ ๋ชจ๋ ํ๋ฆ์ ์ฌ์ฉํ ์ ์๋ค.
'CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[OS] CPU Scheduling (1) | 2024.09.29 |
---|---|
[OS] Processes (0) | 2024.09.14 |
[DB] Index (0) | 2024.03.24 |