본문 바로가기
공부/OS 공부

[OS 공부] 가상 메모리

by 로디네로 2021. 2. 12.
반응형

 

가상메모리란 : 

'Virtual Memory'

 

프로세스 전체가 메모리에 올라가 있지 않아도 실행이 가능하게 하는 기법. 즉 필요한것만 올린다.

 

- 다중 프로그래밍을 위해서는 多중 즉 여러 프로세스들을 동시에 메모리에 올려두어야 한다. 이에는 많은 메모리가 필요하나 가상 메모리를 이용하면 프로그램이 물리 메모리보다 커도 실행된다는 장점이 있다.

 

 


 

개발 배경 : 

1. 프로세스가 실행되려면 코드의 전부가 물리 메모리에 올려야 했고, 이 때 메모리 용량보다 큰 프로그램은 실행할 수 없었다. 

 

2. 여러 프로그램을 동시에 올리려면 용량의 한계, 페이지 교체 등의 성능이슈 발생

 

3. 불필요한 프로그램이 메모리에 올라와 있을 수 있다. (가끔만 사용되는 코드)

 

 


 

하는 일 : 

1. 가상 주소 공간을 사용자에게 제공 - 

 

가상 메모리는 물리 메모리와 논리 메모리 개념을 분리한 것으로, 작은 메모리를 가지고 가상 주소 공간을 제공.

 

'A' 라는 프로세스는 물리적으로 Heap, Stack, Code, Data 의 영역이 필요하다. 이에 실제 물리 메모리에는 이들의 공간만 제공하고, 나머지 논리 메모리가 필요한 것은 필요할 때만 물리메모리에 요청한다.

 

2. 프로세스간 페이지 공유

 

가상메모리는 시스템 라이브러리가 여러 프로세스들 사이에 공유될 수 있게 한다.

 

따라서 각 프로세스들은 이 라이브러리들을 자신의 주소공간에 있는 것처럼 인식하지만, 실제 물리메모리는 공유되고 있다.

 

 


 

사용되는 기법 : 

1. 요구 페이징 (Demand Paging) -

 

프로그램 실행 전 프로그램 전체를 물리 메모리에 적재하는 대신, 필요한 것들만 적재하는 전략이다.

 

가상 메모리시스템에서 많이 사용되며 그 가상 메모리는 대게 페이지로 관리된다.

 

요구 페이징을 사용하는 가상 메모리에서는 필요한 페이지들이 적재되게 된다.

 

단 한번도 접근되지 않은 페이지는 물리메모리에 적재되지 못한다.

 

프로세스 내의 페이지들은 페이저에 의해 관리되며 페이저는 필요할 때만 페이지들을 물리 메모리로 읽어 옮으로, 시간낭비와 메모리 낭비를 줄일 수 있다.

 

 

2. 페이지 교체 -

 

요구 페이징에서 프로세스 동작에 필요한 페이지를 요청하는 과정에서 page fault가 발생하게 되면, 가져오지 못한 페이지를 보조저장장치에서 가져온다.

 

하지만 물리 메모리가 모두 사용중인 상황이면 페이지교체가 이뤄져야 한다.

페이지 교체의 방법
1. 필요한 페이지의 위치를 디스크에서 찾는다.
2. 빈 페이지 프레임을 찾는다.
3. 새롭게 비워진 페이지 테이블 내 프레임에 새 페이지를 읽어오고, 프레임 테이블을 수정한다.
4. 사용자 프로세스를 재시작한다.

 


 

페이지 교체 알고리즘 : 

 

  • FIFO 페이지 교체

First In First Out 의 흐름을 가지는 알고리즘으로, 물리메모리에 먼저 들어온 페이지 순서대로 페이지가 교체될 때 먼저 나가게 된다.

 

장점 :

- 쉬운 알고리즘

 

단점 :

- First in 한 페이지가 활발하게 사용되는 페이지여도 페이지를 교체해서 페이지 부재율을 높일 수 있다.

- Belady의 모순 (Belady's Anomaly : 벨레이디의 모순)이 발생, 페이지를 저장할 수 있는 프레임 갯수를 늘려도 페이지 부재가 더 많이 발생하는 모순

https://en.wikipedia.org/wiki/B%C3%A9l%C3%A1dy%27s_anomaly

벨레이디의 모순은 위와 같이 원래 페이지 프레임의 개수 (3->4)를 늘리면 page fault의 발생이 감소 해야 하나, 오히려 늘어나는 경우이다.

 

 

  • 최적 페이지 교체 (Optimal Page Replacement)

Belady의 모순이 발생하지 않게 하기 위한 알고리즘으로 앞으로 가장 오랫동안 사용되지 않을 페이지를 예측하여 찾아서 교체하는 것이다.

 

장점 : 

- Page fault 비율이 낮다.

 

단점 : 

- 앞으로 사용되지 않을 프로세스를 찾는 방법이 어렵다. (구현의 어려움)

 

 

  • LRU 페이지 교체 (Least Recently Used)

가장 오랫동안 사용되지 않은 페이지를 선택해서 교체

 

- 대체적으로 FIFO 알고리즘보다 우수, OPT알고리즘보다는 좋지않음

 

 

  • LFU 페이지 교체 (Least Frequently Used)

참조 횟수가 가장 적은 페이지를 교체하는 방법

 

- 참조 횟수를 기준으로 하기 때문에 A라는 프로세스가 초반에만 많이 쓰이고 이제는 쓰이지 않는데, 참조가 많이 된 것은 사실이므로 메모리에 계속 머무를 수 있다. 이에 낭비가 될 수 있다.

 

 

  • MFU 페이지 교체 (Most Frequently Used)

참조 횟수가 가장 적은 페이지가 1. 최근에 메모리에 올라왔는가 2. 앞으로 계속 사용될 것인가를 본다.

 

- OPT 페이지 교체를 제대로 근사하지 못한다는 단점이 있어 잘 쓰이지 않는다. (예측을 할수없기때문)

반응형

댓글