ํ๋ก์ธ์ค ๋ด๋ถ ํต์ : 2๊ฐ ์ด์์ ์ค๋ ๋๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธ, ์ค๋ ๋๋ผ๋ฆฌ ์ ์ญ ๋ณ์๋ ํ์ผ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
ํ๋ก์ธ์ค ๊ฐ ๋ฐ์ดํฐ ํต์ : ๊ฐ์ ์ปดํจํฐ์ ์๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ผ๋ฆฌ ํต์ ํ๋ ๊ฒฝ์ฐ๋ก ๊ณต์ฉ ํ์ผ์ด๋ ํ์ดํ๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
๋คํธ์ํฌ๋ฅผ ์ด์ฉํ ๋ฐ์ดํฐ ํต์ : ์ฌ๋ฌ ์ปดํจํฐ๊ฐ ๋คํธ์ํฌ๋ก ์ฐ๊ฒฐ๋์ด์์ ๋์ ํต์ ์ ์๋ฏธํ๋ฉฐ ์์ผ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
| ๋ถ๋ฅ ๋ฐฉ์ | ์ข ๋ฅ | ์ |
| ํต์ ๋ฐฉํฅ์ ๋ฐ๋ฅธ ๋ถ๋ฅ | ์๋ฐฉํฅ ํต์ | ์ผ๋ฐ์ ํต์ , ์์ผ |
| ํต์ ๋ฐฉํฅ์ ๋ฐ๋ฅธ ๋ถ๋ฅ | ๋ฐ์๋ฐํฅ ํต์ | ๋ฌด์ ๊ธฐ |
| ํต์ ๋ฐฉํฅ์ ๋ฐ๋ฅธ ๋ถ๋ฅ | ๋จ๋ฐฉํฅ ํต์ | ์ ์ญ๋ณ์, ํ์ผ, ํ์ดํ |
| ํต์ ๊ตฌํ ๋ฐฉ์์ ๋ฐ๋ฅธ ๋ถ๋ฅ | ๋๊ธฐ๊ฐ ์๋ ํต์ (๋๊ธฐํ ํต์ ) | ํ์ดํ, ์์ผ |
| ํต์ ๊ตฌํ ๋ฐฉ์์ ๋ฐ๋ฅธ ๋ถ๋ฅ | ๋๊ธฐ๊ฐ ์๋ ํต์ (๋น๋๊ธฐํ ํต์ ) | ์ ์ญ ๋ณ์, ํ์ผ |
๐ ๊ณต์ ์์
์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๊ณต๋์ผ๋ก ์ด์ฉํ๋ ๋ณ์, ๋ฉ๋ชจ๋ฆฌ, ํ์ผ ๋ฑ์ ์๋ฏธ
๊ณต์ ์์์ ์ด๋ค ํ๋ก์ธ์ค๊ฐ ๋จผ์ ์ด์ฉํ๋๋์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๊ธฐ์ ๊ฒฝ์ ์กฐ๊ฑด์ ํผํด์ผ ํ๋ค.
๊ฒฝ์ ์กฐ๊ฑด์ด๋?
2๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ๋ณํ์ ์ผ๋ก ์ฝ๊ฑฐ๋ ์ฐ๋ ์ํฉ์ ์๋ฏธ
๐ ์๊ณ ๊ตฌ์ญ
๊ณต์ ์์์ ์คํ ์์์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ํ๋ก๊ทธ๋จ์ ์์ญ -> ์์๋ฅผ ํต์ ํ์ฌ์ผ ํ๋ค.
์๊ณ ๊ตฌ์ญ์ ํด๊ฒฐํ๊ธฐ ์ํ ์กฐ๊ฑด์ ๋ฌด์์ผ๊น โ
1. ์ํธ ๋ฐฐ์ : ํ ํ๋ก์ธ์ค๊ฐ ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ ์ ์๋ค.
2. ํ์ ๋๊ธฐ: ํน์ ํ๋ก์ธ์ค๊ฐ ์๊ณ๊ตฌ์ญ์ ๋ค์ด๊ฐ์ง ๋ชปํด ๋ฌดํ ๋๊ธฐํ๋ฉด ์ ๋๋ค. (=๊ต์ฐฉ ์ํ)
3. ์งํ์ ์ตํต์ฑ: ํ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์งํ์ ๋ฐฉํดํด์๋ ์๋๋ค. ์ฆ ์๊ณ ๊ตฌ์ญ์ ์๋ฌด ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ค์ด๊ฐ์ผ ํ๋ค.
๐ก ์๊ณ๊ตฌ์ญ ํด๊ฒฐ๋ฐฉ๋ฒ
โจ Spin Lock

1๏ธโฃ ์ํธ ๋ฐฐ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ์๋ ๊ฒฝ์ฐ

1. P2๋ lock์ด False์์ผ๋ก lock์ true๋ก ๋ง๋ ํ ์๊ณ ๊ตฌ์ญ์ผ๋ก ๋ค์ด์ด
2. ํ์ ์์์ด ๋๋ P1์ด true๋ก ๋ง๋ ํ ์๊ณ ๊ตฌ์ญ์ผ๋ก ๋ค์ด์ด
3. ๋ ๋ค ์๊ณ ๊ตฌ์ญ์ ์ง์
2๏ธโฃ ํ์ ๋๊ธฐ ๋ฌธ์ (=๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ)
๊ณต์ ๋ณ์๋ฅผ ๋ ๊ฐ ์ฌ์ฉํ์ฌ ์ํธ ๋ฐฐ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ ๊ฒฝ์ฐ - ์ผ๋จ ์ ๊ธ์ ํ๊ณ ๋ ํ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ ๊ฒผ๋์ง ํ์ธ


P1, P2 ๋ ๋ค while๋ฌธ์ ๋น ์ ธ๋์ค์ง ๋ชปํ๊ณ ๋ฌดํ ๋ฃจํ์ ๋น ์ ธ P1, P2 ๋ ๋ค ์๊ณ ๊ตฌ์ญ์ผ๋ก ๋ชป ๋ค์ด๊ฐ๊ณ ํ๋ก์ธ์ค๊ฐ ๋์ด ๊ฐ์๋ก ๊ณต์ ๋ณ์๋ ์ฆ๊ฐ์์ผ์ค์ผ ํด์ ํ์ฅ์ฑ์ ๋ฌธ์ ๋ฐ์
3๏ธโฃ ์งํ์ ์ตํต์ฑ ๋ฌธ์

ํ๋ก์ธ์ค์ ์ฐ์ ์์์ ์๊ด์์ด ๋ฒ๊ฐ์ ๊ฐ๋ฉด์ ์๊ณ ๊ตฌ์ญ์ ์ง์ ํ์ฌ ์ฐ์ ์์๊ฐ ๋์ ํ๋ก์ธ์ค๊ฐ ๋ ๋ฒ ์ฐ์ํด์ ์คํํ๊ณ ์ถ์ด๋ ๋ชป ํ๋ค. ํ๋ก์ธ์ค ์งํ์ด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ธํด ๋ฐฉํด๋ฐ๋ ํ์์ ๊ฒฝ์ง๋ ๋๊ธฐํ๋ผ๊ณ ํ๋ค.
Spin Lock์ ๋ฌธ์ ์
Ready ํ์ ๋๊ธฐ์ํค๋ค ๋ณด๋ ๋ฝ์ ์ป์ ์ ์๋ ์ํฉ์ด๋ฉด while๋ฌธ์ ๋๋ฉด์ ์คํํ๋ค๊ฐ ๋ค์ Ready ํ์ ๋ค์ด๊ฐ CPU ์์์ ์๋ชจํ๋ค.
โจ Wating ํ
๊ฐ๊ฐ์ ๋ฝ ๋ณ๋ก waiting ํ๋ฅผ ์ด์ํ์ฌ ๋ฝ์ด ํ์ํ ํ๋ก์ธ์ค์ ๊ฒฝ์ฐ ๋ฝ์ waiting ํ์ push ์ํจ๋ค. ์ดํ ๋ฝ์ด ๊ฐ์ฉ ๊ฐ๋ฅํ ์ํ๊ฐ ๋์์ ๋ ํ์ ์ ์ผ ๋งจ ์์ ์๋ ํ๋ก์ธ์ค๋ฅผ pop ์์ผ ready ํ์ ์ฝ์ ํ๋ฉด ๋ฝ์ด ๊ฐ์ฉ ๊ฐ๋ฅํด์ง ์์ ์ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋๋ก ํ ์ ์๋ค. -> ๋ฝ์ ํ์๋ก ํ์ง๋ง ์์ง ์ป์ง ๋ชปํ ๊ฒฝ์ฐ์ ํด๋น ํ๋ก์ธ์ค๋ฅผ Ready ํ์ ๋ฐฉ์นํ๋ ๊ฒ์ด ์๋ Waiting ํ์ ์ถ๊ฐํด์ ๋ฝ์ด ๋ฐ๋ฉ๋๊ธฐ ์ ๊น์ง Scheduling๋๋ ๊ฒ์ ๋ง๋๋ค. -> CPU ์์์ด ๋ญ๋น๋์ง ์๋๋ค.
๊ทธ๋ฆผ์ผ๋ก ์ดํดํ๊ธฐ
https://foramonth.tistory.com/74?category=902887
Spin Lock์ ์ธ์ ์ฌ์ฉํ ๊น โ
Waiting ํ ๋ฐฉ์์ Waiting ํ์ ์ถ๊ฐํ๋ ์์ ์ด ์ถ๊ฐ๋๊ณ ์ฐ์ ์์์ ๋ง๊ฒ ์ ๋ ฌ์์ผ์ผํ๋ ๊ฒ๊ณผ ๋ค์ ํ๋ก์ธ์ค๋ฅผ ๊นจ์ฐ๊ณ ์ฌ์์ผ๋ก์จ ๋ฌธ๋งฅ ๊ตํ์ด ๋ฐ์ํ๋ ์ค๋ฒํค๋ ๋ฐ์ํ๋ค.
ํ๋ก์ธ์๊ฐ ํ๊ฐ๋ผ๋ฉด spin lock์ ์ฌ๋ผ์ง๋ ๊ฒ ๋ง๋ค. spin lock์ ํ ์ ์๋ ๋ค๋ฅธ ํ๋ก์ธ์๊ฐ ์์ด์ ๊ณ์ ๋ฐ์ ๋๊ธฐ๋ฅผ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ๋ฉํฐ ํ๋ก์ธ์๋ผ๋ฉด ์์ ์ค๋ฒํค๋๋ณด๋ค ๋ฐ์๋๊ธฐ๋ฅผ ํ๋ ๊ฒ์ด ํจ์ฌ ๊ฒฝ์ ์ ์ด๋ค. ๋ค๋ฅธ ํ๋ก์ธ์๊ฐ ์๊ณ ๊ตฌ์ญ์ ๋ค ์ฒ๋ฆฌํ๋ ์๊ฐ ๋ฐ์ ๋๊ธฐ๋ฅผ ํ๊ณ ๋ฐ๋ก ๋ค์ด๊ฐ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
โ ๊ฒ์ฌ์ ์ง์ ์ ์ฌ์ฉํ์ฌ ํ๋์จ์ด์ ์ผ๋ก ์๊ณ ๋ฌธ์ ๋ฐฉ๋ฒ ํด๊ฒฐ

โจ ์ธ๋งํฌ์ด
์ธ๋งํฌ์ด๋ ์๊ณ ๊ตฌ์ญ์ด ์ ๊ฒผ๋์ง ์ง์ ํ์ธํ์ง ์์ ๋ฐ์ ๋๊ธฐ๋ ์๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ๋๊ธฐํ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ํ์๋ ์๋ค.
Semaphore(n); // RS = n (ํ์ฌ ์ฌ์ฉ๊ฐ๋ฅํ ์์์ ์)
P(){ // ์ ๊ธ์ ์ํ
if (RS > 0)
RS = RS - 1;
else
{
block();
}
};
// ์๊ณ๊ตฌ์ญ
V() { // ์ ๊ธํด์ ์ ๋๊ธฐํ๋ฅผ ์ํ
RS = RS + 1;
wake_up();
};
์ธ๋งํฌ์ด๋ ๊ณต์ ์์์ด ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
n์ 2๋ผ๊ณ ํ ๊ฒฝ์ฐ,
1. ๋จผ์ ๋์ฐฉํ P1์ด RS ๊ฐ์ 1 ๊ฐ์์ํค๋ฉด์ ์ง์
2. P2๋ RS ๊ฐ์ 1 ๊ฐ์์ํค๋ฉด์ ์ง์
3. P3์ ๊ฒฝ์ฐ RS๊ฐ 0 ์ด๋ฏ๋ก block ์ํ๋ก RS๊ฐ์ด 0๋ณด๋ค ์ปค์ง ๋๊น์ง ์ธ๋งํฌ์ด ํ์์ ๋๊ธฐ(๋ฐ์ ๋๊ธฐ ์์)
4. P1์ด ์๊ณ ๊ตฌ์ญ์ ๋น ์ ธ๋์ V() ์คํํ๋ฉด์ RS ๊ฐ์ 1์ด ๋๊ณ wake_up ์ ํธ๊ฐ P3์๊ฒ ์ ๋ฌ
โจ ๋ชจ๋ํฐ
๋ชจ๋ํฐ๋ ์ธ๋งํฌ์ด์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ฅด๋ฉด์ ๊ณต์ ์์์ ๋ด๋ถ์ ์ผ๋ก ์จ๊ธฐ๊ณ ๊ณต์ ์์์ ์ ๊ทผํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ง ์ ๊ณต (=์ด์์ฒด์ ์ ์์คํ ํธ์ถ๊ณผ ๊ฐ์ ์๋ฆฌ)
1. ์๊ณ ๊ตฌ์ญ์ผ๋ก ์ง์ ๋ ๋ณ์๋ ์์์ ์ ๊ทผํ๊ณ ์ ํ๋ ํ๋ก์ธ์ค๋ ์ง์ P()๋ V()์ ์ฌ์ฉํ์ง ์๊ณ ๋ชจ๋ํฐ์ ์์ ์์ฒญ
2. ๋ชจ๋ํฐ๋ ์์ ์ ๋ชจ๋ํฐ ํ์ ์ ์ฅํ ํ ์์๋๋ก ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํด๋น ํ๋ก์ธ์ค์๊ฒ ์๋ ค์ค

๋ชจ๋ํฐ๋ ์๊ณ๊ตฌ์ญ ๋ณดํธ์ ๋๊ธฐํ๋ฅผ ์ํ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ํฐ์ ๋ด๋ถ์์ ์ฒ๋ฆฌํ๋ค. ์ฌ์ฉ์๋ increase ํจ์๋ง ํธ์ถํ๋ฉด ๋๋ค.
์ํ ๋ณ์๋ wait์ signal ๊ธฐ๋ฅ์ด ์๋ค.
wait() - ๋ชจ๋ํฐ ํ์์ ์์ ์ ์ฐจ๋ก๊ฐ ์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. ์ธ๋งํฌ์ด์ P()์ ํด๋น
signal() - ๋ชจ๋ํฐ ํ์์ ๊ธฐ๋ค๋ฆฌ๋ ๋ค์ ํ๋ก์ธ์ค์๊ฒ ์์๋ฅผ ๋๊ฒจ์ค๋ค. ์ธ๋งํฌ์ด์ V()์ ํด๋น
'OS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๊ต์ฐฉ์ํ ํ์์กฐ๊ฑด๊ณผ ํด๊ฒฐ๋ฐฉ๋ฒ (0) | 2021.06.03 |
|---|---|
| CPU ์ค์ผ์ค๋ง (0) | 2021.05.24 |
| ์ค๋ ๋์ ๊ณต์ ์์ ๊ด๋ฆฌ(๋๊ธฐํ) (0) | 2021.05.09 |
| ํ๋ก์ธ์ค ์ค์ผ์ค๋ง์ด ๋ญ๊นโ (0) | 2021.01.04 |
| ์ค๋ ๋์ ๋ํด ์์๋ณด์ (0) | 2021.01.03 |












