본문 바로가기
CS/Operating System

[ OS 기초 ] 10. Virtual Memory Management

by IM조이 2021. 7. 19.

0. 가상 메모리 관리란 무엇인지, 관련된 개념
1. 가상 메모리 관리 - 하드웨어 컴포넌트
2. 가상 메모리 관리 - 소프트웨어 컴포넌트
3. 가상 메모리 관리 - 소프트웨어 컴포넌트 중 교체 전략 - FA, VA based를 중심으로 (다음에...)
4. 기타 가상 메모리 관리 시 고려해야 할 요소들   (다음에...)

 

00 개요

앞서 지금까지 메모리 관리를 연속 할당과 비연속 할당으로 나누어 살펴보았고, 비연속 할당에서 paging system, segmentation을 공부하며 가상 메모리를 접해보았다. 시스템을 보다 효율적으로 사용하기 위해서는 이러한 가상 메모리를 잘 관리할 필요가 있기 때문에 가상 메모리 관리를 위한 다양한 방법과 전략에 대해 살펴보았다.

 

01 가상 메모리 관리

비연속 할당( non-continuous allocation )에서 사용한 가상 메모리(가상 기억 장치)는 사용자의 프로그램을 블록 단위로 분할한 뒤 필요한 부분만 메인 메모리에 적재해 사용하는 방식의 시스템이며 대표적인 예로는 페이징 시스템과 세그멘테이션 시스템이 있다.

가상 메모리를 잘 관리하려는 목적은 시스템 성능의 최적화다. 결국 가상 메모리를 최적으로 사용해 시스템 성능을 향상시키겠다는 것인데 여기서 '성능 향상'을 잘 시켰는지 비교하기 위해서는 이를 나타내 줄 객관적인 지표가 필요하다. 이 지표 중 대표적인 게 코스트 모델(Cost Model)로 이 비용을 최소화 시킬 수 있는 다양한 기법을 사용함으로써 이 목적을 달성할 수 있다.

 

01-1 Cost Model & Page Fault
대표적인 Cost Model 중 하나가 Page Fault 기반의 Cost Model이다.

Page Fault : 페이지 시스템에서는 프로세스를 일정 크기(페이지)로 분할한 뒤, 메모리를 페이지 크기와 동일한 페이지 프레임으로 나눠, 이 프레임에 페이지를 적재시키는데 이때 적재되지 않은 나머지 프로세스들은 모두 가상 메모리의 Swap device에 있다.
- 만약 cpu가 필요로 하는 내용을 담은 페이지가 메인 메모리에 적재되어 있다면 이를 바로 참조
- 하지만 만약 없다면 (= page fault 발생) cpu를 반납하고 block 상태가 되어 필요한 데이터를 받아올 수 있게끔 swap device에서 이 데이터를 메인 메모리로 올려 해당 프로세스에 할당해주는 작업을 거쳐야 함 (block 될 때 context switch  발생)
- 그 다음에 다시 running 상태가 되어 작업을 이어나갈 수 있는데 이 전체 과정(프로세스를 반납하고 대기하다가 다시 시작하는)에서의 context switch와 커널 개입에 따른 오버헤드가 큼

따라서 이러한 오버헤드로 인한 코스트를 줄이기 위해서는 페이지 폴트를 낮춰야 하는데, 이때 페이지 폴트가 얼마나 자주 발생하는가에 대한 지표와 발생률을 하나의 코스트 모델로 잡을 수 있다.

 

01-2 Page Reference String
- 말 그대로 페이지 참조 문자열
- 앞서 참조했던 페이지들을 문자열로 기록해두는 것
- 지금까지 어떤 페이지들을 참조했는지에 대한 정보를 기록해두는 것이 핵심
- r(1)r(2)r(3)...r(k) : k는 페이지 번호

왜?
가상 메모리를 효율적으로 쓰기 위한 방법들을 고안해서 그 결과들을 비교하려 할 때 어떤 페이지들을 참조했는지에 대한 정보가 있어야 가장 최적의 결과는 무엇인지 찾고 이 결과와 비교할 수 있기 때문에. 결국 효율적으로 가상 메모리를 쓰기 위한 input으로 활용하기 위함. (효율적인 알고리즘 설계를 위한 기준)

 

01-3 Page Fault Rate (=F, 오메가)
- 지금까지 참조했던 전체 페이지 중 페이지 폴트가 났던 횟수
- 분모 : 프로세스가 실행하면서 참조했던 전체 페이지의 수
- 분자 : 페이지 폴트의 수
- 페이지 스트링의 길이 : |w|

 

 

02 가상 메모리 관리 - 하드웨어 컴포넌트

앞서 가상 메모리를 사용할 때 다양한 하드웨어, 소프트웨어 컴포넌트(장치, 요소 등)를 활용했다. 그중에서도 대표적인 하드웨어 컴포넌트로는 TLB와 같은 address translation device와 참조 여부, 갱신 여부 등을 파악하는 데 썼던 Bit Vectors가 있다.

 

02-1 Address Translation Device
- 주소 변환 장치. 효율적인 주소 매핑을 위해 사용한 하드웨어
ex. TLB(associative address mapping), dedicated page-table register, cache memories

02-2 Bit Vectors
- Bit : 0 또는 1의 값을 갖는 단위
- Vector : 일종의 array
- 0 또는 1의 값으로 구성된 어레이로 t/f여부 등 특정 정보를 담을 수 있음
- Bit Vector는 가상 메모리 관리 중 어떤 의사결정을 내릴 때 기준이 되는 정보가 될 수 있음
ex. 페이제 교체가 필요할 때, 어떤 페이지를 뺄 것인지 결정할 때 참조 여부(0/1) 정보를 보고 결정할 수 있음

  • Reference Bit Vector : 참조 비트. Used Bit. 해당 페이지 프레임이 최근에 참조되었는지의 여부
    • 최근 : 한번 0에서 1로 바뀌었다고 해서 영원히 1의 값을 갖는게 아니라 주기적으로 0으로 초기화됨
  • Update Bit Vector : 갱신 비트. Modified Bit, Write Bit, Dirty Bit. 데이터가 갱신되었는지의 여부
    • Dirty Bit라는 표현을 자주 사용하는데, 기존의 데이터가 더럽혀졌다 = 바뀌었다의 의미로 많이 사용
    • 갱신 비트 정보를 갖고 있어야 하는 이유는, 어떤 데이터의 값을 바꾸었을 때 현재 메모리에 올라있지 않고 스왑 디바이스에 있는 (그렇지만 그 데이터의 값을 활용하는) 페이지의 값은 그 데이터의 값이 바뀌었다는 사실을 모르기 때문에 서로 다른 데이터를 갖고 있게 되어 문제가 발생할 수 있기 때문
    • 만약 현재 작업을 하다가 데이터의 값이 바뀌었다면, 해당 페이지를 메모리에서 내릴 때 이 변경 사항을 swap device의 페이지들에도 반영해주어야 하고 이를 write back이라고 함
    • 참조 비트와는 달리 주기적인 초기화는 없으나, 메모리에서 내릴 때 이를 반영한 뒤 0으로 바꿔 초기화함.

이때 각 페이지마다 참조 비트와 갱신 비트가 존재하고, (PMT에 있는) 비트 값들을 확인한 뒤 어떤 페이지를 교체시키는 게 결과적으로 가장 효율적 일지 판단해 의사 결정을 내릴 수 있음

 

03 가상 메모리 관리 - 소프트웨어 컴포넌트

가상 메모리의 성능 향상을 위한 다양한 관리 기법 중 소프트웨어적인 기법으로는 다음과 같은 전략이 있음

  • Allocation Strategies
    • 각 프로세스에 얼마만큼의 메모리를 할당해 줄 것인지 
    • Fixed Allocation : 고정된 크기의 메모리를 할당
    • Variable allocation : 프로세스 실행 도중 유동적으로 메모리의 할당 크기를 조정
    • 최적의 방법은? 적당히 ^^
      • 너무 많이 할당하면 Too much allocation으로 낭비
      • 너무 적게 주면 시스템 성능 저하(page fault rate 상승)
  • Fetch Strategies
    • Fetch : 필요한 데이터를 가져오는 것
    • 가상 메모리의 swap device에 있는 데이터를 언제 메인 메모리에 적재할 것인지
    • Demand fetch : demand paging. 필요할 때, 요구할 때, 참조할 때 가져오기
    • Pre-paging : Anticipatory fetch, pre-fetching. 필요할 가능성이 높을 것 같은 상황에 가져오기
    • 최적의 방법은? -최적이라기보다는 Demand fetch 방식이 더 현실적
      • pre-paging의 경우 예측이 어렵고 예측 자체에 따른 오버헤드 O, 잘못 예측하면 page fault overhead 증가.
  • Placement Strategies
    • 세그먼트, 또는 페이지를 메모리 상의 어디에 적재할 것인가의 문제
    • paging system에서는 필요가 없지만 segmentation에서는 first fit, best fit, worst fit, next fit 등 배치 기법 활용
  • Replacement Strategies
    • 교체 기법. 만약 할당된 메모리 공간을 모두 사용하고 있는 상황에서 새로운 페이지나 데이터를 올려야 할 때 어떤 페이지와 교체할 것인지 선택하는 문제 (다음 차시에 살펴볼 것)
  • Cleaning Strategies
    • cleaning : 비트를 청소=초기화하는 것
    • Cleaning 전략은 언제 write back을 할 것인지에 대한 것
    • 갱신 비트의 경우 변경된 정보를 스왑 디바이스의 데이터에 모두 반영(write back)한 뒤 dirty bit를 0으로 다시 초기화
    • Demand Cleaning : 페이지가 메모리에서 나올 때 cleaning 
    • Anticipatory Cleaning : 만약 이다음에 다시 데이터가 변경되지 않을 것 같다면 미리 write back 하는 방법으로 시간을 절약할 수 있지만 이후에 내용이 수정될 경우 예측 실패에 따른 오버헤드 O
    • 최적의 방법은? - 최적이라기보다는 현실적으로 대부분의 os가 demand cleaning 사용
      • 실패에 대한 리스크가 상대적으로 크지 않고 성능도 준수하기때문
  • Load Control Strategies
    • Load : 부하
    • 멀티프로그래밍 디그리에 대한 문제
    • 멀티 프로그래밍 디그리가 높아지면 각 프로세스에 분배되는 메모리의 크기나 할당 방식에도 영향을 미침
    • 최적의 방법은? 적정 수준으로 유지하는 것 ^^
      • 너무 낮다면 : 저부하 => 자원 낭비, throughput 저하
      • 너무 높다면 : 고부하 => 자원 경쟁 심화와 성능 저하, thrashing 현상 발생(과도한 page fault)
      • 적정 수준 : plateau 상태로 최고의 throughput을 낼 수 있고, 이 수준보다 과해지면 성능 급격히 하락

 

 

**  KOREATECH 무료 OS강의(클릭) 학습 후 나름대로 이해한 뒤 정리한 내용입니다. **

 

[Course] Operating System (CPA310) - 운영체제 강의

o Operating System (운영체제), CPA310, KOREATECH o Instructor: Duksu Kim (김덕수) o Course homepage: https://sites.google.com/view/hpclab/courses/operating-system 운...

www.youtube.com

댓글