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

CS/์šด์˜์ฒด์ œ

์šด์˜์ฒด์ œ ๋ฉด์ ‘ ์งˆ๋ฌธ

๐Ÿ’ก ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ๋งํ•˜๋ฉฐ, ์™„๋ฒฝํžˆ ๋…๋ฆฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ(Code, Data, Heap, Stack)์„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ ๊ณต์œ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ์ตœ์†Œ 1๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ(๋ฉ”์ธ ์“ฐ๋ ˆ๋“œ)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์“ฐ๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ Stack๋งŒ ๋”ฐ๋กœ ํ• ๋‹น ๋ฐ›๊ณ , ๊ทธ ์ด์™ธ์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ(Code, Data, Heap)์˜์—ญ์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ฆ‰์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์“ฐ๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์กด์žฌํ•˜๋ฉฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•˜์—ฌ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์™€ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์˜ ํŠน์ง•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃฝ์–ด๋„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๊ณ  ๊ณ„์† ์‹คํ–‰๋œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ

๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋ณด๋‹ค ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„๊ณผ CPU ์‹œ๊ฐ„์„ ์ฐจ์ง€ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋Š” ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ณ  ๋ฌธ๋งฅ ์ „ํ™˜์ด ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ

ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ „์ฒด ์“ฐ๋ ˆ๋“œ๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›์œผ๋ฉฐ ๋™๊ธฐํ™” ๋ฌธ์ œ๋„ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ’ก ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์˜ ๋™์‹œ์„ฑ๊ณผ ๋ณ‘๋ ฌ์„ฑ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋™์‹œ์„ฑ์€ ๋ฉ€ํ‹ฐ ์ž‘์—…์„ ์œ„ํ•ด ์‹ฑ๊ธ€ ์ฝ”์–ด์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฒˆ๊ฐˆ์•„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

(๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‚ฌ์‹ค์€ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ž„)

 

๋ณ‘๋ ฌ์„ฑ์€ ๋ฉ€ํ‹ฐ ์ž‘์—…์„ ์œ„ํ•ด ๋ฉ€ํ‹ฐ ์ฝ”์–ด์—์„œ ํ•œ ๊ฐœ ์ด์ƒ์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ ์ฝ”์–ด๋“ค์„ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ์ฃผ์˜์‚ฌํ•ญ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋‹ค์ˆ˜์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ๋™์‹œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ์— ์ƒํ˜ธ๋ฐฐ์ œ ๋˜๋Š” ๋™๊ธฐํ™” ๊ธฐ๋ฒ•์„ ํ†ตํ•ด ๋™์‹œ์„ฑ ๋ฌธ์ œ ๋˜๋Š” ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก ๋ฐ๋“œ๋ฝ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ž์›์„ ์ ์œ ํ•œ ์ƒํƒœ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž์›์„ ์š”๊ตฌํ•˜๋ฉฐ ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ™ฉ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ž์› A๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค P1๊ณผ ์ž์› B๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค P2๊ฐ€ ์žˆ์„ ๋•Œ, P1์€ B๋ฅผ ํ•„์š”๋กœ ํ•˜๊ณ  P2๋Š” A๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค๋ฉด ๋‘ ํ”„๋กœ์„ธ์Šค๋Š” ์„œ๋กœ ์ž์›์„ ์–ป๊ธฐ ์œ„ํ•ด ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ๋ฐ๋“œ๋ฝ์˜ 4๊ฐ€์ง€ ์กฐ๊ฑด
    1. ๋น„์„ ์  (Nonpreemptive) : ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ๋บ์„ ์ˆ˜ ์—†์Œ.
    2. ์ˆœํ™˜ ๋Œ€๊ธฐ (Circular wait) : ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์› ์ ‘๊ทผ์„ ๊ธฐ๋‹ค๋ฆด ๋•Œ, ๊ด€๊ณ„๊ฐ€ ์ˆœํ™˜์  ๊ตฌ์กฐ.
    3. ์ ์œ  ๋Œ€๊ธฐ (Hold & Wait) : ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์ฑ„๋กœ ๋‹ค๋ฅธ ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์š”๊ตฌ.
    4. ์ƒํ˜ธ ๋ฐฐ์ œ(Mutual Exclusion) : ํ•œ ๋ฒˆ์— ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ ‘๊ทผ ๊ถŒํ•œ์ด ์ œํ•œ์ ์ผ ๊ฒฝ์šฐ.

๐Ÿ’ก ์ฝ˜๋ณด์ด ํ˜„์ƒ(convoy effect)์ด๋ž€ ๋ฌด์—‡์ด๊ณ , ์ฝ˜๋ณด์ด ํ˜„์ƒ์ด ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๋Š” CPU ์Šค์ผ€์ค„๋Ÿฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์ฝ˜๋ณด์ด ํ˜„์ƒ์ด๋ž€ ์ž‘์—… ์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ํ์— ๋„์ฐฉํ•ด์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์ „๋ถ€ ๋Šฆ์ถฐ์ ธ ํšจ์œจ์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฌ๋Š” ํ˜„์ƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

FCFS(First-Come First Served) ์Šค์ผ€์ค„๋ง์€ ๋น„์„ ์ ํ˜•์œผ๋กœ, ์ˆœ์ฐจ์ ์œผ๋กœ ๋จผ์ € ํ์— ๋“ค์–ด์˜จ ์ž‘์—…๋ถ€ํ„ฐ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์ฝ˜๋ณด์ด ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ’ก ์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง๊ณผ ๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์„ ์ ํ˜•์€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๋Œ€์‹ ์— CPU๋ฅผ ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ์Œ์„ ๋งํ•˜๊ณ ,

๋น„์„ ์ ํ˜•์€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋๋‚˜์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” CPU๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

 

 

๋™๊ธฐ๋Š” ์ˆœ์ฐจ์ , ์ง๋ ฌ์ ์œผ๋กœ ํ…Œ์Šคํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋น„๋™๊ธฐ๋Š” ๋ณ‘๋ ฌ์ ์œผ๋กœ ํ…Œ์Šคํฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ,

๋™๊ธฐ๋Š” ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์‘๋‹ต๋  ๋•Œ๊นŒ์ง€ ์ดํ›„ ํ…Œ์Šคํฌ๋“ค์€ ๋ธ”๋กœํ‚น(Blocking, ์ž‘์—… ์ค‘๋‹จ)๋ฉ๋‹ˆ๋‹ค.

๋น„๋™๊ธฐ๋Š” ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ ์ดํ›„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์‘๋‹ต๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ (Non-Blocking) ์ฆ‰์‹œ ๋‹ค์Œ ํ…Œ์Šคํฌ๋ฅผ ๊ณ„์†ํ•ด ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ์˜ ๊ฐœ๋…๊ณผ ์ฐจ์ด


 

๐Ÿ’ก Critical Section(์ž„๊ณ„์˜์—ญ)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์ž„๊ณ„ ์˜์—ญ์ด๋ž€ ํ”„๋กœ์„ธ์Šค๊ฐ„์— ๊ณต์œ ์ž์›์„ ์ ‘๊ทผํ•˜๋Š”๋ฐ ์žˆ์–ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ด์šฉํ•˜๊ฒŒ๋” ๋ณด์žฅํ•ด์ค˜์•ผ ํ•˜๋Š” ์˜์—ญ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์ž„๊ณ„ ์˜์—ญ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์˜ 3๊ฐ€์ง€ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ƒํ˜ธ ๋ฐฐ์ œ(Mutual exclution) - ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์–ด์•ผ ํ•œ๋‹ค.
  2. ์ง„ํ–‰(Progress) - ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๋Š” ์ƒํƒœ์—์„œ ๋“ค์–ด๊ฐ€๋ ค ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ์–ด๋А ๊ฒƒ์ด ๋“ค์–ด๊ฐˆ์ง€ ๊ฒฐ์ • ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  3. ํ•œ์ • ๋Œ€๊ธฐ(Bounded waiting) - ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๊ธฐ์•„๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ํ•œ ๋ฒˆ ์ž„๊ณ„ ๊ตฌ์—ญ์— ๋“ค์–ด๊ฐ„ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ ๋ฒˆ ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐˆ ๋•Œ ์ œํ•œ์„ ๋‘์–ด์•ผ ํ•œ๋‹ค.

๐Ÿ’ก ๋ฎคํ…์Šค(Mutex)์™€ ์„ธ๋งˆํฌ์–ด(Semaphore)์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋ฎคํ…์Šค๋Š” Lock์„ ์‚ฌ์šฉํ•ด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋‚˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋‹จ๋…์œผ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— ์„ธ๋งˆํฌ์–ด๋Š” ๊ณต์œ ์ž์›์— ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜๋งŒํผ์˜ ํ”„๋กœ์„ธ์Šค(๋˜๋Š” ์“ฐ๋ ˆ๋“œ)๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ๋งˆํฌ์–ด์˜ ๋ณ€์ˆ˜ → ๊ณต์œ ์ž์›์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜

 

ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„ธ๋งˆํฌ์–ด๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฎคํ…์Šค๋Š” ๋ฝ(lock)์„ ํš๋“ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ทธ ๋ฝ์„ ํ•ด์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

0๊ณผ 1์˜ ๊ฐ’๋งŒ ๊ฐ–๋Š” ์„ธ๋งˆํฌ์–ด → ์ด์ง„ ์„ธ๋งˆํฌ์–ด(binary semaphore) (= ๋ฎคํ…์Šค)

๋„๋ฉ”์ธ ์ œํ•œ์ด ์—†๋Š” ์„ธ๋งˆํฌ์–ด(0,1 ๋ฟ๋งŒ์•„๋‹ˆ๋ผ 2,3,4 ๋“ฑ์˜ ๊ฐ’๋“ค ๋˜ํ•œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”) → ์นด์šดํŒ… ์„ธ๋งˆํฌ์–ด(counting semaphore)


๐Ÿ’ก ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • ํŽ˜์ด์ง• ๊ธฐ๋ฒ•์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์šด์˜์ฒด์ œ์—์„œ ํ•„์š”ํ•œ ํŽ˜์ด์ง€๊ฐ€ ์ฃผ๊ธฐ์–ต์žฅ์น˜์— ์ ์žฌ๋˜์ง€ ์•Š์•˜์„ ์‹œ(ํŽ˜์ด์ง• ๋ถ€์žฌ์‹œ) ์–ด๋–ค ํŽ˜์ด์ง€ ํ”„๋ ˆ์ž„์„ ์„ ํƒํ•ด ๊ต์ฒดํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • FIFO(first in first out)
    • ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ์ง€ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ณ , ์ดˆ๊ธฐํ™” ์ฝ”๋“œ์— ๋Œ€ํ•ด ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์ด๋ฉฐ, ํŽ˜์ด์ง€๊ฐ€ ์˜ฌ๋ผ์˜จ ์ˆœ์„œ๋ฅผ ํ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ตœ์ (Optimal) ํŽ˜์ด์ง€ ๊ต์ฒด
    • ์•ž์œผ๋กœ ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ตœ์  ํŽ˜์ด์ง€ ๊ต์ฒด๋Š” ์„ ํ–‰ ์กฐ๊ฑด์ด ์žˆ๋Š”๋ฐ, ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•ž์œผ๋กœ ์‚ฌ์šฉํ•  ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ์•Œ์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์กฐ๊ฑด์€ ์‹ค์ œ ํ™œ์šฉ์—์„  ์•Œ ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ตฌํ˜„์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ์—ฐ๊ตฌ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • LRU(least-recently-used)
    • ๊ฐ€์žฅ ์˜ค๋ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. OPT ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฐฉ์‹๊ณผ ๋น„์Šทํ•œ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋ฉฐ, OPT ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ณด๋‹ค ํŽ˜์ด์ง€ ๊ต์ฒด ํšŸ์ˆ˜๊ฐ€ ๋†’์ง€๋งŒ FIFO ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณด๋‹ค ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
  • LFU(least-frequently-used)
    • ์ฐธ์กฐ ํšŸ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋Œ€์ƒ์ธ ํŽ˜์ด์ง€๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์ผ ๊ฒฝ์šฐ, LRU ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋”ฐ๋ผ ๊ฐ€์žฅ ์˜ค๋ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
  • MFU(most-frequently-used)
    • LFU ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋ฐ˜๋Œ€๋กœ, ์ฐธ์กฐ ํšŸ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.
  • LFU์™€ MFU๋Š” ์‹ค์ œ ์‚ฌ์šฉ์— ์ž˜ ์“ฐ์ด์ง€ ์•Š๋Š”๋‹ค.
    • ๊ตฌํ˜„์— ์ƒ๋‹นํ•œ ๋น„์šฉ์ด ๋“ค๊ณ ,
    • ์ตœ์  ํŽ˜์ด์ง€ ๊ต์ฒด ์ •์ฑ…์„ (LRU ๋งŒํผ) ์ œ๋Œ€๋กœ ์œ ์‚ฌํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด๋‚ด์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ’ก ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ(Context Switching)์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ์—์„œ CPU๊ฐ€ ์–ด๋–ค ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ์—์„œ ์ธํ„ฐ๋ŸฝํŠธ ์š”์ฒญ์— ์˜ํ•ด ๋‹ค์Œ ์šฐ์„  ์ˆœ์œ„์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ ํ•  ๋•Œ ๊ธฐ์กด์˜ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ ๋˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’(Context)์„ ์ €์žฅํ•˜๊ณ  CPU๊ฐ€ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ ๋˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’(Context)์„ ๊ต์ฒดํ•˜๋Š” ์ž‘์—…์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

โ€ป ์ปจํ…์ŠคํŠธ? CPU๊ฐ€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋“ค.

์ถœ์ฒ˜: https://dev-coco.tistory.com/162 [์Šฌ๊ธฐ๋กœ์šด ๊ฐœ๋ฐœ์ƒํ™œ:ํ‹ฐ์Šคํ† ๋ฆฌ]