→ protection, relocation은 해결했지만 bloatware
1. Overlay 옛날방법
: programmer가 프로그램을 나눠서 올림
→ overlay 한번 더 call하면 memory→disk로 swap
2. Virtual Memory
: only parts of address space are loaded into physical memory
e.g. MOV REG, 1000
→ virtual address 1000은 MMU에 의해 physical address로 mapping
virtual address space와 physical memory가 fixed size unit으로 나뉨
: 해당 mapping정보는 page table에 저장
e.g. MOV REG 8196 → MOV REG 24580
: 어디로 mapping됐는지 항상 기억하고 있어야
: when accessing unmmapped page
→ trap to OS
→ OS가 LRU에다가 PT변경 → frame에 하나 할당
: 더이상 가상 page x1이 mapping x, 새로 가상 page x2가 mapping됨
→ fault 발생한 instruction restart
그림에서 offset = 12bits
∵ allocation unit = 4K
→ page의 시작부터 얼마나 떨어져 있는지??
: 아직 frame에 올라오지 않은 경우 (disk에 저장되어있음)
→ 내가 찾는 page가 DRAM에 x
→ disk에서 갖고오면 시간이 너무 오래걸림
→ process가 CPU 포기
→ 다른 process 수행
: virtual addr은 virtual page number :: offset으로 구성
→ physical addr은 page frame number :: offset
1 PTE per VPN
: 각 entry마다의 정보를 나타냄
present/absent (valid)
: PTE가 이용될 수 있는지?
→ 0: 해당 PTE가 비었음 → page fault (frame에 올라오지 x)
reference bit
: 해당 page가 fetch, ld, st될때 set
modify (dirty) bit
: 해당 page가 update 되었는지?
→ (주로 store) page에 write할때 set
e.g. st R0, ...
→ 해당 page update : DRAM과 Disk의 정보 달라짐
protection bit
: controls which operations are allowed
→ read(page의 data fetch), write, execute(해당 page의 명령어 수행 가능)
: page의 특성으로 없는데 하면 fault 발생
page frame number
: physical page 나타냄
→ physical page start addr = PFN << (#bits/page)
caching disabled
: I/O page for memory mapped I/O
→ data중 L1, L2등 캐쉬에 올라오면 안되는 데이터가 있음 e.g. I/O 사용 데이터
: 해당 페이지에 접근하지 못하게
memory의 할당/반환이 쉬움
∵ page단위(allocation)로 memory가 들어오고 나가므로
No external fragmentation
∵ page단위 이므로
DRAM < process 크기여도 상관 x (VAS > PAS)
∵ 현재 쓰는 frame 몇개만 있으면됨, 전체가 다 올 필요가 x
↔swapping
Internal fragmentation
∵ page를 다 쓰지 못해서 한 페이지 다 써야함
memory reference overhead
: page table이 메인 메모리에 있어서 매번 DRAM을 두번 access
→ 해결법 : TLB사용
page table의 overhead
: PT을 위한 memory 공간이 너무 큼 & process마다 할당
e.g. 32bits의 AS with 4KB page
→ 2^20 PTEs = 1048576 PTE
→ entry당 4B = 4MB/PT
frame# 2^36 4KB = 2^38 = 4GB 2^g
→ entry가 클수록 속도 느려져 entry 많이 만들 수 x