๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ธ๋งํฌ์ด ์ธ์ ๊ณ ์์ค์ธ ๋ชจ๋ํฐ๋ผ๋ ๋ฐฉ์์ด ์๋ค. ์ด์์ฒด์ ์์๋ mutex๋ฅผ ์ ๊ณตํ์ง๋ง ์๋ฐ์์๋ ๋ชจ๋ํฐ๋ฅผ ํ์ฉํ์ฌ ๋๊ธฐํ์ ๋ํ ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค. ๋ชจ๋ํฐ ๋ฐฉ์์ synchronized๋ฅผ ํตํด ์ฌ์ฉํ ์ ์๋ค. ์๋ฐ์์ ์ธ๋ชจํฌ์ด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ด๊ธฐ์ ์ ๊ทผํ ์ ์๋ ์ฐ๋ ๋์ ์๋ฅผ ์ ์ ํ ์ง์ ํด์ฃผ๊ณ ์ด๋ฅผ ํ๋จํ์ฌ acquire, releaseํ์ฌ์ผ ํ๋ค. ํ์ง๋ง synchroronized๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณด๋ค ๊ฐํธํ๊ฒ ๋๊ธฐํ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค. BankAccount Problem (USE synchronized) class BankAccount { int balance; boolean p_turn = true; synchronized void deposit(int ..
ํ๋ก์ธ์ค ๋๊ธฐํ๊ฐ ์ ์ ํ ์ค๊ณ๋์ง ์์, ์์ฌํ๋ ์ฒ ํ์ ๋ฌธ์ ์ฒ๋ผ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๋ ์ด์ ์์ ์ ์งํํ ์ ์๋ deadlock(๊ต์ฐฉ์ํ)์ ๋น ์ง ์ ์๋ค. ๋จ์ํ ํ๋ก๊ทธ๋จ์ด ์๋, ์ด์์ฒด์ ์์ ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ค์ ์น๋ช ์ ์ด๋ค. ๊ต์ฐฉ์ํ ํ์ ์กฐ๊ฑด Mutual Exclusion : ํ ํ๋ก์ธ์ค๊ฐ ์์์ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด, ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ฌ์ฉํ ์ ์๋ค. Hold and Wait : ํ ํ๋ก์ธ์ค๊ฐ ํน์ ์์์ ๊ฐ์ง ์ํ์์ ๋๊ธฐ์ ๋น ์ง๋ค. No Preemption : ํ ํ๋ก์ธ์ค๊ฐ ์งํ ์ค์ด๋ผ๋ฉด, ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋ผ์ด๋ค ์ ์๋ค. Circular Wait : ํ๋ก์ธ์ค๊ฐ ์์ ํ๋์ ์ํด ์ํ ๋ฐฉํฅ์ ์ด๋ฃฌ๋ค. (์์ฌํ๋ ์ฒ ํ์) ๊ต์ฐฉ ์ํ๋ ์์ 4๊ฐ์ง ์กฐ๊ฑด์ด ์์ ๊ฒฝ์ฐ, ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ปค์ง๊ฒ ๋..
Producer - Consumer Problem ํน์ ํ๋ก์ธ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์์ฐํ๊ณ , ํน์ ํ๋ก์ธ์ค๋ ์์ฐ๋ ๋ฐ์ดํฐ๋ฅผ ํตํด ์ฒ๋ฆฌํ๋ ์์ ๊ณผ ๊ฐ์ด ์์ฑ์-์๋น์๊ฐ ์๋ ํ๋ก๊ทธ๋จ์์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ด๋ค. ๋ง์ฝ ์์ฐ๋์ง ์์ ๊ฒฝ์ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์๋น์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ๊ฒ ๋๋ค๋ฉด ์์น ์๋ ๋ฐ์ดํฐ (์ฐ๋ ๊ธฐ ๊ฐ)์ ๊ฐ์ ธ๊ฐ๊ฒ ๋ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค. ๋ฐ๋ผ์ ๊ฐ๊ฐ์ ํ๋ก์ธ์ค(์ฐ๋ ๋)๋ก ๋ถํฐ ์์ฑ์ - ์๋น์๊ฐ ์กด์ฌํ๋ค๋ฉด ์์ฑ, ์๋น ์์ผ๋ก ์งํ๋ ์ ์๋๋ก ๋๊ธฐํ๊ฐ ํ์ํ๋ค. import java.util.concurrent.Semaphore; class Buffer { int[] buf; int size; int count; int in; int out; Semaphore mutex, full, empty; ..
ํ๋ก์ธ์ค ๊ฐ์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๊ฑฐ๋, ํ๋์ ๊ณต์ ๋ ์์ญ์ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ์ฃผ์๊ฐ ํ์ํ๋ค. ์๋ฅผ ๋ค์ด ํ๋ก์ธ์ค A๋ 1๋ฒ์ง ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ 10์ด๋ผ๋ ๊ฐ์ ์ฝ์ด ์ค๊ณ ์ํ์์ผ๋, ํ๋ก์ธ์ค B๊ฐ ํ๋ก์ธ์ค A๊ฐ ์ฝ๋ ์ง์ ์ 20์ด๋ผ๋ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํด ๋ฒ๋ฆฌ๋ฉด ์ํ์ง ์๋ ๊ฐ์ด ๋ฐํ๋๋ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ ๊ฒ ์ํธ์ ์ผ๋ก ์ํฅ์ ๋ฏธ์น๋ ํ๋ก์ธ์ค๋ค์ Cooperating Process๋ผ๊ณ ํ๋ค. ์ด์ ๋ฐ๋์ธ ๊ฒฝ์ฐ Independent Process๋ผ๊ณ ํ๋ค. ๊ฐ ํ๋ก์ธ์ค๋ก ์ธํด ๊ณต์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ์ง ๋ชปํ๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ๋๊ธฐํ(Synchronization)๊ฐ ํ์ํ๋ค. ์์ ๋งํ ๊ฐ๋จํ ์์์์ ์์น ์๋ ๊ฐ์ ๋ฐํ๋ฐ์ง ์์ผ๋ ค๋ฉด, ํ๋ก์ธ์ค A → ํ๋ก์ธ์ค B์ ์์๋ฅผ ๋ณด์ฅํ ๊ฒฝ์ฐ ์ด์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ..
ํ๋ก์ธ์ค ์ด์ ๊ธ์์๋ ์ ์ ์๋ฏ์ด ํ๋ก์ธ์ค๋ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ๋๋์ด ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ๋งํ๋ค. ์ด์์ฒด์ ์ ๋ฐ๋ผ ํ๋ก์ธ์ค๋ฅผ job, task ๋ฑ์ผ๋ก ๋ถ๋ฅด๊ธฐ๋ ํ๋ค. ํ๋ก์ธ์ค ๊ณ์ธต ๊ตฌ์กฐ ๋ฆฌ๋ ์ค๋ ์ ์ฅ์ฅ์น๋ก ๋ถํฐ ๋ฉ๋ชจ๋ฆฌ๋ก ์ต์ด ์ ์ฌ ์์๋ PID (Process ID : ํ๋ก์ธ์ค๋ฅผ ๊ตฌ๋ถํ ์ ์๋ ๊ณ ์ ์๋ณ ๋ฒํธ)๊ฐ 0์ธ root process๊ฐ ์์ฑ๋๋ค. root process๋ init process๋ฅผ ์์ฑํ๋ค. root process๋ ์ต์ด ์์ฑ ํ์, ํ๋ก์ธ์ค๋ค์ ์ค์ผ์ค๋ง ํ ๋ swapper์ ์ญํ์ ํ๋ค. init process์ ๊ฒฝ์ฐ ์์ฑ๋ ํ, ์ฌ์ฉ์๊ฐ ์ด์์ฒด์ ๋ฅผ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ค. ์์ ์ ํ๋ก์ธ์ค ๊ณ์ธต ๊ตฌ์กฐ๋ depth๊ฐ 3์ด์ง๋ง depth 2์ ํ๋ก์ธ์ค๋ค๋ ์์ ํ๋ก์ธ์ค..
CPU๋ผ๋ ํ๋์จ์ด ์์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ค์ด ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด, ์ค์ผ์ค๋ง ๊ณผ์ ์ด ํ์ํ๋ค. ๋ค์์ ์คํํ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ์ค์ผ์ค๋ง์ ํ๊ฒ ๋๋ค. ์ํฉ์ ๋ฐ๋ผ ํจ์จ์ ์ธ CPU ์ค์ผ์ค๋ง์ด ์คํ๋ ค ์ฑ๋ฅ ๊ฐ์๋ฅผ ์ผ๊ธฐ ํ ์ ๋ ์๋ค. Scheduling Critria CPU ์ค์ผ์ค๋ง์ ํจ์จ์ฑ์ ํ๋จํ๋ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ๋ค. CPU Utilizaiton Throughput Turnarround Time Wating Time Response Time Preemptive VS Non-Preemptive ๋ค์ํ CPU ์ค์ผ์ค๋ง์ ์๊ธฐ์ ์์ ์ ์ (Preemptive), ๋น์ ์ (Non-Preemptive) ๋ฐฉ์์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ค. Preemptive ์ ์ ์ ๋ง๊ทธ๋๋ก ํน์ ํ๋ก์ธ์ค๊ฐ CPU..
ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋์ด ์คํ์ค์ ์๋ ํ๋ก๊ทธ๋จ (program in execution)์ ๋งํ๋ค. ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฅ์ฅ์น์ ์ ์ฅ๋์ด ์๋ฌด์ผ๋ ํ์ง ์๋ ์ํ์ด๋ค. ํ๋ก์ธ์ค๋ฅผ job, task ๋ฑ์ผ๋ก ๋งํ๊ธฐ๋ ํ๋ค. ํ๋ก์ธ์ค ์ํ New : ์ ์ฅ์ฅ์น๋ก ๋ถํฐ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ ๊ฒฝ์ฐ์ด๋ค. Ready : New ์ํ์์ ์ด๊ธฐํ ๊ณผ์ ํ ์คํํ ์ค๋น๊ฐ ์๋ฃ๋๊ฑฐ๋, Running ์ํ์์ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์ด๋ค. Running : ์ค์ผ์ค๋ฌ๋ฅผ ํตํด ๋ค์์ ์คํ๋ ํ๋ก์ธ์ค๋ก ์ ํ๋ ๊ฒฝ์ฐ Running ์ํ๋ก ๋ฐ๋์ด ์์ ์ ์ํํ๋ค. Wating : I/O์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ง์ฐ์๊ฐ์ด ํฌ๋ฏ๋ก ์ด์ ๊ฐ์ ๊ฒฝ์ฐ Waiting ์ํ ํ ๋ค์ Ready๋ก ๊ฐ๋ค. Terminated : ํ๋ก์ธ์ค๋ฅผ ..
์ด์์ฒด์ ๋ฅผ ์ด์ฉํ๋ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๋ณ๋์ ๊ถํ์ ํ์ธํ์ง ์๊ณ , ํ์ผ์ ์ ์ฅํ ์ ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ ์์ ์ธ ํ๋ก๊ทธ๋จ์ ์คํํ ๊ฒฝ์ฐ ํ์ธ์ ์ ์ฅ๊ณต๊ฐ์ ์นจ๋ฒํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ค์ํฌ ์ ์๋ ์ํฉ์ด ๋ฐ์ํ ์ ๋ ์๋ค. ๋ํ, ์ด์์ฒด์ ๋ฅผ ์ข ๋ฃํ๋ ๋ช ๋ น์ด์ ๊ฐ์ ์คํ์ ์น๋ช ์ ์ธ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ ๋น์ทํ ์ํฉ์ด ๋ฐ์ํ๋ค. Dual Mode ์ด์์ฒด์ ๋ ํน๊ถ ๋ช ๋ น(Privileged Instructions)์ ์ง์ ํ๊ณ ์ผ๋ฐ ์ฌ์ฉ์๋ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ๋ง์๋ค. Applications์์ ํน๊ถ ๋ช ๋ น ์ฌ์ฉ์ด ํ์ํ ๊ฒฝ์ฐ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์์ผ kernel mode์ ์ง์ ํ, ์ด์์ฒด์ ๋ฅผ ํตํด ์ฒ๋ฆฌํ๊ณ ์ ํ๋ ์์ ์ ์ฒ๋ฆฌํ๋ค. (ํน๊ถ ๋ช ๋ น์ด ์ฌ์ฉ ๊ฐ๋ฅํ kernel mode์ ๋ฐ๋์ธ user mode๋ CPU ๋ ์ง์คํฐ์..