virtual memory 사용 시 page fault로 발생하는 성능 이슈에 대한 해결법을 다루는 파트다.
page fault frequency
, page fault rate
를 줄이는 것이 목표다
ω
= r1r2...ri...rtF(ω)
= (ω 중 page fault 수) / | ω |Address translation device : address mapping을 효과적으로 해주는 장치로 성능보단 기능적 완성을 위한 장치다.
Bit vectors
reference bit vector
: 해당 페이지 프레임이 참조됐는지 표시 (0 or 1) 한다. 주기적으로 0으로 reset하기 때문에 최근에 접근됐는지만 확인할 수 있따.
update bit vector
: page frame의 content가 변경됐을 때 표시한다. update된 상태에서 disk에 write-back
이 된 후엔 다시 0으로 저장한다.
아래 6가지 strategies 중에 allocation, replacement 기법이 시스템에 영향을 많이준다.
각 프로세스별로 page frame을 얼마나 할당해줄지 정하는 기법이다.
프로세스의 page들을 언제 메모리에 로딩할지 정하는 기법이다.
메모리로 들어오는 page를 어디에 배치시킬지 정하는 기법이다.
paging system
의 경우 주기억장치도 page 크기에 맞춰 page frame단위로 미리 고정 분할되기 떄문에 필요없다.
segmentation system
의 경우 first-fit, best-fit, worst-fit, next-fit 기법 중 선택해 사용한다.
꽉차있는 메모리에 page가 들어와야할 때 어느 page를 내보낼지 정하는 기법이다.
이 기법들에 대해서는 밑에서 자세하게 다룬다
Update된 page를 언제 write-back할지 결정하는 기법.
system의 multiprogramming degree(얼마나 많은 프로세스들에게 메모리를 할당할까)를 결정하는 기법이다.
많은 프로세스에게 메모리를 할당하면 각 프로세스당 할당받는 메모리의 크기는 줄어들기 떄문에 1번 allocation strategy와 연관되어있는 기법이다. multiprogramming degree를 올리면 throughput(처리량)이 계속 좋아질거같지만 너무 커지면 오히려 성능이 떨어지기 때문에 적절하게 degree를 결정해주는 것이 load control strategies가 하는 일이다.
그렇다면 왜 overloaded됐을 떄 성능이 떨어질까? 너무 많은 프로그램이 할당되면 한 프로그램당 allocation 크기가 줄어들 수 밖에 없고, 이 소리는 memory에 로드되는 프로그램의 page의 양이 적다는 의미이다. 그렇기 때문에 자연스럽게 page faults가 많이 발생해 성능이 떨어진다. 이런 현상을 thrashing
이라고 한다.
모든 프로세스는 program이나 data를 참조할 때 일부 영역에 국한되어 집중/반복 접근한다는 개념이다.
주로 프로그램이 가지고 있는 배열이나, Loop structure때문에 발생한다.
Temporal locality : 최근 접근한 부분을 시간이 지나면 다시 접근
Spatial locality : 접근한 지역과 가까운 부분을 접근
이런 locality의 특성을 잘 알고있어야 page fault를 최소화하기 위한 기법들을 만들 수 있다. 아래 예시를 보면 이해가 잘된다.