๐ ์ด์์ฒด์
๐ ์ด์์ฒด์ ์ ์ปดํจํฐ์์คํ
์ ๊ตฌ์กฐ
1. ์ด์์ฒด์ ์ ์ข
๋ฅ
2. ์ด์์ฒด์ ์ ์ญํ
- 1) ํน์ง
- ์ด์์ฒด์ ์ ์ปค๋์ด ๋ด๋น
- ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ํ๋์จ์ด๊ฐ ์ฐ๊ฒฐ
- 2) ์ข
๋ฅ
- CPU ์ค์ผ์ค๋ง๊ณผ ํ๋ก์ธ์ค ์ํ๊ด๋ฆฌ
- CPU ์์ ๊ถ์ ์ด๋ค ํ๋ก์ธ์ค์ ํ ๋นํ ์ง
- ํ๋ก์ธ์ค ์์ฑ๊ณผ ์ญ์
- ์์ ํ ๋น ๋ฐ ๋ฐํ ๊ด๋ฆฌ
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
- ํ์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๋ค ํ๋ก์ธ์ค์ ์ผ๋งํผ ํ ๋นํ ์ง
- ๋์คํฌ ํ์ผ ๊ด๋ฆฌ
- ๋์คํฌ ํ์ผ์ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ๋ณด๊ดํ๋์ง
- I/O ๋๋ฐ์ด์ค ๊ด๋ฆฌ
- ๋ง์ฐ์ค, ํค๋ณด๋์ ์ปดํจํฐ ๊ฐ์ ๋ฐ์ดํฐ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ ๊ด๋ฆฌ
3. ์ด์์ฒด์ ์ ๊ตฌ์กฐ
- ์ธํฐํ์ด์ค (CLI/GUI)
- Linux์ ๊ฒฝ์ฐ CUI๋ง ์กด์ฌ
- ์์คํ
์ฝ
- ์ปค๋ (I/O ๋๋ผ์ด๋ฒ, ํ์ผ์์คํ
)
- ๋๋ผ์ด๋ฒ
- ํ๋์จ์ด๋ฅผ ์ ์ดํ๊ธฐ ์ํ ์ํํธ์จ์ด
4. ์ปดํจํฐ ์์คํ
์ ๊ตฌ์กฐ
๐ ์ธํฐ๋ฝํธ
1. ์ธํฐ๋ฝํธ ๊ฐ๋
2. ์ธํฐ๋ฝํธ ์ข
๋ฅ
-
1) ํ๋์จ์ด ์ธํฐ๋ฝํธ
- I/O ๋๋ฐ์ด์ค ๋ฑ ํ๋์จ์ด์์ ๋ฐ์ (ํค๋ณด๋, ๋ง์ฐ์ค ์ฐ๊ฒฐ)
- ์ธํฐ๋ฝํธ ๋ผ์ธ์ด ์ค๊ณ๋ ์ดํ ์์ฐจ์ ์ธ ์ธํฐ๋ฝํธ ์คํ์ ์ค์ง โก๏ธ ์ด์์ฒด์ ์ ์์คํ
์ฝ ์์ฒญ โก๏ธ ๋๋ฐ์ด์ค์ ์๋ ์์จ ๋ก์ปฌ ๋ฒํผ์ ์ ๊ทผํ์ฌ ์ํ
- ๐๏ธ ์์
- ์
์ถ๋ ฅ ์ธํฐ๋ฝํธ : ์
์ถ๋ ฅ ์์
์ข
๋ฃ/์ค๋ฅ์ ์ํด CPU ๊ธฐ๋ฅ ์์ฒญ
- ์ ์ , ์ ์ ์ด์ ์ธํฐ๋ฝํธ : ์ ์ ๊ณต๊ธ์ ์ด์
- ๊ธฐ๊ณ ์ฐฉ์ค ์ธํฐ๋ฝํธ : CPU์ ๊ธฐ๋ฅ์ ์ค๋ฅ
- ์ธ๋ถ ์ ํธ ์ธํฐ๋ฝํธ : I/O ์ฅ์น๊ฐ ์๋ ์คํผ๋ ์ดํฐ๋ ํ์ด๋จธ์ ์ํด ์๋์ ์ผ๋ก ํ๋ก๊ทธ๋จ ์ค๋จ
-
2) ์ํํธ์จ์ด ์ธํฐ๋ฝํธ
- ํธ๋ฉ(trap)
- ํ๋ก์ธ์ค ์ค๋ฅ/์ข
๋ฅ/์์ ๋ฑ์ผ๋ก ํ๋ก์ธ์ค๊ฐ ์์คํ
์ฝ ํธ์ถ์ ๋ฐ์
- ํ๋์จ์ด ์ธํฐ๋ฝํธ๋ณด๋ค ์ฐ์ ์์ ๋์
- ๐๏ธ ์์
- ํ๋ก๊ทธ๋จ ์ธํฐ๋ฝํธ : 0์ผ๋ก ์ซ์๋ฅผ ๋๋๋ ์ฐ์ฐ์ค๋ฅ
- SVC(SuperVisor Call)
-
3) ์ธํฐ๋ฝํธ ์ฐ์ ์์
3. ์ค์ต
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');
});
{
"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์ ์๋์ง ํ์ธํ๊ณ ์์ผ๋ฉด ํ์ด์งํ
์ด๋ธ๋ก ๊ฐ์ ์ค์ ์ฃผ์ ๊ฐ์ ธ์ด โก๏ธ ์๋ ํฅ์
๐ ์ฐธ๊ณ ๐ ๋ฉ๋ชจ๋ฆฌ ๋จ์
- ํ์ด์ง : ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ต์ ํฌ๊ธฐ ๋จ์
- ํ๋ ์ : ์ค์ ๋์คํฌ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ต์ ํฌ๊ธฐ ๋จ์
3. ํ์ด์งํดํธ์ ์ค์ํ
4. ์ค๋ ์ฑ
๐ ํ์ด์ง๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ
1. LFD (Longest Forward Distance)
2. FIFO (First In First Out)
3. LRU (Least Recently Used)
- 1) ๊ฐ๋
- ๊ฐ์ฅ ์ค๋ ์ฌ์ฉํ์ง ์์ ํ์ด์ง ๊ต์ฒด
- ์๊ฐ ์ง์ญ์ฑ ์ฑ์ง ๊ณ ๋ ค (์ต๊ทผ์ ์ฐธ์กฐ๋ ํ์ด์ง๊ฐ ๊ฐ๊น์ด ๋ฏธ๋์ ๋ค์ ์ฐธ์กฐ๋ ๊ฐ๋ฅ์ฑ ๋์)
- 2) ํน์ง
- ์ฑ๋ฅ ์ข์
- ์ต์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น์ทํ ํจ๊ณผ
- ๊ฐ ํ์ด์ง๋ง๋ค ์ต๊ทผ ์ฌ์ฉํ ์๊ฐ ์ ์ฅํ๋ ๊ตฌ์กฐ ํ์ (๊ณ์๊ธฐ, ์คํ)
- ํ๋ก์ธ์ค๊ฐ ์ฃผ๊ธฐ์ต์ฅ์น์ ์ ๊ทผํ ๋๋ง๋ค ์ฐธ์กฐ๋ ํ์ด์ง ์๊ฐ์ ๊ธฐ๋กํด์ผํจ โก๏ธ ๋ง๋ํ ์ค๋ฒํค๋
- ๐๏ธ ์์ : ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉํ์ง ์์ 1 ๊ต์ฒด
4. NUR (Not Used Recently)
5. LFU (Least Frequently Used)
๐ ์ฐธ๊ณ ๐ LFD ์๊ณ ๋ฆฌ์ฆ (Longest Forward Distance)
- ์คํ๋ผ์ธ ์๊ณ ๋ฆฌ์ฆ, ์ต์ ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ
- ๐๏ธ ์์ : ์์ฒญ i + 1์ด ํ์ด์ง ํดํธ๊ฐ ์ผ์ด๋์ง ์์ ๊ฒฝ์ฐ
- ๐๏ธ ์์ : ์์ฒญ i + 1์ด ํ์ด์ง ํดํธ๊ฐ ์ผ์ด๋ ๊ฒฝ์ฐ
- '์๋ก ๋ค๋ฅธ ํ์ด์ง'๋ฅผ ์ค์ํ๋ค๊ณ ๊ฐ์
- ํ์ด์ง p๋ฅผ ์ ๊ฑฐํ๊ณ ํ์ํ ํ์ด์ง๋ฅผ ๊ฐ์ ธ์ด
- p๋ฅผ ์ ๊ฑฐํ๊ณ p'์ ์ค์ํ์ j - 1 ์ ์ ํ ์ํ๋ผ๋ฉด, p๊ฐ ์์ ๋ 1๋ฒ ์ค์ํ
- p๋ฅผ ์ ๊ฑฐํ๊ณ ๋ค๋ฅธ ํ์ด์ง์ ์ค์ํ ํด์ p'์ผ ๋, p์ผ ๋ 2๋ฒ ์ค์ํ
๐ ํ๋ก์ธ์ค์ ์ค๋ ๋
1. process
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. ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
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;
int main(){
static int d;
static int e = 0;
return 0;
}
- 3) Data segment
- ์ ์ญ๋ณ์, static, const๋ก ์ ์ธ๋ ๋ณ์ ์ค 0์ด ์๋ ๊ฐ์ผ๋ก ์ด๊ธฐํ๋ ๋ณ์๋ค์ด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ๋น
#include<bits/stdc++.h>
using namespace std;
int a = 1;
const int b = 2;
int main(){
static int c = 3;
return 0;
}
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. ํ์ดํ
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) ์ค์ต
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)
{"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;
};
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;
m = 3;
let alloc = [ [ 0, 1, 0 ],
[ 2, 0, 0 ],
[ 3, 0, 2 ],
[ 2, 1, 1 ],
[ 0, 0, 2 ] ];
let max = [ [ 7, 5, 3 ],
[ 3, 2, 2 ],
[ 9, 0, 2 ],
[ 2, 2, 2 ],
[ 4, 3, 3 ] ];
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)
๐ ์ฐธ๊ณ ๐ 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)
- ๊ณต๊ฐ ์ง์ญ์ฑ (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์ ์ ์ก
๐ ๋ฉ๋ชจ๋ฆฌํ ๋น
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