์šด์˜์ฒด์ œ: ํŽ˜์ด์ง•

์—ฐ์† ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”(์™ธ๋ถ€ ๋‹จํŽธํ™”)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ๋ฐ˜๋ณต๋  ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ์˜ ์‚ฌ์šฉ์˜ ํšจ์œจ์„ฑ์„ ์ €ํ•ดํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฐ์†์ ์ธ ๊ณต๊ฐ„์— ํ• ๋‹นํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž‘์€ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆ  ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์— ํ• ๋‹นํ•จ์œผ๋กœ์จ, ์—ฐ์† ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜์˜€๋‹ค. ์ด๋ฅผ ํŽ˜์ด์ง•(Paging)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ฃผ์†Œ ๋ณ€ํ™˜ (Address Translation) ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋Š” ๋ถ„๋ฆฌ๋œ ๊ณต๊ฐ„์— ํ• ๋‹น๋˜์ง€๋งŒ, CPU๋Š” ์—ฐ์†๋œ ๊ณต๊ฐ„์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๊ด€๋ฆฌํ•œ๋‹ค. ์ด๋Š” MMU๋ฅผ ํ†ตํ•ด ๋…ผ๋ฆฌ ์ฃผ์†Œ์™€ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋‚˜๋ˆ„์–ด๋‘์—ˆ๊ธฐ์— ๊ฐ€๋Šฅํ•˜๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ์—ฐ์†๋œ ๋…ผ๋ฆฌ ์ฃผ์†Œ(Logical Address)๋ฅผ ๊ฐ€์ง€์ง€๋งŒ, ๋ถ„๋ฆฌ๋œ ๋ฌผ๋ฆฌ ์ฃผ์†Œ(Physical Address)๋ฅผ ๊ฐ€์ง€๋ฉฐ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”(Page Table..

์šด์˜์ฒด์ œ: ์ฃผ๊ธฐ์–ต์žฅ์น˜ ๊ด€๋ฆฌ

์•ž์˜ ๋‚ด์šฉ๋“ค์€ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ ์ค‘, CPU์˜ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์Šค์ผ€์ค„๋ง ํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ๋ณด์กฐ ์ €์žฅ์žฅ์น˜(HDD, SSD. etc.)์— ์ €์žฅ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ€์ ธ์™€ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ณด์กฐ ์ €์žฅ์žฅ์น˜์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„, ํ”„๋กœ์„ธ์Šค ๋ณ„๋กœ ํšจ์œจ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•˜๋‹ค. ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์ ์žฌ ๊ณผ๊ฑฐ์— ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋Š” 16MB, 32MB์™€ ๊ฐ™์ด ์ง€๊ธˆ์€ ์ƒ์ƒํ•  ์ˆ˜๋„ ์—†์„ ์ •๋„๋กœ ์ƒ๋‹นํžˆ ์ž‘์•˜๋‹ค. ์ด์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ์ €์žฅ๊ณต๊ฐ„์ด ํฐ ๋ณด์กฐ ์ €์žฅ์žฅ์น˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๋™์  ์ ์žฌ (Dynamic Loading) ํ”„๋กœ๊ทธ๋žจ ์ค‘ ์ ์žฌ ํ›„ ๋ฐ”๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„๋„ ๋ฉ”๋ชจ๋ฆฌ์— ํ•œ๋ฒˆ์— ์ ์žฌํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ• ..

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

๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ธ๋งˆํฌ์–ด ์™ธ์— ๊ณ ์ˆ˜์ค€์ธ ๋ชจ๋‹ˆํ„ฐ๋ผ๋Š” ๋ฐฉ์‹์ด ์žˆ๋‹ค. ์šด์˜์ฒด์ œ์—์„œ๋Š” 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..

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