
๊ณต์ ์์์ ๋ํด ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ ๊ทผํ ๋, ๊ฒฐ๊ณผ ๊ฐ์ ์ํฅ์ ์ค ์ ์๋ ์ํ
โก๏ธ ๋์ ์ ๊ทผ ์
"๊ฒฝ์์ํ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ"
๊ณต์ ๋ ์์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ ๊ทผํ๋ฉด์ ๋ฌธ์ ๋ฐ์ํ ์ ์๋ค.
์ด๋ ๊ณต์ ๋ ์์์ ๋ฐ์ดํฐ๋ ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์ ๊ทผํ ์ ์๋๋ก ์ ํ์ ๋์ด์ผ ํ๋ค.
์ด๋ฅผ ์ํด ๋์จ ๊ฒ์ด ์ธ๋งํฌ์ด
๋ฉํฐ ํ๋ก๊ทธ๋๋ฐ ํ๊ฒฝ์์ ๊ณต์ ์์์ ๋ํ ์ ๊ทผ์ ์ ํํ๋ ๋ฐฉ๋ฒ
๋๊ธฐํ ๋์์ด ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ ์ ๊ทผํ ์ ์๋ ์ต๋ ํ์ฉ์น๋งํผ ์ ๊ทผ์ ํ์ฉํ๊ฒ ํ๋ค.
โ๏ธ ์๊ณ ๊ตฌ์ญ(Critical Section)
์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ฉฐ ์ํ๋ ๋, ๊ฐ ํ๋ก์ธ์ค์์ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๋ ํ๋ก๊ทธ๋จ ์ฝ๋ ๋ถ๋ถ
๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ ๊ทผํ ๋ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์, ํ ํ๋ก์ธ์ค ์๊ณ ๊ตฌ์ญ์ ์ํํ ๋๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํ๋ค.
P : ์๊ณ ๊ตฌ์ญ ๋ค์ด๊ฐ๊ธฐ ์ ์ ์ํ (ใ ๋ก์ธ์ค ์ง์ ์ฌ๋ถ๋ฅผ ์์์ ๊ฐ์(S)๋ฅผ ํตํด ๊ฒฐ์ )
V : ์ ๊ณ ๊ตฌ์ญ์์ ๋์ฌ ๋ ์ํ (์์ ๋ฐ๋ฉ ์๋ฆผ, ๋๊ธฐ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๊นจ์ฐ๋ ์ ํธ)
๐จ ๊ตฌํ ๋ฐฉ๋ฒ
P(S);
// -- ์๊ณ ๊ตฌ์ญ --
V(S)
procedure P(S) //--> ์ต์ด S๊ฐ์ 1์
while S=0 do wait //--> S๊ฐ 0๋ฉด 1์ด ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํจ
S := S-1 //--> S๋ฅผ 0๋ก ๋ง๋ค์ด ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋ค์ด ์ค์ง ๋ชปํ๋๋ก ํจ
end P
--- ์๊ณ ๊ตฌ์ญ ---
procedure V(S) //--> ํ์ฌ์ํ๋ S๊ฐ 0์
S := S+1 //--> S๋ฅผ 1๋ก ์์์น์์ผ ํด์ ํ๋ ๊ณผ์
end V
์ด๋ฅผ ํตํด, ํ ํ๋ก์ธ์ค๊ฐ P ํน์ V๋ฅผ ์ํํ๊ณ ์๋ ๋์ ํ๋ก์ธ์ค๊ฐ ์ธํฐ๋ฝํธ ๋นํ์ง ์๊ฒ ๋๋ค. P์ V๋ฅผ ์ฌ์ฉํ์ฌ ์๊ณ๊ตฌ์ญ์ ๋ํ ์ํธ๋ฐฐ์ ๊ตฌํ์ด ๊ฐ๋ฅํ๊ฒ ๋์๋ค.
์๊ณ ๊ตฌ์ญ์ ๊ฐ์ง ์ค๋ ๋๋ค์ ์คํ์๊ฐ์ด ์๋ก ๊ฒน์น์ง ์๊ณ ๊ฐ๊ฐ ๋จ๋
์ผ๋ก ์คํ๋๊ฒ ํ๋ ๊ธฐ์
"์ํธ๋ฐฐ์ ์ ์ฝ์์ด๋ค."
ํด๋น ์ ๊ทผ์ ์กฐ์จํ๊ธฐ ์ํด lock๊ณผ unlock์ ์ฌ์ฉํ๋ค.
while(true) {
flag[i] = true; // ํ๋ก์ธ์ค i๊ฐ ์๊ณ ๊ตฌ์ญ ์ง์
์๋
while(flag[j]) { // ํ๋ก์ธ์ค j๊ฐ ํ์ฌ ์๊ณ ๊ตฌ์ญ์ ์๋์ง ํ์ธ
if(turn == j) { // j๊ฐ ์๊ณ ๊ตฌ์ญ ์ฌ์ฉ ์ค์ด๋ฉด
flag[i] = false; // ํ๋ก์ธ์ค i ์ง์
์ทจ์
while(turn == j); // turn์ด j์์ ๋ณ๊ฒฝ๋ ๋๊น์ง ๋๊ธฐ
flag[i] = true; // j turn์ด ๋๋๋ฉด ๋ค์ ์ง์
์๋
}
}
}
// ------- ์๊ณ ๊ตฌ์ญ ---------
turn = j; // ์๊ณ ๊ตฌ์ญ ์ฌ์ฉ ๋๋๋ฉด turn์ ๋๊น
flag[i] = false; // flag ๊ฐ์ false๋ก ๋ฐ๊ฟ ์๊ณ ๊ตฌ์ญ ์ฌ์ฉ ์๋ฃ๋ฅผ ์๋ฆผ
while(true) {
flag[i] = true; // ํ๋ก์ธ์ค i๊ฐ ์๊ณ ๊ตฌ์ญ ์ง์
์๋
turn = j; // ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ์ง์
๊ธฐํ ์๋ณด
while(flag[j] && turn == j) { // ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ง์
์๋ํ๋ฉด ๋๊ธฐ
}
}
// ------- ์๊ณ ๊ตฌ์ญ ---------
flag[i] = false; // flag ๊ฐ์ false๋ก ๋ฐ๊ฟ ์๊ณ ๊ตฌ์ญ ์ฌ์ฉ ์๋ฃ๋ฅผ ์๋ฆผ
while(true) {
isReady[i] = true; // ๋ฒํธํ ๋ฐ์ ์ค๋น
number[i] = max(number[0~n-1]) + 1; // ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค ์ค์ ๊ฐ์ฅ ํฐ ๋ฒํธ ๋ฐฐ์
isReady[i] = false; // ๋ฒํธํ ์๋ น ์๋ฃ
for(j = 0; j < n; j++) { // ๋ชจ๋ ํ๋ก์ธ์ค ๋ฒํธํ ๋น๊ต
while(isReady[j]); // ๋น๊ต ํ๋ก์ธ์ค๊ฐ ๋ฒํธํ ๋ฐ์ ๋๊น์ง ๋๊ธฐ
while(number[j] && number[j] < number[i] && j < i);
// ํ๋ก์ธ์ค j๊ฐ ๋ฒํธํ ๊ฐ์ง๊ณ ์์ด์ผ ํจ
// ํ๋ก์ธ์ค j์ ๋ฒํธํ < ํ๋ก์ธ์ค i์ ๋ฒํธํ
}
}
// ------- ์๊ณ ๊ตฌ์ญ ---------
number[i] = 0; // ์๊ณ ๊ตฌ์ญ ์ฌ์ฉ ์ข
๋ฃ
์ธ๋งํฌ์ด๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์ผ์ ์์์ ์ฌ์ฉํ ๋ ์ฌ์ฉ๋๋ค.
๋ฎคํ
์ค๋ ๋จ์ผ ์ค๋ ๋๊ฐ ์์์ ๋
์ ํ ๋ ์ฌ์ฉ๋๋ค.
๊ธฐ๋ฒ์ ์ฐ๋ ์ด์
๋ค์ค ํ๋ก๊ทธ๋๋ฐ ์์คํ
์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์์ฉํ๊ธฐ ์ํด ์ฃผ๊ธฐ์ต์ฅ์น๋ฅผ ๋์ ๋ถํ ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์
์ด ํ์ํ๊ธฐ ๋๋ฌธ
์ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
"ํ๋ก๊ทธ๋จ ์ ์ฒด๊ฐ ํ๋์ ์ปค๋ค๋ ๊ณต๊ฐ์ ์ฐ์์ ์ผ๋ก ํ ๋น๋์ด์ผ ํจ"
๊ณ ์ ๋ถํ ๊ธฐ๋ฒ : ์ฃผ๊ธฐ์ต์ฅ์น๊ฐ ๊ณ ์ ๋ ํํฐ์ ์ผ๋ก ๋ถํ (๋ด๋ถ ๋จํธํ ๋ฐ์)
๋์ ๋ถํ ๊ธฐ๋ฒ : ํํฐ์ ๋ค์ด ๋์ ์์ฑ๋๋ฉฐ ์์ ์ ํฌ๊ธฐ์ ๊ฐ์ ํํฐ์ ์ ์ ์ฌ (์ธ๋ถ ๋จํธํ ๋ฐ์)
๋ด๋ถ ๋จํธํ
๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ ์ ๋ ํฌ๊ธฐ์ ํํฐ์ ์ผ๋ก ๋๋ ์ ํ๋ก๊ทธ๋จ์ด ํํฐ์ ์ ํ ๋น ๋ ๋ ํํฐ์ ์ ํฌ๊ธฐ๊ฐ ํ๋ก๊ทธ๋จ์ ํ์ํ ํฌ๊ธฐ๋ณด๋ค ํด ๊ฒฝ์ฐ ๋จ๋ ๊ณต๊ฐ์ด ๋ฐ์. ์ด ๋จ๋ ๊ณต๊ฐ์ ํด๋น ํํฐ์ ๋ด์์๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํด ์ฌ์ฉ๋ ์ ์์ผ๋ฏ๋ก ๋ญ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๊ธด๋ค
์ธ๋ถ ๋จํธํ
ํ๋ก๊ทธ๋จ์ ํฌ๊ธฐ์ ๋ง๊ฒ ๋ฉ๋ชจ๋ฆฌ ํํฐ์ ์ด ๋์ ์ผ๋ก ์์ฑ๋๋ค. ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๊ณ ํด์ ํ๋ ๊ณผ์ ์์ ๋ค์ํ ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ด ์๊ธฐ๊ณ ์ฌ๋ผ์ง. ์๊ฐ์ด ์ง๋ ์๋ก ์ด ๋ธ๋ก์ด ํฉ์ด์ ธ ์์ด ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ง ๋ชปํ๋ ์ํฉ์ด ๋ฐ์๋จ.
๋ถ์ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
"ํ๋ก๊ทธ๋จ์ ์ผ๋ถ๊ฐ ์๋ก ๋ค๋ฅธ ์ฃผ์ ๊ณต๊ฐ์ ํ ๋น๋ ์ ์๋ ๊ธฐ๋ฒ"
ํ์ด์ง : ๊ณ ์ ์ฌ์ด์ฆ์ ์์ ํ๋ก์ธ์ค ์กฐ๊ฐ
ํ๋ ์ : ํ์ด์ง ํฌ๊ธฐ์ ๊ฐ์ ์ฃผ๊ธฐ์ต์ฅ์น ๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฐ
๋จํธํ : ๊ธฐ์ต ์ฅ์น์ ๋น ๊ณต๊ฐ or ์๋ฃ๊ฐ ์ฌ๋ฌ ์กฐ๊ฐ์ผ๋ก ๋๋๋ ํ์
์ธ๊ทธ๋จผํธ : ์๋ก ๋ค๋ฅธ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง ๋ ผ๋ฆฌ์ ์ธ ๋ธ๋ก์ด ์ฐ์์ ๊ณต๊ฐ์ ๋ฐฐ์น๋๋ ๊ฒ
๊ณ ์ ํฌ๊ธฐ : ํ์ด์ง
๊ฐ๋ณ ํฌ๊ธฐ : ์ธ๊ทธ๋จผํธ
๋จ์ ํ์ด์ง
๋จ์ ์ธ๊ทธ๋จผํ ์ด์
๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง
๋จ์ ์ธ๊ทธ๋จผํ ์ด์
ํ์ด์ง ๋ถ์ฌ ๋ฐ์ -> ์๋ก์ด ํ์ด์ง๋ฅผ ํ ๋นํด์ผ ํจ -> ํ์ฌ ํ ๋น๋ ํ์ด์ง ์ค ์ด๋ค ๊ฒ์ ๊ต์ฒดํ ์ง ์ ํ๋ ๋ฐฉ๋ฒ
๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ ์๊ตฌ ํ์ด์ง ๊ธฐ๋ฒ์ ํตํด ํ์ํ ํ์ด์ง๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๊ณ ์ฌ์ฉํ์ง ์๋ ๋ถ๋ถ์ ๊ทธ๋๋ก ๋๋ค
ํ์ง๋ง ๊ฒฐ๊ตญ ๋ฉ๋ชจ๋ฆฌ๋ ๊ฐ๋ ์ฐจ๊ฒ๋๊ณ , ๊ธฐ์กด ํ์ด์ง๊ฐ ์ฌ์ฉ๋ ํ์๋ ์๋ฆฌ๋ง ์ฐจ์งํ ์ ์๋ค.
๋ฐ๋ผ์, ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด ์ถ๊ฐ๋ก ํ์ด์ง๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ์์ฐ๋ ํ์ด์ง๋ฅผ ๋นผ๊ณ ์๋ก์ด ํ์ด์ง๋ฅผ ๋ฃ์ด์ผ ํ๋ค.
์ฌ๊ธฐ์ ์ด๋ค ํ์ด์ง๋ฅผ ๋บ์ง ์ ํด์ผ ํ๋ค.
์ด์์ด๋ฉด ์์ ๋์ง ์๋ ํ์ด์ง๋ฅผ ์ ํํด์ผ ์ข๋ค.
CPU๋ ๋ ผ๋ฆฌ ์ฃผ์๋ฅผ ํตํด ์ฆ์ ์ฃผ์๋ฅผ ์๊ตฌํจ
๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์ ์๋ ์ฃผ์๋ค์ ํ์ด์ง ๋จ์๋ก ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ํ์ด์ง ๋ฒํธ๊ฐ ์ฐ์์ ์ผ๋ก ๋ํ๋๊ฒ ๋๋ฉด ํ์ด์ง ๊ฒฐํจ์ด ์๋ค.
๋ฐ๋ผ์ CPU์ ์ฃผ์ ์๊ตฌ์ ๋ฐ๋ผ ํ์ด์ง ๊ฒฐํจ์ด ์ผ์ด๋์ง ์๋ ๋ถ๋ถ์ ์๋ตํ์ฌ ํ์ํ๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก
Page Reference String
FIFO ์๊ณ ๋ฆฌ์ฆ
first-In First-Out. ๋ฉ๋ชจ๋ฆฌ์ ๋จผ์ ์ฌ๋ผ์จ ํ์ด์ง๋ฅผ ๋จผ์ ๋ด๋ณด๋ด๋ ์๊ณ ๋ฆฌ์ฆ
victim page : out์ด ๋๋ ํ์ด์ง๋, ๊ฐ์ฅ ๋จผ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์จ ํ์ด์ง
๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก, ํนํ ์ด๊ธฐํ ์ฝ๋์์ ์ ์ ํ ๋ฐฉ๋ฒ
์ด๊ธฐํ ์ฝ๋ : ์ฒ์ ํ๋ก์ธ์ค ์คํ๋ ๋ ์ต์ด ์ด๊ธฐํ๋ฅผ ์ํค๋ ์ญํ ๋ง ์งํํ๊ณ , ๋ค๋ฅธ ์ญํ ์ ์ํํ์ง ์์ผ๋ฏ๋ก ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์์ ๋นผ๋ ๊ด์ฐฎ์.
OPT(์ต์ ํ์ด์ง ๊ต์ฒด) ์๊ณ ๋ฆฌ์ฆ
Optimal ์๊ณ ๋ฆฌ์ฆ, ์์ผ๋ก ๊ฐ์ฅ ์ฌ์ฉํ์ง ์์ ํ์ด์ง๋ฅผ ๊ฐ์ฅ ์ฐ์ ์ ์ผ๋ก ๋ด๋ณด๋
FIFO์ ๋นํด ํ์ด์ง ๊ฒฐํจ์ ํ์๋ฅผ ๋ง์ด ๊ฐ์์ํฌ ์ ์์
ํ์ง๋ง, ์ค์ง์ ์ผ๋ก ํ์ด์ง๊ฐ ์์ผ๋ก ์ ์ฌ์ฉ๋์ง ์์ ๊ฒ์ด๋ผ๋ ๋ณด์ฅ์ด ์๊ธฐ ๋๋ฌด์ ์ํํ๊ธฐ ์ด๋ ค์ด ์๊ณ ๋ฆฌ์ฆ.
LRU ์๊ณ ๋ฆฌ์ฆ
Least-Recently-Used, ์ต๊ทผ์ ์ฌ์ฉํ์ง ์์ ํ์ด์ง๋ฅผ ๊ฐ์ ๋จผ์ ๋ด๋ ค๋ณด๋ด๋ ์๊ณ ๋ฆฌ์ฆ
์ต๊ทผ์ ์ฌ์ฉํ์ง ์์์ผ๋ฉด, ๋์ค์ ์ฌ์ฉ๋์ง ์์ ๊ฒ์ด๋ผ๋ ์์ด๋์์ ๋์ด.
OPT์ ๊ฒฝ์ฐ ๋ฏธ๋ ์์ธก์ด์ง๋ง, LRU์ ๊ฒฝ์ฐ ๊ณผ๊ฑฐ๋ฅผ ๋ณด๊ณ ํ๋จํ๋ฏ๋ก ์ค์ง์ ์ผ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์๊ณ ๋ฆฌ์ฆ.
OPT ๋ณด๋ค๋ ํ์ด์ง ๊ฒฐํจ์ด ๋ ์ผ์ด๋ ์ ์์ง๋ง, ๊ทธ๋๋ง ์ต์ ์ ์๊ณ ๋ฆฌ์ฆ ํจ์จ์ ๋ณด์ฌ์ฃผ์ด
์ค์ ๋ก ์ฌ์ฉํ ์ ์๋ ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์์๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์