CS

[OS] Threads, Concurrency

rkawk 2024. 9. 15. 22:34

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