STUDY - Operating System

์ˆ˜ํ˜„ยท2023๋…„ 8์›” 28์ผ
0

IT (CS)

๋ชฉ๋ก ๋ณด๊ธฐ
9/12
post-thumbnail

๐Ÿ“’ ์šด์˜์ฒด์ œ

๐Ÿ“• ์šด์˜์ฒด์ œ์™€ ์ปดํ“จํ„ฐ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ

1. ์šด์˜์ฒด์ œ์˜ ์ข…๋ฅ˜

  • 1) GUI (Grapic User Interface)

    • ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ
    • ๊ทธ๋ž˜ํ”ฝ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปดํ“จํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : WindowOS, MacOS
  • 2) CLI (Character User Interface)

    • ํ‚ค๋ณด๋“œ๋งŒ์„ ์‚ฌ์šฉ
    • ๋ฌธ์ž ๊ธฐ๋ฐ˜์œผ๋กœ ์ปดํ“จํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : MS-DOS, ChatGPT

2. ์šด์˜์ฒด์ œ์˜ ์—ญํ• 

  • 1) ํŠน์ง•
    • ์šด์˜์ฒด์ œ์˜ ์ปค๋„์ด ๋‹ด๋‹น
    • ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์™€ ํ•˜๋“œ์›จ์–ด๊ฐ„ ์—ฐ๊ฒฐ
  • 2) ์ข…๋ฅ˜
    • CPU ์Šค์ผ€์ค„๋ง๊ณผ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๊ด€๋ฆฌ
      • CPU ์†Œ์œ ๊ถŒ์„ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹นํ• ์ง€
      • ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ๊ณผ ์‚ญ์ œ
      • ์ž์› ํ• ๋‹น ๋ฐ ๋ฐ˜ํ™˜ ๊ด€๋ฆฌ
    • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
      • ํ•œ์ •๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์— ์–ผ๋งŒํผ ํ• ๋‹นํ• ์ง€
    • ๋””์Šคํฌ ํŒŒ์ผ ๊ด€๋ฆฌ
      • ๋””์Šคํฌ ํŒŒ์ผ์„ ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณด๊ด€ํ•˜๋Š”์ง€
    • I/O ๋””๋ฐ”์ด์Šค ๊ด€๋ฆฌ
      • ๋งˆ์šฐ์Šค, ํ‚ค๋ณด๋“œ์™€ ์ปดํ“จํ„ฐ ๊ฐ„์— ๋ฐ์ดํ„ฐ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ ๊ด€๋ฆฌ

3. ์šด์˜์ฒด์ œ์˜ ๊ตฌ์กฐ

  • ์ธํ„ฐํŽ˜์ด์Šค (CLI/GUI)
    • Linux์˜ ๊ฒฝ์šฐ CUI๋งŒ ์กด์žฌ
  • ์‹œ์Šคํ…œ์ฝœ
  • ์ปค๋„ (I/O ๋“œ๋ผ์ด๋ฒ„, ํŒŒ์ผ์‹œ์Šคํ…œ)
  • ๋“œ๋ผ์ด๋ฒ„
    • ํ•˜๋“œ์›จ์–ด๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด

4. ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ

  • 1) CPU (Central Proccesing Unit)

    • ์šด์˜์ฒด์ œ ์ปค๋„์ด ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค ํ”„๋กœ์„ธ์Šค๋กœ ๋งŒ๋“ค๋ฉด CPU๊ฐ€ ์ฒ˜๋ฆฌ
    • ์ธํ„ฐ๋ŸฝํŠธ์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๋ช…๋ น์–ด ํ•ด์„ํ•˜์—ฌ ์‹คํ–‰
    • ์‚ฐ์ˆ ๋…ผ๋ฆฌ์—ฐ์‚ฐ์žฅ์น˜ (ALU) : ์‚ฐ์ˆ ์—ฐ์‚ฐ(์‚ฌ์น™์—ฐ์‚ฐ) + ๋…ผ๋ฆฌ์—ฐ์‚ฐ(๋ฐฐํƒ€์  ๋…ผ๋ฆฌํ•ฉ, ๋…ผ๋ฆฌ๊ณฑ)ํ•˜๋Š” ํšŒ๋กœ์žฅ์น˜
    • ์ œ์–ด์žฅ์น˜ (CU) : ํ”„๋กœ์„ธ์Šค์˜ ์กฐ์ž‘์„ ์ง€์‹œ + ๋ช…๋ น์–ด ์ฝ๊ณ  ํ•ด์„ + ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ˆœ์„œ ํ•ด์„
    • ๋ ˆ์ง€์Šคํ„ฐ : CPU ์•ˆ์— ์žˆ๋Š” ๋น ๋ฅธ ์ž„์‹œ๊ธฐ์–ต์žฅ์น˜

      ๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– CPU ์—ฐ์‚ฐ์ฒ˜๋ฆฌ 1๏ธโƒฃ ์ œ์–ด์žฅ์น˜๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋ ˆ์ง€์Šคํ„ฐ์— ๊ณ„์‚ฐํ•  ๊ฐ’์„ ๋กœ๋“œ
      2๏ธโƒฃ ์ œ์–ด์žฅ์น˜๊ฐ€ ๋ ˆ์ง€์Šคํ„ฐ์— ์žˆ๋Š” ๊ฐ’์„ ๊ณ„์‚ฐํ•  ๊ฒƒ์„ ์‚ฐ์ˆ ๋…ผ๋ฆฌ์—ฐ์‚ฐ์žฅ์น˜์— ๋ช…๋ น
      3๏ธโƒฃ ์ œ์–ด์žฅ์น˜๊ฐ€ ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ๋‹ค์‹œ ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ €์žฅ

  • 2) DMA ์ปจํŠธ๋กค๋Ÿฌ

    • CPU๋ฅผ ์ผ์„ ๋ณด์กฐ
    • I/O๋””๋ฐ”์ด์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ์žฅ์น˜
    • CPU์— ๋งŽ์€ ์ธํ„ฐ๋ŸฝํŠธ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์„ ๋ถ„๋‹ด
  • 3) ๋ฉ”๋ชจ๋ฆฌ

    • ์ „์žํšŒ๋กœ์—์„œ ๋ฐ์ดํ„ฐ, ์ƒํƒœ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ์žฅ์น˜
    • CPU๋Š” ๊ณ„์‚ฐ ๋‹ด๋‹น, ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ์–ต ๋‹ด๋‹น
    • ๋ฉ”๋ชจ๋ฆฌ ํด ์ˆ˜๋ก ๋งŽ์€ ์ผ ๋™์‹œ์— ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : RAM (Random Access Memory)
  • 4) ํƒ€์ด๋จธ

    • ํŠน์ • ํ”„๋กœ๊ทธ๋žจ์— ์‹œ๊ฐ„ ์ œํ•œ์„ ๊ฑฐ๋Š” ๋ชฉ์ 
    • ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘๋™์‹œ ์ œํ•œ์„ ์œ„ํ•ด ์กด์žฌ
  • 5) device ์ปจํŠธ๋กค๋Ÿฌ

    • ์ปดํ“จํ„ฐ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” I/O ๋””๋ฐ”์ด์Šค๋“ค์˜ ์ž‘์€ CPU
  • 6) ๋กœ์ปฌ ๋ฒ„ํผ

    • ๋””๋ฐ”์ด์Šค์— ์žˆ๋Š” ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ

๐Ÿ“• ์ธํ„ฐ๋ŸฝํŠธ

1. ์ธํ„ฐ๋ŸฝํŠธ ๊ฐœ๋…

  • ์–ด๋–ค ์‹ ํ˜ธ๊ฐ€ ๋“ค์–ด์™”์„ ๋•Œ CPU๋ฅผ ์ผ์‹œ ์ •์ง€

  • ์ธํ„ฐ๋ŸฝํŠธ๊ฐ„์— ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ๊ณ  ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์‹คํ–‰

  • ๊ณผ์ •

    • CPU๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ช…๋ น์–ด ์ˆœ์ฐจ ์‹คํ–‰ ์ค‘ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ
      โžก๏ธ ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ๋ชจ์—ฌ์žˆ๋Š” ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ๋กœ ๊ฐ€์„œ ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ํ•จ์ˆ˜(ISR) ์‹คํ–‰
      โžก๏ธ ์ธํ„ฐ๋ŸฝํŠธ ์ข…๋ฃŒ์‹œ ๋‹ค์‹œ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰

    ๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜

    • ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ธ๋“ค๋งํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜
    • ์ปค๋„ ๋‚ด๋ถ€์˜ IRQ๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ๋˜๋ฉฐ request_irq()๋ฅผ ํ†ตํ•ด ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜ ๋“ฑ๋ก ๊ฐ€๋Šฅ

2. ์ธํ„ฐ๋ŸฝํŠธ ์ข…๋ฅ˜

  • 1) ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ

    • I/O ๋””๋ฐ”์ด์Šค ๋“ฑ ํ•˜๋“œ์›จ์–ด์—์„œ ๋ฐœ์ƒ (ํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค ์—ฐ๊ฒฐ)
    • ์ธํ„ฐ๋ŸฝํŠธ ๋ผ์ธ์ด ์„ค๊ณ„๋œ ์ดํ›„ ์ˆœ์ฐจ์ ์ธ ์ธํ„ฐ๋ŸฝํŠธ ์‹คํ–‰์„ ์ค‘์ง€ โžก๏ธ ์šด์˜์ฒด์ œ์— ์‹œ์Šคํ…œ์ฝœ ์š”์ฒญ โžก๏ธ ๋””๋ฐ”์ด์Šค์— ์žˆ๋Š” ์ž‘์˜จ ๋กœ์ปฌ ๋ฒ„ํผ์— ์ ‘๊ทผํ•˜์—ฌ ์ˆ˜ํ–‰
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ
      • ์ž…์ถœ๋ ฅ ์ธํ„ฐ๋ŸฝํŠธ : ์ž…์ถœ๋ ฅ ์ž‘์—… ์ข…๋ฃŒ/์˜ค๋ฅ˜์— ์˜ํ•ด CPU ๊ธฐ๋Šฅ ์š”์ฒญ
      • ์ •์ „, ์ „์› ์ด์ƒ ์ธํ„ฐ๋ŸฝํŠธ : ์ „์› ๊ณต๊ธ‰์˜ ์ด์ƒ
      • ๊ธฐ๊ณ„ ์ฐฉ์˜ค ์ธํ„ฐ๋ŸฝํŠธ : CPU์˜ ๊ธฐ๋Šฅ์  ์˜ค๋ฅ˜
      • ์™ธ๋ถ€ ์‹ ํ˜ธ ์ธํ„ฐ๋ŸฝํŠธ : I/O ์žฅ์น˜๊ฐ€ ์•„๋‹Œ ์˜คํผ๋ ˆ์ดํ„ฐ๋‚˜ ํƒ€์ด๋จธ์— ์˜ํ•ด ์˜๋„์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์ค‘๋‹จ
  • 2) ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ

    • ํŠธ๋žฉ(trap)
    • ํ”„๋กœ์„ธ์Šค ์˜ค๋ฅ˜/์ข…๋ฅ˜/์‹œ์ž‘ ๋“ฑ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์Šคํ…œ์ฝœ ํ˜ธ์ถœ์‹œ ๋ฐœ์ƒ
    • ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„ ๋†’์Œ
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ
      • ํ”„๋กœ๊ทธ๋žจ ์ธํ„ฐ๋ŸฝํŠธ : 0์œผ๋กœ ์ˆซ์ž๋ฅผ ๋‚˜๋ˆ„๋Š” ์—ฐ์‚ฐ์˜ค๋ฅ˜
      • SVC(SuperVisor Call)
  • 3) ์ธํ„ฐ๋ŸฝํŠธ ์šฐ์„ ์ˆœ์œ„

3. ์‹ค์Šต

  • a.js
const express = require('express');
const app = express();
const path = require('path')
const pt = path.join(__dirname, "a.json")
const fs = require('fs')
app.get("/", (req, res) => {
const ret = fs.readFileSync(pt)
res.json(JSON.parse(ret))
})
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
  • a.json
{
"id": 1,
"title": "์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ’€์Šคํƒ MEVN",
"author": "ํฐ๋Œ1",
"links": [{
"rel": "self",
"href": "/books/1"
}]
}
  • ๋ช…๋ น์–ด
ps -ef | grep node
kill -9 {PID} 

๐Ÿ“• ์‹œ์Šคํ…œ์ฝœ๊ณผ modebit

1. ์‹œ์Šคํ…œ์ฝœ

  • 1) ๊ฐœ๋…
    • ์‚ฌ์šฉ์ž๋‚˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ปค๋„์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค
    • ์šด์˜์ฒด์ œ๋Š” ์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ Systemcall์„ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œ
    • ์œ ์ € ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ์˜ ์„œ๋น„์Šค๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ปค๋„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉ
  • 2) I/O ์š”์ฒญ์„ ์œ„ํ•œ ํŠธ๋žฉ ๋ฐœ๋™ํ•  ๊ฒฝ์šฐ ๊ณผ์ •
    • 1๏ธโƒฃ : ์œ ์ € ํ”„๋กœ๊ทธ๋žจ์ด I/O ์š”์ฒญ ํŠธ๋žฉ ๋ฐœ๋™
    • 2๏ธโƒฃ : ์˜ฌ๋ฐ”๋ฅธ I/O ์š”์ฒญ์ธ์ง€ ํ™•์ธ
    • 3๏ธโƒฃ : ์œ ์ €๋ชจ๋“œ๊ฐ€ ์‹œ์Šคํ…œ์ฝœ์„ ํ†ตํ•ด ์ปค๋„๋ชจ๋“œ๋กœ ๋ณ€ํ™˜
    • 4๏ธโƒฃ : ์ปค๋„ํ•จ์ˆ˜ ์‹คํ–‰
  • 3) ๋ชจ๋“œ
    • ์œ ์ €๋ชจ๋“œ : ์œ ์ €๊ฐ€ ์ปดํ“จํ„ฐ ์ž์›์— ์นจ๋ฒ”ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์˜์—ญ ์ œํ•œ
    • ์ปค๋„ ๋ชจ๋“œ : ๋ชจ๋“  ์ปดํ“จํ„ฐ ์ž์›์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • 4) ์žฅ์ 
    • ์‹œ์Šคํ…œ์ฝœ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ์ €ํ”„๋กœ๊ทธ๋žจ์„ ์ปค๋„๊ณผ ๋ถ„๋ฆฌ โžก๏ธ ์‚ฌ์šฉ์ž๊ฐ€ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ฐ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ๋“ฑ ๋‚ด๋ถ€๋™์ž‘ ๊ด€์—ฌX
    • ์œ ์ €ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ•จ๋ถ€๋กœ ์ปดํ“จํ„ฐ ์ž์›์— ์ ‘๊ทผX โžก๏ธ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ, ๋ณด์•ˆโฌ†๏ธ

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ์ปค๋„

  • โœ๏ธ ์ปค๋„
    • ์šด์˜์ฒด์ œ์˜ ์ค‘์ถ”์ ์ธ ์—ญํ• 
    • ์‹œ์Šคํ…œ์ฝœ ์ œ๊ณต
    • ๋ณด์•ˆ, ๋ฉ”๋ชจ๋ฆฌ, ํ”„๋กœ์„ธ์Šค, ํŒŒ์ผ ์‹œ์Šคํ…œ, I/O ๋””๋ฐ”์ด์Šค, I/O ์š”์ฒญ ๊ด€๋ฆฌ
  • โœ๏ธ ์ปค๋„ํ•จ์ˆ˜ (native function)
    • ์ปค๋„ ์•ˆ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ•จ์ˆ˜
  • โœ๏ธ ์ปค๋„ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฒฝ์šฐ
    • ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ(์ƒ์„ฑ, ์‚ญ์ œ)
    • ํŒŒ์ผ ๊ด€๋ฆฌ, ๋””๋ฐ”์ด์Šค ๊ด€๋ฆฌ
    • ์‹œ๊ฐ„ ๋ฐ ๋‚ ์งœ ๊ด€๋ จ ์‹œ์Šคํ…œ
    • ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ 

2. modebit

  • ์‹œ์Šคํ…œ์ฝœ์ด ์ž‘๋™๋  ๋•Œ ์œ ์ €๋ชจ๋“œ์™€ ์ปค๋„๋ชจ๋“œ ๊ตฌ๋ถ„ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ ๋ณ€์ˆ˜
    • ์œ ์ € ๋ชจ๋“œ(1)
    • ์ปค๋„ ๋ชจ๋“œ(0)

๐Ÿ“• ๋ฉ”๋ชจ๋ฆฌ๊ณ„์ธต

1. memory hierachy

  • ๋ ˆ์ง€์Šคํ„ฐ > ์บ์‹œ > ์ฃผ๊ธฐ์–ต์žฅ์น˜ > ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜
  • 1) ๋ ˆ์ง€์Šคํ„ฐ
    • CPU ๋‚ด์˜ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ
    • ํœ˜๋ฐœ์„ฑ, ์†๋„โฌ†๏ธ
    • ๊ธฐ์–ต ์šฉ๋Ÿ‰โฌ‡๏ธ
  • 2) ์บ์‹œ
    • CPU ๋‚ด์˜ L1, L2 ์บ์‹œ
    • ํœ˜๋ฐœ์„ฑ, ์†๋„โฌ†๏ธ
    • ๊ธฐ์–ต ์šฉ๋Ÿ‰โฌ‡๏ธ
  • 3) ์ฃผ๊ธฐ์–ต์žฅ์น˜
    • RAM
    • ํœ˜๋ฐœ์„ฑ, ์†๋„โฌ‡๏ธ
    • ๊ธฐ์–ต ์šฉ๋Ÿ‰โฌ†๏ธ
  • 4) ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜
    • HDD, SDD
    • ๋น„ํœ˜๋ฐœ์„ฑ, ์†๋„โฌ‡๏ธ
    • ๊ธฐ์–ต ์šฉ๋Ÿ‰โฌ†๏ธ

2. ๊ณ„์ธต์ด ์กด์žฌํ•˜๋Š” ์ด์œ 

  • 1) ๋” ๋น ๋ฅธ ์ ‘๊ทผ๊ณผ ์ฒ˜๋ฆฌ์†๋„ ์ฆ๊ฐ€
    • ํŠน์ • ๋ฐ์ดํ„ฐ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ์ฒ˜๋ฆฌ์†๋„โฌ†๏ธ
  • 2) ๋น„์šฉ ํšจ์œจ์„ฑ (๊ฒฝ์ œ์„ฑ)
  • 3) ์ž์›์˜ ํšจ์œจ์  ์‚ฌ์šฉ

๐Ÿ“• ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ์™€ ์Šค์™€ํ•‘, ํŽ˜์ด์ง€ํดํŠธ, ์Šค๋ ˆ์‹ฑ

1. ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ

  • 1) ๊ฐœ๋…
    • ํ”„๋กœ์„ธ์Šค ์ „์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ์˜ฌ๋ผ์˜ค์ง€ ์•Š๋”๋ผ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋ฒ•
    • ์ปดํ“จํ„ฐ์˜ ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ์— ์ œ์•ฝX

2) ํŠน์ง•

  • ๋” ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ์„ ๋™์‹œ์— ์‹คํ–‰ ๊ฐ€๋Šฅ

    • ์‘๋‹ต์‹œ๊ฐ„ ์œ ์ง€
    • CPU ์ด์šฉ๋ฅ ๊ณผ ์ฒ˜๋ฆฌ์œจโฌ†๏ธ
  • ๋ณด์กฐ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฃผ๋ฉ”๋ชจ๋ฆฌ ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ
    - RAM์—์„œ disk storage๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ „์†กํ•˜๋Š” ์Šค์™€ํ•‘

  • 2) ๊ฐ€์ƒ์ฃผ์†Œ์™€ ์‹ค์ œ์ฃผ์†Œ

    • Logical Address (Virtual) : ๊ฐ€์ƒ์ ์œผ๋กœ ์ง€์–ด์ง„ ์ฃผ์†Œ
    • Physical Address : ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ์žˆ๋Š” ์ฃผ์†Œ
    • ๊ฐ€์ƒ์ฃผ์†Œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ์žฅ์น˜(MMU)์™€ ํŽ˜์ด์ง€ํ…Œ์ด๋ธ”์— ์˜ํ•ด ์‹ค์ œ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜
  • 3) ํŽ˜์ด์ง€ํ…Œ์ด๋ธ”

    • ํŽ˜์ด์ง€ํ…Œ์ด๋ธ”์— ๊ฐ€์ƒ์ฃผ์†Œ-์‹ค์ œ์ฃผ์†Œ ๋งคํ•‘ + ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ์ •๋ณด ์ €์žฅ
    • ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์บ์‹ฑ๊ณ„์ธต์ธ TLB ์‚ฌ์šฉ

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– TLB

  • ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์‚ฌ์ด์— ์žˆ๋Š” ์ฃผ์†Œ ๋ณ€ํ™˜์„ ์œ„ํ•œ ์บ์‹œ
  • ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ ๋ณด๊ด€
  • CPU๊ฐ€ TLB์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์—†์œผ๋ฉด ํŽ˜์ด์ง€ํ…Œ์ด๋ธ”๋กœ ๊ฐ€์„œ ์‹ค์ œ์ฃผ์†Œ ๊ฐ€์ ธ์˜ด โžก๏ธ ์†๋„ ํ–ฅ์ƒ

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ๋ฉ”๋ชจ๋ฆฌ ๋‹จ์œ„

  • ํŽ˜์ด์ง€ : ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์†Œ ํฌ๊ธฐ ๋‹จ์œ„
  • ํ”„๋ ˆ์ž„ : ์‹ค์ œ ๋””์Šคํฌ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์†Œ ํฌ๊ธฐ ๋‹จ์œ„
  • 4) ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ ํ•„์š”์„ฑ

    • ์ฃผ๊ธฐ์–ต์žฅ์น˜์˜ ํšจ์œจ์  ๊ด€๋ฆฌ(์Šค์™€ํ•‘)
      • ํ•˜๋“œ๋””์Šคํฌ๋ฅผ ์ฃผ๊ธฐ์–ต์žฅ์น˜์— ๋Œ€ํ•œ ์บ์‹œ๋กœ ์„ค์ •
      • ํ•„์š”ํ•  ๋•Œ๋งŒ ๋žจ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•˜๊ณ , ๊ทธ์™ธ์—๋Š” ํ•˜๋“œ๋””์Šคํฌ์— ์ €์žฅํ•˜์—ฌ RAM ํšจ๊ณผ์  ๊ด€๋ฆฌ
    • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์˜ ๋‹จ์ˆœํ™”
      • ๊ฐ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ์˜ ํ†ต์ผ๋œ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋ฐฐ์ •
    • ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰ ๋ฐ ์•ˆ์ „์„ฑ ๋ณด์žฅ
      • ๋ฌดํ•œํ•œ ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋“ค๋ผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์นจ๋ฒ”ํ•  ์—ฌ์ง€ ์ค„์ž„

3. ํŽ˜์ด์ง€ํดํŠธ์™€ ์Šค์™€ํ•‘

  • 1) ํŽ˜์ด์ง€ํดํŠธ ๊ฐœ๋…

    • ์ฐธ์กฐํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์‹ค์ œ๋กœ ์—†๋Š” ๊ฒฝ์šฐ
    • ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ์กด์žฌํ•˜์ง€๋งŒ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์ธ RAM์— ํ˜„์žฌ ์—†๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ์ฝ”๋“œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ
  • 2) ์Šค์™€ํ•‘ ๊ฐœ๋…

    • ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ˜„์žฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜์—ญ์„ ์˜ฎ๊ธฐ๊ณ  ํ•˜๋“œ๋””์Šคํฌ ์ผ๋ถ€๋ถ„์„ ๋ฉ”๋ชจ๋ฆฌ์ฒ˜๋Ÿผ ์‚ฌ์šฉ
  • 3) ํŽ˜์ด์ง€ํดํŠธ ๊ณผ์ •

    • 1๏ธโƒฃ : ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ์‹คํ–‰๋  ํ”„๋กœ์„ธ์Šค๋Š” ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ํŽ˜์ด์ง€๊ฐ€ ํŽ˜์ด์ง€ํ…Œ์ด๋ธ”์— ์žˆ๋Š”์ง€ ํ™•์ธ
    • 2๏ธโƒฃ ์—†์„ ๊ฒฝ์šฐ ํŠธ๋žฉ ๋ฐœ์ƒ (Pagefault exception)
      โžก๏ธ ์šด์˜์ฒด์ œ์— ์•Œ๋ฆฌ๊ณ , CPU ๋™์ž‘ ์ž ์‹œ ๋ฉˆ์ถค
      โžก๏ธ ์ปค๋„ ๋ชจ๋“œ๋กœ ์ง„์ž…
    • 3๏ธโƒฃ : ์šด์˜์ฒด์ œ๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ํ™•์ธํ•˜์—ฌ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์–ด๋””์— ํŽ˜์ด์ง€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
    • 4๏ธโƒฃ : ์—†์—ˆ๋˜ ํŽ˜์ด์ง€๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ
      • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ”„๋ ˆ์ž„ ์ฐพ์Œ
      • ๋นˆ ํ”„๋ ˆ์ž„ ์—†์„ ๊ฒฝ์šฐ, ํŽ˜์ด์ง€๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉํ•ด ์Šค์™€ํ•‘
    • 5๏ธโƒฃ : ํŽ˜์ด์ง€ํ…Œ์ด๋ธ” ๊ฐฑ์‹ 
    • 6๏ธโƒฃ : ์ค‘๋‹จํ–ˆ๋˜ ์ž‘์—… ์žฌ์‹คํ–‰

4. ์Šค๋ ˆ์‹ฑ

  • 1) ๊ฐœ๋…

    • ๋ฉ”๋ชจ๋ฆฌ์˜ ํŽ˜์ด์ง€ํดํŠธ ๋น„์œจ์ด ๋†’์€ ๊ฒƒ
    • ๋ฉ”๋ชจ๋ฆฌ์— ๋„ˆ๋ฌด ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์˜ฌ๋ผ๊ฐ€๋ฉด ์Šค์™€ํ•‘์ด ๋งŽ์ด ์ผ์–ด๋‚˜์„œ ๋ฐœ์ƒ
    • ์ปดํ“จํ„ฐ์˜ ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ์ €ํ•˜ ์ดˆ๋ž˜
  • 2) ์Šค๋ ˆ์‹ฑ ์›์ธ

    • ํŽ˜์ด์ง€ํดํŠธ๊ฐ€ ์ผ์–ด๋‚˜๋ฉด CPU ์ด์šฉ๋ฅ โฌ‡๏ธ
      โžก๏ธ ์šด์˜์ฒด์ œ๋Š” CPU์˜ ๊ฐ€์šฉ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆผ
      โžก๏ธ ์•…์ˆœํ™˜ ๋ฐ˜๋ณต๋˜๋ฉฐ, ์Šค๋ ˆ์‹ฑ ๋ฐœ์ƒ
  • 2) ํ•˜๋“œ์›จ์–ด์  ํ•ด๊ฒฐ

    • ๋ฉ”๋ชจ๋ฆฌ ๋Š˜๋ฆฌ๊ธฐ
    • HDD ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ SSD๋กœ ๋ฐ”๊พธ๊ธฐ
  • 3) ์šด์˜์ฒด์ œ์  ํ•ด๊ฒฐ

    • ์ž‘์—…์„ธํŠธ (working set) : process ๊ณผ๊ฑฐ ์‚ฌ์šฉ์ด๋ ฅ(์ง€์—ญ์„ฑ) ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํŽ˜์ด์ง€์ง‘ํ•ฉ์„ ๋งŒ๋“ค์–ด ํ•œ๊บผ๋ฒˆ์— ๋ฏธ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ
      โžก๏ธ ํƒ์ƒ‰ ๋น„์šฉโฌ‡๏ธ, ์Šค์™€ํ•‘โฌ‡๏ธ
    • PFF (Page Fault Frequency) : ์ƒํ•œ์„ ๊ณผ ํ•˜ํ•œ์„ฑ ์ •ํ•˜๊ณ , ์ƒํ•œ์„ ์— ๋„๋‹ฌํ•˜๋ฉด ํ”„๋ ˆ์ž„ ๋Š˜๋ฆฌ๊ณ  ํ•˜ํ•œ์„ ์— ๋„๋‹ฌํ•˜๋ฉด ํ”„๋ ˆ์ž„ ์ค„์ž„

๐Ÿ“• ํŽ˜์ด์ง€๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜

1. LFD (Longest Forward Distance)

  • 1) ๊ฐœ๋…

    • ์˜คํ”„๋ผ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ๊ฐ€์žฅ ๋จผ ๋ฏธ๋ž˜์— ์ฐธ์กฐ๋˜๋Š” ํŽ˜์ด์ง€์™€ ํ˜„์žฌ์˜ ํŽ˜์ด์ง€๋ฅผ ๋ฐ”๊พธ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • 2) ํŠน์ง•

    • ๋ฏธ๋ž˜์— ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ์„ธ์Šค ์•Œ์ง€ ๋ชปํ•ด์„œ ์‚ฌ์šฉX
    • ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ฑ๋Šฅ ๋น„๊ต์—๋Œ€ํ•œ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉ
  • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ํ”„๋ ˆ์ž„์˜ ํŽ˜์ด์ง€ ์ค‘ 1์ด ๋’ค์— ์“ฐ์ผ ๊ฒƒ์„ ์•Œ๊ณ  ๋ฏธ๋ฆฌ ๊ต์ฒด

2. FIFO (First In First Out)

  • 1) ๊ฐœ๋…

    • ๊ฐ€์žฅ ๋จผ์ € ์˜จ ํŽ˜์ด์ง€๋ถ€ํ„ฐ ๊ต์ฒด
  • 2) ํŠน์ง•

    • ๊ตฌํ˜„ ๊ฐ„๋‹จ, ์„ฑ๋Šฅโฌ‡๏ธ
    • ํ๋ฅผ ์ด์šฉํ•ด ์ €์žฅ
    • Belady's Anomaly ํ˜„์ƒ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ๊ฐ€์žฅ ์˜ค๋ž˜๋œ 7 ๊ต์ฒด

    ๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– Belady's Anomaly

    • ์ง๊ด€์ ์œผ๋กœ, ํ”„๋ ˆ์ž„์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜๋ก ํŽ˜์ด์ง€ ๊ฒฐํ•จ์˜ ํšŸ์ˆ˜๋Š” ๊ฐ์†Œํ•จ
    • ํ”„๋ ˆ์ž„ ๊ฐœ์ˆ˜ ๋งŽ์•„์ ธ๋„ page-fault๊ฐ€ ์ค„์–ด๋“ค์ง€ ์•Š๊ณ  ๋Š˜์–ด๋‚˜๋Š” ํ˜„์ƒ

3. LRU (Least Recently Used)

  • 1) ๊ฐœ๋…
    • ๊ฐ€์žฅ ์˜ค๋ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ํŽ˜์ด์ง€ ๊ต์ฒด
    • ์‹œ๊ฐ„ ์ง€์—ญ์„ฑ ์„ฑ์งˆ ๊ณ ๋ ค (์ตœ๊ทผ์— ์ฐธ์กฐ๋œ ํŽ˜์ด์ง€๊ฐ€ ๊ฐ€๊นŒ์šด ๋ฏธ๋ž˜์— ๋‹ค์‹œ ์ฐธ์กฐ๋  ๊ฐ€๋Šฅ์„ฑ ๋†’์Œ)
  • 2) ํŠน์ง•
    • ์„ฑ๋Šฅ ์ข‹์Œ
    • ์ตœ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋น„์Šทํ•œ ํšจ๊ณผ
    • ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค ์ตœ๊ทผ ์‚ฌ์šฉํ•œ ์‹œ๊ฐ„ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ ํ•„์š” (๊ณ„์ˆ˜๊ธฐ, ์Šคํƒ)
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃผ๊ธฐ์–ต์žฅ์น˜์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค ์ฐธ์กฐ๋œ ํŽ˜์ด์ง€ ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•ด์•ผํ•จ โžก๏ธ ๋ง‰๋Œ€ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ
  • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ 1 ๊ต์ฒด

4. NUR (Not Used Recently)

  • 1) ๊ฐœ๋…

    • clock ์•Œ๊ณ ๋ฆฌ์ฆ˜, LRU์—์„œ ๋ฐœ์ „๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ์ตœ๊ทผ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ํŽ˜์ด์ง€ ๊ต์ฒด
    • 0๊ณผ 1๊ฐ€์ง„ ๋น„ํŠธ ํ•„์š”
      • 1 : ์ตœ๊ทผ์— ์ฐธ์กฐ๋จ
      • 0 : ์ฐธ์กฐ๋˜์ง€ ์•Š์Œ
        โžก๏ธ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฉด์„œ 0์„ ์ฐพ์œผ๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€ 1๋กœ ๊ต์ฒด
  • 2) ํŠน์ง•

    • ๋™์ผ ๊ทธ๋ฃน ๋‚ด์—์„œ ์„ ํƒ ๋ฌด์ž‘์œ„
    • ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค 2๊ฐœ์˜ ์ฐธ์กฐ๋น„ํŠธ / ๋ณ€ํ˜• ๋น„ํŠธ ์‚ฌ์šฉ
      • ํŽ˜์ด์ง€ ํ”„๋ ˆ์ž„์— ์ ์žฌ : r = 0, m = 0
      • ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐ : r = 1 (์ฃผ๊ธฐ์ ์œผ๋กœ 0์œผ๋กœ ๋ณ€๊ฒฝ)
      • ํŽ˜์ด์ง€ ์ˆ˜์ • : m = 1
    • ๊ต์ฒด ์šฐ์„ ์ˆœ์œ„ : ์ฐธ์กฐ๋น„ํŠธ > ๋ณ€ํ˜•๋น„ํŠธ
      • 1๏ธโƒฃ : r = 0, m = 0
      • 2๏ธโƒฃ : r = 0, m = 1
      • 3๏ธโƒฃ : r = 1, m = 0
      • 4๏ธโƒฃ : r = 1, m = 1
  • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ์šฐ์„ ์ˆœ์œ„ ๋‚ฎ์€ B ๊ต์ฒด

5. LFU (Least Frequently Used)

  • 1) ๊ฐœ๋…

    • ๊ฐ€์žฅ ์ฐธ์กฐ ํšŸ์ˆ˜๊ฐ€ ์ ์€ ํŽ˜์ด์ง€ ๊ต์ฒด
    • ๊ต์ฒด ๋Œ€์ƒ์ด ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋ฉด ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ํŽ˜์ด์ง€ ๊ต์ฒด
  • 2) ํŠน์ง•

    • LRU๋Š” ์ง์ „ ์ฐธ์กฐ๋œ ์‹œ์ ๋งŒ ๋ฐ˜์˜
    • LFU๋Š” ์ฐธ์กฐ ํšŸ์ˆ˜๋ฅผ ํ†ตํ•ด ์žฅ๊ธฐ์ ์œผ๋กœ ์ฐธ์กฐ๋ฅผ ๊ณ ๋ ค ๊ฐ€๋Šฅ
      โžก๏ธ ๋ง‰๋Œ€ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ
  • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ๊ฐ๊ฐ 1๋ฒˆ์”ฉ ์ฐธ์กฐํ•œ ํŽ˜์ด์ง€ 2, 3 ์ค‘ LRU์— ๋”ฐ๋ผ ๋” ์˜ค๋ž˜ ์“ฐ์ง€ ์•Š์€ 2 ๊ต์ฒด

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– LFD ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Longest Forward Distance)

  • ์˜คํ”„๋ผ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ตœ์  ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ์š”์ฒญ i + 1์ด ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒฝ์šฐ
      • ์Šค์™‘์ด ์ผ์–ด๋‚˜์ง€ X
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ์š”์ฒญ i + 1์ด ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ์ผ์–ด๋‚  ๊ฒฝ์šฐ
      • '์„œ๋กœ ๋‹ค๋ฅธ ํŽ˜์ด์ง€'๋ฅผ ์Šค์™‘ํ•œ๋‹ค๊ณ  ๊ฐ€์ •
      • ํŽ˜์ด์ง€ p๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ํ•„์š”ํ•œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์˜ด
      • p๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  p'์™€ ์Šค์™€ํ•‘์„ j - 1 ์ „์— ํ•œ ์ƒํƒœ๋ผ๋ฉด, p๊ฐ€ ์™”์„ ๋•Œ 1๋ฒˆ ์Šค์™€ํ•‘
      • p๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค๋ฅธ ํŽ˜์ด์ง€์™€ ์Šค์™€ํ•‘ ํ•ด์„œ p'์ผ ๋•Œ, p์ผ ๋•Œ 2๋ฒˆ ์Šค์™€ํ•‘

๐Ÿ“• ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ

1. process

  • 1) ๊ฐœ๋…

    • ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ
    • CPU ์Šค์ผ€์ค„๋ง ๋Œ€์ƒ์ด ๋˜๋Š” ์ž‘์—…(task)
    • ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜์–ด CPU์˜ ํ• ๋‹น(์ฃผ์†Œ ๊ณต๊ฐ„, ํŒŒ์ผ, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ) ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ
  • 2) ๊ตฌ์„ฑ

    • ์Šคํƒ (ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋กœ์ปฌ๋ณ€์ˆ˜ ๋“ฑ ์ž„์‹œ ์ž๋ฃŒ ์ €์žฅ)
    • ๋ฐ์ดํ„ฐ (์ „์—ญ๋ณ€์ˆ˜ ์ €์žฅ)
    • ํž™ (๋™์  ํ• ๋‹น ๋ฉ”๋ชจ๋ฆฌ)
    • ์ฝ”๋“œ
  • 3) prgram๊ณผ process ์ฐจ์ด

    • ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๋ฉด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋˜๋Š” ์ธ์Šคํ„ด์Šคํ™” ๋ฐœ์ƒ
    • ์šด์˜์ฒด์ œ์˜ CPU ์Šค์ผ€์ค„๋Ÿฌ์— ๋”ฐ๋ผ CPU๊ฐ€ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰

2. thread

  • 1) ๊ฐœ๋…

    • ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ๋‹จ์œ„
    • ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋™์ž‘๋˜๋Š” ์‹คํ–‰ ํ๋ฆ„, ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์ด๋‚˜ ์ž์› ๊ณต์œ 
  • 2) ๊ตฌ์„ฑ

    • ์Šค๋ ˆ๋“œ ID
    • ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ : ์Šค๋ ˆ๋“œ๊ฐ€ ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด CPU ํ• ๋‹น ๋ฐ›์„ ๋•Œ ๋ช…๋ น์–ด ์–ด๋””๊นŒ์ง€ ์ˆ˜ํ–‰ํ–ˆ๋Š”์ง€ ์ €์žฅ
      โžก๏ธ PC ๋ ˆ์ง€์Šคํ„ฐ ๋…๋ฆฝ์  ํ• ๋‹น
    • ๋ ˆ์ง€์Šคํ„ฐ ์ง‘ํ•ฉ
    • ์Šคํƒ : ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ „๋‹ฌ ์ธ์ž, ๋˜๋Œ์•„๊ฐˆ ์ฃผ์†Œ๊ฐ’, ํ•จ์ˆ˜ ๋‚ด ์„ ์–ธ ๋ณ€์ˆ˜ ์ €์žฅ
      โžก๏ธ ๋…๋ฆฝ์ ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋“ฑ ์‹คํ–‰์„ ์œ„ํ•ด ์Šคํƒ ๋…๋ฆฝ์  ํ• ๋‹น
  • 3) ํŠน์ง•

    • ๋™์‹œ์„ฑ (์„œ๋กœ ๋…๋ฆฝ์ ์ธ ์ž‘์—…๋“ค์„ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๊ณ , ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์—ฌ์คŒ)
    • ์ž์›์˜ ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ ์ค‘๋ณต์„ฑ ์ตœ์†Œํ™”
    • ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ค‘๋‹จ(block)๋˜์–ด๋„ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” ์‹คํ–‰(runnig) ์ƒํƒœ ์ผ์ˆ˜ ์žˆ์–ด ์ค‘๋‹จ๋˜์ง€ ์•Š๊ณ  ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ
  • 4) ๊ตฌ๋ถ„

    • ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค : ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ํ”„๋กœ์„ธ์Šค
    • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค : ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ํ”„๋กœ์„ธ์Šค

3. process์™€ thread ์ฐจ์ด์ 

  • 1) ์ž‘์—… ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
    • process : ์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ์Šคํƒ, ํž™ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
    • thread : ์Šคํƒ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์Šค๋ ˆ๋“ค๊ณผ ๊ณต์œ 
  • 2) ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ 
    • process : ํƒ€ ํ”„๋กœ์„ธ์Šค์™€ ๊ฒฉ๋ฆฌ๋˜์–ด ์žˆ์–ด IPC ์‚ฌ์šฉ
    • thread : ํƒ€ ์Šค๋ ˆ๋“œ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด ์ •๋ณด ๊ณต์œ  ์‰ฝ์ง€๋งŒ, ๋™๊ธฐํ™” ๋ฌธ์ œ์ 
  • 3) ํ”„๋กœ์„ธ์Šค๊ฐ„ ์˜ํ–ฅ
    • process : ํ”„๋กœ์„ธ์Šค ๋ฌธ์ œ๊ฐ€ ํƒ€ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅX
    • thread : ํ•œ ์Šค๋ ˆ๋“œ์— ๋ฌธ์ œ์‹œ ํƒ€ ์Šค๋ ˆ๋“œ์— ์˜ํ–ฅ ๋ฏธ์นจ
  • 4) ์ƒ์„ฑ๊ณผ ์ข…๋ฃŒ
    • process : ๋งŽ์€ ์‹œ๊ฐ„ ์†Œ์š”
    • thread : ์ ์€ ์‹œ๊ฐ„ ์†Œ์š”

๐Ÿ“• ํ”„๋กœ๊ทธ๋žจ์˜ ์ปดํŒŒ์ผ ๊ณผ์ •

1. ์ปดํŒŒ์ผ ๊ณผ์ •

ํ”„๋กœ๊ทธ๋žจ์€ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ปดํŒŒ์ผ ๊ณผ์ •์„ ๊ฑฐ์ณ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ๋˜์–ด ์‹คํ–‰ ํŒŒ์ผ ์ƒ์„ฑ

  • 1) ์ „์ฒ˜๋ฆฌ
    • ์†Œ์Šค์ฝ”๋“œ ์ฃผ์„ ์ œ๊ฑฐ + #include ๋“ฑ ํ—ค๋”ํŒŒ์ผ ๋ณ‘ํ•ฉํ•˜์—ฌ ๋งคํฌ๋กœ๋ฅผ ์น˜ํ™˜
  • 2) ์ปดํŒŒ์ผ๋Ÿฌ
    • ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ณ€ํ™˜
    • ์˜ค๋ฅ˜์ฒ˜๋ฆฌ, ์ฝ”๋“œ์ตœ์ ํ™” ์ž‘์—…
  • 3) ์–ด์…ˆ๋ธ”๋Ÿฌ
    • ๋ชฉ์ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ (.c โžก๏ธ .o)
    • ์šด์˜์ฒด์ œ์— ๋”ฐ๋ผ ํ™•์žฅ์ž์— ๋งž๋Š” ํŒŒ์ผ ์ƒ์„ฑ
  • 4) ๋ง์ปค
    • ์‹คํ–‰ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ (.o โžก๏ธ .exe/.out)
    • ํ”„๋กœ๊ทธ๋žจ ๋‚ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜๋˜๋Š” ๋‹ค๋ฅธ ํŒŒ์ผ๋“œ๋กœ๊ฐ€ ๋ชฉ์  ์ฝ”๋“œ๋ฅผ ๊ฒฐํ•ฉ

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ์ •์ /๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • โœ๏ธ ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ํ”„๋กœ๊ทธ๋žจ ๋นŒ๋“œ์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ํŒŒ์ผ์— ๋„ฃ๋Š” ๋ฐฉ์‹
    • ์žฅ์  : ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋“ฑ ์™ธ๋ถ€ ์˜์กด๋„๊ฐ€ ๋‚ฎ์Œ
    • ๋‹จ์  : ์ฝ”๋“œ ์ค‘๋ณต ๋“ฑ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ ๋–จ์–ด์ง
  • โœ๏ธ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์‹œ ํ•„์š”ํ•  ๋•Œ๋งŒ DLL์ด๋ผ๋Š” ํ•จ์ˆ˜ ์ •๋ณด๋ฅผ ํ†ตํ•ด ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹
    • ์žฅ์  : ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ ์ข‹์Œ
    • ๋‹จ์  : ์™ธ๋ถ€ ์˜์กด๋„๊ฐ€ ๋†’์•„์ง

2. ์‹ค์Šต

  • ๋ช…๋ น์–ด
    g++ -save-temps=obj -c a.cpp -o dir/foo.o
    • .ii : ์ „์ฒ˜๋ฆฌ๋œ C++ ํŒŒ์ผ
    • .s : ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ํŒŒ์ผ
    • .o : ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ
#include <bits/stdc++.h>
using namespace std;
int main(){
	cout << "hello kundol\n";
	return 0;
}

๐Ÿ“• ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

1. ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

  • 1) ์Šคํƒ (stack)

    • ์œ„ ์ฃผ์†Œ๋ถ€ํ„ฐ ํ• ๋‹น
    • ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ์ €์žฅ
    • ์ปดํŒŒ์ผ์‹œ ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋จ
    • ํ•จ์ˆ˜๊ฐ€ ํ•จ์ˆ˜ ํ˜ธ์ถœํ•˜๋Š” ๋“ฑ ๋Ÿฐํƒ€์ž„์‹œ์—๋„ ํฌ๊ธฐ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ (๋™์  ํ• ๋‹น)
  • 2) ํž™ (heap)

    • ์•„๋ž˜ ์ฃผ์†Œ๋ถ€ํ„ฐ ํ• ๋‹น
    • ๋Ÿฐํƒ€์ž„์‹œ ํฌ๊ธฐ ๊ฒฐ์ • (๋™์  ํ• ๋‹น)
  • 3) ๋ฐ์ดํ„ฐ ์˜์—ญ (BSS, Data segment)

    • ์ •์  ํ• ๋‹น
    • BSS, Data ์˜์—ญ์œผ๋กœ ๋‚˜๋‰จ
  • 4) ์ฝ”๋“œ ์˜์—ญ (code segment)

    • ์ •์  ํ• ๋‹น
    • ์†Œ์Šค ์ฝ”๋“œ

2. ์ •์ ํ• ๋‹น

  • 1) ์ •์ ํ• ๋‹น
    • ์ปดํŒŒ์ผ๋‹จ๊ณ„์—์„œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
    • BSS segment, Data segment, Code/Text segment์— ๋‚˜๋ˆ  ์ €์žฅ
  • 2) BSS segment
    • ์ „์—ญ๋ณ€์ˆ˜, static, const๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜ ์ค‘ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ๋˜๋Š” ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ํ• ๋‹น
#include<bits/stdc++.h>
using namespace std;

int a;
int b = 0;
const int c = 0; // BSS

int main(){
	static int d; // BSS
    static int e = 0; // BSS
    return 0;
}
  • 3) Data segment
    • ์ „์—ญ๋ณ€์ˆ˜, static, const๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜ ์ค‘ 0์ด ์•„๋‹Œ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ ๋ณ€์ˆ˜๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ํ• ๋‹น
#include<bits/stdc++.h>
using namespace std;

int a = 1;
const int b = 2; // Data
int main(){
	static int c = 3; // Data
	return 0;
}
  • 4) Code/Text segment
    • ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ

3. ๋™์ ํ• ๋‹น

  • 1) ๋™์ ํ• ๋‹น
    • ๋Ÿฐํƒ€์ž„๋‹จ๊ณ„์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›์Œ
    • Stack, Heap์— ๋‚˜๋ˆ  ์ €์žฅ
  • 2) Stack
    • ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์— ์˜ํ•ด ๊ฐ€๋ณ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
    • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœํ™˜๊ฒฝ ๋“ฑ ํŠน์ • ์ •๋ณด ์ €์žฅ
    • ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ƒˆ๋กœ์šด ์Šคํƒ ํ”„๋ ˆ์ž„์ด ๋งค๋ฒˆ ์‚ฌ์šฉ๋˜์–ด, ํ•จ์ˆ˜๊ฐ„ ์ธ์Šคํ„ด์ˆ˜ ๋ณ€์ˆ˜์— ์˜ํ–ฅX
  • 3) Heap
    • ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๋Š” ๋ณ€์ˆ˜
    • malloc(), free() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : vector๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ heap ์˜์—ญ ์‚ฌ์šฉ

๐Ÿ“• PCB์™€ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ

1. PCB (Process Control Block)

  • 1) PCB ๊ฐœ๋…
    • ์šด์˜์ฒด์ œ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ ๋ธ”๋ก
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ๊ณ ์œ ์˜PCB ์ƒ์„ฑ / ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋˜๋ฉด PCB ์ œ๊ฑฐ
    • ํ”„๋กœ์„ธ์Šค ์ค‘์š” ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์–ด ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ปค๋„ ์Šคํƒ์˜ ๊ฐ€์žฅ ์•ž๋ถ€๋ถ„์—์„œ ๊ด€๋ฆฌ

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ์ปค๋„์Šคํƒ

  • ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž ๊ณต๊ฐ„๊ณผ ์ปค๋„ ๊ณต๊ฐ„์œผ๋กœ ๊ตฌ๋ถ„๋˜๊ณ , ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ด€๋ฆฌ๋˜์–ด ์‚ฌ์šฉ์ž ์Šคํƒ, ์ปค๋„ ์Šคํƒ์œผ๋กœ ๋ถˆ๋ฆผ
  • ์ปค๋„ ์Šคํƒ์€ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์˜ ์œ—๋ถ€๋ถ„ (๊ฐ€์žฅ ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ์ฃผ์†Œ๊ฐ’)
    • ์ปค๋„ ์Šคํƒ : ์ปค๋„๋ชจ๋“œ์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ์‚ฌ์šฉ์ž ์Šคํƒ : ์œ ์ €๋ชจ๋“œ์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ

  • ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ (๋ฐ์ดํ„ฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ์ดํ„ฐ)
  • ๋Œ€๋Ÿ‰์˜ ์ •๋ณด ์ค‘ ํšจ์œจ์ ์œผ๋กœ ์ •๋ณด๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์ผ์ •ํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ ์ฝ˜ํ…์ธ ์— ๋ถ€์—ฌ๋˜๋Š” ๋ฐ์ดํ„ฐ
  • 2) PCB ๊ตฌ์กฐ
    • ํ”„๋กœ์„ธ์Šค ์ƒํƒœ : ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU์— ๋Œ€ํ•œ ์†Œ์œ ๊ถŒ์„ ์–ป์€ ์ดํ›„์˜ ์ƒํƒœ (์ค€๋น„, ์ผ์‹œ์ค‘๋‹จ)
    • ํ”„๋กœ์„ธ์Šค ๋ฒˆํ˜ธ(PID) : ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ๊ณ ์œ  ์‹๋ณ„ ๋ฒˆํ˜ธ, ํ”„๋กœ์„ธ์Šค์˜ ์ž์‹ ํ”„๋กœ์„ธ์Šค ID
    • ํ”„๋กœ์„ธ์Šค ๊ถŒํ•œ : ์ปดํ“จํ„ฐ ์ž์› ๋˜๋Š” I/O ๋””๋ฐ”์ด์Šค์— ๋Œ€ํ•œ ๊ถŒํ•œ ์ •๋ณด
    • ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ (PC) : ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด ์‹คํ–‰๋  ๋‹ค์Œ ๋ช…๋ น์˜ ์ฃผ์†Œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ
    • CPU ๋ ˆ์ง€์Šคํ„ฐ : ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ €์žฅํ•ด์•ผ ํ•  ๋ ˆ์ง€์Šคํ„ฐ์— ๋Œ€ํ•œ ์ •๋ณด
    • CPU ์Šค์ผ€์ค„๋ง ์ •๋ณด : CPU ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ์ค‘๋‹จ๋œ ์‹œ๊ฐ„ ๋“ฑ ์ •๋ณด
    • ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ : ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ จ ์ •๋ณด
    • ์—ด๋ฆฐ ํŒŒ์ผ ์ •๋ณด : ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ„ํ•ด ์—ด๋ฆฐ ํŒŒ์ผ ๋ชฉ๋ก
    • ๊ณ„์ • ์ •๋ณด : ํ”„๋กœ์„ธ์Šค ์‹คํ–‰์— ์‚ฌ์šฉ๋œ CPU ์‚ฌ์šฉ๋Ÿ‰, ์‹คํ–‰ํ•œ ์œ ์ €์˜ ์ •๋ณด
    • I/O ์ƒํƒœ ์ •๋ณด : ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ I/O ๋””๋ฐ”์ด์Šค ๋ชฉ๋ก

2. Context Switching

  • 1) Context Switching ๊ฐœ๋…

    • PCB ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณต์›ํ•˜๋Š” ๊ณผ์ •
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์ธํ„ฐ๋ŸฝํŠธ์— ์˜ํ•ด ๋ฐœ์ƒ
  • 2) Context Switching ๋น„์šฉ

    • ์œ ํœด ์‹œ๊ฐ„์˜ ๋ฐœ์ƒ โžก๏ธ CPU ๊ฐ€์šฉ์„ฑโฌ‡๏ธ
    • ์บ์‹œ๋ฏธ์Šค
      • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๊ทธ๋Œ€๋กœ ์žˆ์œผ๋ฉด ์ž˜๋ชป๋œ ์ฃผ์†Œ ๋ณ€ํ™˜ ๋ฐœ์ƒ
      • ์บ์‹œํด๋ฆฌ์–ด ๊ณผ์ • ํ•„์š”
  • 3) ์Šค๋ ˆ๋“œ์—์„œ Context Switching

    • ์Šค๋ ˆ๋“œ๋Š” ์Šคํƒ ์˜์—ญ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ 
    • ๋น„์šฉ ์ ๊ณ , ์‹œ๊ฐ„์ด ์ ๊ฒŒ ๊ฑธ๋ฆผ

๐Ÿ“• ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ

1. ํ”„๋กœ์„ธ์Šค ์ƒํƒœ

  • 1) ์ƒ์„ฑ ์ƒํƒœ (create/new)
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋œ ์ƒํƒœ
    • fork() ๋˜๋Š” exec() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ
    • PCB ํ• ๋‹น๋จ

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– fork()์™€ exec() ํ•จ์ˆ˜

  • โœ๏ธ fork()
    • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ
    • ์ƒˆ๋กœ์šด ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜
    • ์ฃผ์†Œ ๊ณต๊ฐ„๋งŒ ๋ณต์‚ฌ๋˜๊ณ , ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ๋น„๋™๊ธฐ ์ž‘์—… ๋“ฑ ์ƒ์†X
  • โœ๏ธ exec()
    • ์ƒˆ๋กœ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜
  • 2) ๋Œ€๊ธฐ ์ƒํƒœ (ready)

    • ์ฒ˜์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋œ ์ดํ›„ ๋Œ€๊ธฐ ์ค‘์ด ์ƒํƒœ
    • ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ถฉ๋ถ„ํ•  ๊ฒฝ์šฐ : ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
    • ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๋ถ€์กฑํ•  ๊ฒฝ์šฐ : ์ค€๋น„ํ(์ค€๋น„ ์ˆœ์„œ์—ด)์— ๋“ค์–ด๊ฐ
    • CPU ์Šค์ผ€์ค„๋Ÿฌ๋กœ๋ถ€ํ„ฐ CPU ์†Œ์œ ๊ถŒ์ด ๋„˜์–ด์˜ค๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
  • 3) ๋Œ€๊ธฐ ์ค‘๋‹จ ์ƒํƒœ (ready suspended)

    • ์ค€๋น„ํ๊ฐ€ ๊ฐ€๋“ ์ฐฌ ์ƒํƒœ
    • ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ผ์‹œ ์ค‘๋‹จ๋œ ์ƒํƒœ
  • 4) ์‹คํ–‰ ์ƒํƒœ (running)

    • CPU ์†Œ์œ ๊ถŒ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๋ฐ›๊ณ , ๋ช…๋ น ์ˆ˜ํ–‰ ์ค‘์ธ ์ƒํƒœ
    • CPU burst ์ผ์–ด๋‚จ
  • 5) ์ค‘๋‹จ ์ƒํƒœ (blocked)

    • ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ดํ›„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฐจ๋‹จ๋œ ์ƒํƒœ
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ํ”„๋ฆฐํŠธ ์ธ์‡„ ๋ฒ„ํŠผ ๋ˆŒ๋ €์„ ๋•Œ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž ๊น ๋ฉˆ์ถ˜ ๊ฒฝ์šฐ
      • ํ”„๋ฆฐํŠธ ์ธ์‡„์— ๊ด€ํ•œ IO ์š”์ฒญ์œผ๋กœ ์ธํ•ด ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ
      • ํ˜„์žฌ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘๋‹จ ์ƒํƒœ๋กœ ์ž ์‹œ ๋ณ€๊ฒฝ๋œ ๊ฒƒ
  • 6) ์ผ์‹œ ์ค‘๋‹จ ์ƒํƒœ (blocked suspended)

    • ๋Œ€๊ธฐ ์ค‘๋‹จ๊ณผ ์œ ์‚ฌ
    • ์ค‘๋‹จ๋œ ์ƒํƒœ์—์„œ ์‹คํ–‰๋˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ผ์‹œ ์ค‘๋‹จ๋œ ์ƒํƒœ
  • 7) ์ข…๋ฃŒ ์ƒํƒœ (terminated / exit)

    • ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ์™„๋ฃŒ
    • ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ž์› ๋ฐ˜๋‚ฉ, PCB ์‚ญ์ œ๋˜๋Š” ์ƒํƒœ
    • abort (๋น„์ž๋ฐœ์  ์ข…๋ฃŒ)
      • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค ๊ฐ•์ œ์ ์œผ๋กœ ์ข…๋ฃŒ
      • ์ž์‹ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ์ž์›์˜ ํ•œ๊ณ„์น˜๋ฅผ ๋„˜์–ด์„ฐ์„ ๊ฒฝ์šฐ
      • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋์„ ๊ฒฝ์šฐ
      • ์‚ฌ์šฉ์ž๊ฐ€ process.kill ๋“ฑ ๋ช…๋ น์–ด๋กœ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ์‹œํ‚ฌ ๊ฒฝ์šฐ ๋ฐœ์ƒ

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– waiting ์ƒํƒœ

  • ready suspended (๋Œ€๊ธฐ ์ค‘๋‹จ)+ block suspended(์ผ์‹œ ์ค‘๋‹จ) + blocked(์ค‘๋‹จ)

๐Ÿ“• ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ๊ณผ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ

1. ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ

  • 1) ๊ฐœ๋…

    • ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ๋™์‹œ์— 2๊ฐ€์ง€ ์ด์ƒ์˜ ์ผ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ (๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ)
    • ํŠน์ • ํ”„๋กœ์„ธ์Šค ์ค‘ ์ผ๋ถ€์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ๋˜๋”๋ผ๋„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์ด์šฉํ•ด์„œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ โžก๏ธ ๋†’์€ ์‹ ๋ขฐ์„ฑ
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค + ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐ€์ง„ ์†Œํ”„ํŠธ์›จ์–ด
      • ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ์„ธ์Šค : ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด๋‚˜ ํŒŒ์ผ ์ ‘๊ทผ ๊ถŒํ•œ ๋‹ด๋‹น (์ฃผ์†Œ ํ‘œ์‹œ์ค„, ๋ถ๋งˆํฌ ๋ง‰๋Œ€, ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ, ์•ž์œผ๋กœ ๊ฐ€๊ธฐ ๋ฒ„ํŠผ)
      • ๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค : ์›น ์‚ฌ์ดํŠธ๊ฐ€ ๋ณด์ด๋Š” ๋ถ€๋ถ„ ์ œ์–ด
      • ํ”Œ๋Ÿฌ๊ทธ์ธ ํ”„๋กœ์„ธ์Šค : ์›น ์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ์–ด
      • GPU ํ”„๋กœ์„ธ์Šค : GPU๋ฅผ ์ด์šฉํ•ด์„œ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ๋ถ€๋ถ„ ์ œ์–ด
  • 2) ํŠน์ง•

    • ๊ฒฉ๋ฆฌ์„ฑ, ์‹ ๋ขฐ์„ฑ ๋†’์Œ
  • 3) ๊ตฌ์กฐ

  • 4) ์‹ค์Šต

import os
from multiprocessing import Process
import requests

def f(name):
x = requests.get('https://w3schools.com/python/demopage.htm')
print('pid of parent:', os.getppid())
print('pid of %s : %d' %(name, os.getpid()))
print(x.text)

if __name__ == '__main__':
print('pid of main:', os.getpid())
p1 = Process(target=f, args=("ํ”„๋กœ์„ธ์Šค 1",))
p2 = Process(target=f, args=("ํ”„๋กœ์„ธ์Šค 2",))
p1.start(); p1.join()
p2.start(); p2.join()

2. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ

  • 1) ๊ฐœ๋…

    • ํ”„๋กœ์„ธ์Šค ๋‚ด ์ž‘์—…์„ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌ

    • ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ค‘๋‹จ(blocked)๋˜์–ด๋„ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” ์‹คํ–‰(running)์ƒํƒœ๋กœ ์ค‘๋‹จ๋˜์ง€ ์•Š์€ ๋น ๋ฅธ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ (๋™์‹œ์„ฑ)

    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค + ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐ€์ง„ ์†Œํ”„ํŠธ์›จ์–ด

  • 2) ํŠน์ง•

    • ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ ์„œ๋กœ ์ž์›์„ ๊ณต์œ ํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ๊ฐ€๋ฒผ์›Œ์„œ ํšจ์œจ์„ฑ ๋†’์Œ
    • ํ•œ ์Šค๋ ˆ๋“œ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด, ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ์˜ํ–ฅ์„ ๋ผ์ณ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ ๋ผ์นจ
  • 3) ๊ตฌ์กฐ

๐Ÿ“• IPC

1. IPC (Inter-Process Communication)

  • 1) ๊ฐœ๋…
    • ํ”„๋กœ์„ธ์Šค๋ผ๋ฆฌ ๋ฐ์ดํ„ฐ ์ฃผ๊ณ ๋ฐ›๊ณ , ๊ณต์œ  ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ๋ธŒ๋ผ์šฐ์ € ๋„์›Œ์„œ Naver ์„œ๋ฒ„์™€ HTTP ํ†ต์‹ ํ•ด์„œ html ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ
      • ํด๋ผ์ด์–ธํŠธ : ๋ฐ์ดํ„ฐ ์š”์ฒญ
      • ์„œ๋ฒ„ : ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ์‘๋‹ต
  • 2) ์ข…๋ฅ˜
    • ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ
    • ํŒŒ์ผ
    • ์†Œ์ผ“
    • ํŒŒ์ดํ”„
    • ๋ฉ”์„ธ์ง€ ํ

2. ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ

  • 1) ๊ฐœ๋…
    • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ
    • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณต์œ  ๋ฒ„ํผ ์ƒ์„ฑ
    • ํ•˜๋“œ์›จ์–ด ๊ด€์ ์—์„œ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋Š” CPU๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํฐ ๋ฉ”๋ชจ๋ฆฌ์ธ RAM์„ ๊ฐ€๋ฆฌํ‚ด
  • 2) ํŠน์ง•
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒX, ๊ฐ€์žฅ ๋น ๋ฆ„
    • ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์—ฌ๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ ํ•˜์—ฌ ๋™๊ธฐํ™” ํ•„์š”

3. ํŒŒ์ผ

  • 1) ๊ฐœ๋…
    • ๋””์Šคํฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ/ํŒŒ์ผ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ†ต์‹ 
  • 2) ์‹ค์Šต
    • a.js
      const path = require('path')
      const pt = path.join(__dirname, "a.json")
      const fs = require('fs')
      setInterval(()=>{
      	try {
      		if (fs.existsSync(pt)) {
      			console.log("ํŒŒ์ผ์„ ์ฝ์Šต๋‹ˆ๋‹ค.")
      			const ret = JSON.parse(fs.readFileSync(pt))
      			console.log(ret)
      			}
      		} catch(err) {
      	console.error(err)
      		}
      }, 3000)
      console.log("process 1์ด ๊ฐ€๋™๋ฉ๋‹ˆ๋‹ค.")
    • b.js
      const path = require('path')
      const pt = path.join(__dirname, "a.json")
      const fs = require('fs')
      setTimeout(()=>{
      	const a = {"a" : 1}
      	fs.writeFileSync(pt, JSON.stringify(a))
      }, 3000)
      console.log("process 2๊ฐ€ ๊ฐ€๋™๋ฉ๋‹ˆ๋‹ค.")

4. ์†Œ์ผ“

  • 1) ๊ฐœ๋…
    • ๋™์ผ ์ปดํ“จํ„ฐ์˜ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋‚˜ ๋„คํŠธ์›Œํฌ์˜ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ๋กœ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ „์†กํ•˜๋Š” ๋ฐ์ดํ„ฐ
    • ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค(TCP, UDP, HTTP) ๊ธฐ๋ฐ˜์œผ๋กœ ํ†ต์‹ 

5. ํŒŒ์ดํ”„

  • 1) ๊ฐœ๋…

    • ์ต๋ช… ํŒŒ์ดํ”„, ๋ช…๋ช… ํŒŒ์ดํ”„
  • 2) ์ต๋ช… ํŒŒ์ดํ”„ (anonymous/unnamed pipe)

    • ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— FIFO ๊ธฐ๋ฐ˜์˜ ํ†ต์‹ ์ฑ„๋„์„ ๋งŒ๋“ค์–ด ํ†ต์‹ ํ•˜๋Š” ๊ฒƒ
    • ๋ถ€๋ชจ, ์ž์‹ ํ”„๋กœ์„ธ์Šค ๊ฐ„์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
      • ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ์ƒ์—๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ)
    • ํŒŒ์ดํ”„ ๋ฐ์ดํ„ฐ ์šฉ๋Ÿ‰ ์ œํ•œ ์žˆ์Œ
    • ์“ฐ๊ธฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฝ๊ธฐ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ๋น ๋ฅผ ์ˆ˜ ์—†์Œ
    • ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹  (์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์œ„ํ•ด์„œ 2๊ฐœ ํŒŒ์ดํ”„ ํ•„์š”)
  • 3) ๋ช…๋ช… ํŒŒ์ดํ”„ (named pipe)

    • ํŒŒ์ดํ”„ ์„œ๋ฒ„์™€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํŒŒ์ดํ”„ ํด๋ผ๋ฆฌ์–ธํŠธ ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•œ ๋ช…๋ช…๋œ ๋‹จ๋ฐฉํ–ฅ/์ด์ค‘ ํŒŒ์ดํ”„
    • ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ํ†ต์‹ ์„ ์œ„ํ•œ ๋ณ„๋„์˜ ํŒŒ์ดํ”„ ์ œ๊ณต
    • ์—ฌ๋Ÿฌ ํŒŒ์ดํ”„๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ๋กœ์ปฌ ํ”„๋กœ์„ธ์Šค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ๋„ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ดํ”„
      - ์„œ๋ฒ„, ํด๋ผ์ด์–ธํŠธ์šฉ ํŒŒ์ดํ”„๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ๋™์ž‘
      - ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์—ด๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ†ต์‹ 

6. ๋ฉ”์„ธ์ง€ ํ

  • 1) ๊ฐœ๋…

    • ํ(queue) ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฒ„ํผ๋ฅผ ๋งŒ๋“ค์–ด ํ†ต์‹ 
    • ์ปค๋„์˜ ์ „์—ญ๋ณ€์ˆ˜ ํ˜•ํƒœ ๋“ฑ์œผ๋กœ ์ปค๋„์—์„œ ์ „์—ญ์ ์œผ๋กœ ๊ด€๋ฆฌ
  • 2) ํŠน์ง•

    • ๋‹ค๋ฅธ IPC ๋ฐฉ์‹์— ๋น„ํ•ด ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•จ
      • ๋‹ค๋ฅธ ์ฝ”๋“œ์˜ ์ˆ˜์ • ์—†์ด ๋‹จ์ง€ ๋ช‡ ์ค„ ์ฝ”๋“œ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฉ”์‹œ์ง€ํ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•จ
    • ์“ฐ๊ธฐ ๋ฐ ์ฝ๊ธฐ ๋นˆ๋„ ๋†’์„ ๊ฒฝ์šฐ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์•ˆ์œผ๋กœ ์‚ฌ์šฉ
  • 3) ๊ณผ์ •

    • 1๏ธโƒฃ : ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ฑฐ๋‚˜ ๋ฐ›๊ธฐ ์ „์— ํ ์ดˆ๊ธฐํ™”
    • 2๏ธโƒฃ : ๋ณด๋‚ด๋Š” ํ”„๋กœ์„ธ์Šค(sender)์˜ ๋ฉ”์‹œ์ง€๋Š” ํ์— ๋ณต์‚ฌ๋˜์–ด ๋ฐ›๋Š” ํ”„๋กœ์„ธ์Šค(receiver)์— ์ „๋‹ฌ๋จ

๐Ÿ“• ๊ณต์œ  ์ž์›๊ณผ ๊ฒฝ์Ÿ ์ƒํƒœ, ์ž„๊ณ„์˜์—ญ

1. ๊ณต์œ  ์ž์› (shared resource)

  • ์‹œ์Šคํ…œ ์•ˆ์—์„œ ๊ฐ ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ๊ฐ€ ํ•จ๊ป˜ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋‹ˆํ„ฐ, ํ”„๋ฆฐํ„ฐ, ๋ฉ”๋ชจ๋ฆฌ, ํŒŒ์ผ, ๋ฐ์ดํ„ฐ ๋“ฑ ์ž์›์ด๋‚˜ ๋ณ€์ˆ˜

2. ๊ฒฝ์Ÿ ์ƒํƒœ (race condition)

  • 1) ๊ฐœ๋…
    • ๊ณต์œ  ์ž์›์„ ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ์ƒํ™ฉ
    • ๋™์‹œ์— ์ ‘๊ทผ ์‹œ๋„ํ•  ๋•Œ ํƒ€์ด๋ฐ์— ์˜ˆ์ƒ๋˜๋Š” ๊ฒฐ๊ณผ๊ฐ’์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ
  • 2) ๊ฒฝ์Ÿ ์ƒํƒœ ๊ด€๋ฆฌ์˜ ์ค‘์š”์„ฑ
    • ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ (data consistency) : ์˜ˆ์ƒ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฐ’๊ณผ ๋‹ฌ๋ผ์ง
    • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ (data integerity) : ๋ฐ์ดํ„ฐ์˜ ์–ด๋– ํ•œ ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•˜๋ฉด ์•ˆ๋จ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ/์†์ƒ๋˜์ง€ ์•Š๊ณ  ์™„์ „์„ฑ, ์ •ํ™•์„ฑ, ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•จ

3. ์ž„๊ณ„ ์˜์—ญ (critical section)

  • 1) ๊ฐœ๋…
    • ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•  ๋•Œ ์ˆœ์„œ ๋“ฑ ์ด์œ ๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ์ฝ”๋“œ ์˜์—ญ
    • ํ•œ ๋ฒˆ์— ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๋‚˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋„๋ก ํ•จ
  • 2) ์‹ค์Šต
    • a.js / b.js
const fs = require('fs')
const path = require('path')
const pt = path.join(__dirname, "a.json")
let ret = JSON.parse(fs.readFileSync(pt))
ret.num -= 1000;
setTimeout(() =>{
fs.writeFileSync(pt, JSON.stringify(ret))
}, 3000)
  • a.json
{"num" : 1000}
  • a.js, b.js๊ฐ€ ํŒŒ์ผ์„ ์ฝ๊ณ  ์“ฐ๋Š” ๋ถ€๋ถ„์— lock์„ ๊ฑธ์–ด ์‹คํ–‰

๐Ÿ“• ๋ฎคํ…์Šค, ์„ธ๋งˆํฌ์–ด, ๋ชจ๋‹ˆํ„ฐ

1. ๊ฒฝ์Ÿ์ƒํƒœ ํ•ด๊ฒฐ

  • 1) ๊ฒฝ์Ÿ์ƒํƒœ ํ•ด๊ฒฐ ์กฐ๊ฑด
    • ์ƒํ˜ธ ๋ฐฐ์ œ (mutual exclusion)
      • ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ”์„ ๋•Œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์Œ
    • ํ•œ์ • ๋Œ€๊ธฐ (bounded waiting)
      • ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„์˜์—ญ ์ง„์ž…์„ ์š”์ฒญํ•œ ํ›„ ํ•ด๋‹น ์š”์ฒญ์ด ์Šน์ธ๋˜๊ธฐ ์ „๊นŒ์ง€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„์˜์—ญ์— ์ง„์ž…ํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ
      • ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜์›ํžˆ ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•จ
    • ์ง„ํ–‰์˜ ์œตํ†ต์„ฑ (progress)
      • ๋งŒ์•ฝ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋„ ์ž„๊ณ„์˜์—ญ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์ž„๊ณ„์˜์—ญ ์™ธ๋ถ€์˜ ์–ด๋– ํ•œ ํ”„๋กœ์„ธ์Šค๋„ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ
      • ํ”„๋กœ์„ธ์Šค๊ฐ„ ์„œ๋กœ ๋ฐฉํ•ดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ
    • CPU์˜ ๊ฐœ์ˆ˜๋‚˜ ์†๋„์— ๋Œ€ํ•œ ์–ด๋–ค ๊ฐ€์ •๋„ ํ•˜์ง€ ์•Š์Œ
  • 2) ๊ฒฝ์Ÿ์ƒํƒœ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
    • ๋ฎคํ…์Šค
    • ์„ธ๋งˆํฌ์–ด
    • ๋ชจ๋‹ˆํ„ฐ

2. ๋ฎคํ…์Šค (mutex)

  • 1) ๊ฐœ๋…

    • ๊ฐ์ฒด lock์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฝ์Ÿ์ƒํƒœ ํ•ด๊ฒฐ
      • ๊ณต์œ  ์ž์›์„ lock()์„ ํ†ตํ•ด ์ž ๊ธˆ ์„ค์ •
      • ์‚ฌ์šฉํ•œ ํ›„์— unlock()์„ ํ†ตํ•ด ์ž ๊ธˆ ํ•ด์ œ
    • ๊ณต์œ ์ž์›์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์„ค์ •ํ•˜๊ณ , ์‚ฌ์šฉํ•œ ํ›„์— ์ž ๊ธˆ ํ•ด์ œํ•˜๋Š” ๋ฐฉ์‹
      • ์ž ๊ธˆ์ด ์„ค์ •๋˜๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋‚˜ ์Šค๋ ˆ๋“œ๋Š” ์ž ๊ธด ์ฝ”๋“œ ์˜์—ญ์— ์ ‘๊ทผX
      • ๋ฎคํ…์Šค๋Š” ํ•˜๋‚˜์˜ ์ƒํƒœ(์ž ๊ธˆ/์ž ๊ธˆํ•ด์ œ)๋งŒ ๊ฐ€์ง
    • ๊ณต์œ ์ž์›์ด๋‚˜ ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ƒํ˜ธ๋ฐฐ์ œํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
  • 2) ์‹ค์Šต

Mutex lock;
void f(){
	mutex_lock(&lock);
...
	{Critical Section}
...
	mutex_unlock(&lock);
}

3. ์„ธ๋งˆํฌ์–ด (semaphore)

  • 1) ๊ฐœ๋…

    • ์ผ๋ฐ˜ํ™”๋œ ๋ฎคํ…์Šค
    • ๊ฐ„๋‹จํ•œ ์ •์ˆ˜ S๊ฐ’๊ณผ 2๊ฐ€์ง€ ํ•จ์ˆ˜ wait(), signal()๋กœ ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ฒ˜๋ฆฌ
    • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ž„๊ณ„์˜์—ญ์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ์Œ
    • ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ธ๋งˆํฌ์–ด, ์นด์šดํŒ… ์„ธ๋งˆํฌ์–ด๋กœ ๊ตฌ๋ถ„
  • 2) ๊ตฌ์„ฑ

    • S : ํ˜„์žฌ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ณต์œ ์ž์›์˜ ์ˆ˜
    • wait() = down() = P()
      • S = 0์ผ ๊ฒฝ์šฐ : ๋Œ€๊ธฐ
      • S > 0์ผ ๊ฒฝ์šฐ : 1 ๊ฐ์†Œํ•˜๊ณ , ๊ณ„์† ์ˆ˜ํ–‰
      • S < 0์ผ ๊ฒฝ์šฐ : ๊ณต์œ ์ž์› ์“ธ ์ˆ˜ ์—†์–ด ํ”„๋กœ์„ธ์Šค ์ฐจ๋‹จ๋˜๊ณ  ๋Œ€๊ธฐ์—ด์— ํ”„๋กœ์„ธ์Šค ์ง‘์–ด ๋„ฃ์Œ
    • signal() = up() = V()
      - S๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ด
      - S = 0์ด๊ณ , ๋Œ€๊ธฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์žˆ์„ ๊ฒฝ์šฐ : ๋Œ€๊ธฐ์—ด์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ๋™์ž‘ํ•จ (S๋Š” ๊ทธ๋Œ€๋กœ 0)
  • 3) ์‹ค์Šต

struct Semaphore {
	int value;
	Queue<process> q; // PCB๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ.
};
wait(Semaphore s)
{
	s.value = s.value - 1;
	if (s.value < 0) {
    // ๋Œ€๊ธฐ์—ด์—๋‹ค ์ง‘์–ด ๋„ฃ๋Š”๋‹ค.
		q.push(p);
		block();
	} else return;
}
signal(Semaphore s)
{
	s.value = s.value + 1;
	if (s.value <= 0) {
	// ๋Œ€๊ธฐ์—ด์— ์žˆ๋˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋„์ง‘์–ด๋‚ด์„œ ๊ณต์œ ์ž์›์— ๋Œ€ํ•œ ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
		Process p = q.pop();
		wakeup(p);
	}
	else return;
}
  • 4) ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ธ๋งˆํฌ์–ด
    • 0, 1 ๊ฐ’๋งŒ์„ ๊ฐ€์ง€๋Š” ์„ธ๋งˆํฌ์–ด
    • ๊ตฌํ˜„์˜ ์œ ์‚ฌ์„ฑ์œผ๋กœ ์ธํ•ด ๋ฎคํ…์Šค์™€ ์œ ์‚ฌ
  • 5) ์นด์šดํŒ… ์„ธ๋งˆํฌ์–ด
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์„ธ๋งˆํฌ์–ด
  • ์—ฌ๋Ÿฌ ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ œ์–ดํ•˜๋Š”๋ฐ ์‚ฌ์šฉ

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ๋ฎคํ…์Šค์™€ ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ธ๋งˆํฌ์–ด ์ฐจ์ด

4. ๋ชจ๋‹ˆํ„ฐ (monitor)

  • 1) ๊ฐœ๋…
    • ๋‘˜ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์— ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผํ•˜๋„๋ก ๊ณต์œ  ์ž์›์„ ์ˆจ๊ธฐ๊ณ  ํ•ด๋‹น ์ ‘๊ทผ์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด
    • ๋ชจ๋‹ˆํ„ฐ ํ๋ฅผ ํ†ตํ•ด ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ๋ชจ๋‹ˆํ„ฐ์™€ ์„ธ๋งˆํฌ์–ด ์ฐจ์ด

  • โœ๏ธ ๋ชจ๋‹ˆํ„ฐ
    • ๊ตฌํ˜„ ์‰ฌ์›€
    • 1๋ฒˆ์— 1๊ฐœ ํ”„๋กœ์„ธ์Šค๋งŒ ๊ณต์œ ์ž์› ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ์ƒํ˜ธ๋ฐฐ์ œ ์ž๋™
    • ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•
  • โœ๏ธ ์„ธ๋งˆํฌ์–ด
    • ๊ตฌํ˜„ ์–ด๋ ค์›€
    • 1๋ฒˆ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ ์ž์› ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ์ƒํ˜ธ๋ฐฐ์ œ ๋ช…์‹œ์  ๊ตฌํ˜„ ํ•„์š”
    • ์ •์ˆ˜๋ณ€์ˆ˜ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•

๐Ÿ“• ๊ต์ฐฉ์ƒํƒœ

1. deadlock

  • 1) ๊ฐœ๋…

    • 2๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ์ค‘๋‹จ๋œ ์ƒํƒœ
    • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์„œ๋กœ๊ฐ€ ์›ํ•˜๋Š” ์œ ์ง€ํ•œ์ฑ„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ์–ป๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ
  • 2) ํ•„์š” ์กฐ๊ฑด

    • ์ƒํ˜ธ ๋ฐฐ์ œ (Mutual Exclusion)
      • ์ฃผ์–ด์ง„ ์‹œ๊ฐ„ ๋‚ด์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ๋…์ ํ•จ
      • ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ
    • ์ ์œ  ๋Œ€๊ธฐ (Hold and Wait)
      • ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์œ ํ•œ ์ž์›์„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”์ฒญํ•˜๋ฉฐ ๋Œ€๊ธฐํ•˜๋Š” ์ƒํƒœ
    • ๋น„์„ ์  (No Preemption)
      • ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ๊ฐ•์ œ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Œ
    • ํ™˜ํ˜• ๋Œ€๊ธฐ (Circular Wait)
      • ์„œ๋กœ๊ฐ€ ์„œ๋กœ์˜ ์ž์›์„ ์š”๊ตฌํ•˜๋Š” ์ƒํ™ฉ
  • 3) ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

    • ๊ต์ฐฉ์ƒํƒœ ์˜ˆ๋ฐฉ (prevention)
      • ์ž์›์„ ํ• ๋‹นํ•  ๋•Œ, ๊ต์ฐฉ์ƒํƒœ ์กฐ๊ฑด์ด ์„ฑ๋ฆฝ๋˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„
      • ๋ฐœ์ƒ์›์ธ 4๊ฐ€์ง€ ์ค‘ 1๊ฐœ๋ฅผ ๋ถ€์ •ํ•จ
      • ์‹ค์ œ ๊ตฌํ˜„์ด ๋‚œํ•ดํ•˜๊ฑฐ๋‚˜ ๋ถˆ๊ฐ€๋Šฅํ•จ
    • ๊ต์ฐฉ์ƒํƒœ ํšŒํ”ผ (avoidance)
      • ๊ต์ฐฉ์ƒํƒœ ๊ฐ€๋Šฅ์„ฑ์ด ์—†์„ ๋•Œ๋งŒ ์ž์› ํ• ๋‹น
      • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”์ฒญํ•œ ์ž์›์˜ ์ตœ๋Œ€์น˜๋ฅผ ํ†ตํ•ด์„œ ์ž์› ํ• ๋‹น๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํŒŒ์•…ํ•จ
      • ์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ๊ต์ฐฉ์ƒํƒœ ํƒ์ง€ (detection)
      • ํƒ์ง€์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๊ต์ฐฉ์ƒํƒœ์ธ์ง€ ํŒ๋ณ„
      • ํƒ์ง€์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์–ด์„œ, ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ต์ฐฉ์ƒํƒœ์— ์—ฐ๊ด€๋˜์–ด์žˆ๋Š” ์ง€์— ๋”ฐ๋ผ ํ˜ธ์ถœ ๋นˆ๋„ ์กฐ์ ˆ
    • ๊ต์ฐฉ์ƒํƒœ ๋ณต๊ตฌ (recovery)
      • ๊ต์ฐฉ์ƒํƒœ ๋ฐœ์ƒํ•˜๋ฉด ํšŒ๋ณต
      • ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—… ์ข…๋ฃŒ / ์‹œ์Šคํ…œ์— ์˜ํ•ด ์ฒ˜๋ฆฌ (ํ”„๋กœ์„ธ์Šค ์ค‘์ง€/์ž์› ์„ ์ )

2. ์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜ (banker's algorithm)

  • 1) ๊ฐœ๋…
    • ๊ต์ฐฉ์ƒํƒœ ํšŒํ”ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ์ด ์ž์›์˜ ์–‘๊ณผ ํ˜„์žฌ ํ• ๋‹นํ•œ ์ž์›์˜ ์–‘์„ ๊ธฐ์ค€์œผ๋กœ ์•ˆ์ •/๋ถˆ์•ˆ์ • ์ƒํƒœ๋กœ ๋‚˜๋ˆ”
    • ์•ˆ์ • ์ƒํƒœ๊ฐ€ ๋˜๋„๋ก ์ž์›์„ ํ•ญ๋‹นํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • n * m 2์ฐจ์› ๋ฐฐ์—ด 3๊ฐœ + n 1์ฐจ์› ๋ฐฐ์—ด 2๊ฐœ ์‚ฌ์šฉ
  • 2) ๋‹จ์ 
    • ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ์ž์›์˜ ์ˆ˜๊ฐ€ ์ผ์ •ํ•ด์•ผ ํ•จ
    • ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๊ฐ€ ์ผ์ •ํ•ด์•ผ ํ•จ
    • ํ•ญ์ƒ ์•ˆ์ „์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ž์› ์ด์šฉ๋ฅ  ๋‚ฎ์Œ
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ตœ๋Œ€ ์ž์› ์ˆ˜๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์›€
    • ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ˜๋“œ์‹œ ์œ ํ•œ ์‹œ๊ฐ„ ๋‚ด์— ์‚ฌ์šฉํ•œ ์ž์›์„ ๋ฐ˜๋‚ฉํ•ด์•ผ ํ•จ
    • ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ์ž์›์†Œ๋ชจ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜๋Š” ๊ณ ์ •๋˜์–ด ์žˆ์ง€ ์•Š๊ณ , ํ•ญ์ƒ ๋ณ€ํ•จ

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ์•ˆ์ • ์ƒํƒœ์™€ ๋ถˆ์•ˆ์ • ์ƒํƒœ

  • ์•ˆ์ • ์ƒํƒœ
    • ๊ต์ฐฉ์ƒํƒœ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š์€ ์ƒํƒœ
    • ํ”„๋กœ์„ธ์Šค์˜ ์ตœ๋Œ€์ž์› ์š”๊ตฌ๋Ÿ‰์„ ์šด์˜์ฒด์ œ๊ฐ€ ์ถฉ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ
  • ๋ถˆ์•ˆ์ • ์ƒํƒœ
    • ์•ˆ์ • ์ƒํƒœ๋กœ ๊ฐ€๋Š” ์ˆœ์„œ์—ด์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ
  • 3) ๊ตฌ์„ฑ
    • available[i]
      • ์šด์˜์ฒด์ œ๊ฐ€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ž์›์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ์–‘
      • i๋ฒˆ์งธ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ž์›์˜ ์–‘
    • max[i][j]
      • ํ”„๋กœ์„ธ์Šค ์ตœ๋Œ€ ์š”๊ตฌ๋Ÿ‰
      • ํ”„๋กœ์„ธ์Šค i๊ฐ€ ์ž์› j๋ฅผ ์ตœ๋Œ€ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” ์–‘
    • allocation[i][j]
      • ํ”„๋กœ์„ธ์Šค ์ž์›ํ• ๋‹น ์–‘
      • ํ”„๋กœ์„ธ์Šค i์— ์ž์› j๋ฅผ ํ• ๋‹นํ•œ ์–‘
    • need[i][j]
      • ํ”„๋กœ์„ธ์Šค์˜ ์ž์› ์ถ”๊ฐ€์š”๊ตฌ๋Ÿ‰
      • ํ”„๋กœ์„ธ์Šค i๊ฐ€ ์ž์› j๋ฅผ ์ถ”๊ฐ€์š”์ฒญํ•˜๋Š” ์–‘
    • finish[i]
      • i๋ฒˆ์งธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”์ฒญํ•˜๋Š” ์–‘์„ ์šด์˜์ฒด์ œ๊ฐ€ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•˜๋Š” boolean ๋ฐฐ์—ด
  • 4) ์ˆœ์„œ
    • 1๏ธโƒฃ : requesh[i] <= need[i]
      • ํ•ด๋‹น ์กฐ๊ฑด ๋ถˆ์ด์กฑ์‹œ ์˜ค๋ฅ˜
    • 2๏ธโƒฃ : requesh[i] <= available[i]
      • ํ•ด๋‹น ์กฐ๊ฑด ๋ถˆ์ถฉ์กฑ์‹œ ๋Œ€๊ธฐ
    • 3๏ธโƒฃ : request[i] += available[i], need[i] -= request[i]
    • 4๏ธโƒฃ : 1๏ธโƒฃ ~ 3๏ธโƒฃ ๊ณผ์ •์„ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ˜๋ณตํ•œ ๋’ค ๋ชจ๋“  finish[i]๊ฐ€ True๋ผ๋ฉด ์•ˆ์ • ์ƒํƒœ
  • 5) ์‹ค์Šต
    • ์•ˆ์ •์ƒํƒœ ๋˜๋Š” ์ˆœ์„œ : P1 โžก๏ธ P3 โžก๏ธ P4 โžก๏ธ P0 โžก๏ธ P2
    • P1 : 1, 2, 2์— ํ•ด๋‹นํ•˜๋Š” need[1]์— ๋Œ€ํ•œ ์ž์›์„ ํ• ๋‹นํ•˜๊ณ , finish[1] = True๋กœ ๋งŒ๋“ฆ
      • โž• 2 0 0
      • available : 5 3 2
    • P3 : 0, 1, 1์— ํ•ด๋‹นํ•˜๋Š” need[3]์— ๋Œ€ํ•œ ์ž์› ํ• ๋‹นํ•˜๊ณ , finish[3] = True๋กœ ๋งŒ๋“ฆ
      • โž• 2 1 1
      • available : 7 4 3
    • P4 : 4, 3, 1์— ํ•ด๋‹นํ•˜๋Š” need[4]์— ๋Œ€ํ•œ ์ž์› ํ• ๋‹นํ•˜๊ณ , finish[4] = True๋กœ ๋งŒ๋“ฆ
      • โž• 0 0 2
      • available : 7 4 5
    • P0 : 7, 4, 3์— ํ•ด๋‹นํ•˜๋Š” need[0]์— ๋Œ€ํ•œ ์ž์› ํ• ๋‹นํ•˜๊ณ , finish[0] = True๋กœ ๋งŒ๋“ฆ
      • โž• 0 1 0
      • available : 7 5 5
    • P2 : 6, 0, 0์— ํ•ด๋‹นํ•˜๋Š” need[2]์— ๋Œ€ํ•œ ์ž์› ํ• ๋‹นํ•˜๊ณ , finish[2] = True๋กœ ๋งŒ๋“ฆ
      • โž• 3 0 2
      • available : 10 5 7
let n, m, i, j, k;
n = 5; // ํ”„๋กœ์„ธ์Šค์˜ ๊ฐฏ์ˆ˜ 0 ~ 4
m = 3; // ์ž์›์˜ ๊ฐฏ์ˆ˜
//์ด๋ฏธ ํ• ๋‹นํ•œ ์–‘
let alloc = [ [ 0, 1, 0 ], // P0
[ 2, 0, 0 ], // P1
[ 3, 0, 2 ], // P2
[ 2, 1, 1 ], // P3
[ 0, 0, 2 ] ]; // P4
// ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ตœ๋Œ€์น˜๋กœ ์š”๊ตฌํ•˜๋Š” ์–‘
let max = [ [ 7, 5, 3 ], // P0
[ 3, 2, 2 ], // P1
[ 9, 0, 2 ], // P2
[ 2, 2, 2 ], // P3
[ 4, 3, 3 ] ]; // P4
// ์šด์˜์ฒด์ œ์˜ ๊ฐ€์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž์›์˜ ์–‘
let avail = [ 3, 3, 2 ], ans = []
let need = Array.from({ length: n }, (v, i) => Array.from({
length: m }, (v, j) => 0));
let finish = Array.from({ length: n }, (v, i) => 0);
for (i = 0; i < n; i++) {
	for (j = 0; j < m; j++){
		need[i][j] = max[i][j] - alloc[i][j]
	}
}
//ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ๋ฉด์„œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
for (let k = 0; k < n; k++) {
	for (let i = 0; i < n; i++) {
		if (finish[i] == 0) {
			let flag = 0;
			for (j = 0; j < m; j++) {
				if (need[i][j] > avail[j]){
					flag = 1;
					break;
				}
			}
			if (flag == 0) {
				ans.push(i)
				for (let y = 0; y < m; y++)
					avail[y] += alloc[i][y];
				finish[i] = 1;
			}
		}
	}
}
let safe_flag = 1
for(let i = 0; i < n; i++){
	if(finish[i] == 0) 
    	safe_flag = 0
}
if(safe_flag){
	console.log("์•ˆ์ •์ƒํƒœ ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ");
	for (let i = 0; i < n; i++){
		console.log("Process " + ans[i]);
	}
}else{
	console.log("๋ถˆ์•ˆ์ •์ƒํƒœ์ž…๋‹ˆ๋‹ค.");
}

๐Ÿ“• CPU ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜

1. ๋น„์„ ์ ํ˜• ๋ฐฉ์‹ (non-preemptive)

  • 1) ๊ฐœ๋…

    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์Šค์Šค๋กœ CPU๋ฅผ ํฌ๊ธฐํ•˜๋Š” ๋ฐฉ์‹, ๊ฐ•์ œ๋กœ ์ค‘์ง€X
    • ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์œผ๋กœ ์ธํ•œ ๋ถ€ํ•˜ ์ ์Œ
  • 2) FCFS (First Come First Served)

    • ๊ฐ€์žฅ ๋จผ์ € ์˜จ ๊ฒƒ์„ ๋จผ์ € ์ฒ˜๋ฆฌ
    • ๋‹จ์  : ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ธธ๋‹ค๋ฉด, ์ค€๋น„ ํ์—์„œ ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ˜„์ƒ(convoy effect) ๋ฐœ์ƒ
  • 3) SJF (Shortest Job First)

    • ์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์งง์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์‹คํ–‰
    • ์žฅ์  : ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์งง์Œ
    • ๋‹จ์  : ๊ธด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ(starvation) ๋ฐœ์ƒ
  • 4) ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ• (aging)

    • ์ž‘์—…์˜ ์‹œ๊ฐ„, ํ”„๋กœ์„ธ์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์š”๊ตฌ์‚ฌํ•ญ, ์—ด๋ฆฐ ํŒŒ์ผ ์ˆ˜, ํ‰๊ท  CPI ์‚ฌ์šฉ๋Ÿ‰ ๊ณ ๋ คํ•ด ์„ค์ •

2. ์„ ์ ํ˜• ๋ฐฉ์‹ (preemptive)

  • 1) ๊ฐœ๋…

    • ํ˜„๋Œ€ ์šด์˜์ฒด์ œ๊ฐ€ ์“ฐ๋Š” ๋ฐฉ์‹
    • ์ง€๊ธˆ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๋‹จ์‹œํ‚ค๊ณ , ๊ฐ•์ œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— CPU ์†Œ์œ ๊ถŒ ํ• ๋‹น
  • 2) RR (Round Robin)

    • ํ˜„๋Œ€ ์ปดํ“จํ„ฐ๊ฐ€ ์“ฐ๋Š” ์Šค์ผ€์ค„๋ง ๋ฐฉ๋ฒ• (๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—์„œ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์‚ฌ์šฉ)
    • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋™์ผํ•œ ํ• ๋‹น ์‹œ๊ฐ„์„ ์ฃผ๊ณ , ๊ทธ ์•ˆ์— ๋๋‚˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์‹œ ์ค€๋น„ ํ ๋’ค๋กœ ๊ฐ€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : q๋งŒํผ์˜ ํ• ๋‹น ์‹œ๊ฐ„์ด ๋ถ€์—ฌ๋˜๊ณ , N๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์šด์˜๋˜๋Š” ๊ฒฝ์šฐ
      • (N - 1) * q ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋‹ค์‹œ ํ• ๋‹น
      • ํ• ๋‹น ์‹œ๊ฐ„์ด ํด ๊ฒฝ์šฐ : FCFS
      • ํ• ๋‹น ์‹œ๊ฐ„์ด ์งง์„ ๊ฒฝ์šฐ : ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ์žฆ์•„์ ธ์„œ ์˜ค๋ฒ„ํ—ค๋“œ ๋น„์šฉ ์ปค์ง
    • ์ „์ฒด ์ž‘์—… ์‹œ๊ฐ„์€ ๊ธธ์–ด์ง€์ง€๋งŒ, ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„์ด ์งง์•„์ง
  • 3) SRF (Shortest Remaining Time First)

    • ์ค‘๊ฐ„์— ์งง์€ ์ž‘์—…์ด ๋“ค์–ด์˜ค๋ฉด, ์ˆ˜ํ–‰ํ•˜๋˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰
  • 4) ๋‹ค๋‹จ๊ณ„ ํ

    • ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ฅธ ์ค€๋น„ ํ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฌ์šฉ
      • ํ๋งˆ๋‹ค RR/FCFS ๋“ฑ ๋‹ค๋ฅธ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉ (๋น„์„ ์ ํ˜•์œผ๋กœ๋œ ๋‹ค๋‹จ๊ณ„ ํ๋„ ์กด์žฌ)
      • ํ ๊ฐ„์˜ ํ”„๋กœ์„ธ์Šค ์ด๋™์ด ์•ˆ๋จ โžก๏ธ ์Šค์ผ€์ค„๋ง ๋ถ€๋‹ดโฌ‡๏ธ, ์œ ์—ฐ์„ฑโฌ‡๏ธ
    • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ๋˜์–ด, ๋‚ฎ์€ ํ ํ”„๋กœ์„ธ์Šค ์ฒ˜๋ฆฌ ์•ˆ๋˜๋Š” ๊ธฐ์•„ํ˜„์ƒ(starvation) ๋ฐœ์ƒ

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– CPU ์„ ์ • ์กฐ๊ฑด

  • ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค ์„ ํƒ๋จ
  • ๋น„์„ ์ ํ˜•/์„ ์ ํ˜• ์„ ํƒ ์กฐ๊ฑด
    • 1๏ธโƒฃ : CPU ์‚ฌ์šฉ๋ฅ ์ด ๋†’์€์ง€
    • 2๏ธโƒฃ : ๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ์ž‘์—…์„ ๋งˆ์นœ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜(์ฒ˜๋ฆฌ๋Ÿ‰)์ด ๋†’์€์ง€
    • 3๏ธโƒฃ : ์ž‘์—…์„ ์š”์ฒญํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „ ๋Œ€๊ธฐ์‹œ๊ฐ„, ์‘๋‹ต์‹œ๊ฐ„์€ ์งง์€์ง€

๐Ÿ“• ์บ์‹œ

1. ์บ์‹œ

  • 1) ์บ์‹œ

    • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ณต์‚ฌํ•ด ๋†“๋Š” ์ž„์‹œ ์ €์žฅ์†Œ
    • ๋น ๋ฅธ ์žฅ์น˜์™€ ๋Š๋ฆฐ ์žฅ์น˜์˜ ์†๋„ ์ฐจ์ด์— ๋”ฐ๋ฅธ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์ค„์ด๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ
      โžก๏ธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์‹œ๊ฐ„์˜ ๋‹จ์ถ•, ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๋“ฑ ์‹œ๊ฐ„ ์ ˆ์•ฝ
    • ์„ฑ๋Šฅ ๊ฐœ์„ ์€ ์ฐธ์กฐ์˜ ์ง€์—ญ์„ฑ ์„ฑ์งˆ๋กœ ๋ฐœ์ƒ
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : CPU ๋ ˆ์ง€์Šคํ„ฐ
      • CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ์˜ ์‹œ๊ฐ„์ด ํผ
      • ์บ์‹œ(์ค‘๊ฐ„ ๋ ˆ์ง€์Šคํ„ฐ ๊ณ„์ธต)์œผ๋กœ ์†๋„์ฐจ์ด ํ•ด๊ฒฐ
  • 2) ์บ์‹œํžˆํŠธ / ์บ์‹œ๋ฏธ์Šค

    • ์บ์‹œํžˆํŠธ : ์บ์‹œ์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์€ ๊ฒƒ
    • ์บ์‹œ๋ฏธ์Šค : ์บ์‹œ์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒƒ (๋ฉ”๋ชจ๋ฆฌ๋กœ ๊ฐ€์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ ˆ์ง€์„œํŠธ์— ๋“ฑ๋ก)
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ์˜ redis๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์บ์‹œ๊ณ„์ธต์œผ๋กœ ๋‘” ์‚ฌ๋ก€
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ์›น์„œ๋ฒ„ ์•ž๋‹จ์— nginx ์„œ๋ฒ„๋ฅผ ์บ์‹œ๊ณ„์ธต์œผ๋กœ ๋‘” ์‚ฌ๋ก€
  • 3) ์ง€์—ญ์„ฑ์˜ ์›๋ฆฌ

    • ์บ์‹œ๋Š” ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ(์ง€์—ญ์„ฑ)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค์ •
    • ์‹œ๊ฐ„ ์ง€์—ญ์„ฑ (temporal locality)
      • ์ตœ๊ทผ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ์— ๋‹ค์‹œ ์ ‘๊ทผ
    let arr = Array.from({length : 10}, ()=> 0);
    
    		console.log(arr)
    		for (let i = 0; i < 10; i += 1) { // ์‹œ๊ฐ„ ์ง€์—ญ์„ฑ
    			arr[i] = i;                   // ๊ณต๊ฐ„ ์ง€์—ญ์„ฑ
    		}
      console.log(arr)
      
    		/*
    		[
    		0, 0, 0, 0, 0,
    		0, 0, 0, 0, 0
    		]
    		[
    		0, 1, 2, 3, 4,
    		5, 6, 7, 8, 9
    		]
      */
    • ๊ณต๊ฐ„ ์ง€์—ญ์„ฑ (spatial locality)
      • ์ตœ๊ทผ ์ ‘๊ทผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๊ณต๊ฐ„์ด๋‚˜ ๊ทธ ๊ฐ€๊นŒ์šด ๊ณต๊ฐ„์— ์ ‘๊ทผ
  • 4) ์‹ค์Šต

    • ๋ชจ๋“ˆ ์„ค์น˜
    npm install node-cache express
    • ์ฝ”๋“œ
    	const express = require('express');
    		const NodeCache = require('node-cache');
    		const app = express();
    		const cache = new NodeCache();
      
    		const obj = {
    			"userId": 1,
    			"id": 1,
    			"title": "kundol is god?",
    			"completed": false
    		}
    		app.get('/kundol', (req, res) => {
    			const value = cache.get('kundol');
    			if (value) {
    				console.log('์บ์‹œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์บ์‹œ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.')
    				return res.send(value);
    			} else {
    			//๊ฐ€์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋กœ์ง
    				console.log('์บ์‹œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์บ์‹œ๋ฅผ ์…‹ํŒ…ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ถ€ํ„ฐ ๊ฐ’์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ')
    				setTimeout(() => {
    					cache.set('kundol', obj);
    					return res.json(obj);
    				}, 2000);
    			}
    		});
      app.listen(3000, () => {
    			console.log('Cache server running on port 3000 ::
    			http://127.0.0.1:3000/kundol');
    		});

2. ์บ์‹œ๋งคํ•‘

  • 1) Mapping Function
    • CPU๊ฐ€ ์“ฐ๋Š” ์ฃผ์†Œ๋Š” ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ธ์‹X
    • ์ค‘๊ฐ„์— ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์žฅ์น˜(MMU)๊ฐ€ ๋ฒˆ์—ญ์„ ํ•˜์—ฌ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜
    • ์บ์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋ฌผ๋ฆฌ์ฃผ์†Œ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•ด์„ ๊ฐ€๋Šฅ

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ๋ธ”๋ก (block)

  • ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์บ์‹œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์ฐธ์กฐ์˜ ์ง€์—ญ์„ฑ์œผ๋กœ ์ธ์ ‘ํ•œ ๊ณณ๊นŒ์ง€ ํ•œ๊บผ๋ฒˆ์— ์บ์‹œ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ๋‹จ์œ„
    • ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ธ”๋ก์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ์บ์‹œ๋Š” ๋ผ์ธ์œผ๋กœ ๋‚˜๋ˆ”
    • ๋ธ”๋ก ํฌ๊ธฐ = ๋ผ์ธ ํฌ๊ธฐ
  • <P, D>๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌ
    • P(Block Number) : ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ (๋ณ€ํ™˜)
    • D(Block Offset) : ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋กœ๋ถ€ํ„ฐ ํ•ด๋‹น ์ฃผ์†Œ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ (๋ณ€ํ™˜X)
  • P๋ฅผ ์ง์ ‘๋งคํ•‘์—์„œ๋Š” {tag, bd}๋กœ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ ๊ตฌํ˜„
    • tag : ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ช‡๋ฒˆ์งธ ๋ธ”๋ก์ธ์ง€ ์ €์žฅ
    • bd(block distance) : <tag, bd, D>๋กœ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ bd๊ฐ€ ๊ฐ™์€ ๋ผ์ธ๋งŒ ๋งคํ•‘๋˜๋„๋ก ํ•จ
    • Block Offset : ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ธ”๋ก์˜ ์œ„์น˜
    • Line Number : ์บ์‹œ์— ๋“ค์–ด๊ฐˆ ๋ผ์ธ ๋ฒˆํ˜ธ
    • Tag : ํ•œ ๋ธ”๋ก ์•ˆ์—์„œ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ๋ถ„
  • 2) ์ง์ ‘ ๋งคํ•‘ (direct mapping)
    • ์ง์ ‘ ๋ธ”๋ก๋ณ„ ๋งคํ•‘
    • ์บ์‹œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋“ค์€ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋™์ผํ•œ ๋ฐฐ์—ด์„ ๊ฐ€์ง€๋„๋ก ๋งคํ•‘
      • ์žฅ์  : ๋‹จ์ˆœํ•˜๊ณ , ํƒ์ƒ‰ ์‰ฌ์›€
      • ๋‹จ์  : ์ ์ค‘๋ฅ (Hit ratio)๊ฐ€ ๋‚ฎ์Œ
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ A๊ฐœ์˜ ํŽ˜์ด์ง€, ์บ์‹œ๊ฐ€ B๊ฐœ์˜ ํŽ˜์ด์ง€๋กœ ๊ตฌ์„ฑ๋  ๊ฒฝ์šฐ
      • ๋ธ”๋ก์˜ ์ˆ˜ = A(๋ฉ”๋ชจ๋ฆฌ์˜ ํŽ˜์ด์ง€ ์ˆ˜) / B(์บ์‹œ์˜ ํŽ˜์ด์ง€ ์ˆ˜)

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– CPU๊ฐ€ ๋ฐ์ดํ„ฐ ๋ฐ›์•„์˜ค๋Š” ๊ณผ์ •

  • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ์ฃผ์†Œ 010100000์˜ ๋ฐ์ดํ„ฐ a ์ฐธ์กฐ
    • 1๏ธโƒฃ : CPU๊ฐ€ ์ฃผ์†Œ 010100000 ์ƒ์„ฑํ•˜์—ฌ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ ์š”์ฒญ
    • 2๏ธโƒฃ : ์บ์‹œ๋Š” ์ฃผ์†Œ๋ฅผ CPU ํƒœ๊ทธ(01), ์ธ๋ฑ์Šค(010), ๋ธ”๋ก ์˜คํ”„์…‹(0000)์œผ๋กœ ๋ถ„ํ• 
    • 3๏ธโƒฃ : ์ธ๋ฑ์Šค ํ•„๋“œ(010)๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์บ์‹œ์˜ ํƒœ๊ทธ๋ฅผ ์ถ”์ถœ
    • 4๏ธโƒฃ : CPU ํƒœ๊ทธ์™€ ์บ์‹œ ํƒœ๊ทธ๋ฅผ ๋น„๊ต
    • 5๏ธโƒฃ : ์œ ํ˜ธ ๋น„ํŠธ๊ฐ€ 0์ด๋ฏ€๋กœ ์บ์‹œ ์‹คํŒจ ๋ฐœ์ƒ (CPU์— ์•Œ๋ฆผ)
    • 6๏ธโƒฃ : CPU๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋™์ผํ•œ ์ฃผ์†Œ๋ฅผ ๋ณด๋‚ด์–ด ๋ฐ์ดํ„ฐ ์š”์ฒญ
    • 7๏ธโƒฃ : ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ a๊ฐ€ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก(์ฃผ์†Œ : 01010)๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ „์†ก
    • 8๏ธโƒฃ : ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์„ ์ธ๋ฑ์Šค ํ•„๋“œ(010)๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์บ์‹œ ๋ธ”๋ก์œผ๋กœ ์‚ฌ์ƒํ•˜๊ณ  ์บ์‹œ ํƒœ๊ทธ๋ฅผ 01๋กœ ๊ฐฑ์‹ , ์œ ํšจ ๋น„ํŠธ๋ฅผ 1๋กœ ์„ค์ •
    • 9๏ธโƒฃ : ๋ธ”๋ก ์˜คํ”„์…‹(0000)์„ ์‚ฌ์šฉํ•˜์—ฌ ์บ์‹œ ๋ธ”๋ก์—์„œ ๋ฐ์ดํ„ฐ a๋ฅผ ์ถ”์ถœํ•˜๊ณ  CPU์— ์ „์†ก
  • 3) ์—ฐ๊ด€ ๋งคํ•‘ (associative mapping)

    • ์ง์ ‘ ๋งคํ•‘ ๋‹จ์  ๋ณด์™„
    • ์บ์‹œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋“ค์€ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ ์ˆœ์„œ์™€ ๊ด€๋ จ ์—†์Œ
      • ์žฅ์  : ์Šค์™€ํ•‘ ๋ฐœ์ƒโฌ‡๏ธ, ์ ์ค‘๋ฅ  ๋†’์Œ
      • ๋‹จ์  : ์บ์‹œ์˜ ๋ชจ๋“  ๋ธ”๋ก์„ ํƒ์ƒ‰ํ•ด์•ผ ํ•ด์„œ ์†๋„ ๋Š๋ฆผ
  • 4) ์ง‘ํ•ฉ-์—ฐ๊ด€ ๋งคํ•‘ (set associate mapping)

    • ์ง์ ‘๋งคํ•‘ + ์—ฐ๊ด€๋งคํ•‘
    • ์ง์ ‘๋งคํ•‘์ฒ˜๋Ÿผ ํŠน์ • ์บ์‹œ ์˜์—ญ์— ์ •ํ•ด์ง„ ์ธ๋ฑ์Šค๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ง‘ํ•ฉ์œผ๋กœ ์ด๋ค„์ ธ์„œ ๊ทธ ์ง‘ํ•ฉ ๋‚ด์— ์•„๋ฌด ์ž๋ฆฌ๋งŒ ๋“ค์–ด๊ฐ€๋ฉด ๋˜๋Š” ๋ฐฉ์‹
      • ์žฅ์  : ์ ์ค‘๋ฅ  ๋†’๊ณ , ์ €๋ ด, ์†๋„ ๋น ๋ฆ„
      • ๋ชจ๋“  ๋ธ”๋Ÿญ์„ ์ฐพ์„ ํ•„์š” ์—†์ด ํŠน์ • ๋ธ”๋Ÿญ์„ ์ฐพ์•„ ํƒ์ƒ‰ ๋น„์šฉ์„ ๋‚ฎ์ถค
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : ์บ์‹œ์—์„œ bd=0์ธ ์ง‘ํ•ฉ์„ 2๊ฐœ๋กœ ๋‚˜๋ˆ„๊ณ , bd๊ฐ€ ๊ฐ™์€ ๊ฒƒ๋งŒ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ
      • bd๊ฐ€ ๋งŽ์ง€๋งŒ, bd=0, bd=1 ๋ฐ–์— ์—†๋„๋ก ํ•˜๊ณ  ์ง‘ํ•ฉ์„ 2๊ฐœ๋กœ ๋‚˜๋ˆ”
      • bd=0์ด 2๊ฐœ ๋“ค์–ด๊ฐ€๋„๋ก, bd=1์ด 2๊ฐœ ๋“ค์–ด๊ฐ€๋„๋ก ๋‚˜๋ˆ”

๐Ÿ“• ๋ฉ”๋ชจ๋ฆฌํ• ๋‹น

1. ์—ฐ์†ํ• ๋‹น

  • 1) ์—ฐ์†ํ• ๋‹น (contiguous memory allocation)

    • ํ•„์š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ๋•Œ ์‹œ์ž‘ ๋ฉ”๋ชจ๋ฆฌ์˜ ์œ„์น˜, ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ํฌ๊ธฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ• ๋‹น
    • ๋ฉ”๋ชจ๋ฆฌ์— ์—ฐ์†์ ์œผ๋กœ ๊ณต๊ฐ„ ํ• ๋‹น
    • ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๊ฐ™์€ ์œ„์น˜์— ์žˆ์Œ (๋ฉ”๋ชจ๋ฆฌ ํŒŒํ‹ฐ์…˜์ด ๋ถ„์‚ฐ ๋˜์–ด์žˆ์ง€X)
  • 2) ๊ณ ์ •๋ถ„ํ•  ๋ฐฉ์‹ (fixed partition allocation)

    • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ™์€ ํฌ๊ธฐ๋กœ ๋ถ„ํ• ํ•ด์„œ ํ• ๋‹น
    • ๋‚ด๋ถ€๋‹จํŽธํ™” ๋ฐœ์ƒ
  • 3) ๊ฐ€๋ณ€๋ถ„ํ•  ๋ฐฉ์‹ (variable partition allocation)

    • ํ”„๋กœ๊ทธ๋žจ์— ํ•„์š”ํ•œ ๋งŒํผ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ์™ธ๋ถ€๋‹จํŽธํ™” ๋ฐœ์ƒ
    • ์ ํ•ฉ ๋ฐฉ์‹
      • ์ตœ์ดˆ ์ ํ•ฉ (first fit) : ํ• ๋‹น ๊ฐ€๋Šฅํ•œ ๋นˆ ๊ณต๊ฐ„ ์ฐพ์œผ๋ฉด ๋ฐ”๋กœ ํ• ๋‹น
      • ์ตœ์  ์ ํ•ฉ (best fit) : ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ณด๋‹ค ํฐ ๊ณต๊ฐ„ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ณต๊ฐ„๋ถ€ํ„ฐ ํ• ๋‹น
      • ์ตœ์•… ์ ํ•ฉ (worst fit) : ํ”„๋กœ์„ธ์Šค ํฌ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์ฐจ์ด๋‚˜๋Š” ๊ณต๊ฐ„์— ํ• ๋‹น

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ๋‹จํŽธํ™”

  • โœ๏ธ ๋‚ด๋ถ€๋‹จํŽธํ™”
    • ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”ํ•œ ๊ณต๊ฐ„๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋œ ๊ฒฝ์šฐ
    • ๋‚˜์ค‘์— ํ”„๋กœ๊ทธ๋žจ์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜์ง€ ๋ชปํ•œ ํ˜„์ƒ ๋ฐœ์ƒ
  • โœ๏ธ ์™ธ๋ถ€ ๋‹จํŽธํ™”
    • ๋™์ ์œผ๋กœ ํ• ๋‹นํ•œ ์™ธ๋ถ€์— ์ž‘์€ ์กฐ๊ฐ๋“ค์ด ์ƒ๊น€
    • ํฐ ํ”„๋กœ๊ทธ๋žจ์ด ๋“ค์–ด์™”์„ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ชปํ•˜๋Š” ํ˜„์ƒ ๋ฐœ์ƒ

2. ๋ถˆ์—ฐ์†ํ• ๋‹น

  • 1) ๋ถˆ์—ฐ์†ํ• ๋‹น (non-contiguous memory allocation)

    • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ํ• ๋‹นํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•
    • ํ˜„๋Œ€ ์šด์˜์ฒด์ œ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ํ”„๋กœ๊ทธ๋žจ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ชผ๊ฐœ์–ด ์„œ๋กœ ๋‹ค๋ฅธ ์œ„์น˜์— ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ํ• ๋‹น
  • 2) ํŽ˜์ด์ง• (memory paging)

    • ๋™์ผํ•œ ํฌ๊ธฐ(๋ณดํ†ต 4KB)์˜ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ  ๋ฉ”๋ชจ๋ฆฌ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์œ„์น˜์— ํ”„๋กœ์„ธ์Šค ํ• ๋‹น
    • ์ฃผ์†Œ ๋ณ€ํ™˜์„ ํŽ˜์ด์ง€๋ณ„๋กœ ํ•ด์„œ ์ฃผ์†Œ ๋ณ€ํ™˜์ด ๋ณต์žกํ•จ
    • ์™ธ๋ถ€๋‹จํŽธํ™” ํ•ด๊ฒฐ, ๋‚ด๋ถ€๋‹จํŽธํ™” ๋ฐœ์ƒ
  • 3) ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ (memory segmentation)

    • ์„ธ๊ทธ๋จผํŠธ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹
    • ๊ณต์œ ์™€ ๋ณด์•ˆ ์ข‹์Œ
    • ๋‚ด๋ถ€๋‹จํŽธํ™” ํ•ด๊ฒฐ, ์™ธ๋ถ€๋‹จํŽธํ™” ๋ฐœ์ƒ
  • 4) ํŽ˜์ด์ง€๋“œ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ (paged segmentation)

    • ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ํ•ด๋‹น ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์„ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ํŽ˜์ด์ง€๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– convoy effect์™€ stavation ์ฐจ์ด

  • โœ๏ธ convoy effect
    • ๋ช‡๋ช‡ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๋กœ ์ธํ•ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰์ด ๋Š๋ ค์ง€๊ณ , ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง (์„ฑ๋Šฅ ์ €ํ•˜)
    • FCFS(First Come First Server) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ
    • ๐Ÿ—’๏ธ ์˜ˆ์‹œ : P1:100ms, P2:5ms, P3:5ms์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ
      • P1 โžก๏ธ P2 โžก๏ธ P3, ํ‰๊ท ๋Œ€๊ธฐ์‹œ๊ฐ„ = (0 + 100 + 105)/3 = 68ms
      • P2 โžก๏ธ P3 โžก๏ธ P1, ํ‰๊ท ๋Œ€๊ธฐ์‹œ๊ฐ„ = (0 + 5 + 10)/3 = 5ms
  • โœ๏ธ stavation
    • ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฌด๊ธฐํ•œ์œผ๋กœ ๋Œ€๊ธฐํ•˜๋ฉฐ CPU ์†Œ์œ ๊ถŒ์„ ์–ป์„ ์ˆ˜ ์—†์Œ
    • SJF ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ
      • ์›์ธ : ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ฐ€๋ ค์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์ด ์•ˆ๋จ
      • ํ•ด๊ฒฐ : aging์„ ํ†ตํ•ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์ž„

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– busy wait

  • ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ๊ฐ€ ์–ด๋– ํ•œ ์ผ์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๋งŒ์กฑํ•˜๋Š” ์กฐ๊ฑด์„ ์ง€์†์ ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๋™๊ธฐํ™” ๊ธฐ์ˆ 
  • ์šด์˜์ฒด์ œ์—์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ ์ž์›์— ๋™์‹œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์ƒํ˜ธ๋ฐฐ์ œ ๋‹ฌ์„ฑ์— ์‚ฌ์šฉ
  • ๋‹จ์ 
    • ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์ž‘์—…์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†์–ด์„œ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ž‘์—… ์™„๋ฃŒ์‹œ ๋น„ํšจ์œจ์ 
    • ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆด ๊ฒฝ์šฐ ๊ณ„์† ๊ธฐ๋‹ค๋ฆฌ๋Š”๋ฐ CPU ์ž์›์„ ์‚ฌ์šฉ (์ž์› ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•จ)

๐Ÿ“– ์ฐธ๊ณ  ๐Ÿ“– ํŽŒ์›จ์–ด์™€ ์šด์˜์ฒด์ œ ์ฐจ์ด

  • 1๏ธโƒฃ : ๋ฉ”๋ชจ๋ฆฌ
    • ํŽŒ์›จ์–ด : ROM(๋น„ํœ˜๋ฐœ์„ฑ ๋ฉ”๋ชจ๋ฆฌ) 1๊ฐœ๋ฅผ ์”€
    • ์šด์˜์ฒด์ œ : ํœ˜๋ฐœ์„ฑ, ๋น„ํœ˜๋ฐœ์„ฑ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ„์ธตํ™”ํ•˜์—ฌ ์‚ฌ์šฉ
  • 2๏ธโƒฃ : ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜/์—…๋ฐ์ดํŠธ
    • ํŽŒ์›จ์–ด : ์ž์œ ๋กญ๊ฒŒ ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜ํ•  ์ˆ˜ ์—†๊ณ , ๋ฏธ๋ฆฌ ์„ค์น˜ํ•ด๋†“์€ ํ”„๋กœ๊ทธ๋žจ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์—…๋ฐ์ดํŠธ (ROM์— ํ•ด๋‹น ์†Œํ”„ํŠธ์›จ์–ด ์ˆ˜์ •ํ•˜๋ฉฐ ์—…๋ฐ์ดํŠธ)
    • ์šด์˜์ฒด์ œ : ์šด์˜์ฒด์ œ ์œ„์— ํ”„๋กœ๊ทธ๋žจ์„ ์ž์œ ๋กญ๊ฒŒ ์„ค์น˜, ์ •๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ
  • 3๏ธโƒฃ : ์‚ฌ์šฉ ์˜ˆ์‹œ
    • ํŽŒ์›จ์–ด : ํ‚ค๋ณด๋“œ, ์„ธํƒ๊ธฐ ๋“ฑ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด
    • ์šด์˜์ฒด์ œ : MacOS, WindowOS
profile
Notion์œผ๋กœ ์ด๋™ (https://24tngus.notion.site/3a6883f0f47041fe8045ef330a147da3?v=973a0b5ec78a4462bac8010e3b4cd5c0&pvs=4)

0๊ฐœ์˜ ๋Œ“๊ธ€