์šด์˜์ฒด์ œ: ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™” - ๋ชจ๋‹ˆํ„ฐ

๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ธ๋งˆํฌ์–ด ์™ธ์— ๊ณ ์ˆ˜์ค€์ธ ๋ชจ๋‹ˆํ„ฐ๋ผ๋Š” ๋ฐฉ์‹์ด ์žˆ๋‹ค. ์šด์˜์ฒด์ œ์—์„œ๋Š” 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๋ผ๋Š” ํ•˜๋“œ์›จ์–ด ์ž์›์„ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์ด ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด, ์Šค์ผ€์ค„๋ง ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. ๋‹ค์Œ์— ์‹คํ–‰ํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ์Šค์ผ€์ค„๋ง์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ƒํ™ฉ์— ๋”ฐ๋ผ ํšจ์œจ์ ์ธ 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 ๋ ˆ์ง€์Šคํ„ฐ์—..

๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€