๐Ÿ‘จโ€๐Ÿซ ์ง€์„ ์ƒ๋‹˜๊ณผ CS๊ธฐ์ดˆ ๋ถ€์ˆ˜๊ธฐ 2ํƒ„ - [ ์šด์˜์ฒด์ œ ]

hoheesuยท2025๋…„ 7์›” 14์ผ

์ง€์„ ์ƒ๊ณผ cs

๋ชฉ๋ก ๋ณด๊ธฐ
2/3
post-thumbnail

์ด๋ฒˆ ํฌ์ŠคํŒ…์€ cs ์šด์˜์ฒด์ œ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

์ฃผ์ œ๋ชฉํ‘œ
ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์‹คํ–‰ ๋‹จ์œ„์˜ ์ฐจ์ด, ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ์ •ํ™• ์ดํ•ด
๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ, ํŽ˜์ด์ง•, ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ๊ตฌ์กฐ ์ดํ•ด
CPU ์Šค์ผ€์ค„๋งFCFS, SJF, RR ๋“ฑ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •ํ™• ์ดํ•ด
๋™๊ธฐํ™”๋ฎคํ…์Šค, ์„ธ๋งˆํฌ์–ด, ๊ต์ฐฉ ์ƒํƒœ (Deadlock) ์ดํ•ด

๐Ÿง‘โ€๐Ÿซ ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ (Process & Thread)

๐Ÿ’ป ํ”„๋กœ์„ธ์Šค๋ž€?

ํ”„๋กœ์„ธ์Šค (Process) โ†’ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ์˜๋ฏธํ•œ๋‹ค

์ฆ‰, ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ, ์šด์˜์ฒด์ œ๋Š” โ€œํ”„๋กœ์„ธ์Šคโ€๋ผ๋Š” ๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

ํ”„๋กœ์„ธ์Šค์˜ ํŠน์ง•

  • ๊ณ ์œ ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฐ€์ง„๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๊ตฌ์กฐ
    • ์ฝ”๋“œ ์˜์—ญ (ํ”„๋กœ๊ทธ๋žจ ๋ช…๋ น์–ด)
    • ๋ฐ์ดํ„ฐ ์˜์—ญ (์ „์—ญ๋ณ€์ˆ˜)
    • ํž™ ์˜์—ญ (๋™์  ๋ฉ”๋ชจ๋ฆฌ)
    • ์Šคํƒ ์˜์—ญ (ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ •๋ณด)
  • ํ”„๋กœ์„ธ์Šค๋ผ๋ฆฌ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š์Œ (์™„๋ฒฝํžˆ ๋…๋ฆฝ)

๐Ÿ“š ์Šค๋ ˆ๋“œ๋ž€?

์Šค๋ ˆ๋“œ (Thread) โ†’ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์‹ค์ œ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ตœ์†Œ ์‹คํ–‰ ๋‹จ์œ„

ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์—๋Š” ์ตœ์†Œ 1๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•œ๋‹ค.
์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ(Main Thread).

์Šค๋ ˆ๋“œ์˜ ํŠน์ง•

  • ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ณต์œ 
  • ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค์˜ ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ๋Š”
    • ์ฝ”๋“œ ์˜์—ญ, ๋ฐ์ดํ„ฐ ์˜์—ญ, ํž™ ์˜์—ญ์„ ๊ณต์œ 
    • ์Šคํƒ ์˜์—ญ์€ ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋”ฐ๋กœ ๊ฐ€์ง (ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ •๋ณด๋Š” ๋ณ„๋„)

โœ” ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
โœ” ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ๋น ๋ฆ„
โœ” ์›น ์„œ๋ฒ„, ๊ฒŒ์ž„ ๋“ฑ์—์„œ ๋งค์šฐ ๋งŽ์ด ์‚ฌ์šฉ๋จ

โš ๏ธ ์Šค๋ ˆ๋“œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป ์„ค๊ณ„ํ•˜๋ฉด ์ถฉ๋Œ, ๋ฐ์ดํ„ฐ ์˜ค์—ผ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.

๋™๊ธฐํ™” ๋ฌธ์ œ (Race Condition) โ†’ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ์— ๋™์‹œ์— ์ ‘๊ทผํ•  ๋•Œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜

ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ์ฐจ์ด์ 

ํ•ญ๋ชฉํ”„๋กœ์„ธ์Šค์Šค๋ ˆ๋“œ
์ •์˜์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจํ”„๋กœ์„ธ์Šค ๋‚ด ์ตœ์†Œ ์‹คํ–‰ ๋‹จ์œ„
๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„๋…๋ฆฝ์ ๊ณต์œ  (์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ํž™)
์Šคํƒ๋…๋ฆฝ์ ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋ณ„๋„
์ƒ์„ฑ ๋น„์šฉ์ƒ๋Œ€์ ์œผ๋กœ ํผ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์Œ
๋Œ€ํ‘œ ์‚ฌ๋ก€๋ธŒ๋ผ์šฐ์ € ์‹คํ–‰, ๊ฒŒ์ž„ ์‹คํ–‰ ๋“ฑ๋ธŒ๋ผ์šฐ์ € ํƒญ, ์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ ๋“ฑ

๐Ÿง‘โ€๐Ÿซ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ• (๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ, ํŽ˜์ด์ง•, ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜)

๐Ÿ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌ ํ•ด์•ผํ•˜๋Š” ์ด์œ 

์ปดํ“จํ„ฐ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์ด ํ•œ์ •๋˜์–ด ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ ํ”„๋กœ๊ทธ๋žจ๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด๋„ ์ž˜ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์šด์˜์ฒด์ œ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์‹œ์— ๋Œ์•„๊ฐˆ ๋•Œ 1. ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ๋ง‰๊ณ  2. ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ์„œ๋กœ ์นจ๋ฒ”ํ•˜์ง€ ์•Š๊ฒŒ 3. ํ•„์š”ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํฐ ํ”„๋กœ๊ทธ๋žจ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

๐Ÿ’ซ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ

์šด์˜์ฒด์ œ๊ฐ€ RAM ๊ณผ ๋ณด์กฐ ๊ธฐ์–ต์žฅ์น˜(SSD/HDD)๋ฅผ ํ•จ๊ป˜ ํ™œ์šฉํ•ด ๋งˆ์น˜ "๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ›จ์”ฌ ํฐ ๊ฒƒ์ฒ˜๋Ÿผ" ๋ณด์ด๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

๋™์ž‘ ์›๋ฆฌ

  • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์— ๋…๋ฆฝ์ ์ธ ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ์ œ๊ณต
  • ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด, ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ๋กœ ์˜ฎ๊ฒผ๋‹ค๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ด โ†’ ์ด๊ฑธ ํŽ˜์ด์ง€ ๊ต์ฒด(Page Replacement) ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

1๏ธโƒฃ ํŽ˜์ด์ง• (Paging)

๐Ÿ’ก ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌํ˜„์„ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•
๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ • ํฌ๊ธฐ์˜ ๋ธ”๋ก์ธ ํŽ˜์ด์ง€(Page) ๋กœ ๋‚˜๋ˆ ์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•

  • ํŽ˜์ด์ง€: ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚˜๋ˆˆ ์ž‘์€ ๋‹จ์œ„ (๋ณดํ†ต 4KB)
  • ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”(Page Table): ๊ฐ€์ƒ ์ฃผ์†Œ์™€ ์‹ค์ œ ์ฃผ์†Œ๋ฅผ ๋งคํ•‘ํ•˜๋Š” ํ‘œ
  • ์žฅ์ : ๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฐํ™” ์ตœ์†Œํ™”, ๋น ๋ฅธ ์ ‘๊ทผ ๊ฐ€๋Šฅ

ํ•ต์‹ฌ ๋™์ž‘ ํ๋ฆ„

  1. CPU๊ฐ€ ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ์š”์ฒญ
  2. ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ํ†ตํ•ด ์‹ค์ œ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์กฐํšŒ
  3. ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์—†์œผ๋ฉด โ†’ ๋””์Šคํฌ์—์„œ ๋ถˆ๋Ÿฌ์˜ด (ํŽ˜์ด์ง€ ํดํŠธ ๋ฐœ์ƒ)

2๏ธโƒฃ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ (Segmentation)

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ์Šคํƒ ๊ฐ™์€ ๋…ผ๋ฆฌ์  ๊ตฌ์—ญ(์„ธ๊ทธ๋จผํŠธ) ์œผ๋กœ ๋‚˜๋ˆ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

  • ๊ฐ ์„ธ๊ทธ๋จผํŠธ ํฌ๊ธฐ์™€ ์œ„์น˜๋Š” ์œ ๋™์  (๊ฐ€๋ณ€ ํฌ๊ธฐ)
  • ์žฅ์ : ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋ณ„ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์›€
  • ๋‹จ์ : ์™ธ๋ถ€ ๋‹จํŽธํ™”(External Fragmentation) ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ

โœ… ํŽ˜์ด์ง• vs ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ๋น„๊ต

ํ•ญ๋ชฉํŽ˜์ด์ง•์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜
๋ถ„ํ•  ๊ธฐ์ค€๊ณ ์ • ํฌ๊ธฐ ํŽ˜์ด์ง€๋…ผ๋ฆฌ์  ๊ตฌ์—ญ (์ฝ”๋“œ, ๋ฐ์ดํ„ฐ ๋“ฑ)
ํฌ๊ธฐ๊ณ ์ •๊ฐ€๋ณ€
์žฅ์ ์กฐ๊ฐํ™” ์ตœ์†Œํ™”, ๊ด€๋ฆฌ ์‰ฌ์›€๋…ผ๋ฆฌ์  ๊ด€๋ฆฌ ์‰ฌ์›€
๋‹จ์ ์™ธ๋ถ€ ์˜๋ฏธ ์—†์Œ, ์ฃผ์†Œ ๋ณ€ํ™˜ ํ•„์š”์™ธ๋ถ€ ๋‹จํŽธํ™” ๊ฐ€๋Šฅ์„ฑ

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ „์ฒด ๊ตฌ์กฐ ํ๋ฆ„

  • ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ
    - ํŽ˜์ด์ง• โ†’ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ • ํฌ๊ธฐ๋กœ ๋‚˜๋ˆ ์„œ ๊ด€๋ฆฌ
    - ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ โ†’ ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ๋‚˜๋ˆ ์„œ ๊ด€๋ฆฌ

ํ˜„๋Œ€ ์šด์˜์ฒด์ œ๋Š” ๋ณดํ†ต ํŽ˜์ด์ง• ๊ธฐ๋ฐ˜ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์€ ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ , ๊ณผ๊ฑฐ ์‹œ์Šคํ…œ์—์„œ ์ฃผ๋กœ ์“ฐ์˜€๋‹ค.

๐Ÿ’ก ๊ทธ๋™์•ˆ ์„œ๋ฒ„์—์„œ Out of memory: Killed process 12345 (your-app) ์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด์„œ ๊ฐ‘์ž๊ธฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ•์ œ ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋–„ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ(RAM)๊ฐ€ ๋ถ€์กฑํ•˜๊ณ  ๋””์Šคํฌ I/O๋„ ํ•œ๊ณ„์— ๋‹ค๋‹ค๋ฅด๋ฉด โ†’ ๋” ์ด์ƒ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋„ ํ• ๋‹น ๋ถˆ๊ฐ€ โ†’ OOM ์—๋Ÿฌ ๋ฐœ์ƒ


๐Ÿง‘โ€๐Ÿซ CPU ์Šค์ผ€์ค„๋ง (CPU Scheduling)

์šด์˜์ฒด์ œ์˜ ์ค‘์š”ํ•œ ์—ญํ•  ์ค‘ ํ•˜๋‚˜๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๊ณต์ •ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ CPU๋ฅผ ๋‚˜๋ˆ ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.
์ด ๊ณผ์ •์„ CPU ์Šค์ผ€์ค„๋ง์ด๋ผ๊ณ  ํ•จ.

โœ๏ธ CPU ์Šค์ผ€์ค„๋ง์ด ํ•„์š”ํ•œ ์ด์œ 

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

๐Ÿ“ ์ฃผ์š” ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜

(1) FCFS (First-Come, First-Served)

โ€œ๋จผ์ € ์˜จ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ์ฒ˜๋ฆฌ๋œ๋‹คโ€

  • ๋„์ฐฉ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ
  • ๋‹จ์ˆœํ•˜์ง€๋งŒ, ๊ธด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ์˜ค๋ฉด ์ „์ฒด๊ฐ€ ๋А๋ ค์ง€๋Š” ๋‹จ์  (Convoy Effect)

(2) SJF (Shortest Job First)

โ€œ์ž‘์—… ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์งง์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์‹คํ–‰โ€

  • ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ๋‚ฎ์Œ (์ด๋ก ์ƒ ์ตœ์ )
  • ์‹ค์ œ๋กœ๋Š” ์ž‘์—… ์‹œ๊ฐ„์„ ์ •ํ™•ํžˆ ์•Œ๊ธฐ ์–ด๋ ค์›Œ ์‹ค์šฉ์„ฑ ์ œํ•œ

(3) Priority Scheduling

โ€œ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์‹คํ–‰โ€

  • ๊ฐ ํ”„๋กœ์„ธ์Šค์— ์šฐ์„ ์ˆœ์œ„๋ฅผ ์„ค์ •ํ•ด์„œ ๋†’์€ ๊ฒƒ๋ถ€ํ„ฐ ์‹คํ–‰
  • ์šฐ์„ ์ˆœ์œ„ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜์›ํžˆ ์‹คํ–‰ ์•ˆ ๋  ์œ„ํ—˜ (Starvation ํ˜„์ƒ)
  • ํ•ด๊ฒฐ์ฑ… โ†’ Aging ๊ธฐ๋ฒ• (์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆด์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„ ์ƒ์Šน)

(4) Round Robin (RR)

โ€œํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ์ผ์ • ์‹œ๊ฐ„(Time Quantum)๋งŒํผ CPU๋ฅผ ํ• ๋‹นโ€

  • ํ˜„๋Œ€ ์šด์˜์ฒด์ œ์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋จ
  • ์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰์ด ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด ๋นˆ๋ฒˆํ•œ ์ „ํ™˜์œผ๋กœ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ
  • ๋„ˆ๋ฌด ํฌ๋ฉด FCFS์ฒ˜๋Ÿผ ์ž‘๋™ํ•ด ์‘๋‹ต์„ฑ ์ €ํ•˜
์•Œ๊ณ ๋ฆฌ์ฆ˜ํŠน์ง•์žฅ์ ๋‹จ์ 
FCFS๋„์ฐฉ ์ˆœ์„œ๋‹จ์ˆœConvoy Effect
SJF์งง์€ ์ž‘์—… ์šฐ์„ ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์ตœ์†Œํ™”์‹ค์ œ ์˜ˆ์ธก ์–ด๋ ค์›€
Priority์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜์ค‘์š”ํ•œ ์ž‘์—… ๋น ๋ฅด๊ฒŒ ์‹คํ–‰Starvation ์œ„ํ—˜
Round Robin์ •ํ•ด์ง„ ์‹œ๊ฐ„์”ฉ ์ˆœํ™˜๊ณต์ •์„ฑ ๋†’์Œ, ๋„๋ฆฌ ์‚ฌ์šฉ์˜ค๋ฒ„ํ—ค๋“œ ๊ฐ€๋Šฅ์„ฑ

๐Ÿ’ก ์ผ๋ฐ˜์ ์œผ๋กœ ํ˜„๋Œ€์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Round Robin + Priority Scheduling ์กฐํ•ฉ์˜ CPU ์Šค์ผ€์ฅด๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฌผ๋ก  ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน๋ณ„๋กœ ์Šค์ผ€์ค„๋ง ์ •์ฑ…์„ ๋‹ค๋ฅด๊ฒŒ ์ ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๐Ÿง‘โ€๐Ÿซ ๋™๊ธฐํ™” (Synchronization)

โ˜๏ธ ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•จ.
โ†’ ๋™์‹œ์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋ฉด, ๊ฐ’์ด ๊ผฌ์ด๊ฑฐ๋‚˜ ์ถฉ๋Œํ•  ์œ„ํ—˜์ด ์žˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ Race Condition (๊ฒฝ์Ÿ ์ƒํƒœ) ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

  • ์€ํ–‰ ๊ณ„์ขŒ ์ž…๊ธˆ/์ถœ๊ธˆ
  • ์‡ผํ•‘๋ชฐ ์žฌ๊ณ  ์ฒ˜๋ฆฌ

๋ฎคํ…์Šค

Mutual Exclusion (์ƒํ˜ธ ๋ฐฐ์ œ)์˜ ์•ฝ์ž

ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์ž„๊ณ„ ๊ตฌ์—ญ(Critical Section)์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋™๊ธฐํ™” ๊ธฐ๋ฒ•

  • ์Šค๋ ˆ๋“œ๊ฐ€ ์ž„๊ณ„ ๊ตฌ์—ญ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์ž ๊ธˆ(Lock) ์„ ํš๋“
  • ์ž‘์—…์ด ๋๋‚˜๋ฉด ์ž ๊ธˆ ํ•ด์ œ(Unlock)
  • ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” ์ž ๊ธˆ์ด ํ’€๋ฆด ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ

ํŠน์ง•

  • ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  ๊ฐ•๋ ฅ
  • ํ•˜์ง€๋งŒ ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฝ์„ ์•ˆ ํ’€๋ฉด ์‹œ์Šคํ…œ์ด ๋ฉˆ์ถœ ์œ„ํ—˜ ์žˆ์Œ (Deadlock)

โšก๏ธ ์„ธ๋งˆํฌ์–ด

๋ฎคํ…์Šค์˜ ํ™•์žฅํŒ

๋™์‹œ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๋™๊ธฐํ™” ๊ธฐ๋ฒ•

  • ๋‚ด๋ถ€์ ์œผ๋กœ ์นด์šดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  • ์นด์šดํ„ฐ๊ฐ€ 0์ด ๋˜๋ฉด ์ถ”๊ฐ€ ์ ‘๊ทผ ๋ถˆ๊ฐ€ โ†’ ๋Œ€๊ธฐ
  • ์นด์šดํ„ฐ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด ๋Œ€๊ธฐ ์ค‘์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ง„์ž… ๊ฐ€๋Šฅ

์ข…๋ฅ˜

  • Binary Semaphore (์ด์ง„ ์„ธ๋งˆํฌ์–ด): 0 or 1 (๋ฎคํ…์Šค์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™)
  • Counting Semaphore (๊ณ„์ˆ˜ ์„ธ๋งˆํฌ์–ด): N๊ฐœ์˜ ๋™์‹œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

๋ฎคํ…์Šค vs ์„ธ๋งˆํฌ์–ด ์ฐจ์ด

ํ•ญ๋ชฉ๋ฎคํ…์Šค์„ธ๋งˆํฌ์–ด
์ ‘๊ทผ ๊ฐ€๋Šฅ ์Šค๋ ˆ๋“œ ์ˆ˜1๊ฐœ์—ฌ๋Ÿฌ ๊ฐœ (N๊ฐœ)
์‚ฌ์šฉ ๋ชฉ์ ์ƒํ˜ธ ๋ฐฐ์ œ์ œํ•œ์  ๋™์‹œ ์ ‘๊ทผ
Deadlock ์œ„ํ—˜์žˆ์Œ์žˆ์Œ
์‚ฌ์šฉ ์˜ˆ์‹œ๊ณต์œ  ๋ณ€์ˆ˜ ๋ณดํ˜ธ์ž์› ์ œํ•œ (ex. DB Connection Pool)

โœ… ์šฉ์–ด ์ •๋ฆฌ

์šฉ์–ด๋œป์„ค๋ช…
ํ”„๋กœ์„ธ์Šค (Process)์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ๋…๋ฆฝ์  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„, OS๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„
์Šค๋ ˆ๋“œ (Thread)ํ”„๋กœ์„ธ์Šค ๋‚ด ์ตœ์†Œ ์‹คํ–‰ ๋‹จ์œ„๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์ž‘์—… ์ˆ˜ํ–‰
๋ฉ”์ธ ์Šค๋ ˆ๋“œ (Main Thread)ํ”„๋กœ์„ธ์Šค ๋‚ด ์ตœ์ดˆ ์Šค๋ ˆ๋“œํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ์‹œ ์ž๋™ ์ƒ์„ฑ
๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ  ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‚ฌ์šฉ๋ฐ์ดํ„ฐ ์˜์—ญ, ํž™ ์˜์—ญ ๊ณต์œ 
์Šคํƒํ•จ์ˆ˜ ํ˜ธ์ถœ ์ •๋ณด ์ €์žฅ ์˜์—ญ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ํ• ๋‹น
๋™๊ธฐํ™” ๋ฌธ์ œ (Race Condition)์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•ด ๋ฐœ์ƒํ•˜๋Š” ์ถฉ๋Œ ๋ฌธ์ œ์ฃผ์˜ ๊นŠ๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•จ
๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ (Virtual Memory)์‹ค์ œ๋ณด๋‹ค ํฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ RAM + ์ €์žฅ์žฅ์น˜ ์กฐํ•ฉ
ํŽ˜์ด์ง€ (Page)๊ณ ์ • ํฌ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก๋ณดํ†ต 4KB ๋‹จ์œ„
ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” (Page Table)๊ฐ€์ƒ ์ฃผ์†Œ์™€ ์‹ค์ œ ์ฃผ์†Œ ๋งคํ•‘ ํ‘œ์ฃผ์†Œ ๋ณ€ํ™˜ ์‹œ ์‚ฌ์šฉ
ํŽ˜์ด์ง€ ํดํŠธ (Page Fault)ํ•„์š”ํ•œ ํŽ˜์ด์ง€๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์—†๋Š” ์ƒํƒœ๋””์Šคํฌ์—์„œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋ฐœ์ƒ
์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ (Segmentation)๋…ผ๋ฆฌ์  ์˜๋ฏธ ๋‹จ์œ„๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ฝ”๋“œ/๋ฐ์ดํ„ฐ/์Šคํƒ ๋“ฑ์œผ๋กœ ๊ตฌ๋ถ„
์™ธ๋ถ€ ๋‹จํŽธํ™” (External Fragmentation)๋ฉ”๋ชจ๋ฆฌ ๋นˆํ‹ˆ์ด ์ƒ๊ธฐ๋Š” ํ˜„์ƒ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์˜ ๋‹จ์ 
CPU ์Šค์ผ€์ค„๋งCPU๋ฅผ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์— ๋ถ„๋ฐฐํ•˜๋Š” ์ž‘์—…OS์˜ ํ•ต์‹ฌ ์—ญํ• 
FCFSFirst-Come, First-Served๋„์ฐฉ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ
SJFShortest Job First์งง์€ ์ž‘์—… ๋จผ์ € ์‹คํ–‰
Priority Scheduling์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ์Šค์ผ€์ค„๋ง๋†’์€ ์šฐ์„ ์ˆœ์œ„ ๋จผ์ € ์‹คํ–‰
Round Robin (RR)์‹œ๊ฐ„ ํ• ๋‹น ๊ธฐ๋ฐ˜ ์ˆœํ™˜ ์Šค์ผ€์ค„๋งํ˜„๋Œ€ OS ๊ธฐ๋ณธ ์Šค์ผ€์ค„๋ง
Starvation์ž‘์—…์ด ์˜์›ํžˆ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ํ˜„์ƒPriority Scheduling์˜ ๋‹จ์ 
Aging์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆฐ ์ž‘์—…์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๊ธฐ๋ฒ•Starvation ํ•ด๊ฒฐ์ฑ…
Race Condition๋™์‹œ์— ์ ‘๊ทผํ•ด ๋ฐœ์ƒํ•˜๋Š” ์ถฉ๋Œ ๋ฌธ์ œ๋™๊ธฐํ™” ์‹คํŒจ ์‹œ ๋ฐœ์ƒ
๋™๊ธฐํ™” (Synchronization)์Šค๋ ˆ๋“œ ๊ฐ„ ์ถฉ๋Œ์„ ๋ง‰๊ณ  ์กฐ์ •ํ•˜๋Š” ๊ณผ์ •๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ•„์ˆ˜ ๊ฐœ๋…
๋ฎคํ…์Šค (Mutex)ํ•œ ๋ฒˆ์— ํ•˜๋‚˜๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ž ๊ธˆ ์žฅ์น˜์ƒํ˜ธ ๋ฐฐ์ œ ์žฅ์น˜
์„ธ๋งˆํฌ์–ด (Semaphore)๋™์‹œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ์žฅ์น˜๋ฎคํ…์Šค์˜ ํ™•์žฅํŒ
Deadlock์Šค๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ ๋ฝ์„ ํ’€์ง€ ๋ชปํ•ด ๋ฉˆ์ถ”๋Š” ์ƒํƒœ๋™๊ธฐํ™” ์„ค๊ณ„ ์‹คํŒจ ์‹œ ๋ฐœ์ƒ
profile
๐Ÿค”๐Ÿ‘๐Ÿ’ก๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป๐Ÿคฏ๐Ÿ˜‡

0๊ฐœ์˜ ๋Œ“๊ธ€