공부/운영체제

[ 운영체제 ] 가상 메모리

haena02 2023. 2. 15. 11:54
반응형

1. 연속메모리 할당

 

1.1 스와핑

 

메모리에 적재된 프로세스 중에서 현재 실행되지 않는 프로세스들을 임시로 보조기억장치에 쫒아내고 빈공간에 새로운 프로세스를 적재하여 실행하는 방식을 스와핑이라고 한다. 

  • 스왑 영역 : 프로세스들이 쫒겨나는 보조기억장치의 영역
  • 스왑 아웃 : 실행되지 않는 프로세스가 메모리에서 스왑영역으로 옮겨지는 것
  • 스왑 인 : 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨 오는 것

 

1.2 메모리할당

 

메모리 내에 빈공간이 여러개 있다면 프로세스가 어디에 저장되어야할까?

  • 최초적합 (first fit) : 메모리 내의 빈 공간을 순서대로 검색하다가 첫번째 발견할 공간에 저장하는 방식
  • 최적적합 (best fir) : 검색해 본 후, 프로세스가 적재될 수 있는 공간중 가장 작은 공간에 저장하는 방식
  • 최악적합 (worst fit) : 프로세스가 적제될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식

 

1.3 외부 단편화

 

프로세스들이 메모리에 적재되었다가 나갔다가를 반복하다보면 사용하지 못하는 메모리에 연속되지 않은 작은 메모리 공간들이 생기게된다.

다 합쳐보면 용량이 꽤 되지만 실제로는 메모리에 조금씩 비어있어 프로세스를 적재하지는 못한다.

 

이를 해결하는 가장 대표적은 방안은 메모리를 압축하는 것이다. '여기저기 흩어져 있는 빈공간을 하나의 큰 빈공간으로 만드는 방법이다.

하지만 이 방법은 메모리에 있는 내용을 옮기는 과정에서 오버헤드를 야기한다.

 

2. 페이징을 통한 가상 메모리 관리 

 

가상 메모리는 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술이다.

 

2.1 페이징이란

 

페이징은 메모리와 프로세스를 일정한 단위로 자르고, 메모리를 불연속적으로 할당할 수 있게 하여 외부 단편화를 해결하는 기법이다.

페이징은 프로세스의 논리주소공간은 페이지라는 단위로 자르고, 메모리 물리 공간은 프레임이라는 단위로 자른 뒤, 페이지를 프레임에 할당하는 가상 메모리 관리 기법이다.

 

페이징에서도 페이지 단위로 스와핑을 사용할 수 있다.

이는 프로세스를 이루는 페이지 중 실행에 필요한 일부만 메모리에 적재할 수 있다.

 

2.2 페이지 테이블

 

프로세스가 메모리에 불연속적으로 배치되어있다면, CPU입장에서 이를 순차적으로 실행할 수 없다.

이를 해결하기 위해 논리주소에는 프로세스가 연속적으로 배치되도록 페이지 테이블을 이용한다. 

이렇게되면 물리 주소에서 프로세스들이 분산되어 저장되어 있어도 CPU에서 본 논리주소는 연속적으로 보일 수 있다.

 

프로세스마다 각자의 프로세스 테이블을 가지고 있고, 각 프로세스의 페이지 테이블은 메모리에 적재되어있다. 

그리고 CPU 내의 페이지 테이블 베이스 레지스터 (PTBR)은 각 프로세스의 페이지 테이블이 적재된 주소를 가지고 있다.

 

PTBR를 알면 테이블에 접근하기 쉽지만 메모리 접근시간이 두배 늘어난다.

이를 해결하기 위해 TLB라는 페이지테이블의 캐시 메모리를 둔다. 

이 또한 참조 지역성에 근거하여 최근 사용도니 페이지 위주로 가져와 저장한다.

실제로 사용된다면 TLB히트, 아니라면 TLB미스라고 한다. 

 

 

2.3 페이징에서의 주소 변환

 

특정 주소에 접근하려면 어떤 페이지,프레임에 접근하고 싶은지 접근하려는 주소가 페이지,프레임으로부터 얼마나 떨어져있는지를 알아야한다.

그래서 페이징 시스템에는 모든 논리주소가 기본적으로 페이지 번호변위로 이루어져 있다. 

 

페이지 번호를 알면 페이지 테이블에서 해당 페이지에게 할당해준 프레임을 찾을 수 있고 변위로 얼마나 떨어져있는지 알 수 있다.

 

2.4 페이지 테이블 엔트리

 

페이지 테이블의 각각의 행을 페이지 테이블 엔트리(PTE)라고 한다. 

페이지 테이블 엔트리에는 페이지/프레임번호 뿐만 아니라 유효비트, 보호비트, 참조비트, 수정비트가 들어있다.

  • 유효비트 : 메모리에 적재되어있는지 확인하여 해당 페이지에 접근하능한지 여부를 알려준다. 메모리에 적재되지 않은 페이지에 접근하려고 하면 페이지 폴트라는 예외가 발생한다. 
  • 보호비트 : 해당 페이지가 read, write, execute가 가능한지 표시하한다.
  • 참조비트 : CPU가 페이지에 접근할 적이 있는지 여부를 다타낸다.
  • 수정비트(더티비트) : 해당 페이지에 데이터를 쓴적이 있는지에 대한 여부를 나타낸다

 

3. 페이지 교체와 프레임 할당

 

3.1 요구 페이징

 

프로세스를 메모리에 적재할 때 모든 페이지를 적재하지 않고 필요한 페이지만 적재하는 기법을 요구페이징이라고 한다. 

과정은 다음와 같다

  1. CPU가 특정 페이지에 접근하는 명령어를 실행한다.
  2. 해당 페이지가 메모리에 있을 경우 (유효 비트 1) CPU는 페이지가 절대된 프레임에 접근한다.
  3. 해당 페이지가 메모리에 없을 경우 (유효 비트 0) 페이지 폴트가 발생한다.
  4. 해당 페이지를 메로리로 적재하고 유효비트를 1로 설정한다. 

이런 시스템이 안정적으로 작동하려면 페이지 교체프레임 할당의 문제를 해결해야한다.

 

3.2 페이지교체 알고리즘

 

페이징기법으로 페이지들을 적재하다 보면 언젠가 메모리가 가득차게된다.

이때 많은 페이지 중에서 어떤 페이지를 내보낼지 결정하는 알고리즘이 필요하다.ㅍ

페이지 폴트를 적게 일으킬수록 좋은 알고리즘이라고 평가한다.

 

FIFO 페이지 교체 알고리즘

이는 가장 단순하게 메모리에 가장 먼저 올라온 페이지부터 내쫒는 방식이다.

아이디어와 구현이 간단하지만 좋은 알고리즘은 아니다.

2차 기회 페이지 교체 알고리즘

이는 기본적으로 FIFO와 비슷하지만, 가장 오래된 페이지의 참조비트가 1이라면 CPU가 접근했었던 것이므로 참조비트를 0으로 바꾸고 시간은 현재시간으로 바꾸어 기회를 한번 더 준다. 

최적 페이지 교체 알고리즘

이는 CPU에 의해 참조되는 횟수를 고려하는 알고리즘이다.

CPU에 의해 참조가 많이 되었다는 것은 자주 사용되었다는 것이므로 페이지폴트 빈도가 매우 낮다.

앞으로 오랫동안 사용되지 않을 페이지를 내보내는 알고리즘이라고 이해하면 된다. 

LRU 페이지 교체 알고리즘

이는 최근에 사용되지 않은 페이지는 앞으로도 사용되지 않을 것이라는 아이디어를 토대로 만들어진 알고리즘이다.

ㅍ페이지마다 마지막마다 사용한 시간을 토대로 최근에 가장 사용이 적었던 페이지를 교체한다.

 

 

3.2 스래싱과 프레임 할당

 

프레임의 개수가 적을수록 페이지 폴트가 잘 일어난다.

이 때문에 프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해되는 문제를 스래싱(thrashing)이라고 한다. 

 

메모리에서 동시실행되는 프로세스의 수를 멀티프로그래밍의 정도라고 한다.

이 정도가 높다면 현재 메모리에는 많은 프로세스가 동시에 실행중인 것이다.

 

멀티프로그래밍의 정도가 높다고 CPU를 잘 활용하는 것은 아니다.

각 프로세스들이 무리 없이 실행하기 위한 최소한의 프레임 수를 파악하고 프로세스들에 적절한 수만큼 프레임을 할당해 줄 수 있어야 한다.

 

프레임 할당 방식을 알아보자!

균등 할당 방식은 모든 프로세스에게 균등하게 프레임을 제공하는 방식이다.

이는 공평하긴 하지만 프로세스마다 크기가 매우 다르므로 합리적인 방법은 아니다. 

비례 할당 방식은 프로세스에 크기데 따라 프레임을 할당하는 방식이다. 

이 두 방법은 실행과정을 고려하지 않고 메모리 크기만 고려한다는 점에서 정적 할당 방식이라고도 한다. 

 

반면에 프로세스를 실행하는 과정에서 배분할 프레임을 결정하는 방식도 있다. 

작업 집합 모델 기반 방식은 실행 중인 프로세스가 일정 시간 동안 참조한 페이지의 집합을 기반으로 프레임을 할당한다.

페이지 폴트 빈도 기반 방식은 프레임 수에 따른 페이지 폴트율을 참고하여 상한선과 하한선을 정하고 이 범위 내에서 프레임을 할당한다. 

반응형