01 Intro
- assignment 0: virtualbox๋ ubuntu(14.04) ๋ค์ด๋ฐ๊ธฐ
OS Basics
- Von Neumann architecture = CPU + Memory + Storage
- CPU = Register + PC + ALU
โThree Easy Piecesโ - Virtualization, Concurrency, Durability
- Virtualization: The OS takes the physical resources and transforms into virtual form of itself(OS is often referred as virtual machine)
- Concurrency: multi-thread
- Durability: surviving failure(persistence)
When a program runs:
Fetch -> Decode -> Execute
- c์์ volatile์ ์ฐ๋ฉด ํด๋น ๋ณ์์ ์ ๊ทผํ ๋ ๋ง๋ค ์บ์ ๋์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ค
- SSD: solid-state drives
02 Abstraction
- data abstraction
- procedural abstraction
- lazily: on demand = not executed unless necessary
- memory load๋ฅผ on demand๋ก ํ๋ค
- 48์ชฝ memory ๊ทธ๋ฆผ ์ฌ์ค์ ๊ฑฐ๊พธ๋ก์ code(text)๋งจ ์๋, ๊ทธ ์์ data, heap, ๋งจ ์์ stack. stack์ ๋ฐ์ผ๋ก ์์ด๊ณ heap์ ์๋ก ์์ธ๋ค
- 49์ชฝ 64bit architecture.
- bss segment: guard page.
- kernal space์๋ ์ ๊ทผํ ์ ์๋ค
- process๋ 3๊ฐ์ state๋ฅผ ๊ฐ์ง๊ณ ์๋ค - running/ready/blocked
- 53์ชฝ ์ค์ register context used by the xv6 kernel
- 54์ชฝ proc์์ ์ค์ํ ๊ฒ: mem, proc_state, parent, context, tf
- 57์ชฝ์์ return value๋นผ๊ณ parent์์ child๋ก ๋ชจ๋ ๋ณต์ฌ๋จ. child์ return value(address)๋ 0์! -> parent์ child ๊ตฌ๋ถ๋ฒ
- %>/.program์ parent: bash
03 Mechanism
OS๋ physical CPU๋ฅผ time sharing์ ์ด์ฉํด์ ๊ณต์ ํด์ผ ํ๋ค. ์ด ๋ ๊ณ ๋ คํด์ผํ ๊ฒ ๋๊ฐ์ง๋:
- performance
- control
68์ชฝ์ ๊ฒฝ์ฐ run์ด๋ผ๋ ํ์๊ฐ ์ธ์ ๋๋ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์ด๋ค. (ex)infinite loop
+ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์์ io๋ฅผ accessํ ์ ์์
kstack - kernel์ stack. 8kb
- esp๋ stack, eip๋ code(text)๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค.
- write()๋ฅผ ์คํํ๋ฉด
- eip๋ kernel space, esp๋ kernel stack์ ๊ฐ๋ฆฌํจ๋ค.
System Call
- system call์ callํ ๋๋ง๋ค trap์ด ๋ฐ์ํจ.
- return-from-trap: callํ user program์ผ๋ก ๋๋์๊ฐ
IDTR table์ base address๋ฅผ ์ ๋๋ก ์ ํ ํด์ฃผ๊ธฐ ์ ๊น์ง๋ ์๋ฌด์ผ๋ ์ผ์ด๋ ์ ์๋ค. ์ด๋ป๊ฒ handleํด์ผ ํ ์ง ๋ชจ๋ฅด๊ธฐ๋๋ฌธ
kernel์ ์์ ๋ง์ heap, stack๋ฑ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค. ์๋ํ๋ฉด OS์ ์ฃผ์ธ์ด๊ธฐ ๋๋ฌธ์ ํ์๊ฐ ์์ - ๋ชจ๋ ๊ฒ์ ์ ๊ทผ๊ฐ๋ฅํจ
linux์ ๋ชจ๋์๋ ๋๊ฐ์ง๊ฐ ์๋ค - protected/real
- protected์์๋ CPU๊ฐ previleged instruction์ ์คํํ์ง ๋ชปํ๊ฒ ํจ
76์ชฝ intel์ CPU
85์ชฝ CPU์ register๋ kstack์ ์ ์ฅ๋์ด์ผํจ. syscall์ด ๋๋ ํ์ ์คํ๋์ด์ผ ํ ํ๋ก์ธ์ค๋ kstack์ syscall๋ถ๋ถ ๋ค์์ ์ ์ฅ.
โ
//๊ณผ์ 1
- while๋ฌธ ๋ด์์ quit์ ์ ๋ ฅํ ๋ ๊น์ง ๋ฐ๋ณต
- batch mode์ผ ๊ฒฝ์ฐ ํ ์ค ํ ์ค ์คํํ ํ break
- interactive mode์ผ ๊ฒฝ์ฐ ํ ์ค ์คํํ ํ ๋ฐ๋ณต
- ๋ช ๋ น์ด ํ ๊ฐ์ผ๊ฒฝ์ฐ
- ํ์ฌ ํ๋ก์ธ์ค์์ exec๋ก ์คํ
- ์ฌ๋ฌ๊ฐ์ผ๊ฒฝ์ฐ
- strtok์ ์ด์ฉํด์ ๋ช ๋ น์ด๋ฅผ ๋ถ๋ฆฌํ๊ณ fork๋ก ๋ช ๋ น ๊ฐ์๋งํผ ํ๋ก์ธ์ค๋ฅผ ์์ฑ ํ exec ํ๊ณ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๋๋ ๋๊น์ง waitํ๋ค
- ํ๋ก์ธ์ค์์ fork๋ฅผ ํธ์ถํ๋ฉด ๋ด๋ถ์์ pcb๋ฅผ ์์ฑํ๋ค
- os๋ฅผ ๋ถํธํ๋ฉด ์ ์ผ ๋จผ์ idt๋ฅผ set upํจ. ๋ง์ฐ์ค์ ํค๋ณด๋๊ฐ ์๋ํ๋ ๊ฒ๋ interrupt handler๊ฐ ์ผํ๊ธฐ ์์ํ๊ธฐ ๋๋ฌธ์ ๋ง์ฐ์ค์ ํค๋ณด๋์ interrupt๋ฅผ handleํ ์ ์๊ฒ ๋์ด์ ์ด๋ค
- kernel stack์ด user stack๊ณผ ๋ณ๊ฐ๋ก ์กด์ฌํ๋ ์ด์ ๋ ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ์ ๊ทผํ์ง ๋ชปํ๊ฒ ํ๊ธฐ ์ํจ์ด๋ค + interrupt ์ด์ ์ cpu state๋ฅผ ์ ์ฅํ๊ณ ๋๋ ํ ๋ค์ ์์ํ๋ก ๋ณต์ํด์ฃผ๊ธฐ ์ํด
- process A์ B๋ฅผ ์๋ค๊ฐ๋ค ใ ํ๋๊ฒ์ context switching์ด๋ผ๊ณ ํ๋ค. ๋ฐ๊ฟ ๋ ํ์ฌ cpu register ์ํ๋ฅผ pcb์ register context์ ์ ์ฅํด์ฃผ๊ณ ๋ฐ๊พผ ํ ๋ค์ ๋์์ฌ ๋ cpu register๋ก ์ ์ฅํ ๋ด์ฉ์ ๊ทธ๋๋ก ๊ฐ์ ธ์ด
- 96์ชฝ์ esp, eax๋ ๋ ์ง์คํฐ์ ์ข ๋ฅ์ด๋ค
- ์คํ์ ๊ฐ์ฅ ๋ฐ์ return address์ด๋ค. -> protocol์
- %esp๋ value, (%esp)๋ address
- 4(%esp)๋ esp๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณณ์์ 4๋ฐ์ดํธ ์ดํ์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ ธ์ค๋ผ๋ ๋ป์
- kstack์์ popํด์ context(eax๊ฐ ๊ฐ๋ฆฌํค๊ณ ์์)์ ์ง์ด๋ฃ๋๋ค.
- ์ด ์ฝ๋์์ ์์๋ฅผ ํ๋๋ผ๋ ๋ฐ๊พธ๋ฉด ์๋จ
- 10~16์ค์ ์ฐจ๋ก๋๋ก context์ ์ฎ๊ธด๋ค
- ๋ฐ๋ก๋ฐ๋ก ๋ง๊ณ ํ๊บผ๋ฒ์ ๋ชปํ๋ ์ด์ ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ physically ์ฐ๊ฒฐ๋์ด์์ง ์๊ธฐ ๋๋ฌธ
04 Scheduling
- ์์์ ํ์๋ก ํ๋ ํ๋ก์ธ์ค์ ์์์ ๋ฐฐ์ ํด์ฃผ๋ ๊ฒ
- ์ค์ผ์ค๋ง์ ์ฑ๋ฅ์ ํ๋จํ๋ ๊ธฐ์ค: turnaround time, fairness
- FIFO(FCFS)
- Convoy effect๋๋ฌธ์ ๋ฌธ์ ๊ฐ ์๊น: ๋งจ ์ฒ์ ๋์ฐฉํ ๊ฒ์ด ์์ฒญ๋๊ฒ ์ค๋๊ฑธ๋ฆด๊ฒฝ์ฐ
- SJF(Shortest Job First)
- ์งง์ job๋ค์ด ๊ธด job ์คํ ์ค์ ๋์ฐฉํ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ์๊น
- STCF(Shortest Time-to-Completion First)
- A๊ฐ ์คํ๋๋ ์ค ๋ ์งง์ ๊ฒ์ด ๋์ฐฉํ๋ฉด ์งง์๊ฒ์ ๋จผ์ ์คํํ๊ณ A์ ๋๋จธ์ง๋ ๊ทธ ๋ค์์ ์คํํจ
- ์ค์ผ์ค๋ง ์ฑ๋ฅ ํ๋จ์ ์๋ก์ด ๊ธฐ์ค! response time
- ์ฒ์ schedule๋ ์๊ฐ - ๋์ฐฉํ ์๊ฐ
- ์์ job์ด ์์ ๋ ํ์ฌ์ job์ด ๊ธธ๋ค๊ณ ๋งจ ๋์ค์ ์คํํด๋ฒ๋ฆฌ๋ฉด ๋ต๋ตํ ๊ฒ์ด๋ค. ์ ์ amount์ response๋ผ๋ ํด์ผํจ
- ์ด์ ์ ์ค์ผ์ฅด๋ง๋ค์ response time์ด ์์ข์
- RR(Round Robin)
- ํ๋์ job์ time slice๋ก ์๋ผ์ ์คํ
- response time ํ๋ฅญ
- ์ด๋ค system์ด๋์ ๋ฐ๋ผ ์ ์ ํ size์ time slice๊ฐ ํ์
- ๋๋ฌด ์์ ๊ฒฝ์ฐ response time์ ์ข์ง๋ง context switching ํ ๋ ์ค๋ฒํค๋ ๋ฐ์
- ๋๋ฌด ํด ๊ฒฝ์ฐ ๋ฐ๋์ ์ฅ๋จ์ .
- real-time system์ ๊ฒฝ์ฐ ์ฌ๋ผ์ด์ค๋ฅผ ์๊ฒํ๋๊ฒ์ด ์ข๋ค ex)๋ฏธ์ฌ์ผ
- Incorporating I/O
- I/O๊ฐ ๊ฐ์ ๋ ๊ฒฝ์ฐ CPU ํ์ฉ๋๋ฅผ ์ต๋ํ์ผ๋ก!
- Multi-Level Feedback Queue(MLFQ)
- priority๋ง๋ค queue๋ฅผ ๋ง๋ฆ. ๋ด๋ถ์์๋ rr์คํ
- ์) ์ด๋ค job์ด CPU๋ฅผ ์ค๋ ์ ๋ นํ๊ณ ์์ผ๋ฉด priority๋ฅผ ๋ฎ์ถค
- CPU๋ฅผ ์ค๋ ์ฌ์ฉํ์ง ์๋ interactive job์ priority๋ฅผ ๋์๊ณณ์ ๋
- ๋ง์ฝ interactive job์ด ์์ฒญ ๋ง๋ค๋ฉด long running job์ ์คํ๋์ง ๋ชปํ ๊ฒ์ด๋ค -> starvation
- 90%์ ๋ ์๋ฃ๋ ๊ฒฝ์ฐ yieldํ๋ฉด ๋จ
- rule 5: ์ฃผ๊ธฐ์ ์ผ๋ก boost ์งํ(๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ๋งจ ์์ queue๋ก ์ด๋)
- Proportional Share
- job์ด ํ์๋ก ํ๋ resource๋ฅผ ์์น๋ก ๋ํ๋ธ ํ ํผ์ผํธ๋ฅผ ๋ถ์ฌํ๋ค(CPU ์ ์ ์๊ฐ์ ๋น์จ)
- Stride Scheduling(๋ณดํญ ์ค์ผ์ค๋ง)
- (A large number)/(the number of tickets of the process)
- ๋ณดํญ์ ์ค์ผ์ค๋ง ๋์์ ์๋ฏธํ๋ค
//๊ณผ์ 2 String Scheduling + MLFQ
05 Memory Virtualization
- OS๊ฐ ๊ฐ ํ๋ก์ธ์ค์๊ฒ ๊ฐ์์ memory space๋ฅผ ์ ๊ณต -> ๊ฐ๊ฐ์ ํ๋ก์ธ์ค๋ง๋ค CPU๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋ณผ ์ ์์
- ์ด์ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง ํ ๋น๋ ์ ์์์. ํจ์จ์ฑ .. ์ฐธ๋ด
- ๊ทธ๋์ Multiprogramming๊ณผ time sharing์ด๋ผ๋ ๊ฒ์ด ๋์ด.
- ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์กฐ๊ธ์ฉ ํ ๋นํ๋ ๊ฒ
- ํ์ง๋ง protection issue๋ฅผ ์ด๋ํ ์ ์์..
- ์๊ธฐ๊ฐ ์๋ ํ๋ก์ธ์ค์ ์ ๊ทผ ๊ฐ๋ฅํ ์ ์์ด์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์์์ํฌ ์ ์๋ค
- protection issue๋ฅผ ์ด๋ป๊ฒ resolve ํ๋๋
- ํ๋ก์ธ์ค๋ง๋ค address space๋ฅผ ๋ง๋ฌ
- ์คํ๋๊ณ ์๋ ํ๋ก์ธ์ค์ ๊ดํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์๋ ์ (program code, heap, stack ๋ฑ)
- ํ์ ์๋๋ฅผ ํฅํด ์์ด๊ณ ์คํ์ ์๋ฅผ ํฅํด ์์ด๋ ์ด์
- ๋ ๋ค dynamicํ๊ฒ ์์ด๊ฑฐ๋ ์์ด์ง๊ธฐ ๋๋ฌธ์ ๋ฑ๋ฑ ๋๋์ด ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ์์ด๊ฒ ํ๋ฉด ๋นํจ์จ์ ์ผ ์ ์๋ค
- Memory API
- malloc()
- system call์ด ์๋ library function์ด๋ค
- free()
- new()
- delete()
- ํฌ์ธํฐ๋ ์คํ์ ์ ์ฅ๋จ
- string์ allocateํ ๋๋ \0์๋ฆฌ๊น์ง(1byte) ํด์ mallocํด์ผํจ. ์๊ทธ๋ฌ๋ฉด string์ ๋์ด ์ด๋์ง ์์ ์์ผ๋๊น
- Memory Leak
- โvalgrindโ: ๋ฉ๋ชจ๋ฆฌ leak๋๋ ๊ณณ์ ์ฐพ์์ฃผ๋ ํ๋ก๊ทธ๋จ
- unused code๋ฅผ freeํด์ฃผ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ๊ณ์ ์์ฌ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ค ์ฐจ๋ฉด ํ๋ก์ธ์ค๊ฐ ์ฃฝ์ด๋ฒ๋ฆผ
- malloc์ brk๋ผ๋ system call์ ์ฌ์ฉํ๋ค
- ๊ทธ๋์ ์ง์ brk/sbrk๋ฅผ ์ฌ์ฉํ๋ฉด ์๋จ! malloc์ด๋ free ์์ ์ด ์ค์ค๋ก ํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ํ๋ฉด ์ถฉ๋ํ ์ ์๋ค
- brk๋ ํ๋ก๊ทธ๋จ์ break๋ฅผ ํ์ฅํ ๋ ์ฐ์ธ๋ค
- break: address space๋ด์ heap์ ๋ ์ฃผ์
- good memory allocation -> jemalloc.so ๋๋ tcmalloc.so (so: shared object)
- LD_PRELOAD = โ/usr/(local/)lib/libjemalloc.so._
- ์ด๋ ๊ฒ ํ๋ฉด lib.c๊ฐ ์๋ ์ ๊ธฐ์ define ๋์ด์๋ function๋ค์ ๋์ ์ฌ์ฉํจ
- mainํธ์ถ ์ ์ ์คํํ๊ณ ์ถ์ ๊ฒ์ด ์์๊ฒฝ์ฐ library์ ์ ์ํ๊ณ LD_PRELOAD์ ๋ฉ์ธํจ์ ์ ์ directory์ ํด๋น library๋ฅผ ์ ์ํด๋์ผ๋ฉด ๋๋ค
- LD_PRELOAD๋ ๊ต์ฅํ ๊ณ ๊ธ์คํฌ์
- Address Translation
- ํ๋ก์ธ์ค๊ฐ ๊ฐ์ง address space์์ local address(0~16kb)๋ ์ค์ physical memory์์ address(0~64kb๋ด์ ์ด๋ค 16kb๋งํผ์ space)์ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ๋๊ฐ์ address๋ฅผ ์๋ก ๋ฐ๊ฟ ์ ์์ด์ผํจ
- OS๋ ์ด ์์ ์ ์ต๋ํ ๊ด์ฌ๋ฅผ ์ํ๋ ๊ฒ์ด ์ข์. ํ๋์จ์ด๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๊ฐ์ฅ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์
- Assumptions
- 1) user์ address space๋ memory์ ์ฐ์์ ์ผ๋ก ์์นํด ์๋ค
- 2) address space์ ํฌ๊ธฐ๋ memory์ ํฌ๊ธฐ๋ณด๋ค ์๋ค
- 3) ๋ชจ๋ address space์ ํฌ๊ธฐ๋ ๊ฐ๋ค
- Hardware-based Address Translation(Dynamic Relocation)
- ํ๋์จ์ด๊ฐ virtual address๋ฅผ physical address๋ก ๋ฒ์ญํ๋ค
- ์ํํธ์จ์ด(์ด์์ฒด์ )๋ง์ ์ด์ฉํ์ฌ ๋ฒ์ญํ๋ฉด ์์ฃผ ์ค๋๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ํ๋์จ์ด์ ๋์์ด ํ์ํ๋ค
- 34์ชฝ์์ 5๋ฒ ๋ฒ์ญํด์ผํจ. ์์ฃผ ๋นํจ์จ์ .
- base and bounds register๋ฅผ ์ด์ฉ!
- address space์์ bounds register๋ผ๋ ๊ฒ์ ๊ฐ์ง๊ณ ์๊ฒ ํ๋ค
- bounds register: ๋ด address space์ ํฌ๊ธฐ (or +base)
- physical memory์์ base register๋ผ๋ ๊ฒ์ ๊ฐ์ง๊ณ ์๊ฒ ํ๋ค
- base register: ํด๋น address space๊ฐ ์์ํ๋ ์์น
- base๋ถํฐ bound๋งํผ์ address space๊ฐ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค. (Virtual Address + base = Physical Address)
- ์ด๋ ๊ฒ ํ๋ฉด translation ์์ฒด์๋ OS๊ฐ ๊ด์ฌํ ํ์๊ฐ ์๊ฒ๋จ. base๋ง CPU๊ฐ ์์์ ๋ํ๋ฉด ๋๋๊น
- ๋จ, OS๊ฐ ๊ผญ ๊ด์ฌํด์ผ ํ๋ ๋ถ๋ถ์ด ์์
- process๊ฐ ์์ํ ๋: physical memory์์ address space๋ฅผ ์ํ ๊ณต๊ฐ์ ํ๋ณดํ ๋ -> free list๋ฅผ ์ฐพ์(์ฌ์ฉ๋์ง ์๊ณ ์๋ physical memory์ ๋ฒ์)
- process๊ฐ ๋๋ฌ์ ๋:
- context switch๊ฐ ๋ฐ์ํ ๋: PCB์ base-and-bounds pair๋ฅผ ์ ์ฅํด์ผ ํจ
- process๋น ํ๋์ base and bound๋ฅผ ์ฐ๋ ๊ฒ์ ๋จ์
- ๋นํจ์จ์ ์ด๋ค ์๋ํ๋ฉด heap๊ณผ stack์ฌ์ด์ free(unused) space chunk๊ฐ ์๊ธฐ๊ฒ ๋จ
- Segmentation: ๋ฐ๋ผ์ ํ process์ code, heap, stack๋ง๋ค ๊ฐ๊ฐ์ base and bound๋ฅผ ์์ฑ!
- virtual address๋ฅผ ๋ ํํธ๋ก ๋๋: segment์ offset์ผ๋ก.
- segment: address space๋ด์ code์ธ์ง, heap์ธ์ง, stack์ธ์ง indicateํ๋ ๋ถ๋ถ
- ์ segmentation fault๋ผ๊ณ ํ๋: ๋์๊ฒ ํ์ฉ๋ segment์ base์ bound๋ฅผ ๋์๊ธฐ ๋๋ฌธ์
- hardware support
- ๊ฐ segment๊ฐ ์ด๋ค ๋ฐฉํฅ์ผ๋ก ์๋ผ๋์ง ์๊ณ ์์ด์ผ ํจ
- read/write/execute๋ฑ ๊ฐ segment๊ฐ ์ด๋ค ์์ ์ ํ์ฉ๋ ์ ์๋์ง ์์์ผ ํจ
- bound๋ฅผ absolute๊ฐ์ผ๋ก ์ก์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ์ฐจ์งํ๊ฒ ๋จ
06 Free-Space Management
- finding a free chunk of memory that can satisfy the request and splitting it into two: when request for memory allocation is smaller than the size of free chunks
- ๋งํฌ๋๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ์ฌ ๊ด๋ฆฌ
- ์ค์ ๋ฉ๋ชจ๋ฆฌ์ bound๋ง๊ณ ์ฃผ์๊ณต๊ฐ์ heap์ ์ฆ๊ฐ์ํค๊ณ ์ถ๋ค. ๊ทธ๊ฒ์ด ๋ฏธ๋
- Coalescing
- free list์ ์ฌ๋ฌ node๋ค์ ํ๋์ node๋ก ํฉ์น๋ ๊ฒ
- free list์ node๋ค์ด contiguousํ ๋๋ง coalescingํ ์ ์์. ๋ง์ฝ ๋จ์ด์ ธ์์ผ๋ฉด ์ freeํ๊ฒ๋ค๊น์ง ํฌ์ธํฐ๋ฅผ ๋ค ๋ฐ๊ฟ์ค์ผํ๋๋ฐ ์ด๊ฑด ๋ถ๊ฐ๋ฅ์ ๊ฐ๊น๋ค
- free(void *ptr)
- ์ด๋ป๊ฒ freeํด ์ค ํฌ์ธํฐ์ size๋ฅผ ์๋๋???
- malloc์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋นํด์ค ๋ ์๊ตฌํ๊ฒ๋ณด๋ค ์กฐ๊ธ ๋ ํด์ size ์ ๋ณด ๋ฑ์ ์ ์ฅํด๋๊ธฐ ๋๋ฌธ์ ๊ฑฐ๊ธฐ์ ์ ์ ์์
- magic number: ํ์ฌ ์ฌ์ฉ๋๊ณ ์๋ process์ธ์ง?
- Segregated List
- Slab Allocator
- on demandํ๊ฒ(free list์์) ๋ง๊ณ ๊ฐ์ size์ cache๋ฅผ ๋ฏธ๋ฆฌ allocateํ์ฌ ์์ฒญ์ด ์์๋ ๋ฐ๋ก๋ฐ๋ก ์ ๊ณต (kmem_alloc/ kmem_cache)
- Buddy Allocation
- Binary Buddy Allocation
- free space๋ฅผ ๊ณ์ ๋ฐ์ผ๋ก ๋๋์ด ์์ฒญ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฉํ ์ ์๋ ์ต์ํ์ space๋ฅผ ์ ๊ณต
- coalescingํ ๋ ๋์ buddy๋ง checkํ๋ฉด ๋จ
07 Paging
- essence of memory virtualization
- Segmented Architecture
- ์ฅ์ : address translation์ด ๋น ๋ฅด๋ค(ํ๋์ adder logic์ด๋ฉด ๊ฐ๋ฅ)
- ๋จ์ :
- ์ธ๋ถ๋จํธํ(์์ฒญํ ๋ฉ๋ชจ๋ฆฌ ์์ ๋นํด segment๊ฐ ๋๋ฌด ์์์ ์๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ)
- ๋ด๋ถ๋จํธํ(์ ๊ณต๋ ๋ฉ๋ชจ๋ฆฌ ์์ด ๋ชจ๋ ์ฌ์ฉ๋์ง ์์ ๋ญ๋น๋ ๊ฒฝ์ฐ)
- Swapping ์ต์ ์ ํ
- segment๊ฐ ์์์๋ก fragmentation์ด ์ ๊ฒ ์ผ์ด๋จ. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์์ฒญ ์๊ฒ ํ์ง ์๋ ์ด์ ๋ process์ ๋ํด segment๋ฅผ ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ค์์ง๊ธฐ ๋๋ฌธ์ด๋ค
- Page: multiple fixed-size segments with mapping table
- process์ address๋ง์ ๋๋์ง ๋ง๊ณ (segmentation) physical memory space๋ ๋๋์
- page table์ process๋ง๋ค ์์ฑ๋จ -> context switch๊ฐ ์ผ์ด๋ ๋๋ง๋ค base-bound pair๋ ์ ์ฅํด์ผํ๊ธฐ ๋๋ฌธ์
- ์ฅ์ : flexibility +
- free space๋ฅผ squeeze ํ ํ์๊ฐ ์์. ๊ทธ๋ฅ ์ฌ์ฉํ ์ ์๋ ํ์ด์ง๋ฅผ ๋ณด๊ณ ์ ๊ณตํ๋ฉด ๋จ.
- Address Translation
- page number + offset
- Page Table์ handle ํ๊ธฐ ์ด๋ ค์ธ ๋งํผ ์ปค์ง ์ ์์
- ๊ทธ๊ฑธ address space์ ์ ์ฅ??? ์๋ผโฆ
- Physical memory์ ์ ์ฅํ๊ณ process๋ง๋ค ์ด๋์ ์ ์ฅํ๋์ง ๊ธฐ์ตํ๋ค.
- PTBR(Page Table Base Register)(=CR3) ๋ ์ง์คํฐ๋ ์์ ์ ํ์ด์ง ํ ์ด๋ธ์ base(์ฒ์)๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- ๋ญ ํ๋ ค๋ฉด PTBR์ด ๊ฐ๋ฆฌํค๋ ๊ณณ์ ๊ฐ์ ์ด๋์ง ๋ณด๊ณ ๊ทธ ์ฃผ์์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ด..50 cyclesโฆtoo much memory reference->MMU(Memory Management Unit)๋ก ํด๊ฒฐ!
- MMU์๋ TLB๋ผ๋ ๊ฒ์ด ์์ด์ mapping table์ cache๋ก ์์ฉํ๋ค. Memory-Address๊ฐ translating ์์ด ์์ฃผ ์ ์ cycle๋ก ํด๊ฒฐ ๊ฐ๋ฅ
- ์ค์ ์ฃผ์ = CR3 + VP# * 4byte
- page table์ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด์ผํ๋ค. ๋ชจ๋ page์ ๋ํด 64bit ์์ ๋งตํํ ์ ์๋๋ก
- code, stack, heap์ page ํ๋์ฉ ์ธ๊ฐ์ ํ์ด์ง๋ฉด ์ถฉ๋ถํ๋ค
- ํ์ด์ง ํ ์ด๋ธ์ ์กด์ฌํ๋ flag:
- valid/protection/present/dirty/reference bit
- ํ์ด์ง์ ๋ฌธ์ ์ :
- extra memory access
- memory utilization for page table
- 46, 47์ชฝ:
- edi -> &array[0]
- edx -> i
- 4 -> &(array + i * sizeof(int))
- array๋ ์์ชฝ ์ฃผ์์ ์๋ค(4๋ง) ์๋ํ๋ฉด function ๋ด๋ถ(stack)์ ์ ์๋์ด์๊ธฐ๋๋ฌธ์
- ๊ทธ๋ํ์ ์๋ฏธ: paging๋๋ฌธ์ memory access๋ฅผ ํ๋ฒ ๋ํด์ผํ๋ค(page table ํ๋ฒ+์ค์ ๊ฐ์ fetchํ๊ธฐ ์ํด ํ๋ฒ)
08 Translation Lookaside Buffers
- ํ๋ก๊ทธ๋จ ์คํ ์๊ฐ์ clock cycle ์๋๋ณด๋ค cache์ ์ํด ๊ฒฐ์ ๋๋ค
- vpn: virtual page number
09 Concurrency
- multiple execution flows within a process
- ์คํ ๋จ์: thread
- ๊ฐ์์ program counter์ register๋ฅผ ๊ฐ์ง๊ณ ์๋ค
- address space๊ฐ ๋ฐ๋์ง ์๊ธฐ ๋๋ฌธ์ process๊ฐ์ context switching ๋ณด๋ค ๋น ๋ฅด๋ค
- race condition(=data race)
- ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋/ํ๋ก์ธ์ค๋ฅผ ๋์์ ๋๋ฆด ๋ ๊ฐ์ ๋ณ์๋ฅผ ์์ ํ๋ฉด ๊ทธ ์ฌ๋ฌ๊ฐ๋งํผ ์์ ๋์ง ์์ ๋
- atomicity๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด lock์ ์ด์ฉํ์ฌ ์๊ณ ์์ญ์ ์ง์ ํด์ฃผ์ด์ผ ํจ
- performance๊ฐ ์ฆ๊ฐํ๋ค๊ฐ ์ ์ง๋์ง ์๊ณ ๊ฐ์ํ๋ ์ด์ (spinlock์์)
- 1. convoy effect
- t1์ด ๋ฝ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด ๋ค๋ฅธ ์ค๋ ๋๋ค๋ cpu๋ฅผ ์ฌ์ฉ(burn)ํ๊ณ ์์ง๋ง t1๋ฝ์ด ํ๋ฆด๋๊น์ง ๋ญ๊ฐ๋ฅผ process ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ์ ๋ฉํฐ์ฐ๋ ๋ ์ํฉ์ performance๋ฅผ worsenํ ๋ฟ์ด๋ค
- ๊ทธ๋์ critical section๋ ์ ์ผ๋ฉด ์ ์์๋ก ์ข๋ค
- lock holder์ธ t1์๊ฒ cpu์๊ฐ์ ๋ง์ด ์ฃผ์ด์ ์ธ๋ฝ์ ๋นจ๋ฆฌ ํ ์ ์๊ฒ ํ๋ฉด ์ข๋ค
- 2. cache invalidation
- ๋ฝํ๋๊ฐ ์บ์ฌ์ ์๋ ๊ฐ์ ๋ฐ๊พธ๋ฉด ๋ค๋ฅธ ์ฐ๋ ๋๋ค์๊ฒ ๊ฐ์ ๋๊ฐ์ด ๋ฐ๊พธ๋ผ๊ณ ๋ณด๋ด๋ ๋ฉ์์ง. ๋ฉ์์ง๊ฐ ์๋ ๋์์๋ process๋ฅผ ํ ์ ์์
- ํ๋์จ์ด์ ๋ฉ์์ง (๋ฉ๋ชจ๋ฆฌ ๋ฒ์ค)
- moesi, mesi protocol
- Thread API
- process์ ์์์ fork. thread์ ์์์ start_routine
- join: ์ด๋ค ์ค๋ ๋๊ฐ ๋๋ฌ๋์ง ์๋๋ฌ๋์ง ์ ์ ์๋ ๋ฐฉ๋ฒ
- BSP(Bulk Synchronous Processing): ํ ํ์คํฌ๋ฅผ ์ฌ๋ฌ ์ค๋ ๋๋ก ๋๋ฆฌ๊ณ , ๋ค์ ํ์คํฌ๋ก ๊ฐ ๋ ์ด์ ์ค๋ ๋๋ค์ด ๋ชจ๋ ๋๋ฌ๋์ง ํ์ธํด์ผํจ
- trylock(lock์ด ๋์ด์์ผ๋ฉด failure, ์๋์ด์์ผ๋ฉด ๋ฝ - opportunistic locking), timelock(์ผ์ ์๊ฐ ์ดํ ๋ฝ์ ํ์)
- condition variables: thread์ ์ํ๋ฅผ ๋ํ๋(wait(=sleep)/signal(=wake))
- ๋ฝ ์์์ ์๋ฉด ์๋จ. ์๋ฌด๋ ๊นจ์ธ์๊ฐ ์์โฆ
- ๊ทธ๋์ ๋ฝ ์์์ ์ ๊ฒฝ์ฐ ๋ฐ๋ก ๋ฝ์ ํ์ด์ผํจ
10 Locks
- ๋๊ฐ์ง ์ํ๊ฐ ์๋ค: available = unlocked, acquired = locked
- pthread๋ lock์ ๊ด๋ จํ ์ฌ๋ฌ api๋ฅผ ์ ๊ณตํ๋ค
- interrupt๋ ํ์ฌ execution flow๋ฅผ ๋ฐฉํดํ ์ ์๋ ์ต์์ priority๋ฅผ ๊ฐ์ง๋ค
- lock์์ interrupt๋ฅผ disableํ๋ค? ์๋จ. ๋ค์ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค
- atomic instruction์ ์ฌ์ฉํ๋ ์ ์ ์์ฌ์ฉํ๋ ์ ๊ฐ shared variable์ ์ฌ์ฉํ๊ธฐ ์ํ๋ฉด atomicity๋ฅผ ๋ณด์ฅํ ์ ์์. ๋ฐ๋ผ์ ๋ชจ๋ instruction์ด atomicํ๋๋ก ์ฃผ์ํด์ผํจ!!
- ๋ง์ฝ ์ด๋ค variable์ด ๋ฐ์ํ๋ ๊ณณ์ ๋ฝ์ ๊ฑธ๋ฉด ๊ทธ variable์ด ๋์ค๋ ๋ชจ๋ ์ฝ๋ ๋ถ๋ถ์ ๋๊ฐ์ด ๋ฝ์ ๊ฑธ์ด์ผํจ
- ticket lock์์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ : ๊ฐ์ ๋ฒํธ์ ํฐ์ผ์ด ๋๊ฐ์ ํ๋ก์ธ์ค์ ๋ฐ๊ธ๋ ๊ฒฝ์ฐ(ํฐ์ผ ๋ฐ๊ธ์ด atomicํ์ง ์์ ๊ฒฝ์ฐ)
- spinlock ํด๊ฒฐ๋ฐฉ๋ฒ
- spinํ๋ ค๊ณ ํ ๋ yieldํ๋ค
- context switch ๋น์ฉ ๋ฐ์
- ๋ฐ๋ผ์ critical section์ด ์์ ๋๋ spin waiting ํ๊ณ ํด ๋๋ yieldํ๋ฉด ์ข๋ค
- sleeping
- ์ด๊ฒ๋ ์ฃผ์ํ ์ ์ด ์์. ์์ํ ์ ๋๋ ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค
- futex
- ์์ํ ์ ๋๋๊ฒ์ ๋ฐฉ์ง
- two-phase locks
- lock์ ๋ ๋จ๊ณ(phase)๋ก ๋๋
11 File System
- file = named permanent storage
- data์ metadata๋ฅผ ํฌํจํ๊ณ ์๋ค
- directory
- collection of files/directories
- file system์ logically continuousํ๊ณ physically spreadํ๋ค. process์์์ page table์ฒ๋ผ
- file allocation table(FAT)
- โdirectโ mapping table
- allocation ์์ ์ด O(1)์ด๊ธฐ ๋๋ฌธ์ ์์ฃผ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค
- directํ๊ธฐ ๋๋ฌธ์ search๋ ์ค๋๊ฑธ๋ฆผ(linear time)
- ๋ฐ๋ผ์ general purpose์ ์ ์ ํ์ง ์์
- Inode
- fat์ ๋ฌ๋ฆฌ directํ์ง ์๊ธฐ ๋๋ฌธ์ ์์น๊ฐ ๋น๊ต์ ๋น ๋ฆ(logarithmic time)
- mmap: system call๋ก ํ์ง ์๊ณ memory operation์ผ๋ก ์คํ. a few cycle ๋ฟ์ด๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์์ฃผ ์ ์ฝ๋๋ค
- file system์ durableํ๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ
- writeํ๋ ๊ฒ์ ์์ฃผ ์ ์ฅ(survive in short term)
- ๋ฐ์ดํฐ๋ฅผ ์ค๋ ์ ์ฅํ ์ ์๊ฒ ํจ
- ๋ฐ์ดํฐ๋ฅผ ์ฌ๊ธฐ์ ๊ธฐ ๋ณต์ ํด๋์์ independence of failure๋ฅผ ๋ณด์ฅ
- RAID(Redundant Arrays of Inexpensive Disks)
- level์ด ์ฌ๋ผ๊ฐ์๋ก redundancy๊ฐ ์ฆ๊ฐ
- level 0: striping
- ๋ผ์ด๋๋ก๋น์ ์ด์ฉํ์ฌ ์ฌ๋ฌ ๋์คํฌ์ block์ ๋๋์ด ์ ์ฅ
- performance์ capacity๊ฐ ํ๋ฅญํจ
- ๊ทธ๋ฆผ์์ (0,1,2,3)์ ํ๋์ stripe set์ด๋ผ๊ณ ํ๋ค
- ์ค์ field์์ ์์ฃผ ๊ธฐ๋ณธ์ ์ด๊ณ ์ค์ํ technique
- no redundancy
- level 1: mirroring(=replication)
- redundancy๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์(๊ฐ์ data๋ฅผ ์ฌ๋ฌ๋ฒ ์ ์ฅ) ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค
- level 4: saving space with parity
- ํ๋์ ๋์คํฌ๋ฅผ ์ถ๊ฐํ์ฌ ๊ฐ์ stripe set์ ์๋ ์ ๋ณด๋ฅผ ํด๋น ๋์คํฌ์ ์ ์ฅ
- level 5: rotating parity
- parity block์ ํ๋์ ๋์คํฌ๊ฐ ์๋๋ผ ์ ์ฒด ๋์คํฌ์ ๋์๊ฐ๋ฉฐ ์ ์ฅ
- ๋ณดํต 0+1์ ํฉ์ณ์ ์ฌ์ฉํ๋ค
'CS > Lecture' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ปดํจํฐ๋น์ (0) | 2017.09.13 |
---|---|
์ง๋ฅํ์๋ฌผ์ ๋ณดํ (0) | 2017.09.13 |
์ธ๊ณต์ง๋ฅ (3) | 2017.09.12 |
์ปดํจํฐ๊ทธ๋ํฝ์ค (0) | 2017.09.12 |
๋ฐ์ดํฐ์ฌ์ด์ธ์ค (0) | 2017.09.12 |