-
[OS] ํ๋ก์ธ์ค ๋๊ธฐํ - ์๊ณ๊ตฌ์ญ ๋ฌธ์ STUDY/OS 2022. 4. 7. 19:05
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์์๋ก ์์ํ๊ฒ ๋ค.
๐ฒ์ํ ๊ณ์ข ๋ฌธ์ (Bank Account Problem)
๋ง์์ด ๋ค์ด์๋ ๊ณ์ข์ ๋ ๋ช ์ด ๋์์ ๋ง ์์ฉ ์ธ์ถํ๋ค๋ฉด?
์ฒซ๋ฒ์งธ ์ฌ๋์ด ๋ง์์ ์ธ์ถํ์ฌ ๊ณ์ข ์์ก์ด 0์ผ๋ก ์ค์ ๋๊ธฐ ์
๋ ๋ฒ์งธ ์ฌ๋์ด ๋ง์์ ์ธ์ถํ์ฌ ๊ณ์ข ์์ก์ 0์ผ๋ก ์ค์ ํ๋ ค ํ๋ค๋ฉด?
์์ก์ 0์ด์ง๋ง ์ด๋ง์์ด ์ธ์ถ๋๋ ๊ฒ์ด ์๋๊น?
์ข๋ ์ปด๊ณผ๊ฐ์ด ๋งํด๋ณด๊ธฐ
๋ฉ๋ชจ๋ฆฌ์ ์๋ ์ํ ๊ณ์ข ์์ก ๋ณ์ balance๋ ํ์ฌ ๊ฐ์ด 10000์ด๋ค.
ํ๋ก์ธ์ค A์ B๋ balance๋ฅผ -10000 ์ํค๋ ์ผ์ ํ๋ค.
A๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ balance ๊ฐ์ ์ฝ์ด 10000์ ๋บ ํ, ๊ฒฐ๊ณผ ๊ฐ 0์ balance์ ์ ์ฅํ๋ ค๊ณ ํ๋ค.
์ ์ฅํ๊ธฐ ์ ๊น์ง balance๋ 10000์ด๋ค.
B ์ญ์ balance๊ฐ 10000์ ์ฝ์ด 10000์ ๋บ ๊ฒฐ๊ณผ ๊ฐ 0์ balance์ ์ ์ฅํ๊ณ ์ ํ๋ค.
๊ทธ ์ฌ์ด A๊ฐ balance๋ฅผ 0์ผ๋ก ๋ง๋ค์์ง๋ง, B๋ balance๊ฐ์ ๋ค์ 0์ผ๋ก ๋ฎ์ด์์ด๋ค.
์ด๊ฒ ๊ฐ๋ฅํ๋ค๋ฉด ์ํ์ ๊ฑฐ๋๋ ๊ฒ์ด๋ค.
=> ๊ณต์ ์์์ ๋์์ ์ ๊ทผํจ์ผ๋ก์จ ์๊ธฐ๋ ์๊ณ๊ตฌ์ญ ๋ฌธ์
(๋ฉํฐ ์ค๋ ๋ ์์ ๊ฐ๊ธด ํ์ง๋ง) ๋น์ทํ ๋ฌธ์ ์ฝ๋
public class Main { public static void main(String[] args) { SharedBoard board = new SharedBoard(); Thread th1 = new StudentThread("bin", board); Thread th2 = new StudentThread("sanha", board); th1.start(); th2.start(); } } class SharedBoard { private int sum = 0; /*synchronized*/ public void add(){ int n = sum; Thread.yield(); n += 10; sum = n; System.out.println(Thread.currentThread().getName() + " : " + sum); } public int getSum(){return sum;} } class StudentThread extends Thread{ private SharedBoard board; public StudentThread(String name, SharedBoard board){ super(name); this.board = board; } public void run(){ for(int i=0; i<10; i++){ board.add(); } } }
1. synchronized ์์ ๋
bin : 10
bin : 20
bin : 30
bin : 40
bin : 50
bin : 60
bin : 70
bin : 80
bin : 90
bin : 100
sanha : 110
sanha : 120
sanha : 130
sanha : 140
sanha : 150
sanha : 160
sanha : 170
sanha : 180
sanha : 190
sanha : 200
Process finished with exit code 02. synchronized ์์ ๋
bin : 10
bin : 30
sanha : 20
sanha : 40
sanha : 50
sanha : 60
sanha : 70
sanha : 80
sanha : 90
sanha : 100
sanha : 110
sanha : 120
bin : 40
bin : 50
bin : 60
bin : 70
bin : 80
bin : 90
bin : 100
bin : 110
Process finished with exit code 0๐๋ณํ ํ๋ก์ธ์ค์ ๋๊ธฐํ
- ๊ฒ์์ ํ ๋ ์บ๋ฆญํฐ๊ฐ ์์ง์ด๋ฉด์, ๋ ธ๋๋ ๋์ค๊ฒ ํ๋ ค๋ฉด ์ฌ๋ ค ํ๋ก์ธ์ค๊ฐ ๋์์ ์ฒ๋ฆฌ๋์ด์ผ ํ๋ค.
- ํ์ง๋ง ํ๋์ CPU๋ ํ๋์ ํ๋ก์ธ์ค๋ฐ์ ์คํํ ์ ์์ผ๋ฏ๋ก ํ๋ก์ธ์ค๋ผ๋ฆฌ ์ฌ๋ฌ๋ฒ ๋ฌธ๋งฅ๊ตํํ์ฌ ๋์์ ์ฒ๋ฆฌ๋๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด๊ฒ ํ๋ค.
- ๋ณํ ํ๋ก์ธ์ค ๊ฐ์ ๋น๋๊ธฐ์ ์ด๋ค.
- ๋๊ธฐ์ : ํ ํ๋ก์ธ์ค์ ์์ ์ ๋๋ด๋ฉด ๋ค์ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ๋ค. (JAVA Sync)
- ๋น๋๊ธฐ์ : ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋ฒ๊ฐ์ ์ํํ๋ค.
๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ์ด๋ค ์ํ์ ์๋์ง, ์ด๋ค ์์์ ๊ฐ์ง๊ณ ์๋์ง,
์ด๋๊น์ง ์คํ๋๋์ง ๋ฑ์ ๋ํด ๋ชจ๋ฅธ ์ฑ ์คํ๋๊ณ ์๋ค. - ๊ณต์ ์์์ด ์์ผ๋ฉด ์๋ฌด ๋ฌธ์ ๊ฐ ์์ง๋ง. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๊ฒฝ์ ์ํ(Race Condition) : ํ๋ก์ธ์ค๋ค์ด ๊ณต์ ๋ฐ์ดํฐ์ ๋ํด ์๋ก ์ ๊ทผ์ ์๋ํ๋ ์ํฉ
์ด๋ก ์ธํด ์ํธ๋ฐฐ์ , ๊ต์ฐฉ์ํ, ๊ธฐ์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. - ์๊ณ ์์(Critical Resource) : ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ฌ์ฉํ ์ ์๋ ์์
์๊ณ ์์ญ(Critical Section) : ์๊ณ ์์์ ์ ๊ทผํ๊ณ ์คํํ๋ ์ฝ๋ ๋ถ๋ถ - ์๊ณ ์์ญ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋
1. ์ํธ ๋ฐฐ์ ๋ฅผ ์ ์ง์ผ ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค ๋ง์ด ์๊ณ ์์ญ์ ๋ค์ด๊ฐ์ผ ํ๋ค.(Mutual exclusion)
2. ์๊ณ ์์ญ์ ์์ง ์์ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์๊ณ์์ญ ์ง์ ์ ๋ง์์๋ ์๋๋ค.(Progress requirement)
3. ๋น์ด์๋ ์๊ณ ์์ญ์ ๋ํ ์ง์ ์ ๋ฐ๋ก ํ์ฉํ๋ค. ํน์ ํ๋ก์ธ์ค์ ์ง์ ์๋๋ง ๊ณ์ ๋ฌด์ฐ๋์ด ๊ธฐ์๋ฅผ ๊ฒฉ์ง ์๋๋ก ํ๋ค.(Bounded-waiting requirement)
4. ์๊ณ ์์ญ์ ๋ฒ์ด๋ ๋๋ ์์ ์ด ๋์ค๋ ์ฌ์ค์ ์๋ ค ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋ค์ด์ฌ ์ ์๋๋ก ํ๋ค.
=> ์ด๊ฒ ์ง์ผ์ง๊ฒ ์ ์ ํ ์ฝ๋ฉํด์ผ ํ๋ค.
๐ฅ์ํธ ๋ฐฐ์
- ์ํํธ์จ์ด ๊ธฐ๋ฒ๋ค
- Peterson ์๊ณ ๋ฆฌ์ฆ
- ๊ฒ๋ ๋ฒํฐ๋ค๊ฐ ์๋๊ฐ ๋๋๋ฉด ๋์ด๊ฐ๋ค.
- ํ์ฌ ๋ฉํฐ ์ค๋ ๋๋ฅผ ์ง์ํ๋ ์ปดํจํฐ์์๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
์ข ์์ฑ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. -> ๋ฉ๋ชจ๋ฆฌ ์ฅ๋ฒฝ ์ฌ์ฉ
- Lamport ๋ฒ ์ด์ปค๋ฆฌ ์๊ณ ๋ฆฌ์ฆ
- ๋ฒํธํ ๋ฐ๊ธฐ
- ๋ฒํธํ๋ฅผ ๋ฐ์์ผ๋ฉด์, ๋๋ณด๋ค ์ ๋ฒํธ๋ฅผ ๋ฐ์ ํ๋ก์ธ์ค ์ค ์คํ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์๋ ํ์ธ
- ํ๋์จ์ด ๊ธฐ๋ฒ
- ์ธํฐ๋ฝํธ ๊ธ์ง๋ฅผ ์ฌ์ฉํ ๊ธฐ๋ฒ -> ๊ทธ๋ฅ ์ธํฐ๋ฝํธ๋ฅผ ๊ธ์งํจ
- ํ๋์จ์ด ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ๊ธฐ๋ฒ
- ๊ฐ๋จํ๊ณ , ๋ค์ค์ฒ๋ฆฌ ์์คํ ์์๋ ์ฝ๊ฒ ์ธ ์ ์์, ๋ค๋ฅธ ๋ณ์๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์ฌ๋ฌ ์๊ณ ์์ญ ์ง์
- ๋ฐ์ ๋๊ธฐ, ์ฐจ๋ก ์ ํด์ง์ง ์์.
๊น์ฃผ๊ท , ใOS? Oh Yes!ใ, ํด๋จผ์ธ์ด์ธ์ค
ํฉ๊ธฐํ ๊นํจ์, ๋ช ํ JAVA Programming ๊ฐ์ 4ํ, ์๋ฅ์ถํ
'STUDY > OS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[OS] ๋์คํฌ ์ค์ผ์ค๋ง2 : LOOK, N-step SCAN, C-SCAN, Eschenbach (0) 2022.05.08 [OS] ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ (0) 2022.05.01 [OS] ์ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (0) 2022.04.10 [OS] CPU ์ค์ผ์ค๋ง : ์ต๋จ ์์ ์ฐ์ ์ค์ผ์ค๋ง, ๋ผ์ด๋ ๋ก๋น ์ค์ผ์ค๋ง (0) 2022.03.27