728x90
์๊ณ ์์ญ(Critical Section)
- ๋ ์ด์์ ํ๋ก์ธ์ค ๋๋ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ์ ๊ทผํ ๋ ์์ ๋ฑ์ ์ด์ ๋ก ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์๋ ์ฝ๋ ์์ญ
- ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ง ์ ๊ทผํ ์ ์๋ ์ฝ๋ ์์ญ
- ํ ํ๋ก์ธ์ค๊ฐ critical section์ ์ ๊ทผํ๊ณ ์ ํ์ง๋ง ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ด๋ฏธ ํด๋น ์์ญ์์ ์์ ์ ํ๊ณ ์๋ค๋ฉด entry section์์ ๋๊ธฐํ๊ณ ์๋ค๊ฐ exit section์ผ๋ก๋ถํฐ ์์ ์ข ๋ฃ ์ ํธ๋ฅผ ๋ฐ์ผ๋ฉด critical section์ ์ง์ ํ๋๋ก ๋๊ธฐํ ํ์
- ์ํธ ๋ฐฐ์ (Mutual Exclusion): ํ ํ๋ก์ธ์ค๊ฐ ์๊ณ ์์ญ์์ ์์ ์ค์ด๋ผ๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํต์ ๊ฐ ํ์ํจ
- ์งํ(Progress): ์๋ฌด๋ ์๊ณ ์์ญ์ ์ง์ ํ์ง ๋ชปํ๋ฉด ์๋๋ฉฐ ์๋ฌด๋ ์๊ณ์์ญ์ ์์ง ์๋ค๋ฉด ์ง์ ํ๊ณ ์ ํ๋ ํ๋ก์ธ์ค๋ฅผ ์ง์ ์์ผ์ผํจ
- ์ ํ ๋๊ธฐ(Bounded Waiting): ํ๋ก์ธ์ค๊ฐ ์๊ณ ์์ญ์ ์ง์ ํ๊ธฐ ์ํด ๋ฌดํ์ ์ผ๋ก ๊ธฐ๋ค๋ฆฌ๋ ๊ธฐ์ ํ์(Starvation)์ด ๋ฐ์ํด์๋ ์๋จ
โป ์ฝ๋ ์์ญ
- entry section
- critical section์ ์ง์ ํ๊ธฐ ์ํด ์ง์ ํ๊ฐ๋ฅผ ์์ฒญํ๋ ์์ญ
- ์ ๊ทผ ์ ์ด(lock)
- critical section
- ํ๋์ ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ง ์ ๊ทผํ ์ ์๋ ์์ญ
- exit section
- ์ ์ด(lock)์ ํด์ ํ๋ ๋ฑ ๋ ์ด์ ์๊ณ ๊ตฌ์ญ์ ๋จธ๋ฌด๋ฅด์ง ์์์ ์๋ฆฌ๋ ์์ญ
- remainder section
- entry, critical, exit์ ์ ์ธํ ๋๋จธ์ง ์ฝ๋ ๋ถ๋ถ ์์ญ
๊ฒฝ์ ์ํ(Race Condition)
- ์๊ณ ์์ญ์ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ์ ๊ทผํ์ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์
- ์๊ณ ์์ญ ๋ด์์ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ๊ณต์ ์์(Shared Resource)๋ฅผ ๋์์ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ ์คํ ์์์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง (์ผ๊ด์ฑ ์ ํ)
๐ก๊ณต์ ์์(Shared Resource)๋?
์์คํ ์์์ ๊ฐ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ํจ๊ป ์ ๊ทผํด์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ํฐ, ํ๋ฆฐํฐ, ํ์ผ, ๋ฐ์ดํฐ ๋ฑ์ ์์์ด๋ ๋ณ์
Ex) ๋ ๊ฐ์ ์ค๋ ๋๊ฐ ์ ์ญ ๋ณ์์ ๊ฐ์ 1์ฉ ์ฆ๊ฐ
- Tread 1: read value -> 0
- Tread 2: read value -> 0
- Tread 1: increase value -> 1
- Tread 2: increase value -> 1 (์ผ๋ฐ์ ์ผ๋ก ๋ ๋ฒ ์ฆ๊ฐ์์ผฐ์ผ๋ฏ๋ก 2๊ฐ ๋์ด์ผ ํ์ง๋ง ์์ ์์๋ก ์คํ๋ ๊ฒฝ์ฐ ๊ฐ์ด 1๋ก ๋ณ๊ฒฝ)
๊ฒฝ์ ์ํ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ
- ์ปค๋ ์์
์ ์ํํ๋ ์ค์ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ์ ๋
- ๋ฌธ์ ์ํฉ: ์ปค๋๋ชจ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ์ฌ ์์ ์ ์ํํ๋ค๊ฐ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ์ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๊ฒฝ์ฐ
- ํด๊ฒฐ๋ฒ: ์ปค๋๋ชจ๋์์ ์์ ์ ์ํํ๋ ๋์ ์ธํฐ๋ฝํธ๋ฅผ disable ์์ผ CPU ์ ์ด๊ถ์ ๊ฐ์ ธ๊ฐ์ง ๋ชปํ๋๋ก ํจ
- ํ๋ก์ธ์ค๊ฐ ์์คํ
์ฝ์ ํตํด ์ปค๋๋ชจ๋๋ก ์ง์
ํ์ฌ ์์
์ ์ํํ๋ ๋์ค ๋ฌธ๋งฅ ๊ตํ์ด ๋ฐ์ํ์ ๋
- ๋ฌธ์ ์ํฉ: ํ๋ก์ธ์ค1์ด ์ปค๋๋ชจ๋์์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ค๊ฐ ํ ๋น ์๊ฐ์ด ์ด๊ณผ๋์ด CPU ์ ์ด๊ถ์ด ํ๋ก์ธ์ค2๋ก ๋์ด๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๊ฒฝ์ฐ
- ํด๊ฒฐ๋ฒ: ํ๋ก์ธ์ค๊ฐ ์ปค๋๋ชจ๋์์ ์์ ํ๋ ๊ฒฝ์ฐ ํ ๋น ์๊ฐ์ด ์ด๊ณผ๋์ด๋ ๋ฌธ๋งฅ ๊ตํ์ ํ์ง ์๋๋ก ํจ
- ๋ฉํฐ ํ๋ก์ธ์ ํ๊ฒฝ์์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ์ปค๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋
- ๋ฌธ์ ์ํฉ: 2๊ฐ์ CPU๊ฐ ๋์์ ์ปค๋ ๋ด๋ถ์ ๊ณต์ ๋ฐ์ดํฐ์ ์ ๊ทผํ์ฌ ์กฐ์ํ๋ ๊ฒฝ์ฐ
- ํด๊ฒฐ๋ฒ: ์ปค๋ ๋ด๋ถ์ ์๋ ๊ฐ ๊ณต์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋๋ง๋ค ํด๋น ๋ฐ์ดํฐ์ ๋ํด Lock/Unlock์ ํจ
โป ๊ฒฝ์ ์ํ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ(๋ฎคํ ์ค, ์ธ๋งํฌ์ด)์ ๋ค์ ํฌ์คํ ์์ ์์ฑํ๊ฒ ๋ค.
๐ก์ฐธ๊ณ
728x90