๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์šด์˜์ฒด์ œ

[OS] ์“ฐ๋ ˆ๋“œ(Thread)์™€ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ(Multithreading)

 

๐Ÿ“Œ ์“ฐ๋ ˆ๋“œ(Thread)

 

 

์“ฐ๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ๊ฐ€๋ณ๊ณ  ํšจ์œจ์ ์ด๋ฉฐ, ์ปค๋„์€ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค. Basic unit of CPU utilization ์ด๋ฉฐ

code, data, file ๋“ฑ ์˜ ์ž์›์„ ๊ณต์œ ํ•œ๋‹ค. ์“ฐ๋ ˆ๋“œ๋Š” TCB๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ  TCB์—๋Š” ์“ฐ๋ ˆ๋“œ id , ์“ฐ๋ ˆ๋“œ์˜ ์ƒํƒœ (running, waiting, ready) ๋“ฑ์˜ ์ƒํƒœ, stack pointer, program counter, pointer to PCB, ๋ ˆ์ง€์Šคํ„ฐ ์…‹์ด ์žˆ๋‹ค.

 

 

 

 

๊ทธ๋ ‡๋‹ค๋ฉด ํ”„๋กœ์„ธ์Šค ๋Œ€์‹  ์“ฐ๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์™€ ์žฅ์ ์€ ๋ฌด์—‡์ผ๊นŒ? 

 

  • Responsiveness (์‘๋‹ต์„ฑ): ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๊ฐ€ ์ฐจ๋‹จ๋˜์—ˆ์„ ๋•Œ์—๋„ ๊ณ„์† ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. ํŠนํžˆ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์— ์žˆ์–ด์„œ ๋งค์šฐ ์ค‘์š”ํ•œ๋ฐ, ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ˜์‘์„ฑ์„ ๋†’๊ฒŒ ๋А๋‚„ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  • Resource Sharing (์ž์› ๊ณต์œ ): ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ๊ณต์œ ํ•œ๋‹ค. ์ด๋Š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž์›์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • Economy (๊ฒฝ์ œ์„ฑ): ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ๋ณด๋‹ค ์ €๋ ดํ•˜๋ฉฐ, ์Šค๋ ˆ๋“œ ์ „ํ™˜์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ปจํ…์ŠคํŠธ ์ „ํ™˜๋ณด๋‹ค ๋‚ฎ๋‹ค. ์ฆ‰, ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๋น„๊ต์  ๋” ํšจ์œจ์ ์ด๊ณ  ๊ฒฝ์ œ์ ์ด๋‹ค.
  • Scalability (ํ™•์žฅ์„ฑ): ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์ค‘ ํ”„๋กœ์„ธ์„œ ์•„ํ‚คํ…์ฒ˜์˜ ์ด์ ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์ค‘ ํ”„๋กœ์„ธ์„œ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋™์‹œ์— ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“Œ Multicore Programming

 

 

๋ฉ€ํ‹ฐ์ฝ”์–ด ํ˜น์€ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ์Šคํ…œ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ data ๋ถ„์‚ฐ, task ๋ถ„์‚ฐ ๋ฐธ๋Ÿฐ์‹ฑ , ํ…Œ์ŠคํŠธ์™€ ๋””๋ฒ„๊น… ๋“ฑ์˜ ์••๋ฐ•๊ฐ์„ ์ค€๋‹ค.

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ๋ณ‘๋ ฌ์„ฑ๊ณผ ๋™์‹œ์„ฑ์— ๋Œ€ํ•ด ๊ตฌ๋ถ„ ์ง€์„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ๋ณ‘๋ ฌ์„ฑ์€ ๋™์‹œ์„ฑ๋ณด๋‹ค ๋”์šฑ ์—„๊ฒฉํ•˜๋‹ค ์‹ฑ๊ธ€ ์ฝ”์–ด์—์„œ ๋‹ค์ˆ˜์˜ ์“ฐ๋ ˆ๋“œ๋Š” ๋™์‹œ์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์‹คํ–‰ ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ๋ณ‘๋ ฌ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋™์‹œ์˜ ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค. ์•„๋ž˜์˜ ์ฒซ ๋ฒˆ์งธ ๊ทธ๋ฆผ์€ ์‹ฑ๊ธ€ ์ฝ”์–ด์ผ ๋•Œ๋„ ๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค. ํ•˜์ง€๋งŒ ๋ณ‘๋ ฌ์ ์ด์ง€๋Š” ์•Š๋‹ค. ๋‘ ๋ฒˆ์งธ ๊ทธ๋ฆผ์€ ๋ฉ€ํ‹ฐ์ฝ”์–ด์˜ ๋ฉ€ํ‹ฐํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ฉด์„œ ๋ณ‘๋ ฌ์ ์ด๊ณ  ๋™์‹œ์ ์ธ ์‹คํ–‰์„ ๋ณด์—ฌ์ค€๋‹ค. 

 

 

์‹ฑ๊ธ€์ฝ”์–ด ์‹œ์Šคํ…œ

 

๋ฉ€ํ‹ฐ์ฝ”์–ด ์‹œ์Šคํ…œ

 

 

 

์ด์ œ๋Š” ๋ณ‘๋ ฌ์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. ๋‘ ๊ฐ€์ง€ ๋ณ‘๋ ฌ์„ ์•Œ์•„๋ณผ ๊ฑด๋ฐ ํ•˜๋‚˜๋Š” ๋ฐ์ดํ„ฐ ๋ณ‘๋ ฌ์ด๋‹ค. ๋ฐ์ดํ„ฐ ๋ณ‘๋ ฌ์€ ๊ฐ์ž ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ๋‹ค๋ฅธ ์—…๋ฌด๋ฅผ ํ•˜๋Š” ๋ณ‘๋ ฌ์„ ์˜๋ฏธํ•œ๋‹ค.

 

๋ฐ์ดํƒ€ ๋ณ‘๋ ฌ

 

 

๋‹ค๋ฅธ ํ•œ ์ข…๋ฅ˜์˜ ๋ณ‘๋ ฌ์€ ๊ณผ์—… ๋ณ‘๋ ฌ์ด๋‹ค. ๊ณผ์—… ๋ณ‘๋ ฌ์€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ๊ฐ์ž์˜ ์—…๋ฌด๋ฅผ ํ•˜๋Š” ๋ณ‘๋ ฌ์„ ์˜๋ฏธํ•œ๋‹ค.

๊ณผ์—… ๋ณ‘๋ ฌ

 

์‰ฝ๊ฒŒ ๋งํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋ƒ ํ•˜์ง€ ์•Š๋А๋ƒ์˜ ์˜๋ฏธ๋ฅผ ๋‘๊ณ  ๋ณ‘๋ ฌ์˜ ์šฉ๋„๋ฅผ ๋‹ฌ๋ฆฌ ํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

Amdahl's Law

 

์ด๋ ‡๊ฒŒ ๋ณด๋‹ค๋ณด๋ฉด ์ฝ”์–ด ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ํ”„๋กœ๊ทธ๋žจ์„ ๋งŽ์ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋น„๋ก€ํ•˜์—ฌ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ๊ฐ ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์ฝ”์–ด์ˆ˜๊ฐ€ ๋งŽ์€ ๋งŒํผ ๊ทธ ์ˆ˜์— ๋น„๋ก€ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์†๋„๊ฐ€ ๋นจ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๊ฒƒ์„ ์ฆ๋ช…ํ•œ ๊ฒƒ์ด ์•”๋‹ฌ์˜ ๋ฒ•์น™์ด๋‹ค.

 

๊ทธ๋ž˜ํ”„์˜ S๋Š” ์ง๋ ฌํ™”์˜ ๋น„์œจ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์•”๋‹ฌ์˜ ๋ฒ•์น™ ๊ณต์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

์•”๋‹ฌ์€ ๋ณ‘๋ ฌํ™”๋œ ๋ถ€๋ถ„์ด ์ „์ฒด ์ž‘์—…์—์„œ ์ฐจ์ง€ํ•˜๋Š” ๋น„์œจ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜์˜€๊ณ , ์‹ค์ œ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด์„œ ๋ณ‘๋ ฌํ™”๋œ ๋ถ€๋ถ„ ์™ธ์—๋„ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์ง๋ ฌ์ ์œผ๋กœ , ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ํ–ฅ์ƒ์˜ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๐Ÿ“Œ Multithreading

 

์“ฐ๋ ˆ๋“œ๋Š” ๋‘ ๊ฐ€์ง€์˜ ๋ถ„๋ฅ˜๋กœ ๋‚˜๋‰  ์ˆ˜ ์žˆ๋‹ค. ์šฐ์„  ์œ ์ € ์Šค๋ ˆ๋“œ๋Š” ์‚ฌ์šฉ์ž ์ˆ˜์ค€(user-level)์—์„œ ๊ด€๋ฆฌ๋˜๋Š”๋ฐ ์ด๋Ÿฌํ•œ ์“ฐ๋ ˆ๋“œ๋Š” ์ฃผ๋กœ ์‚ฌ์šฉ์ž ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ƒ์„ฑ๋˜๊ณ  ์‹คํ–‰๋˜๋ฉฐ, ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ์™€ ์Šค์ผ€์ค„๋ง์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ˆ˜ํ–‰๋œ๋‹ค. 

๋‹ค์Œ์œผ๋กœ ์ปค๋„ ์Šค๋ ˆ๋“œ๋Š” ์šด์˜ ์ฒด์ œ ์ปค๋„(kernel) ์ˆ˜์ค€์—์„œ ๊ด€๋ฆฌ๋˜๋ฉฐ ์‹œ์Šคํ…œ ๋ ˆ๋ฒจ์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ์™€ ์Šค์ผ€์ค„๋ง์€ ์šด์˜ ์ฒด์ œ ์ปค๋„์— ์˜ํ•ด ์ˆ˜ํ–‰๋˜๋Š”๋ฐ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค๋Š” ๊ฐ’์ด ์‹ธ์ง€๋งŒ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๋‹จ์˜ ์œ ์ € ์“ฐ๋ ˆ๋“œ๋ณด๋‹ค๋Š” ๋น„์‹ธ๋‹ค.

 

์œ ์ € ์“ฐ๋ ˆ๋“œ์™€ ์ปค๋„ ์“ฐ๋ ˆ๋“œ

 

๋Œ€๋ถ€๋ถ„ ์šด์˜์ฒด์ œ ์ปค๋„์—์„œ๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์œผ๋กœ ์šด์˜๋˜๋ฉฐ, ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํ•ธ๋“ค๋งํ•˜๊ฑฐ๋‚˜ ํ•˜๋“œ์›จ์–ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋“ฑ์˜ ๊ตฌ์ฒด์ ์ธ ๊ณผ์—…์„ ํ•œ๋‹ค.

์ปค๋„ ์“ฐ๋ ˆ๋“œ

 

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋”ฉ์„ ์–˜๊ธฐํ•˜๋ฉด์„œ ์™œ ์ปค๋„ ์“ฐ๋ ˆ๋“œ์™€ ์œ ์ € ์“ฐ๋ ˆ๋“œ์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์–˜๊ธฐํ•˜์˜€์„๊นŒ? ์œ ์ € ์“ฐ๋ ˆ๋“œ์™€ ์ปค๋„ ์“ฐ๋ ˆ๋“œ๋Š” ์„œ๋กœ ๋Œ€์‘๋˜์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ CPU์—์„œ ์‹คํ–‰ํ•˜๋Š” ๋‹จ์œ„๋Š” ์ปค๋„ ์“ฐ๋ ˆ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ € ์“ฐ๋ ˆ๋“œ๋Š” ๋ฐ˜๋“œ์‹œ ์ปค๋„ ์“ฐ๋ ˆ๋“œ์™€ ์—ฐ๊ฒฐ์ด ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ๊ทธ ํ›„์— ์ปค๋„ ์“ฐ๋ ˆ๋“œ๊ฐ€ CPU์—์„œ ์‹คํ–‰๋œ๋‹ค. ์ฆ‰ ์ฃผ์ฒด ์ž์ฒด๊ฐ€ ์ปค๋„ ์“ฐ๋ ˆ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ € ์“ฐ๋ ˆ๋“œ๋Š” ๋‹จ๋…์ ์œผ๋กœ CPU์— ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด์ œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์˜ ๋ชจ๋ธ์„ ํ†ตํ•ด์„œ ์œ ์ €์“ฐ๋ ˆ๋“œ์™€ ์ปค๋„์“ฐ๋ ˆ๋“œ๊ฐ€ ๋Œ€์‘๋˜๋Š” ๋ชจ์Šต์„ ์‚ดํŽด๋ณด์ž.

 

Many-to-One

 

 

 

๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด User Thread ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ํ•˜๋‚˜์˜ Kernel Thread ์— ๋งคํ•‘๋œ๋‹ค. ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ๊ฐ€ ์œ ์ € ์˜์—ญ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜ํ•ด ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ํšจ์œจ์ ์ด์ง€๋งŒ, ํ•œ User Thread ๊ฐ€ Block ๋˜๋ฉด Kernel Thread ์ž์ฒด๊ฐ€ Block ๋œ๋‹ค. ๋˜ํ•œ, ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ User Thread๋งŒ Kernel ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

 

 

One-to-One

 

 

 

User Thread ํ•˜๋‚˜๋‹น Kernel Thread ํ•˜๋‚˜์”ฉ ๋งคํ•‘๋œ๋‹ค. ํ”„๋กœ์„ธ์Šค ๋‚ด ์Šค๋ ˆ๋“œ๊ฐ€ ๋ณ‘๋ ฌ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๊ณ , ๋‹ค๋Œ€์ผ ๋ชจ๋ธ์˜ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€๋งŒ,  User thread ์ƒ์„ฑ์‹œ๋งˆ๋‹ค Kernel thread๊ฐ€ ์ƒ์„ฑ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„์šฉ์ด ๋†’๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์„ธ์Šค๋‹น ์Šค๋ ˆ๋“œ์˜ ์ˆ˜๊ฐ€ ์ œํ•œ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— Overhead ๋ฐœ์ƒ์˜ ์šฐ๋ ค๊ฐ€ ์žˆ๋‹ค.

 

Many-to-One

 

 

 

User Thread ๋ฅผ ๋™์ผํ•œ ์ˆ˜, ํ˜น์€ ๊ทธ ์ดํ•˜์˜ Kernel Thread ์— ๋งคํ•‘ํ•˜์—ฌ, ์ด์ „ ๋‘ ๋ชจ๋ธ์˜ ๋‹จ์ ์„ ๊ทน๋ณต. User Thread ๊ฐ€ Block ๋˜์–ด ์—ฐ๊ฒฐ๋œ Kernel Thread ๊ฐ€ Block ๋˜์–ด๋„, ๋‹ค๋ฅธ User Thread ๋ฅผ ๋‹ค๋ฅธ Kernel Thread ๋กœ ๋งคํ•‘ํ•˜์—ฌ ๋Œ€๊ธฐ์ƒํƒœ์— ๋น ์ง€๋Š” ๊ฒƒ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๊ตฌ์กฐ๋Š” ์œ„์—์„œ ์†Œ๊ฐœํ•œ ๋‘ ๋ชจ๋ธ์˜ ์žฅ์ ๋“ค๋งŒ์„ ํ•ฉ์ณค๋‹ค๋Š” ์ ์—์„œ ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ ๋ชจ๋ธ์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค. ์šฐ์„  One-to-One ๋ชจ๋ธ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณต์ˆ˜์˜ OS ์“ฐ๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฏ€๋กœ ๋ฉ€ํ‹ฐ์ฝ”์–ด์˜ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ˜น์‹œ๋ผ๋„ ํŠน์ • OS ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ธ”๋ก๋˜์–ด๋„ ๋‚˜๋จธ์ง€ OS ์“ฐ๋ ˆ๋“œ๋“ค์€ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‚˜์•„๊ฐ€ Many-to-One ๋ชจ๋ธ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ€๋ฒผ์šด ๋ฌด๊ฒŒ์˜ ์œ ์ € ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฌดํ•œ์ • ๋งŒ๋“ค์–ด๋„ ํ”„๋กœ์„ธ์Šค์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€์ง€ ์•Š์œผ๋ฉฐ, ์œ ์ € ์“ฐ๋ ˆ๋“œ ๊ฐ„์˜ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์€ ์œ ์ € ๋ ˆ๋ฒจ์—์„œ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๊ต‰์žฅํžˆ ๋น ๋ฅด๋‹ค.

Many-to-Many ๋ชจ๋ธ์˜ ๊ตฌํ˜„์ฒด๋Š” ์ ์ ˆํ•œ ๊ฐœ์ˆ˜์˜ ์œ ์ € ์“ฐ๋ ˆ๋“œ๋“ค๋งŒ์„ OS ์“ฐ๋ ˆ๋“œ๋“ค์— ์—ฐ๊ฒฐ์‹œํ‚ค๋Š” ๋“ฑ ์ตœ์ ํ™” ์ž‘์—…์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ปค๋„์—์„œ๋Š” OS ์“ฐ๋ ˆ๋“œ ๊ฐ„์˜ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ์—†์ด ๊ทธ๋•Œ ๊ทธ๋•Œ OS ์“ฐ๋ ˆ๋“œ์— ์—ฐ๊ฒฐ๋˜๋Š” ์œ ์ € ์“ฐ๋ ˆ๋“œ๋“ค์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค. 

 

Many-to-Many ๋ชจ๋ธ์˜ ์œ ์ผํ•œ ๋ฌธ์ œ์ ์€ ๋ฐ”๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์—”์ง€๋‹ˆ์–ด๋“ค ์ž…์žฅ์—์„œ ๊ตฌํ˜„ํ•˜๊ธฐ ํž˜๋“ค๋‹ค๋Š” ์ ์ด๋‹ค.

 

Two-level Model

 

 

 

๋งŽ์€ User Thread๋ฅผ ์ ๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜์˜ Kernel Thread์— ๋ฉ€ํ‹ฐํ”Œ๋ ‰์Šค ์‹œํ‚ค๊ณ , ํ•œ User Thread๋Š” ํ•˜๋‚˜์˜ Kernel Thread์—๋งŒ ์—ฐ๊ด€๋˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•œ๋‹ค.

 

 

 

 

์•ž์„œ ์ด๋Ÿฐ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋”ฉ ๋ชจ๋ธ๋“ค์€ ์“ฐ๋ ˆ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ <pthread.h>๋ฅผ ํ†ตํ•ด์„œ API๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ Java์˜ ์“ฐ๋ ˆ๋“œ ํ’€์„ ํ†ตํ•ด ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ C๋‚˜ C++ ์˜ Open MP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด์„œ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.