CS/운영체제
#16 가상 메모리 관리(Virtual Memory Management)
Scala0114
2022. 1. 19. 21:40
1. Cost Model
- 가상 메모리의 성능을 저하시킬 수 있는 요인들을 수치화하는 모델 => 비용(cost) 산출
- Page Fault 발생빈도
- Page Fault 발생률
- 비용을 최소화하는 기법을 통해 가상메모리를 관리, 성능을 최적화할 수 있음
=> Page Fault 발생률을 최소화하는 전략이 필요 - Page Reference String(d)
- 프로세스 실행 중 참조한 페이지 번호 순서
- 페이지의 총 갯수 N
- 페이지 번호 r(1) ~ r(n)
- Page Fault Rate
- F = (발생한 페이지 폴트 발생 횟수) / (참조했던 페이지 수)
2. Hardware Components
- 가상메모리 성능 향상을 위해 사용하는 하드웨어 장치
- Address Translation Device
- 주소 변환 장치
- 주소 매핑 과정을 빠르고 효율적으로 수행하기 위해 사용
- TLB(Translation Lookaside Buffer)나 Page Table 전용 레지스터 등
- Bit Vectors
- Page의 사용 상황에 대한 정보를 기록하는 비트
- PMT 내부에 존재
- Reference Bits(user bit)
- 참조 비트
- 해당 페이지 프레임이 최근에 참조되었는지를 기록
- 프로세스에 의해 참조되면 1로 설정, 주기적으로 0으로 초기화
- 참조 비트를 확인하는 것으로 해당 페이지가 최근에 참조된적이 있는지 확인 가능
- 페이지 교체 알고리즘에서 교체할 페이지를 선택하기 위한 정보로 활용 가능
- Update Bits(modified bits, write bits, dirty bits)
- 갱신 비트
- 해당 페이지 프레임의 데이터가 변경된 적이 있는지 기록
- 변경사항이 있는 데이터는 swap device에 변경 내용을 반영해야하기 때문에 필요한 비트
3. Software Components
- 가상 메모리 성능 향상을 위한 관리 기법
- 할당 전략(Allocation Strategies)
- 프로세스에게 얼마만큼의 메모리를 할당할 것인가
- 고정 할당(Fixed Allocation)
- 고정된 크기의 메모리를 할당
- 고정된 크기의 메모리를 할당
- 가변 할당(Variable Allocation)
- 프로세스 실행중에 할당된 메모리의 크기가 변경될 수 있음
- 프로세스 실행중에 할당된 메모리의 크기가 변경될 수 있음
- 고정 할당(Fixed Allocation)
- 프로세스의 실행에 필요한 메모리 크기의 예측
- 너무 큰 메모리를 할당하면 메모리가 낭비됨
- 너무 작은 메모리를 할당하면 page fault 발생률이 증가하여 성능이 저하된다(Thrashing)
- 프로세스에게 얼마만큼의 메모리를 할당할 것인가
- 적재 전략(Fetch Strategies)
- 특정 페이지를 어느 시점에 메모리에 적재할 것인가
- 요구 페이징(Demand Paging)
- 프로세스가 페이지를 참조하려고할 때 적재
- page fault 발생으로 인한 오버헤드 존재
- 예측 페이징(Pre-Paging)
- 참조될 가능성이 높은 page를 예측
- 가까운 미래에 참조될 가능성이 높은 page를 미리 적재
- 예측에 성공한다면 page fault로 인한 오버헤드가 없지만 실패하면 더 큰 오버헤드가 발생
- 참조 가능성이 높은 page를 예측하기 위한 오버헤드가 존재
- 실제로는 대부분 요구 페이징을 사용
=> 예측 페이징은 예측 자체의 오버헤드도 크고 예측에 실패했을 때의 리스크가 크기 때문
- 특정 페이지를 어느 시점에 메모리에 적재할 것인가
- 배치 전략(Placement Strategies)
- 비어있는 공간 중 어느 위치에 적재할 것인가
- Paging System의 경우 페이지단위로 할당하기에 불필요한 기법
- Segementation System의 경우 First-fit, Best-fit, Worst-fit, Next-fit 등의 기법이 존재
- 교체 전략(Replacement Strategies)
- 새로운 페이지를 메모리에 적재할 때, 메모리에 공간이 없다면 어느 페이지와 교체할 것인가
=> 어느 페이지를 해제할 것인가
- 새로운 페이지를 메모리에 적재할 때, 메모리에 공간이 없다면 어느 페이지와 교체할 것인가
- 정리 전략(Cleaning Strategies)
- 변경사항이 발생한 페이지(Dirty Bit이 1인 페이지)를 어느 시점에 write-back 할 것인가
- Demand Cleaning
- 해당 page가 메모리에서 해제될 떄 write-back 하는 방식
- 해당 page가 메모리에서 해제될 떄 write-back 하는 방식
- Pre Cleaning
- 더이상 변경될 가능성이 없다고 판단되는 시점에 write-back 하는 방식
- 더이상 변경될 가능성이 없다고 판단되는 시점에 write-back 하는 방식
- 적재 전략에서와 마찬가지로 실패했을 때의 리스크와 예측의 오버헤드로 인해
Demand Cleaning 방식을 주로 사용한다.
- 변경사항이 발생한 페이지(Dirty Bit이 1인 페이지)를 어느 시점에 write-back 할 것인가
- 부하 컨트롤 전략(Load Control Strategies)
- 시스템의 다중 프로그래밍 정도(multi-programming degree) 조절
- 사실상 할당 전략과 같음(멀티프로그래밍 정도에 따라 할당할 수 있는 메모리 크기도 달라지기 때문)
- 적정 수준의 multi-programming degree 를 유지
- 부하가 너무 적은 상태일 경우 시스템 자원이 낭비되고 성능이 저하
- 부하가 너무 큰 경우 자원에 대한 경쟁이 심화되고 성능이 저하
- 과도한 page fault 로 인한 성능 저하가 발생할 수 있음(Thrashing)
4. 기타 고려사항
- Page 크기
- page 크기가 작을수록 보이는 경향
- page 갯수증가 => page table 크기 증가 => page 관리 오버헤드 증가
- 내부단편화 감소
- 프로그램당 page 갯수가 증가하여 I/O 시간 증가
- 서로 무관한 데이터가 하나의 페이지에 들어갈 가능성이 줄어들어 Locality 향상
- page 갯수가 많기에 page fault 발생률도 증가
- page 크기가 클수록 보이는 경향
- page 갯수감소 => page table 크기 감소 => page 관리 오버헤드 감소
- 내부단편화 증가
- 프로그램당 page 갯수가 감소하여 I/O 시간 감소
- 서로 무관한 데이터가 하나의 페이지에 들어갈 가능성이 늘어나 Locality 저하
- page 갯수가 적기에 page fault 발생률 감소
- 최근 시스템에서 page 크기가 갈수록 커지는 경향을 보이는 이유?
- CPU의 처리속도는 빠른속도로 발전하고있지만 디스트(swap device)의 I/O 속도는 이를 따라가지 못함
- 메모리의 크기 또한 빠르게 커지면서 page fault 처리비용도 빠르게 증가
- 보다 적은 I/O시간, 보다 적은 page fault 가 최적의 성능을 내기 위해 가장 중요해짐
- page 크기가 작을수록 보이는 경향
- 프로그램 재구성(Program Restructuring)
- 가상 메모리 시스템의 특성에 맞게 프로그램을 재구성
- 사용자가 메모리 관리 기법에 대해 이해하고있다면 보다 효율적인 구조의 프로그램을 작성할 수 있음
- TLB reach
- TLB를 통해 접근 가능한 메모리의 크기
- TLB entry number * page size
- TLB reach가 커질수록 hit ratio는 증가, 성능도 증가한다.