CS โ context switching followup
๐ 05/13 โ Context Switching ๋ชจ์๋ฉด์ ๊ผฌ๋ฆฌ์ง๋ฌธ ์ ๋ฆฌ
21_context_switching.md๋ชจ์๋ฉด์ ์งํ ๋์จ ํ์ ์ง๋ฌธ 5๊ฐ๋ฅผ 1:1๋ก ์ ๋ฆฌํ ๋ ธํธ. ๋ณธ๋ฌธ์ 21๋ฒ ์๋ณธ์ ํด๋น ์น์ ์ ๊ฐ๋ฆฌํค๊ณ , ์ฌ๊ธฐ์๋ ๋ต๋ณ๋ง ์งง๊ฒ ๊ฒฐ๋ก โ ๊ทผ๊ฑฐ โ ์ฝ๋/์ ์์ผ๋ก ์์ถํ๋ค.
๋ชฉ์ฐจ
- interrupt๊ฐ ๋ญ๊น
- PCB์ ์ญํ
- ๋ ์ง์คํฐ๋ ๋ฉ๋ชจ๋ฆฌ์ผ๊น์?
- ์ปจํ ์คํธ ์ค์์นญ ๊ณผ์ ์ค ์บ์ ํํธ์จ ๋๋ฌธ์ ํ๋ก์ธ์ค๋ณด๋ค ์ค๋ ๋๊ฐ ๋น ๋ฅด๋ค
- RAM๊ณผ ๋ ์ง์คํฐ ์ฌ์ด์ ์ ์ฅ๊ณต๊ฐ
1. interrupt๊ฐ ๋ญ๊น
ํ ์ค ๊ฒฐ๋ก โ Interrupt(์ธํฐ๋ฝํธ)๋ CPU์ ํ์ฌ ์คํ ํ๋ฆ์ ๊ฐ์ ๋ก ์ค๋จ์ํค๊ณ , IDT(Interrupt Descriptor Table)์ ๋ฑ๋ก๋ ํธ๋ค๋ฌ๋ก ์ ํ์ํค๋ ํ๋์จ์ด ๋ฉ์ปค๋์ฆ์ด๋ค. ์ปจํ ์คํธ ์ค์์นญ์ ์ฃผ์ ๋ฐํ์ (ํ์ด๋จธ ์ธํฐ๋ฝํธ)์ด์, ๋ชจ๋ ์ค์์น์ ๋ณธ์ฒด ํธ๋ฆฌ๊ฑฐ์ด๊ธฐ๋ ํ๋ค.
1-1. ํ๋ฆ
1
2
3
4
5
6
7
8
9
10
11
[CPU๊ฐ ๋ช
๋ น N ์คํ ์ค]
โ
[์ธํฐ๋ฝํธ ์ ํธ ๋์ฐฉ โ ํ์ด๋จธยทํค๋ณด๋ยทNIC ๋ฑ]
โ
[CPU๊ฐ ํ์ฌ PCยทํ๋๊ทธ๋ฅผ ์๋ ์ ์ฅ โ ์ปค๋ ์คํ์ผ๋ก]
โ
[IDT[์ธํฐ๋ฝํธ ๋ฒํธ] โ ํธ๋ค๋ฌ ์ฃผ์ ์ ํ]
โ
[ํธ๋ค๋ฌ ์คํ (์ปค๋ ๋ชจ๋)]
โ
[iret ๋ช
๋ น โ ์๋ PC ๋ณต์ โ ์ฌ์ฉ์ ๋ชจ๋ ๋ณต๊ท]
1-2. ์ธ ์ข ๋ฅ
| ์ข ๋ฅ | ๋ฐ์ ์์ฒ | ์ |
|---|---|---|
| ํ๋์จ์ด ์ธํฐ๋ฝํธ (IRQ) | ์ธ๋ถ ์ฅ์น ์ ํธ | ํ์ด๋จธ(์ค์ผ์ค๋ฌ ๋ฐํ์ ), ํค๋ณด๋ ์ ๋ ฅ, NIC ํจํท ์์ , ๋์คํฌ I/O ์๋ฃ |
| ์ํํธ์จ์ด ์ธํฐ๋ฝํธ / Trap | ๋ช
์์ ๋ช
๋ น์ด (int 0x80ยทsyscallยทsysenter) | ์์คํ ์ฝ ํธ์ถ โ ์ฌ์ฉ์ ์ฝ๋๊ฐ ์๋์ ์ผ๋ก ์ปค๋ ์ง์ |
| ์์ธ (Exception) | CPU ๋ด๋ถ ์ค๋ฅ | Page Fault, Divide-by-Zero, Invalid Opcode, General Protection Fault |
1-3. ์ปจํ ์คํธ ์ค์์นญ๊ณผ์ ๊ด๊ณ
- ํ์ด๋จธ ์ธํฐ๋ฝํธ ๊ฐ ๋ง๋ฃ๋๋ฉด โ ์ปค๋ ์ง์ โ ์ค์ผ์ค๋ฌ ์คํ โ ๋ค๋ฅธ ์ค๋ ๋๋ก ๊ฐ์๋ผ์ฐ๋ฉด ์ปจํ ์คํธ ์ค์์น ๋ฐ์.
- ๋ชจ๋ ๋ชจ๋ ์ค์์น๊ฐ ์ปจํ ์คํธ ์ค์์น๋ฅผ ์ผ์ผํค๋ ๊ฑด ์๋ โ ์์คํ ์ฝ์ด ์ฆ์ ๋๋๋ฉด ๊ฐ์ ์ค๋ ๋๊ฐ ์ฌ์ฉ์ ๋ชจ๋๋ก ๋ณต๊ทํ ๋ฟ ์ค์์นญ์ ์์.
- ์ธํฐ๋ฝํธ โ ์ปจํ ์คํธ ์ค์์น โ ์ธํฐ๋ฝํธ๋ ํธ๋ฆฌ๊ฑฐ, ์ปจํ ์คํธ ์ค์์น๋ ๊ฒฐ๊ณผ ์ค ํ๋.
21๋ฒ ๋ณธ๋ฌธ ยงโ์ปจํ ์คํธ ์ค์์นญ์ด ์ผ์ด๋๋ ๊ฒฝ์ฐโ ์ฒซ ํญ๋ชฉ(ํ์ด๋จธ ์ธํฐ๋ฝํธ ๋ง๋ฃ) ์ฐธ์กฐ.
2. PCB์ ์ญํ
ํ ์ค ๊ฒฐ๋ก โ PCB(Process Control Block, ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก)๋ OS๊ฐ ํ ํ๋ก์ธ์ค์ ๋ชจ๋ ์ํ๋ฅผ ๋ณด๊ดํ๋ ์ปค๋ ์๋ฃ๊ตฌ์กฐ๋ค. ์๋ณยท๊ฒฉ๋ฆฌยท์์ยท์ค์ผ์ค๋งยท์ปจํ ์คํธ ์ ์ฅ ๋ค์ฏ ์ญํ ์ด ํ ๊ตฌ์กฐ์ฒด ์์ ๋ชจ์ธ๋ค.
2-1. ๋ค์ฏ ์ญํ
| ์ญํ | ๋ณด๊ด ๋ด์ฉ |
|---|---|
| โ ์๋ณ (Identification) | PID, ๋ถ๋ชจ PID, ์ฌ์ฉ์ ID, ํ๋ก์ธ์ค ๊ทธ๋ฃน |
| โก ์ฃผ์ ๊ณต๊ฐ ๊ฒฉ๋ฆฌ (Isolation) | ํ์ด์ง ํ ์ด๋ธ ๋ฒ ์ด์ค ์ฃผ์(x86 CR3 ๊ฐ). ํ๋ก์ธ์ค ์ ํ ์ ์ด ๊ฐ์ด CR3 ๋ ์ง์คํฐ๋ก ์ ์ฌ๋๋ฉด์ ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์ด ํต์งธ๋ก ๋ฐ๋ |
| โข ์์ ๊ด๋ฆฌ (Resource) | ์ด๋ฆฐ ํ์ผ ๋์คํฌ๋ฆฝํฐ ํ ์ด๋ธ, ํธ๋ค ํ ์ด๋ธ, ์๊ทธ๋ ํธ๋ค๋ฌ, ๋ฉ๋ชจ๋ฆฌ ๋งต ์์ญ(VMA), ์์ ๋๋ ํ ๋ฆฌ |
| โฃ ์ค์ผ์ค๋ง ์ํ (Scheduling) | Ready / Running / Wait ์ํ, ์ฐ์ ์์, ๋์ CPU ์๊ฐ, time slice ์๋ |
| โค ์ปจํ ์คํธ ์ ์ฅ ๋งค์ฒด (Context Storage) | ํ๋ก์ธ์ค ๋จ์ ์ปจํ ์คํธ(๋ ์ง์คํฐ ์ค๋ ์ท์ ๋ณดํต TCB์ ๋ค์ด๊ฐ์ง๋ง, ๋จ์ผ ์ค๋ ๋ ํ๋ก์ธ์ค๋ ์ ์์คํ ์์ PCB์ ์ง์ ๋ณด๊ด) |
2-2. OS๋ณ ์ค์ฒด
| OS | PCB ๊ตฌ์กฐ์ฒด | ์์น |
|---|---|---|
| Linux | task_struct | <linux/sched.h> โ 5,000+ ์ค ๊ฑฐ๋ ๊ตฌ์กฐ์ฒด. ์ค๋ ๋๋ ๊ฐ์ ๊ตฌ์กฐ (NPTL: 1:1 ์ค๋ ๋ ๋ชจ๋ธ) |
| Windows | EPROCESS | ์ปค๋ ๊ฐ์ฒด. ๊ทธ ์์ KPROCESS(์ค์ผ์ค๋ฌ์ฉ)์ ๋ณ๋๋ก ETHREAD/KTHREAD(์ค๋ ๋๋ณ)๊ฐ ์ฐ๊ฒฐ |
| xv6 (๊ต์ก์ฉ) | struct proc | proc.h โ ํ ํ์ด์ง ์์ ๋ค์ด๊ฐ๋ ๋จ์ ๋ฒ์ , ์ปจํ
์คํธยทํ์ด์ง ๋๋ ํ ๋ฆฌยทํ์ผ ํ
์ด๋ธ๋ง ๋ณด๊ด |
2-3. ์ปจํ ์คํธ ์ค์์น ์ PCB์ ํ๋ฆ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[ํ์ฌ ์คํ ์ค์ธ ์ค๋ ๋ T_old]
โ
[1] T_old์ ๋ ์ง์คํฐ โ T_old์ TCB๋ก ์ ์ฅ
โ
[2] PCB ๋น๊ต: T_old์ PCB == T_new์ PCB?
โโ YES (๊ฐ์ ํ๋ก์ธ์ค ๋ด ์ค๋ ๋ ์ ํ)
โ โโ CR3 ๊ทธ๋๋ก, TLB ๋ณด์กด, ์บ์ ๋ณด์กด โ ๋น ๋ฆ
โโ NO (ํ๋ก์ธ์ค ์ ํ)
โโ T_new์ PCB.CR3 ๊ฐ์ CR3 ๋ ์ง์คํฐ์ ์ ์ฌ
โ TLB flush (PCID ์์ผ๋ฉด)
โ ์บ์ ์ฝ๋ โ ๋๋ฆผ
โ
[3] T_new์ TCB์์ ๋ ์ง์คํฐ ๋ณต์
โ
[T_new ์คํ ์์]
2-4. ๋ฉด์ ์์ ๊ฐ์กฐ ํฌ์ธํธ
- โPCB๋ ํ๋ก์ธ์ค ๋จ์, TCB๋ ์ค๋ ๋ ๋จ์โ โ ๋์ด ๋ถ๋ฆฌ๋ผ ์์ด์ผ ๊ฐ์ ํ๋ก์ธ์ค์ ์ค๋ ๋๋ผ๋ฆฌ PCB๋ฅผ ๊ณต์ ํด ์ ํ ๋น์ฉ์ ์ค์ผ ์ ์์.
- CR3๊ฐ PCB์ ๋ค์ด ์๋ค๋ ์ ์ด ์ฃผ์ ๊ณต๊ฐ ๊ฒฉ๋ฆฌ์ ๋ฌผ๋ฆฌ์ ๊ตฌํ โ ํ๋ก์ธ์ค๋ง๋ค ๋ค๋ฅธ ํ์ด์ง ํ ์ด๋ธ์ ๊ฐ๋ฆฌํค๊ฒ ๋ง๋๋ ํ ์ค.
21๋ฒ ๋ณธ๋ฌธ ยงโํต์ฌ ๊ฐ๋ โ โ PCB ํ ์ฐธ์กฐ. 22๋ฒ IPC ๋ณธ๋ฌธ๋ PCBยทํ์ด์ง ํ ์ด๋ธยทํธ๋ค ํ ์ด๋ธ์ด IPC ๋น์ฉ์ ์ถ๋ฐ์ ์ด๋ผ๊ณ ์ง์.
3. ๋ ์ง์คํฐ๋ ๋ฉ๋ชจ๋ฆฌ์ผ๊น์?
ํ ์ค ๊ฒฐ๋ก โ ์ผ๋ฐ์ ์ผ๋ก โ๋ฉ๋ชจ๋ฆฌโ๋ผ ๋ถ๋ฅด์ง ์๋๋ค. ๋ ๋ค ๋ฐ์ดํฐ ์ ์ฅ ๊ณต๊ฐ์ด์ง๋ง ์์นยท์๋ยท์ ๊ทผ ๋ฐฉ์์ด ๋ค๋ฅด๊ณ , ์ด์์ฒด์ ยท์ปดํจํฐ ๊ตฌ์กฐ ๊ต๊ณผ์์์๋ ๋ ์ง์คํฐ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต(memory hierarchy)์ ์ต์์ ๋จ์ผ๋ก ๋ถ๋ฅํ๋ โ๋ฉ๋ชจ๋ฆฌโ๋ผ๋ ์ฉ์ด์๋ ๊ตฌ๋ถํ๋ค.
3-1. ์ฐจ์ด๋ฅผ ํ ํ๋ก
| ํญ๋ชฉ | ๋ ์ง์คํฐ | ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ (RAM) |
|---|---|---|
| ์์น | CPU ์ฝ์ด ๋ด๋ถ | CPU ์ธ๋ถ, ๋ฉ์ธ๋ณด๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ๋กฏ |
| ์ ๊ทผ ์๋ | ~0.3 ns | ~100 ns (300๋ฐฐ) |
| ์ฉ๋ | 64bit ร ์์ญ ๊ฐ (์๋ฐฑ ๋ฐ์ดํธ) | ์ GB |
| ์ ๊ทผ ๋ฐฉ์ | ์ด๋ฆ์ผ๋ก (rax, rbx, xmm0โฆ) | ์ฃผ์๋ก (MOV [0x1000], rax) |
| ๋ช ๋ น์ด ์ธ์ฝ๋ฉ | opcode ์์ ๋ ์ง์คํฐ ๋ฒํธ๊ฐ ์ง์ ๋ค์ด๊ฐ | opcode + ์ฃผ์ ๊ณ์ฐ |
| ๊ณต์ | ์ปจํ ์คํธ ์ค์์น ์ ์ ์ฅยท๋ณต์ ํ์ (์ค๋ ๋๋ง๋ค ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ณ๊ฐ) | ๊ฐ์ ํ๋ก์ธ์ค ๋ด ์ค๋ ๋๋ผ๋ฆฌ ๊ณต์ |
| ์ฌ๋ฃ | SRAM (ํธ๋์ง์คํฐ 6๊ฐ/bit) | DRAM (ํธ๋์ง์คํฐ+์ปคํจ์ํฐ 1์/bit) |
3-2. ์ โ๋ฉ๋ชจ๋ฆฌโ๋ผ ์ ๋ถ๋ฅด๋
- ์ธ์ด ๊ด์ต โ โ๋ฉ๋ชจ๋ฆฌ์ ์ด๋คโ๋ ๋ณดํต RAM์ store ๋ช
๋ น(
MOV [addr], r)์ ๋ณด๋ธ๋ค๋ ๋ป. ๋ ์ง์คํฐ๋ โ๋ ์ง์คํฐ์ ๋๋คโ๊ณ ๋ฐ๋ก ํํ. - ์ฃผ์ ๊ณต๊ฐ ๋ถ๋ฆฌ โ ๋ฉ๋ชจ๋ฆฌ๋ ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ ์์์ ์ฃผ์๋ฅผ ๊ฐ์ง์ง๋ง, ๋ ์ง์คํฐ๋ ์ฃผ์ ๊ณต๊ฐ ๋ฐ.
®ister๊ฐ์ ๊ฒ ๋ถ๊ฐ๋ฅ(C/C++์์registerํค์๋ ๋ณ์์&๋ชป ์์ด ์ด ๋๋ฌธ). - MMU ์ ์ฉ ์ ๋จ โ ํ์ด์ง ํ ์ด๋ธยทTLB๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์๋ง ์ ์ฉ. ๋ ์ง์คํฐ๋ MMU ํต๊ณผ ์ ํจ.
- ์บ์ ๊ณ์ธต ์ธ๋ถ โ L1/L2/L3 ์บ์๋ โ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต์ ์ผ๋ถโ๋ก ์์ฃผ ๋ฌถ์ด์ง๋ง, ๋ ์ง์คํฐ๋ ๊ทธ ์์ ๋ณ๋๋ก ๋์.
3-3. ๊ทธ๋ฐ๋ฐ ์ ํท๊ฐ๋ฆฌ๋
- ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต(memory hierarchy) ๋ค์ด์ด๊ทธ๋จ์์ ๋ ์ง์คํฐ๋ฅผ ๋งจ ์์ ๊ทธ๋ฆผ. โ โํฌํจ๋๋คโ๊ณ ์คํด ๊ฐ๋ฅ.
- ์ผ๋ถ ISA(Itanium ๋ฑ)์์ ๋ ์ง์คํฐ ์๋์ฐยท๋ฉ๋ชจ๋ฆฌ ๋งคํ ๋ ์ง์คํฐ ๊ฐ์ ๋ชจํธํ ์ผ์ด์ค ์กด์ฌ.
- ์๋ฒ ๋๋ยทํ๋์จ์ด์์ โ๋ฉ๋ชจ๋ฆฌ ๋งคํ I/O(MMIO) ๋ ์ง์คํฐโ๋ผ๋ ํํ ์ โ ์ด๊ฑด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ฒ๋ผ ์ ๊ทผํ๋ ๋๋ฐ์ด์ค ์ ์ด์ฉ ๋ ์ง์คํฐ, CPU ๋ฒ์ฉ ๋ ์ง์คํฐ์ ๋ณ๊ฐ.
3-4. ๋ฉด์ ๋ต๋ณ ํ ์ค
โ๋ ์ง์คํฐ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต์ ์ต์์ ๋จ์ผ๋ก ๋ถ๋ฅ๋๊ธด ํ์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก โ๋ฉ๋ชจ๋ฆฌโ๋ผ๊ณ ๋ถ๋ฅด์ง ์์ต๋๋ค. CPU ์ฝ์ด ๋ด๋ถ์ ์๊ณ , ์ด๋ฆ์ผ๋ก ์ ๊ทผํ๋ฉฐ, MMUยทํ์ด์ง ํ ์ด๋ธ์ด ์ ์ฉ๋์ง ์๋๋ค๋ ์ ์์ RAM๊ณผ ๋ถ๋ช ํ ๊ตฌ๋ถ๋ฉ๋๋ค.โ
21๋ฒ ๋ณธ๋ฌธ ยงโํต์ฌ ๊ฐ๋ โ โ โ๋ ์ง์คํฐ vs ๋ฉ๋ชจ๋ฆฌโ ํ ์ฐธ์กฐ.
4. ์ปจํ ์คํธ ์ค์์นญ ๊ณผ์ ์ค ์บ์ ํํธ์จ ๋๋ฌธ์ ํ๋ก์ธ์ค๋ณด๋ค ์ค๋ ๋๊ฐ ๋น ๋ฅด๋ค
ํ ์ค ๊ฒฐ๋ก โ ์ค๋ ๋ ์ ํ์ ๊ฐ์ ํ๋ก์ธ์ค์ ์ฝ๋ยทํยท์ ์ญ ๋ฐ์ดํฐ๊ฐ L1/L2/L3 ์บ์์ ๊ทธ๋๋ก ๋จ์ ์์ด ์บ์ ํํธ์จ์ ์ ์งํ๊ณ , ํ๋ก์ธ์ค ์ ํ์ ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์ด ๋ฐ๋๋ฉด์ TLB flush + ์บ์ ์ฝ๋(cache cold) ๊ฐ ๋ฐ์ํด ๋ฏธ์ค๊ฐ ๋์ ๋๋ค. ์ด๊ฒ โ์ค๋ ๋ ์ ํ์ด ํ๋ก์ธ์ค ์ ํ๋ณด๋ค 5~10๋ฐฐ ๋น ๋ฅด๋คโ๋ ๋ง์ ํต์ฌ ๊ทผ๊ฑฐ.
4-1. ๋น์ฉ ๋น๊ต ํ
| ๋น์ฉ ํญ๋ชฉ | ์ค๋ ๋ ์ ํ (๊ฐ์ ํ๋ก์ธ์ค ๋ด) | ํ๋ก์ธ์ค ์ ํ |
|---|---|---|
| ๋ ์ง์คํฐ ์ ์ฅยท๋ณต์ | โ ๋ฐ์ (~์๋ฐฑ ns) | โ ๋ฐ์ (๋์ผ) |
| ์ปค๋ ์ง์ (๋ชจ๋ ์ค์์น) | โ ๋ฐ์ | โ ๋ฐ์ |
| ํ์ด์ง ํ ์ด๋ธ ๋ฒ ์ด์ค (CR3) ๊ต์ฒด | โ | โ ๋ฐ์ |
| TLB flush | โ (PCID ์์ด๋ ์ ์ผ์ด๋จ) | โ ๋ฐ์ (PCID ์์ผ๋ฉด ์ ์ฒด flush) |
| L1/L2 ์บ์ ์ฝ๋ | โ โ ๊ฐ์ ์ฝ๋ยท์ ์ญยทํ์ด ๊ทธ๋๋ก ์ด์์์ | โ ๋ฐ์ โ ์ ํ๋ก์ธ์ค ๋ฐ์ดํฐ ์ฑ์์ผ ํจ |
| L3 ์บ์ ์ฝ๋ | โ | ๋ถ๋ถ ๋ฐ์ (์ฝ์ด ๊ณต์ ๋ผ ์ผ๋ถ ๋ณด์กด) |
| ๋ถ๊ธฐ ์์ธก๊ธฐ / ํ์ดํ๋ผ์ธ | ์ฝ๊ฐ ๋ฌดํจํ | ๋ ํฌ๊ฒ ๋ฌดํจํ |
| ์ ์ฒด ๋น์ฉ (๋๋ต) | 1~3 ฮผs | 5~15 ฮผs (์ค๋ ๋์ 5~10๋ฐฐ) |
4-2. ์ ๊ฐ์ ํ๋ก์ธ์ค ์ค๋ ๋๋ ์บ์๊ฐ ์ด์์๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ํ๋ก์ธ์ค P ์์ ์ค๋ ๋ T1, T2๊ฐ ์๋ค๊ณ ํ์.
T1์ด ์ฝ๋ X ์คํ โ X์ ๋ช
๋ น์ด๊ฐ L1i, ๋ฐ์ดํฐ๊ฐ L1d/L2/L3์ ์บ์๋จ.
T1 โ T2 ์ปจํ
์คํธ ์ค์์น:
- ๋ ๋ค ๊ฐ์ P์ ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ ๊ณต์
- ๊ฐ์ ํ์ด์ง ํ
์ด๋ธ, ๊ฐ์ ๊ฐ์โ๋ฌผ๋ฆฌ ๋งคํ
- X์ ์ฝ๋/๋ฐ์ดํฐ๋ ๊ฐ์ ๋ฌผ๋ฆฌ ์ฃผ์์ ๊ทธ๋๋ก ์๊ณ ,
์บ์๋ ๋ฌผ๋ฆฌ ์ฃผ์๋ก ์ธ๋ฑ์ฑ(๋ณดํต VIPT/PIPT)๋๋ฏ๋ก ์ ํจ
- T2๊ฐ ๊ฐ์ ์ฝ๋ ์์ญ์ด๋ ์ ์ญ ๋ณ์๋ฅผ ๋ง์ง๋ฉด ์ฆ์ ์บ์ ํํธ
T1 โ T3 (๋ค๋ฅธ ํ๋ก์ธ์ค Q์ ์ค๋ ๋) ์ปจํ
์คํธ ์ค์์น:
- ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ ์์ฒด๊ฐ ๋ฐ๋ (CR3 ๊ต์ฒด)
- L1/L2์ ๋ฐ์ดํฐ๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋จ์์์ง๋ง, T3๊ฐ ๋ง์ง ์ฃผ์๋ค์
Q์ ์ฝ๋ยทํยท์ ์ญ โ ์บ์์ ๊ฑฐ์ ์์
- ์ค์ค์ด miss โ DRAM ์ ๊ทผ(~100ns) ๋ฐ๋ณต โ ๋๋ ค์ง
4-3. TLB flush๊ฐ ์ถ๊ฐ๋ก ์น๋ ๋น์ฉ
- TLB(Translation Lookaside Buffer)๋ ๊ฐ์โ๋ฌผ๋ฆฌ ์ฃผ์ ๋งคํ์ ์บ์ฑํ๋ MMU ๋ด๋ถ ์บ์ (๋ณดํต 64~1024 ์ํธ๋ฆฌ).
- ํ๋ก์ธ์ค ์ ํ ์ ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์ด ๋ฐ๋๋ฏ๋ก TLB ์ํธ๋ฆฌ๊ฐ ๋ฌด์๋ฏธ โ flush ํ์.
- flush ์ดํ ์ฒ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ๋ค์ ํ์ด์ง ํ ์ด๋ธ ์ํฌ(page table walk) ๋ฅผ ๋ค์ ์ํ โ 4๋จ๊ณ ํ์ด์ง ์ ๋ฉ๋ชจ๋ฆฌ 4๋ฒ ์ถ๊ฐ ์ ๊ทผ.
- ํ๋ CPU์ PCID(Process Context ID, x86) / ASID(ARM) ๋ TLB ์ํธ๋ฆฌ๋ฅผ ํ๋ก์ธ์ค๋ณ๋ก ํ๊น ํด ์ ์ฒด flush๋ฅผ ํํผ. ๊ทธ๋๋ ์บ์ ์ฝ๋๋ ๋ง์ ์ ์์.
4-4. ๋ฉด์ ์์ ๊ฐ์กฐ ํฌ์ธํธ
- โ5~10๋ฐฐ ์ฐจ์ด๋ ๋ ์ง์คํฐ ์ ์ฅ๋ ์ฐจ์ด๊ฐ ์๋๋ผ TLB flush + ์บ์ ์ฝ๋์ ๊ฐ์ ๋น์ฉ ์ฐจ์ด์ ๋๋ค.โ โ ์ง์ ๋น์ฉ์ ๊ฑฐ์ ๊ฐ์.
- โ๊ทธ๋์ ๊ฐ์ ํ๋ก์ธ์ค ์์์ ์ค๋ ๋๋ฅผ ์ฐ๋ ๊ฒ OS ์ฐจ์์์ ๊ถ์ฅ๋๋ ๋์์ฑ ๋ชจ๋ธ์ ๋๋ค (CPU ์บ์ ํ์ฉ๋ ์ธก๋ฉด).โ
- โ๋จ, ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๊ฒฝ์์ผ๋ก false sharing ๊ฐ์ ์บ์ ๋ผ์ธ ์ค์ผ์ด ์ผ์ด๋๋ฉด ์ด ์ด์ ์ด ๋ฌดํจํ๋ ์ ์์ด์.โ (๋ฉํฐ์ค๋ ๋ ์บ์ ์ด์๋ก ๊ผฌ๋ฆฌ ๊ฐ๋ฅ)
21๋ฒ ๋ณธ๋ฌธ ยงโ๋น์ฉ ์์โ โ โ์บ์ ์ฝ๋โยทโTLB flushโ ํ, ยงโ๋น๊ตโ โ โ์บ์ ํํธ์จ๋ก ๋ณธ ์ค๋ ๋ ์ฐ์โ ํ ์ฐธ์กฐ.
5. RAM๊ณผ ๋ ์ง์คํฐ ์ฌ์ด์ ์ ์ฅ๊ณต๊ฐ
ํ ์ค ๊ฒฐ๋ก โ L1 / L2 / L3 ์บ์ (SRAM ๊ธฐ๋ฐ) ๊ฐ ๊ทธ ์๋ฆฌ์ ์๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต์ ์๋ก ๊ฐ์๋ก ๋น ๋ฅด๊ณ ์๊ณ ๋น์ธ๋ฉฐ, ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ ๋ถ์์์ ์บ์ ์ฝ๋๊ฐ ๊ฒฐ์ ์ ์ด๋ผ๋ ์ด์ผ๊ธฐ๊ฐ ๋ฐ๋ก ์ด ๊ณ์ธต ๋๋ฌธ์ด๋ค.
5-1. ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต ํ ํ
| ๋จ๊ณ | ์์น | ์ฉ๋ | ์ ๊ทผ ์๊ฐ | ์ฌ๋ฃ | ํน์ง |
|---|---|---|---|---|---|
| ๋ ์ง์คํฐ (Register) | CPU ์ฝ์ด ๋ด๋ถ | 64bit ร ์์ญ ๊ฐ | ~0.3 ns | SRAM | ์ด๋ฆ์ผ๋ก ์ ๊ทผ, MMU ๋ฏธ์ ์ฉ |
| L1 ์บ์ | ์ฝ์ด ์ ์ฉ | 32~64 KB (i-cache + d-cache ๋ถ๋ฆฌ) | ~1 ns (4 cycle) | SRAM | ๋ช ๋ น(L1i) / ๋ฐ์ดํฐ(L1d) ๋ถ๋ฆฌ. ๊ฐ์ฅ ๋น ๋ฅธ ์บ์ |
| L2 ์บ์ | ์ฝ์ด ์ ์ฉ | 256 KB ~ 1 MB | ~3 ns (12 cycle) | SRAM | L1 miss ์ ๋ค์ ๋จ๊ณ |
| L3 ์บ์ (LLC) | ์ฌ๋ฌ ์ฝ์ด ๊ณต์ | 4 MB ~ ์์ญ MB | ~10 ns (40 cycle) | SRAM | ์ฝ์ด ๊ฐ ๊ณต์ โ ์บ์ ์ผ๊ด์ฑ(MESI) ํ๋กํ ์ฝ ๋์ ์ง์ |
| RAM (๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ) | CPU ๋ฐ, ๋ฉ๋ชจ๋ฆฌ ์ฌ๋กฏ | 8 ~ 128 GB | ~100 ns | DRAM | ๊ฐ์ ์ฃผ์ โ MMU/TLB โ ํ์ด์ง ํ ์ด๋ธ โ ๋ฌผ๋ฆฌ ์ฃผ์ |
| SSD/HDD | I/O ๋ฒ์ค | ์๋ฐฑ GB ~ ์ TB | ~100 ฮผs (SSD) / ~10 ms (HDD) | NAND / ์๊ธฐ | ํ์ด์ง ํดํธ ์ ์ค์/๋ฉ๋ชจ๋ฆฌ ๋งต ํ์ผ |
5-2. SRAM vs DRAM โ ์ ์บ์๋ ๋น ๋ฅด๊ณ RAM์ ๋๋ฆฐ๊ฐ
| ํญ๋ชฉ | SRAM (์บ์ยท๋ ์ง์คํฐ) | DRAM (๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ) |
|---|---|---|
| 1 bit ๊ตฌ์ฑ | ํธ๋์ง์คํฐ 6๊ฐ | ํธ๋์ง์คํฐ 1๊ฐ + ์ปคํจ์ํฐ 1๊ฐ |
| ์๋ | ๋น ๋ฆ (~ns) | ๋๋ฆผ (~10 ns + ํ ํ์ฑํ) |
| ๋ฐ๋ | ๋ฎ์ (์ ํฌ๊ธฐ ํผ) | ๋์ (์์ ์ โ ๋์ฉ๋) |
| ๋จ๊ฐ | ๋งค์ฐ ๋น์ | ์ |
| ๋ฆฌํ๋ ์ | ๋ถํ์ | ์ฃผ๊ธฐ์ ๋ฆฌํ๋ ์ ํ์ (์ปคํจ์ํฐ ๋์ค) |
| ํ๋ฐ์ฑ | ํ๋ฐ์ฑ | ํ๋ฐ์ฑ |
โ โ๊ทธ๋์ ์บ์๋ ๋น์ธ์ ์๊ณ , RAM์ ์ธ์ ํฐโ ํธ๋ ์ด๋์คํ.
5-3. ์บ์ ๋ผ์ธ๊ณผ ์บ์ ๋ฏธ์ค
- ์บ์๋ ๋ฐ์ดํธ ๋จ์๊ฐ ์๋๋ผ ์บ์ ๋ผ์ธ(cache line, ๋ณดํต 64 byte) ๋จ์๋ก RAM๊ณผ ์ฃผ๊ณ ๋ฐ์.
- ์บ์ ๋ฏธ์ค ์ 64 byte ํ ๋ฌถ์์ ํต์งธ๋ก ๋์ด์ด โ ์ธ์ ๋ฐ์ดํฐ๋ ์๋์ผ๋ก ๋ฐ๋ผ์ด(๊ณต๊ฐ ์ง์ญ์ฑ).
- ์ปจํ ์คํธ ์ค์์น ์งํ โ์บ์ ์ฝ๋โ๋ ๊ฒฐ๊ตญ ์ ์ค๋ ๋์ ์ํน์ (working set)์ด ์บ์์ ์ฑ์์ง ๋๊น์ง์ ๋ฏธ์ค ๋์ .
5-4. TLB๋ ์ด ๊ณ์ธต ์ด๋์ธ๊ฐ
- TLB(Translation Lookaside Buffer)๋ ์บ์์ ์ผ์ข ์ด์ง๋ง ๋ฐ์ดํฐ ์บ์(L1/L2/L3)์ ๋ณ๊ฐ.
- ์์น: MMU ์ (CPU ์ฝ์ด ๋ด๋ถ์ ํ ๋ชจ๋).
- ์บ์ฑ ๋์: ๊ฐ์ โ ๋ฌผ๋ฆฌ ์ฃผ์ ๋งคํ (ํ์ด์ง ํ ์ด๋ธ ์ํธ๋ฆฌ).
- ๋ณดํต L1 TLB(~64 ์ํธ๋ฆฌ) + L2 TLB(~1024 ์ํธ๋ฆฌ) 2๋จ ๊ตฌ์ฑ.
- ํ๋ก์ธ์ค ์ ํ ์ PCID/ASID ์์ผ๋ฉด flush โ ์ดํ ํ์ด์ง ํ ์ด๋ธ ์ํฌ ๋์ (RAM ์ ๊ทผ 4๋ฒ๊น์ง).
5-5. ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ์ ์ถ์ฒ๋ฅผ ์ด ๊ณ์ธต์ผ๋ก ๋ถํด
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
์ปจํ
์คํธ ์ค์์น ์งํ ์ ์ค๋ ๋ ํ ์ค ์คํ:
[CPU๊ฐ ๋ช
๋ น fetch]
โ PC ๊ฐ์ ์ฃผ์ โ MMU โ TLB lookup
โ TLB hit โ ๋ฌผ๋ฆฌ ์ฃผ์ ์ฆ์ (~1 ns)
โ TLB miss โ ํ์ด์ง ํ
์ด๋ธ ์ํฌ (~์์ญ ns + DRAM 4๋ฒ)
โ ๋ฌผ๋ฆฌ ์ฃผ์ โ ์บ์ lookup
โ L1i hit (~1 ns)
โ L2 hit (~3 ns)
โ L3 hit (~10 ns)
โ ๋ฏธ์ค ๋ชจ๋ โ DRAM (~100 ns)
โ ๋ช
๋ น ๋์ฝ๋ โ ์คํ
๊ฐ์ ํ๋ก์ธ์ค ์ค๋ ๋ ์ ํ:
- TLB ๋ณด์กด, ์บ์ ๋ณด์กด โ ๋๋ถ๋ถ hit โ ๋น ๋ฆ
๋ค๋ฅธ ํ๋ก์ธ์ค ์ ํ:
- TLB flush, ์บ์ ์ฝ๋ โ ์ฒซ ์๋ฐฑ~์์ฒ ๋ช
๋ น ๋์ miss ํญ์ฃผ โ ๋๋ฆผ
5-6. ๋ฉด์ ๋ต๋ณ ํ ์ค
โRAM๊ณผ ๋ ์ง์คํฐ ์ฌ์ด์๋ L1 / L2 / L3 ์บ์๊ฐ ์๊ณ , ๋ชจ๋ SRAM ๊ธฐ๋ฐ์ด๋ผ DRAM์ธ RAM๋ณด๋ค ๋น ๋ฆ ๋๋ค. L1ยทL2๋ ์ฝ์ด ์ ์ฉ, L3๋ ์ฝ์ด ๊ณต์ ๋ผ ์บ์ ์ผ๊ด์ฑ ํ๋กํ ์ฝ์ด ๋์ํฉ๋๋ค. ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ ์ด์ผ๊ธฐ์์ โ์บ์ ์ฝ๋โ๊ฐ ๊ฒฐ์ ์ ์ด๋ผ๋ ๊ฒ ๋ฐ๋ก ์ด ๊ณ์ธต์ด ๋น์ด ์์ ๋์ ๋ฏธ์ค ๋์ ์ ๊ฐ๋ฆฌํต๋๋ค.โ
21๋ฒ ๋ณธ๋ฌธ ยงโํต์ฌ ๊ฐ๋ โ โ โ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธตโยทโL1/L2/L3 ์บ์โยทโSRAM vs DRAMโ ํ ์ฐธ์กฐ.
ํ๊ท ๋งคํธ๋ฆญ์ค โ ์ด 5๊ฐ ์ง๋ฌธ์ด ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋๋
1
2
3
4
5
6
7
8
9
10
interrupt (1)
โ ํ์ด๋จธ ์ธํฐ๋ฝํธ๊ฐ ์ค์ผ์ค๋ฌ ํธ์ถ โ ์ปจํ
์คํธ ์ค์์น ๋ฐํ์
PCB (2)
โ ๊ต์ฒด ์ฌ๋ถ๊ฐ ์ค๋ ๋ vs ํ๋ก์ธ์ค ์ ํ์ ๊ฒฐ์
์บ์ ํํธ์จ (4)
โ PCB ๊ต์ฒด ์ CR3 ๋ณ๊ฒฝ โ TLB flush + ์บ์ ์ฝ๋
๋ ์ง์คํฐ โ ๋ฉ๋ชจ๋ฆฌ (3)
โ ์ปจํ
์คํธ = ๋ ์ง์คํฐ ์ค๋
์ท. ๋ฉ๋ชจ๋ฆฌ(RAM)์ ๊ตฌ๋ถ๋๋ ๋ณ๋ ์ ์ฅ์
RAM โ ๋ ์ง์คํฐ ์ฌ์ด (5)
โ L1/L2/L3 ์บ์. ์บ์ ์ฝ๋์ ๋ฌด๋
ํ ์ค ์์ฝ: ์ธํฐ๋ฝํธ โ PCB ๊ต์ฒด โ CR3 ๋ณ๊ฒฝ โ TLB flush โ ์บ์ ์ฝ๋ โ ๋ฏธ์ค ๋์ โ ํ๋ก์ธ์ค ์ ํ์ด ์ค๋ ๋ ์ ํ๋ณด๋ค ๋๋ฆผ. ๋ค์ฏ ์ง๋ฌธ์ด ์ด ํ ์ค์ ๋ค์ฏ ๊ฐ๋๋ก ํ๊ณ ๋ ๊ฒ.