: 사용자의 실수, 의도로 OS 파괴 가능
→ 남의 program이 내 program으로 침범
→ mov, ld 등 명령어 있으면 data까지 접근 가능
∵ loading되는 위치가 process마다 다름
→ function call (instruction 주소), pointer(data 주소) 등 주소에 관련된 모든 명령어 relocation
: a set of addresses that a process can use to address memory
→ process가 사용할 수 있는 주소값의 범위
→ 각 process는 독립적인 addr space 가짐
: address space supported by the HW
→ 0~MAXsys
: a process's view of its own memory
→ 0~MAXprog
e.g. MOV R0, @0xfffa620e
-> 0xfffa620e: virtual address→ relocation에 따라 DRAM의 physical address로
to make it easier to manage memory of multiple process
independent of location in physical memory
→ OS가 physical memory 속 위치 결정
→ DRAM의 주소와 전혀 상관이 없어짐
CPU가 처리하는 모든 instruction의 주소는 virtual
e.g. pointers, arguments to ld/st, pc, ect
MMU 통해서 virtual→physical 매핑
Address space
: 한 process가 사용할 수 있는 virtual address의 범위
** Intel에서 일반적인 CPU는 부팅시 physical address 사용하다가 setting 후 virtual로
: 프로그램이 실제 DRAM의 어느 위치에 있는자?
→이때 base register의 값은 program의 로딩 위치에 따라 다름
OS가 → program이 CPU 사용할 때 base register의 값 변환
: 이 program의 크기
→ virtual address의 허용 범위를 넘어섰는지?
-32bit window : process가 사용가능한 공간 (virtual) 0~2^32(4G)
-64bit window : 0~2^64(8G)
일반적으로 virtual >>> physical
→ not enough memory to hold all active process
→ 나머지는 disk에 (CPU 사용 불가능)
Two approaches
① Swapping
: 각 프로세스의 전체를 갖고와서 동작 후 다시 disk에
➁ Virtual Memory
: 프로그램의 일부를 main memory에서 동작할 수 있게
Disk에서 통째로 옮겼다가 다시 DRAM에 통째로 옮김
∵ base, limit register 사용
→ 쪼개서 DRAM에 넣으면?
여러 base, limit register 사용해야해서 복잡함
function call 등을 했을때 program이 늘어날 자리가 x
→ 옮기면? read/write 계속해서 시간 오래걸림
compaction : process 위치 조작해서 하나의 큰 공간으로
→ read/write의 반복으로 시간 오래걸림
: 메모리를 가상의 단위인 allocation unit으로 나누어서 관리
→ OS의 design에 따라 1k, 4k, ...
allocation unit이 작으면 bit map의 크기가 커짐
allocation unit이 크면 더 많은 memory 낭비
→ internal fragmentation
→ allocation unit을 byte로?
: fragmentation x ∵ byte가 최소 단위
searching a bitmap to find k consecutive 0 bits
→ slow operation
Bit map의 사이즈는 고정
→ 새 process 들어오면 쭉 훑으면서 빈 공간 있는지?
→ 앞에서부터 배치(first fit)하면 작은 fragmentation들이 계속 생김
double linked list로 구현
: 현재 entry의 이전 entry를 찾고 통합하기 편함
P와 H를 주소값으로 정렬
→ 새로 생성하는 process, swap-in process를 위한 메모리 할당 쉬움
전체 Linked list가 DRAM에 위치
: 공간 증가시 node의 개수 많아짐 → 유동적
장점
: allocation unit 작아도 node의 개수는 일정함
→ 1B로 잡아서 internal fragmentation 없앨 수 있음
Procee X 종료시의 가능한 경우
First Fit → 제일 빠름
: scans along the list until it finds a hole that is big enough
Nest Fit
: 지난번에 기억한 위치부터 검색
Best Fit
: searches the entire list & takes the smallest hole available
→ 느리고 남은 fragment가 계속 많아짐
Worst Fit
: takes the largest hole available
Quick Fit
: 같은 size의 hole node를 링크
External Fragmentation
: if the memory hole is too small to usable by any process
→ allocation unit 밖
Internal Fragmentation
: unused memory in allocation unit that is not available to other processes
→ allocation unit 안
Memory Compaction
: shift processes to make a big free memory hole
Partition size
: no size if appropriate for all process