LOAD mem(100), register 2; //๋ฉ๋ชจ๋ฆฌ์ 100๋ฒ์ง์ ์๋ ๊ฐ์ ๋ ์ง์คํฐ 2๋ก ๊ฐ์ ธ์จ๋ค.
LOAD mem(120), register 3; //๋ฉ๋ชจ๋ฆฌ์ 120๋ฒ์ง์ ์๋ ๊ฐ์ ์ ๋ฆฌ์คํฐ 3์ผ๋ก ๊ฐ์ ธ์จ๋ค.
ADD register 5, register 2, register 3; //๋ ์ง์คํฐ 2์ ๋ ์ง์คํฐ 3์ ์ ์ฅ๋ ๊ฐ์ ํฉ์ ๋ ์ง์คํฐ 5์ ์ ์ฅ
MOVE register 5, mem(160); //๋ ์ง์คํฐ 5์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ 160๋ฒ์ง๋ก ์ฎ๊ธด๋ค.
CPU๊ฐ ์ฐ์ฐ์ ํ๋ ค๋ฉด ํ์ํ ๋ฐ์ดํฐ๋ฅผ CPU๋ก ๊ฐ์ ธ์ ์์๋ก ๋ณด๊ดํด์ผ ํ๋๋ฐ, ์ด๋ ์ฌ์ฉ๋๋ ์ฅ์๊ฐ ๋ ์ง์คํฐ.
์ ์ด์ฅ์น๋ ๋ช ๋ น์ด๋ฅผ ํด์ํ์ฌ ์ ์ด ์ ํธ๋ฅผ ๋ณด๋ด๊ณ CPU ๋ด์ ๋ฐ์ดํฐ ํ๋ฆ์ ์กฐ์ ํ๋ ์ญํ
๋ฒ์ค๋ CPU์ ๋ฉ๋ชจ๋ฆฌ, ์ฃผ๋ณ ์ฅ์น ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉ.
-
์ ์ด๋ฒ์ค(control bus)
์ ์ด์ฅ์น์ ์ฐ๊ฒฐ๋ ๋ฒ์ค๋ก, CPU๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ๋ณ ์ฅ์น์ ์ ์ด ์ ํธ๋ฅผ ๋ณด๋ด๊ธฐ ์ํด ์ฌ์ฉ. ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ๋ณ ์ฅ์น์์๋ ์์ ์ด ์๋ฃ๋๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ ์ด์ ํธ๋ฅผ ๋ณด๋ด๊ธฐ๋๋ฌธ์ ์๋ฐฉํฅ์ด๋ค.
-
์ฃผ์๋ฒ์ค(address bus)
๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๋ ์ง์คํฐ์ ์ฐ๊ฒฐ๋ ๋ฒ์ค๋ก, ๋ฉ๋ชจ๋ฆฌ๋ ์ฃผ๋ณ์ฅ์น์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ๋ ์์น ์ ๋ณด๋ฅผ ๋ณด๋ด๊ธฐ ์ํด ์ฌ์ฉ. ๋จ๋ฐฉํฅ
-
๋ฐ์ดํฐ๋ฒ์ค(data bus)
๋ฉ๋ชจ๋ฆฌ ๋ฒํผ ๋ ์ง์คํฐ์ ์ฐ๊ฒฐ๋ ๋ฒ์ค๋ก, ๋ฐ์ดํฐ์ ์ด๋์ด ์๋ฐฉํฅ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
-
polling : CPU๊ฐ ์ง์ ์ ์ถ๋ ฅ์ฅ์น์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ๋ด๋ณด๋ด๋ ๊ฒ.
-
CPU์์ ๊ณผ ์ ์ฅ์ฅ์น์ ๋ฐ์ดํฐ ์ด๋์ ๋ ๋ฆฝ์ ์ผ๋ก ์ด์ํจ์ผ๋ก์จ ์์คํ ์ ํจ์จ์ ๋์ธ๋ค.
-
Interrupt handler : ์ธํฐ๋ฝํธ ๋ฐ์์ ์ฒ๋ฆฌ ๊ณผ์ ์ด ์ ์๋์ด ์๋ ํจ์
-
์ธํฐ๋ฝํธ ๋ฒกํฐ
- CPU๋ ์ ์ถ๋ ฅ ๊ด๋ฆฌ์์๊ฒ ์ฌ๋ฌ ๊ฐ์ ์ ์ถ๋ ฅ ์์ ์ ๋์์ ์ํฌ ์ ์๋ค.
- ์ฌ๋ฌ ์์ ์ด ๋์์ ์๋ฃ๋์์ ๋ ํจ์จ์ ์ผ๋ก ์ธํฐ๋ฝํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํจ.
- ์ธํฐ๋ฝํธ ๋ฒกํฐ์ ๋๋ฒ๋ก ๊ฐ๊ฐ์ ์ธํฐ๋ฝํธ ๊ตฌ๋ถ, ์๋ฃ/๋น์๋ฃ ์ํ๋ฅผ ๋ฐฑํฐ ํต์งธ๋ก CPU์๊ฒ ์ ์ก.
-
DMA(Direct Memory Access, ์ง์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ)
๋ฉ๋ชจ๋ฆฌ๋ CPU๋ง ์ ๊ทผ ๊ถํ์ ๊ฐ์ง ์์ ๊ณต๊ฐ์ด๋ผ ์ ์ถ๋ ฅ ๊ด๋ฆฌ์๋ ์ ๊ทผ์ด ๋ถ๊ฐํ๋ค.
๋ฐ๋ผ์ CPU์ ํ๋ฝ ์์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ DMA๋ผ๊ณ ํ๋ค.
-
๋์ ๊ณผ์ <์ ์ถ๋ ฅ>
-
CPU๊ฐ ์ ์ถ๋ ฅ ๊ด๋ฆฌ์์๊ฒ ์ ์ถ๋ ฅ ๋ช ๋ น์ ๋ณด๋ธ๋ค.
-
์ ์ถ๋ ฅ ๊ด๋ฆฌ์๋ ๋ช ๋ น๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ธ๋ค๋๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ์ฅ์น์ ์ฎ๊ธด๋ค.
-
๋ฐ์ดํฐ ์ ์ก์ด ์๋ฃ๋๋ฉด ์ ์ถ๋ ฅ ๊ด๋ฆฌ์๋ ์๋ฃ ์ ํธ(์ธํฐ๋ฝํธ)๋ฅผ CPU์ ๋ณด๋ธ๋ค.
-
CPU๋ ํ๋ ์ผ์ ์ค๋จํ๊ณ ์ฎ๊ฒจ์ง ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.
์ธ๋ถ๊ณผ์
-
์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ ์ผ์ ์ ์ง ์ํ๊ฐ ๋๋ฉฐ, ์ฌ์์ํ๊ธฐ ์ํด ํ์ฌ ํ๋ก์ธ์ค ๊ด๋ จ ์ ๋ณด๋ฅผ ์์๋ก์ ์ฅํ๋ค.
-
์ธํฐ๋ฝํธ ์ปจํธ๋กค๋ฌ๊ฐ ์คํ๋์ด ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ์์๋ฅผ ๊ฒฐ์ ํ๋ค. ์ด๋ ์ฌ๋ฌ ๊ฐ์ ์ธํฐ๋ฝํธ๊ฐ ๋์์ ๋ฐ์ํ๋ค๋ฉด ์ฐ์ ์์๋ฅผ ๊ณ ๋ คํ์ฌ ๊ทธ์ ๋ฐ๋ผ ์์๋ฅผ ๊ฒฐ์ ํ๋ค.
-
์ธํฐ๋ฝํธ ๋ฒกํฐ์ ๋ฑ๋ก๋ ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ๊ฐ ์คํ๋๋ค.
-
์ธํฐ๋ฝํธ ์ฒ๋ฆฌ๋ฅผ ๋ง์น๋ฉด ์ผ์ ์ ์ง๋ ํ๋ก์ธ์ค๊ฐ ๋ค์ ์คํ๋๊ฑฐ๋ ์ข ๋ฃ๋๋ค.
์ ์ถ๋ ฅ ์๋ฃ -> ๋ค์ ์คํ / ๋ฉ๋ชจ๋ฆฌ ์์ญ ์นจ๋ฒ์ด๋ ์ค๋ฅ -> ์ข ๋ฃ
-
-
์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ๋์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ CPU multi-thread๋ผ๊ณ ํ๋ค.
-
CPU์์ ๋ช ๋ น์ด๊ฐ ์คํ๋๋ ๊ณผ์
- ๋ช ๋ น์ด ํจ์น(Instruction Fetch, IF) : ๋ค์์ ์คํํ ๋ช ๋ น์ด๋ฅผ ๋ช ๋ น์ด ๋ ์ง์คํฐ์ ์ ์ฅ
- ๋ช ๋ น์ด ํด์(Instruction Decode, ID) : ๋ช ๋ น์ด๋ฅผ ํด์
- ์คํ(EXecution, EX) : ํด์ํ ๊ฒฐ๊ณผ๋ฅผ ํ ๋๋ก ๋ช ๋ น์ด ์คํ
- ์ฐ๊ธฐ(Write Back,WB) : ์คํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ
-
๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ธฐ๋ฒ
-
ํ์ดํ๋ผ์ธ ๊ธฐ๋ฒ(pipeline) = ํ์ดํผ์ค๋ ๋(Hyper-Thread)
๋ช ๋ น์ด๋ฅผ ์ฝ์ด ์์ฐจ์ ์ผ๋ก ์คํํ๋ ํ๋ก์ธ์์ ์ ์ฉ๋๋ ๊ธฐ์ ๋ก, ํ ๋ฒ์ ํ๋์ ๋ช ๋ น์ด๋ง ์คํํ๋ ๊ฒ์ด ์๋๋ผ ํ๋์ ๋ช ๋ น์ด๊ฐ ์คํ๋๋ ๋์ค์ ๋ค๋ฅธ ๋ช ๋ น์ด ์คํ์ ์์ํ๋ ์์ผ๋ก ๋์์ ์ฌ๋ฌ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ๊ธฐ๋ฒ์ด๋ค.
-
- ๋ฐ์ดํฐ ํด์ ๋(data hazard)
๋ฐ์ดํฐ ์์กด์ฑ ๋๋ฌธ์ ๋ฐ์ํ๋ ๋ฌธ์ . ๋ฐ์ดํฐ A๋ฅผ ํ์๋ก ํ๋ ๋๋ฒ์งธ ๋ช
๋ น์ด๋ ์์ ๋ช
๋ น์ด(A)๊ฐ ๋๋ ๋๊น์ง ๋์์ ์คํ๋์ด์๋ ์๋๋ค.
ํ์ดํ๋ผ์ธ์ ๋ช
๋ น์ด ๋จ๊ณ๋ฅผ ์ง์ฐํ์ฌ ํด๊ฒฐ.
- ์ ์ด ํด์ ๋(control hazard)
if๋ฌธ ํน์ goto๋ฌธ ์ฒ๋ผ ๋ถ๊ธฐ๋ฅผ ํ๋ ๋ช
๋ น์์ ๋ฐ์. ๋ช
๋ น์ด๊ฐ ์์ฐจ์ ์ผ๋ก ์คํ๋์ง ์๊ณ ๋ค๋ฅธ ๋ฌธ์ฅ์ผ๋ก ์ด๋ํ๊ฒ ๋๋ฉด ํ์ฌ ๋์์ ์ฒ๋ฆฌ๋๊ณ ์๋ ๋ช
๋ น์ด๋ค์ด ์ธ๋ชจ ์์ด์ง๋ค.
๋ถ๊ธฐ ์์ธก์ด๋ ๋ถ๊ธฐ ์ง์ฐ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐ
- ๊ตฌ์กฐ ํด์ ๋(structural hazard)
์๋ก ๋ค๋ฅธ ๋ช
๋ น์ด๊ฐ ๊ฐ์ ์์์ ์ ๊ทผํ๋ ค ํ ๋ ๋ฐ์ํ๋ ๋ฌธ์
-
์ํผ์ค์นผ๋ผ(super-scalar)๊ธฐ๋ฒ
ํ์ดํ๋ผ์ธ์ ์ฒ๋ฆฌํ ์ ์๋ ์ฝ์ด๋ฅผ ์ฌ๋ฌ ๊ฐ ๊ตฌ์ฑํ์ฌ ๋ณต์์ ๋ช ๋ น์ด๊ฐ ๋์์ ์คํ๋๋๋ก ํ๋ ๋ฐฉ์.
์ฝ์ด๋ฅผ 2๊ฐ ๊ตฌ์ฑํ์ฌ ๊ฐ ๋จ๊ณ์์ ๋์์ ์คํ๋๋ ๋ช ๋ น์ด๊ฐ 2๊ฐ.
ํ๋ก๊ทธ๋จ์ ์ ์ฅ์ฅ์น์ ์ ์ฅ๋์ด ์๋ ์ ์ ์ธ ์ํ์ด๊ณ , ํ๋ก์ธ์ค๋ ์คํ์ ์ํด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์จ ๋์ ์ธ ์ํ์ด๋ค.
- ์์ฑ : ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ธ์ ์คํ ์ค๋น๊ฐ ์๋ฃ๋ ์ํ
- ์ค๋น : ์คํ์ ๊ธฐ๋ค๋ฆฌ๋ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์๊ธฐ ์ฐจ๋ก๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ. ์คํ๋ ํ๋ก์ธ์ค๋ฅผ CPU ์ค์ผ์ค๋ฌ๊ฐ ์ ํํ๋ค.
- ์คํ : ์ ํ๋ ํ๋ก์ธ์ค๊ฐ ํ์ ์ฌ๋ผ์ด์ค๋ฅผ ์ป์ด CPU๋ฅผ ์ฌ์ฉํ๋ ์ํ. ํ๋ก์ธ์ค ์ฌ์ด์ context switching ๋ฐ์
- ๋๊ธฐ : ์คํ ์ํ์ ์๋ ํ๋ก์ธ์ค๊ฐ ์ ์ถ๋ ฅ์ ์์ฒญํ๋ฉด ์ ์ถ๋ ฅ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์ํ. ์ ์ถ๋ ฅ์ด ์๋ฃ๋๋ฉด ์ค๋น ์ํ๋ก ๊ฐ๋ค.
- ์๋ฃ : ํ๋ก์ธ์ค ์ข ๋ฃ. ์ ์์ข ๋ฃ exit, ๋น์ ์ ์ข ๋ฃ abort
๋ชจ๋ ํ๋ก์ธ์ค๋ ๊ณ ์ ํ PCB๋ฅผ ๊ฐ์ง๋ค. ํ๋ก์ธ์ค ์์ฑ ์ ๋ง๋ค์ด์ ธ ํ๋ก์ธ์ค๊ฐ ์คํ์ ์๋ฃํ๋ฉด ํ๊ธฐ
ํฌ์ธํฐ, ํ๋ก์ธ์ค ์ํ, ํ๋ก์ธ์ค ๊ตฌ๋ถ์, ํ๋ก๊ทธ๋จ ์นด์ดํฐ, ์ฐ์ ์์, ๊ฐ์ข ๋ ์ง์คํฐ ์ ๋ณด ...
CPU๋ฅผ ์ฐจ์งํ๋ ํ๋ก์ธ์ค๊ฐ ๋๊ฐ๊ณ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ๋ฐ์๋ค์ด๋ ์์ .
-
์ฝ๋์์ญ
ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฑํ ํ๋ก๊ทธ๋จ. ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ฒ๋ฆฌ. ์๊ธฐ ์์ ์ ์์ ํ๋ ํ๋ก๊ทธ๋จ์ ์กด์ฌX..
-
๋ฐ์ดํฐ์์ญ
ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ๋ ค๊ณ ์ ์ํ ๋ณ์(์ ์ญ๋ณ์), ํ์ผ ๋ฑ ๊ฐ์ข ๋ฐ์ดํฐ. ์ฝ๊ธฐ/์ฐ๊ธฐ ๊ฐ๋ฅ
==> ์ฝ๋์์ญ๊ณผ ๋ฐ์ดํฐ ์์ญ์ ํ๋ก์ธ์ค๊ฐ ์คํ๋๊ธฐ ์ง์ ์ ์์น์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๊ณ ์คํ๋๋ ๋์ ๋ณํ์ง ์์ผ๋ฏ๋ก ์ ์ ํ ๋น ์ญ์ญ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
-
ํ ์์ญ
-
๋์ ์ผ๋ก ํ ๋น๋๋ ๋ณ์ ์์ญ ex)malloc
main(){ int sarr[50]; int *darr; darr=(int*)malloc(sizeof(int)*50); free(darr); //๋ฉ๋ชจ๋ฆฌ ๋ฐํ }
-
-
์คํ์์ญ
๋ถ์์ ์ผ๋ก ํ์ํ ๋ฐ์ดํฐ. ๋ณต๊ตฌ ์์น ๋ฑ. ์ฌ์ฉ์์๊ฒ๋ ๋ณด์ด์ง ์๋๋ค.
- ํธ์ถํ ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ๋ณต๊ท ์ฃผ์๋ฅผ ์คํ์ ์ ์ฅํ๋ค.
- ๋ณ์ ์ฌ์ฉ ๋ฒ์์ ์ํฅ์ ๋ฏธ์น๋ ์์ญ์ ๊ตฌํํ ๋ ์ฌ์ฉ. ์ง์ญ๋ณ์ ์ ์ฅ
==> ์คํ์์ญ๊ณผ ํ์์ญ์ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ ๋์ ๋ง๋ค์ด์ง๋ ์์ญ์ผ๋ก, ๊ทธ ํฌ๊ธฐ๊ฐ ๋์ด๋ฌ๋ค ์ค์ด๋ค๊ธฐ๋ ํ๋ ๋์ ํ ๋น ์์ญ์ด๋ค.
์คํ ์ค์ธ ํ๋ก์ธ์ค๋ก๋ถํฐ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ๋ณต์ฌํ๋ ํจ์. ์ปค๋์์ ์ ๊ณต. ์์คํ ํธ์ถ์ ์ผ์ข
์คํํ๋ ํ๋ก์ธ์ค๋ ๋ถ๋ชจํ๋ก์ธ์ค, ์๋ก ์๊ธด ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค๋ก์ ๋ถ๋ชจ-์์ ๊ด๊ณ
-
์ฅ์
- ํ๋ก์ธ์ค์ ์์ฑ ์๋๊ฐ ๋น ๋ฅด๋ค.
- ์ถ๊ฐ ์์ ์์ด ์์์ ์์ํ ์ ์๋ค.
- ์์คํ ๊ด๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ํ ์ ์๋ค.
๊ธฐ์กด์ ํ๋ก์ธ์ค๋ฅผ ์๋ก์ด ํ๋ก์ธ์ค๋ก ์ ํํ๋ ํจ์.
ํ๋ก์ธ์ค์ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌํ์ฉํ๊ธฐ ์ํจ์ด๋ค. ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด PCB๋ฅผ ๋ง๋ค๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์๋ฆฌ๋ฅผ ํ๋ณดํ๋ ๊ณผ์ ์ด ํ์ํ๋ค. ์ด๋ exec() ์์คํ ํธ์ถ์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ ๋ง๋ค์ด์ง PCB, ๋ฉ๋ชจ๋ฆฌ ์์ญ, ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ด ํธ๋ฆฌํ๋ค.
ํ๋ก์ธ์ค์ ์ฝ๋์ ์ ์๋ ์ ์ฐจ์ ๋ฐ๋ผ CPU์ ์์ ์์ฒญ์ ํ๋ ์คํ ๋จ์
-
ํ๋ก์ธ์ค vs ์ค๋ ๋
ํ๋ก์ธ์ค๋ ์ฝํ๊ฒ ์ฐ๊ฒฐ(๋ ๋ฆฝ์ )๋์ด ์๋ ๋ฐ๋ฉด ์ค๋ ๋๊ธฐ๋ฆฌ๋ ๊ฐํ๊ฒ ์ฐ๊ฒฐ๋์ด์๋ค.
ํ๋ก์ธ์ค : ์ฃฝ / ์์ฌ / ์ผ์ดํฌ ์ค๋ ๋ : ๊ณ ๊ธฐ ๊ตฝ๊ธฐ / ์ฑ์ ๊ตฝ๊ธฐ / ์์ค ๋ฟ๋ฆฌ๊ธฐ
-
๋ฉํฐ์ค๋ ๋
ํ๋ก์ธ์ค ๋ด ์์ ์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ก ๋ถํ ํจ์ผ๋ก์จ ์์ ์ ๋ถ๋ด์ ์ค์ด๋ ํ๋ก์ธ์ค ์ด์ ๊ธฐ๋ฒ.
-
๋ฉํฐํ์คํน
์ด์์ฒด์ ๊ฐ CPU์ ์์ ์ ์ค ๋ ์๊ฐ์ ์๊ฒ ๋๋์ด ๋ฐฐ๋ถํ๋ ๊ธฐ๋ฒ.
-
๋ฉํฐํ๋ก์ธ์ฑ
CPU๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ๋์์ ์ฒ๋ฆฌํ๋ ์์ ํ๊ฒฝ. = ์ํผ์ค์นผ๋ผ ๊ธฐ๋ฒ
-
CPU ๋ฉํฐ์ค๋ ๋
ํ์ดํ๋ผ์ธ์ ๊ธฐ๋ฒ์ ์ด์ฉํ์ฌ ๋์์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ฒ๋ฆฌํ๋๋ก ๋ง๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ธฐ๋ฒ.
โ *์ ์ ์์ญ : ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ ๋์ ๋ฐ๋์ง ์๋ ์์ญ
- fork() ์์คํ ํธ์ถ๋ก ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค๋ฉด ํ์ ์๋ ์ ์ ์์ญ์ด ์ฌ๋ฌ ๊ฐ๊ฐ ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ๋์ ํ๋ก์ธ์ค ๋ด์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ์์ฑํ๋ ๋ฉํฐ์ค๋ ๋๋ ์ฝ๋, ํ์ผ๋ฑ์ ์์์ ๊ณต์ ํจ์ผ๋ก์จ ์์์ ๋ญ๋น๋ฅผ ๋ง๊ณ ํจ์จ์ฑ์ ํฅ์ํ๋ค.
-
- ์ฅ์
- ์๋ต์ฑ ํฅ์ : ํ ์ค๋ ๋๊ฐ ์ ์ถ๋ ฅ์ผ๋ก ์ธํด ์์ ์ด ์งํ๋์ง ์๋๋ผ๋ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์์ ์ ๊ณ์ํ์ฌ ์ฌ์ฉ์์ ์์ ์๊ตฌ์ ๋นจ๋ฆฌ ์๋ตํ ์ ์๋ค.
- ์์ ๊ณต์ : ํ๋ก์ธ์ค๊ฐ ๊ฐ์ง ์์์ ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๊ฒ ๋์ด ์์ ์ ์ํํ๊ฒ ์งํํ ์ ์๋ค.
- ํจ์จ์ฑ ํฅ์ : ์์์ ์ค๋ณต์ ๋ง์์ผ๋ก์จ ํจ์จ ํฅ์
- ๋ค์ค CPU ์ง์ : 2๊ฐ ์ด์์ CPU๋ฅผ ๊ฐ์ง ์ปดํจํฐ์์ ๋ฉํฐ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ธ์ค์ ์ฒ๋ฆฌ ์๊ฐ์ด ๋จ์ถ๋๋ค.
- ๋จ์
- ๋ชจ๋ ์ค๋ ๋๊ฐ ์์์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ํ ์ค๋ ๋์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ ์ฒด ํ๋ก์ธ์ค์ ์ํฅ์ ๋ฏธ์น๋ค.
-
์ฌ์ฉ์ ์ค๋ ๋(user-level thread)
-
์ฌ์ฉ์ ๋ ๋ฒจ์์ ์ค๋ ๋๋ฅผ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ.
-
์ปค๋ ์ ์ฅ์์ ํ๋์ ํ๋ก์ธ์ค์ฒ๋ผ ๋ณด์ธ๋ค. ์ฌ์ฉ์ ํ๋ก์ธ์ค ๋ด์ ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๊ฐ ์กด์ฌํ์ง๋ง ์ปค๋์ ์ค๋ ๋ ํ๋์ ์ฐ๊ฒฐ๋๋ค.
-
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ง์ ์ค์ผ์ค๋งํ๊ณ ์์ ์ ํ์ํ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ context switching X
-
์ฅ์ ๋ฌธ๋งฅ๊ตํ๊ณผ ๊ฐ์ ๋ถ๊ฐ์ ์ธ ์์ ์ด ์ค์ด๋ค์ด ์๋๊ฐ ๋น ๋ฅด๋ค.
-
๋จ์
์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๊ฐ ํ๋์ ์ปค๋ ์ค๋ ๋์ ์ฐ๊ฒฐ๋๊ธฐ ๋๋ฌธ์ ์ปค๋ ์ค๋ ๋๊ฐ ์ ์ถ๋ ฅ ์์ ์ ์ํด ๋๊ธฐ ์ํ์ ๋ค์ด๊ฐ๋ฉด ๋ชจ๋ ์ฌ์ฉ์ ์ค๋ ๋๊ฐ ๋๊ธฐํ๊ฒ ๋๋ค.
ํ ํ๋ก์ธ์ค์ ํ์ ์ฌ๋ผ์ด์ค๋ฅผ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๊ฐ์ CPU๋ฅผ ๋์์ ์ฌ์ฉํ ์ ์๋ค.
๋ณด์์ ์ทจ์ฝํ๋ค.
-
-
์ปค๋ ์ค๋ ๋(kernel-level thread)
- ์ปค๋์ด ๋ฉํฐ์ค๋ ๋๋ฅผ ์ง์ํ๋ ๋ฐฉ์์ผ๋ก, ํ๋์ ์ฌ์ฉ์ ์ค๋ ๋๊ฐ ํ๋์ ์ปค๋์ค๋ ๋์ ์ฐ๊ฒฐ๋๋ค.
- ๋ฉํฐ CPU ์ฌ์ฉ ๊ฐ๋ฅ, ํ๋์ ์ค๋ ๋๊ฐ ๋๊ธฐ ์ํ์ ์์ด๋ ๋ค๋ฅธ ์ค๋ ๋๋ ์์ ์ ๊ณ์ ํ ์ ์๋ค. ๋ณด์์ ๊ฐํ๊ณ ์์ ์
- ๋ฌธ๋งฅ๊ตํ ์ค๋ฒํค๋(๋จ์ )
-
๋ฉํฐ๋ ๋ฒจ ์ค๋ ๋
- ์ฌ์ฉ์ ๋ ๋ฒจ ์ค๋ ๋์ ์ปค๋ ๋ ๋ฒจ ์ค๋ ๋๋ฅผ ํผํฉํ ๋ฐฉ์์ผ๋ก ํ์ด๋ธ๋ฆฌ๋ ์ค๋ ๋๋ผ๊ณ ๋ ํ๋ค.
๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๊ณตํํ๊ฒ ์์ ํ๋๋ก ํ๋ ๊ฒ
-
์ ์ ํ ์ค์ผ์ค๋ง "๋นผ์์ ์ ์์"
์ด๋ค ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ํ ๋น๋ฐ์ ์คํ ์ค์ด๋๋ผ๋ ์ด์์ฒด์ ๊ฐ CPU๋ฅผ ๊ฐ์ ๋ก ๋นผ์์ ์ ์๋ ์ค์ผ์ค๋ง ๋ฐฉ์
-
๋น์ ์ ํ ์ค์ผ์ค๋ง "๋นผ์์ ์ ์์"
๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋นผ์์ ์ ์๋ ์ค์ผ์ค๋ง ๋ฐฉ์
๊ตฌ๋ถ ์ ์ ํ ๋น์ ์ ํ ์์ ๋ฐฉ์ ์์ ์ ์ค๋จ์ํค๊ณ ์๋ก์ด ์์ ์ ์คํํ ์ ์๋ค. ์คํ ์ํ์ ์๋ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๋ค๋ฅธ ์์ ๋ถ๊ฐ๋ฅ ์ฅ์ ๋ํํ์ด๋ ์๋ถํ ์์คํ ์ ์ ํฉ CPU ์ค์ผ์ค๋ฌ์ ์์ ๋์ด ์ ๊ณ ๋ฌธ๋งฅ ๊ตํ ์ค๋ฒํค๋๊ฐ ์ ๋ค ๋จ์ ์ค๋ฒํค๋ ๋ง๋ค ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค๊ฐ ๋ง์ ์ฒ๋ฆฌ์จ์ด ๋จ์ด์ง๋ค. ์ฌ์ฉ ์๋ถํ ๋ฐฉ์ ์ค์ผ์ค๋ฌ ์ผ๊ด ์์ ๋ฐฉ์ ์ค์ผ์ค๋ฌ ์ค์๋ ๋๋ค ๋ฎ๋ค
-
์ค๋น ์ํ์ ๋ค์ค ํ
-
๊ณ ์ ์ฐ์ ์์ ๋ฐฉ์
์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๋ฉด ํ๋ก์ธ์ค๊ฐ ๋๋ ๋๊น์ง ๋ฐ๋์ง ์๋ ๋ฐฉ์
-
๋ณ๋ ์ฐ์ ์์ ๋ฐฉ์
ํ๋ก์ธ์ค ์์ฑ ์ ๋ถ์ฌ๋ฐ์ ์ฐ์ ์์๊ฐ ํ๋ก์ธ์ค ์์ ์ค๊ฐ์ ๋ณํ๋ ๋ฐฉ์
-
-
๋๊ธฐ ์ํ์ ๋ค์ค ํ
์ ์ , ๋น์ ์ ์ ํ๋ก์ธ์ค ๊ธฐ์ค์ผ๋ก CPU๋ฅผ ๋บ๋์ง ์๋บ๋์ง,,
-
๋น์ ์ ํ ์๊ณ ๋ฆฌ์ฆ "์๋บ๋๋ค"
FCFS, SJF, HRN
-
์ ์ ํ ์๊ณ ๋ฆฌ์ฆ "๋บ๋๋ค"
๋ผ์ด๋๋ก๋น, SRT, ๋ค๋จ๊ณ ํ, ๋ค๋จ๊ณ ํผ๋๋ฐฑ ํ
-
๋ ๋ค ๊ฐ๋ฅ
์ฐ์ ์์ ์ค์ผ์ค๋ง
-
FCFS ์ค์ผ์ค๋ง (First Come First Served)
์ค๋นํ์ ๋์ฐฉํ ์์๋๋ก CPU๋ฅผ ํ ๋นํ๋ ๋น์ ์ ํ
-
์ฅ์ : ๋จ์ํ๊ณ ๊ณตํ
-
๋จ์
- convoy effect - ์ฒ๋ฆฌ ์๊ฐ์ด ๊ธด ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฐจ์งํ๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ ํ์ผ์์ด ๊ธฐ๋ค๋ ค์ผํ๋ค.
- ํ์ฌ ์์ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์ ์ถ๋ ฅ ์์ ์ ์์ฒญํ๋ ๊ฒฝ์ฐ CPU๊ฐ ์์ ํ์ง ์๊ณ ์ฌ๋ ์๊ฐ์ด ๋ง์์ ธ ์์ ํจ์จ์ด ๋จ์ด์ง๋ค.
-
-
SJF ์ค์ผ์ค๋ง(Shortest Job First)
์ค๋น ํ์ ์๋ ํ๋ก์ธ์ค ์ค์์ ์คํ ์๊ฐ์ด ๊ฐ์ฅ ์งง์ ์์ ๋ถํฐ ํ ๋นํ๋ ๋น์ ์ ํ.
-
์ฅ์ : ์์ ์์ ์ ๋จผ์ ์คํํ๊ธฐ ๋๋ฌธ์ ์์คํ ํจ์จ์ฑ up, FCFS๋ณด๋ค ํ๊ท ๋๊ธฐ ์๊ฐ ์งง์.
-
๋จ์
-
์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค์ ์ข ๋ฃ ์๊ฐ์ ์ ํํ๊ฒ ์์ธกํ๊ธฐ ์ด๋ ต๋ค.
-
๊ณตํํ์ง ๋ชปํ๋ค
์์ ์๊ฐ์ด ๊ธธ์ด ๊ณ์ ๋ค๋ก ๋ฐ๋ฆฌ๋ starvation(์์ฌ) ํ์ ๋ฐ์.
==> aging ์ผ๋ก ํด๊ฒฐ ๊ฐ๋ฅ
-
-
-
HRN ์ค์ผ์ค๋ง(Highest Response Ratio Next)
SJF์ starvation ํ์์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๋น์ ์ ํ ์๊ณ ๋ฆฌ์ฆ. ์๋น์ค๋ฅผ ๋ฐ๊ธฐ ์ํด ๊ธฐ๋ค๋ฆฐ ์๊ฐ + CPU ์ฌ์ฉ ์๊ฐ์ ๊ณ ๋ คํ์ฌ ์ค์ผ์ค๋ง ํ๋ ๋ฐฉ์
์ฐ์ ์์ = (๋๊ธฐ์๊ฐ + CPU ์ฌ์ฉ์๊ฐ) / CPU ์ฌ์ฉ์๊ฐ
-
๋ผ์ด๋ ๋ก๋น ์ค์ผ์ค๋ง (Round Robin)
ํ ํ๋ก์ธ์ค๊ฐ ํ์ ์ฌ๋ผ์ด์ค ๋์ ์์ ํ๋ค๊ฐ ์๋ฃํ์ง ๋ชปํ๋ฉด ์ค๋น ํ์ ๋งจ ๋ค๋ก ๊ฐ์ ์๊ธฐ ์ฐจ๋ก๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์.
์ ์ ํ ์๊ณ ๋ฆฌ์ฆ ์ค ๊ฐ์ฅ ๋จ์ํ๊ณ ๋ํ์ ์ด๋ฉฐ, ํ๋ก์ธ์ค๋ค์ด ์์ ์ ์๋ฃํ ๋๊น์ง ๊ณ์ ์ํํ๋ฉด์ ์คํ๋๋ค.
-
SRT ์ค์ผ์ค๋ง (Shortest Remaing Time)
SJF + Round Robin. SJF์ ์ ์ ํ ๋ฒ์ . CPU๋ฅผ ํ ๋น๋ฐ์ ํ๋ก์ธ์ค๋ฅผ ์ ํํ ๋ ๋จ์ ์๋ ์์ ์๊ฐ์ด ๊ฐ์ฅ ์ ์ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๋ค.
- ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ํ์ ์๋ ํ๋ก์ธ์ค์ ๋จ์ ์๊ฐ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ณ์ฐํด์ผ ํจ.
- ์ข ๋ฃ์๊ฐ์ ์์ธกํ๊ธฐ ์ด๋ ต๊ณ ์์ฌํ์ ๋ฐ์
-
์ฐ์ ์์ ์ค์ผ์ค๋ง
์ ์ /๋น์ ์ ๋๋ค ๊ฐ๋ฅ
- ๋ฌธ์ ์
- ํ๋ก์ธ์ค์ ์์๋ฅผ ๋ฌด์ํ๋ฏ๋ก ๊ณตํ์ฑ ์๋ฐฐ
- ์์ฌํ์
- ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ๋งค๋ฒ ๋ฐ๊ฟ์ผ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋ ๋ฐ์
- ๋ฌธ์ ์
-
๋ค๋จ๊ณ ํ ์ค์ผ์ค๋ง
์ฐ์ ์์์ ๋ฐ๋ผ ์ค๋น ํ๋ฅผ ์ฌ๋ฌ๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ์. ์ฐ์ ์์ ๋ณ ํ๋ฅผ ์์ฑ.
๊ฐ ๋จ๊ณ์ ํ์ ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์ ์ฌ์ฉ, ์ฐ์ ์์์ ๋ณํ๊ฐ ์๋ค.
์์ ํ ํ๋ก์ธ์ค์ ์์ ์ด ๋๋๊ธฐ ์ ์๋ ํ์ ํ ํ๋ก์ธ์ค์ ์์ ์ ํ ์ ์๋ค.
-
๋ค๋จ๊ณ ํผ๋๋ฐฑ ํ ์ค์ผ์ค๋ง
์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค์ ๋ถ๋ฆฌํ ๋ค๋จ๊ณ ํ ์ค์ผ์ค๋ง์ ๋ฌธ์ ์ ์ ๋ณด์ํ ๋ฐฉ์.
CPU๋ฅผ ์ฌ์ฉํ๊ณ ๋ ํ๋ก์ธ์ค์ ์ฐ์ ์์๊ฐ ๋ฎ์์ง๋ค. CPU๋ฅผ ์ฌ์ฉํ๊ณ ๋ ํ๋ก์ธ์ค๋ ์๋์ ํ๋ก ๋๋์๊ฐ์ง ์๊ณ ์ฐ์ ์์๊ฐ ํ๋ ๋ฎ์ ํ์ ๋์ผ๋ก ๋์๊ฐ๋ค.
์ฐ์ ์์์ ๋ฐ๋ผ ํ์ ์ฌ๋ผ์ด์ค์ ํฌ๊ธฐ๊ฐ ๋ค๋ฅด๋ค. ์ฐ์ ์์๊ฐ ๋ฎ์ ์๋ก ํด๋น ํ์ ํ์ ์ฌ๋ผ์ด์ค๊ฐ ํฌ๋ค.
๊ฒฐ๊ตญ ๋ง์ง๋ง ํ์ ์๋ ํ๋ก์ธ์ค๋ ๋ฌดํ๋์ ํ์ ์ฌ๋ผ์ด์ค == FCFS
- ์ฌ๋ฌํ๋ก์ธ์ค๊ฐ ๊ณต๋์ผ๋ก ์ด์ฉํ๋ ๋ณ์, ๋ฉ๋ชจ๋ฆฌ, ํ์ผ ๋ฑ
- ๋๊ฐ ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ๋๋์ ๋ฐ๋ผ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค.
-
๊ณต์ ์์ ์ ๊ทผ ์์์ ๋ฐ๋ผ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ํ๋ก๊ทธ๋จ์ ์์ญ
-
์๊ณ๊ตฌ์ญ ํด๊ฒฐ ์กฐ๊ฑด
- ์ํธ๋ฐฐ์ (mutual exlusion)
โ ์๊ณ๊ตฌ์ญ ๋ด์๋ ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์กด์ฌ
- ํ์ ๋๊ธฐ(bounded waiting)
โ ์ด๋ค ํ๋ก์ธ์ค๋ ๋ฌดํ๋๊ธฐ ํ์ง ์์์ผ ํ๋ค.
โ ์ฆ ํน์ ํ๋ก์ธ์ค๊ฐ ์๊ณ๊ตฌ์ญ์ ์ง์ ํ์ง ๋ชปํ๋ฉด ์๋๋ค.
- ์งํ์ ์ตํต์ฑ(progress flexibility)
โ ํ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์งํ์ ๋ฐฉํดํด์๋ ์ ๋๋ค.
์๊ณ๊ตฌ์ญ์ ๊ธฐ๋ณธ ์ฝ๋
#include <stdio.h>
bool lock = false;
int balance;
int main(){
while(lock==true);
lock=true;
balance = balance+10; /* ์๊ณ๊ตฌ์ญ */
lock = false;
}
-
ํผํฐ์จ ์๊ณ ๋ฆฌ์ฆ
//๊ณต์ ๋ณ์ bool lock1=false; bool lock2=false; int turn=1; //๋ ํ๋ก์ธ์ค๊ฐ ๋์์ lock์ ์ค์ ํ์ฌ ์๊ณ๊ตฌ์ญ์ ๋ชป๋ค์ด๊ฐ๋ ์ํฉ์ ๋๋นํ๊ธฐ ์ํ ์ฅ์น. //Process 1 lock1=true; turn=2; while(lock2==true && turn==2); /*~~~์๊ณ๊ตฌ์ญ~~~*/ lock1=false; //Process 2 lock2=true; turn=1; while(lock1==true && turn==1); /*~~~์๊ณ๊ตฌ์ญ~~~*/ lock2=false;
-
๋ฐ์ปค ์๊ณ ๋ฆฌ์ฆ
//๊ณต์ ๋ณ์ bool lock1=false; bool lock2=false; int turn=1; //P1 lock1 = true; while(lock2==true){ if(turn ==2){ lock1=false; while(turn==2); lock1=true; } } /*~~~~~์๊ณ๊ตฌ์ญ~~~~~*/ turn=2; lock1=false; }
-
P1์ ์ฐ์ ์ ๊ธ์ ๊ฑด๋ค.
-
P2์ ์ ๊ธ์ด ๊ฑธ๋ ธ๋์ง ํ์ธํ๋ค.
-
๋ง์ฝ P2๋ ์ ๊ธ์ ๊ฑธ์๋ค๋ฉด ๋๊ฐ ๋จผ์ ์ธ์ง ํ์ธํ๋ค.(turn)
3-1. P1์ ์ฐจ๋ก์ด๋ฉด(turn==1) ์๊ณ๊ตฌ์ญ ์ง์
3-2. P2์ ์ฐจ๋ก์ด๋ฉด 4๋ก ์ด๋.
-
P1์ ์ ๊ธ์ ํ๊ณ , P2๊ฐ ๋ง์น ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.(while (turn==2);)
P2๊ฐ ์์ ์ ๋ง์น๋ฉด ์ ๊ธ์ ๊ฑธ๊ณ ์๊ณ๊ตฌ์ญ์ผ๋ก ์ง์ ํ๋ค.
-
-
์ธ๋งํฌ์ด
-
์๊ณ๊ตฌ์ญ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ์ค์์น๋ฅผ ์ฌ์ฉ์ค์ผ๋ก ๋๊ณ ๋ค์ด๊ฐ๋ค.
-
์ดํ์ ๋์ฐฉํ๋ ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค๊ฐ ์์ ์ ๋ง์น ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
-
ํ๋ก์ธ์ค๊ฐ ์์ ์ ๋ง์น๋ฉด ์ธ๋งํฌ์ด๋ ๋ค์ ํ๋ก์ธ์ค์ ์๊ณ๊ตฌ์ญ์ ์ฌ์ฉํ๋ผ๋ ๋๊ธฐํ ์ ํธ๋ฅผ ๋ณด๋ธ๋ค.
-
์๊ณ๊ตฌ์ญ์ด ์ ๊ฒผ๋์ง ์ง์ ์ ๊ฒํ๊ฑฐ๋, ๋ฐ์ ๋๊ธฐ๋ฅผ ํ๊ฑฐ๋, ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋๊ธฐํ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ํ์๊ฐ ์๋ค.
-
์ธ๋งํฌ์ด์์ ์ ๊ธ์ด ํด์ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค๋ ์ธ๋งํฌ์ด ํ์ ์ ์ฅ๋์ด ์๋ค๊ฐ wake_up์ ํธ๋ฅผ ๋ฐ์ผ๋ฉด ํ์์ ๋์ ์๊ณ๊ตฌ์ญ์ ์ง์ .
-
2๊ฐ์ ๊ณต์ ์์์ ๊ฐ์ง๊ณ 3๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์์ ํ ๋ (Rs=2;)
- ํ๋ก์ธ์ค P1์ RS ๊ฐ์ 1 ๊ฐ์์ํค๊ณ ์๊ณ๊ตฌ์ญ์ ์ง์ ํ๋ค.
- ํ๋ก์ธ์ค P2๋ RS ๊ฐ์ 1 ๊ฐ์์ํค๊ณ ์๊ณ๊ตฌ์ญ์ ์ง์ ํ๋ค.
- P3์ RS๊ฐ 0์ด๋ฏ๋ก ๋๊ธฐ.
- P1์ด ์์ ์ ๋ง์น๊ณ V()๋ฅผ ์คํํ๋ฉด RS๊ฐ์ 1์ด ๋๊ณ wake_up์ ํธ๊ฐ ํ๋ก์ธ์ค P3์๊ฒ ์ ๋ฌ
- P3 ์๊ณ๊ตฌ์ญ ์ง์
-
๋ฌธ์ ์
์ธ๋งํฌ์ด๋ฅผ ์๋ชป ์ฌ์ฉํ๋ฉด ์๊ณ๊ตฌ์ญ์ ๋ณดํธํ ์ ์๋ค.
(1) P() - P() : wake_up์ ํธ๊ฐ ๋ฐ์ํ์ง ์์ ๋ฌดํ๋๊ธฐ์ ๋น ์ง๋ค.
(2) V() - P() : ์ํธ๋ฐฐ์ ๊ฐ ๋ณด์ฅ๋์ง ์๋ ๊ฒฝ์ฐ
-
-
๋ชจ๋ํฐ
- ์์คํ ํธ์ถ๊ณผ ๊ฐ์ ๊ฐ๋ . ์ธํฐํ์ด์ค๋ง ์ ๊ณตํ๋ค.
- ์๊ณ๊ตฌ์ญ์ผ๋ก ์ง์ ๋ ๋ณ์๋ ์์์ ์ ๊ทผํ๊ณ ์ ํ๋ ํ๋ก์ธ์ค๋ ์ง์ P()๋ V()๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ชจ๋ํฐ์ ์์ ์์ฒญ์ ํ๋ค.
- ๋ชจ๋ํฐ๋ ์์ฒญ๋ฐ์ ์์ ์ผ ๋ชจ๋ํฐ ํ์ ์ ์ฅํ ํ ์์๋๋ก ์ฒ๋ฆฌํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ง ํด๋น ํ๋ก์ธ์ค์ ์๋ ค์ค๋ค.
- ์ฌ์ฉ์ ์ ์ฅ์์๋ ๋ณต์กํ ์ฝ๋๋ฅผ ์คํํ์ง ์์์ ์ข๊ณ , ์์คํ ์ ์ฅ์์๋ ์๊ณ๊ตฌ์ญ์ ๋ณดํธํ ์ ์์ด์ ์ข๋ค.
monitor shared_balance { private: int balance=10; /*shared data*/ boolean busy=false; condition mon; /*condition variable*/ public: increase(int amount){ if(busy==true) mon.wait(); /*waiting in queue*/ busy=true; balance=balance+amount; mon.signal(); /*wake up next waiting process*/ } }
์๊ณ๊ตฌ์ญ ๋ณดํธ์ ๋๊ธฐํ๋ฅผ ์ํด ๋ด๋ถ์ ์ผ๋ก ์ํ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค.
์๊ณ๊ตฌ์ญ์ ๋ณดํธ๋ ํ๋ก์ธ์ค์ ๋๊ธฐํ๊ฐ ๋ชจ๋ํฐ ๋ด๋ถ์์ ์ฒ๋ฆฌ๋๋ฏ๋ก ์ฌ์ฉ์๋ increase()๋ง ํธ์ถํ๋ฉด ๋๋ค.
2๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์์ ์ด ๋๋๊ธฐ๋ง ๊ธฐ๋ค๋ฆฌ๋ฉฐ ์์ ์ ๋ ์ด์ ์งํํ์ง ๋ชปํ๋ ์ํ.
cf) starvation - OS๊ฐ ์๋ชป๋ ์ ์ฑ ์ ์ฌ์ฉํ์ฌ ํน์ ํ๋ก์ธ์ค์ ์์ ์ด ์ง์ฐ๋๋ ๋ฌธ์
โ ๊ต์ฐฉ์ํ - ์์ฐ์ ์ผ๋ก ์ผ์ด๋๋ ๋ฌธ์