본문 바로가기
운영체제

메모리 관리 전략, 가상메모리 #5

by 성장하는 Sap린이 2020. 2. 14.

메모리 관리 전략(Memory Managing Strategy) 및  및 가상 메모리(Virtual Memory)

 

가상 메모리는 한정된 크기의 메모리 내에서 최대한 많은 프로세스를 할당하여 효율적으로 사용하기 위해 만든 기술로, 간단히 말하면 보조 기억장치를 주기억장치처럼 사용할 수 있게 하는 기술이다. 이를 통해 프로그램이 물리 메모리보다 커도 된다는 주요 장점이 있다. 용량보다 큰 프로그램은 실행을 할 수가 없다. 또 여러 프로그램을 메모리에 동시에 올리기에는 용량의 한계와 페이지 교체 등의 이슈가 발생하였다. 하지만 가상 메모리가 개발되면서 물리 메모리 크기에 제약을 받지 않게 되었고 더 많은 프로그램을 동시에 실행할 수 있게 되었고, swap에 필요한  I/O가 줄어들기 때문에 프로그램들이 빠르게 실행할 수 있다.

 

가상 메모리의 장점

  • 더 많은 프로그램을 실행할 수 있다.
  • 실제 물리 메모리의 크기에 제한을 받지 않는다.
  • 프로그램의 swap에 필요한 입출력 감소 (=프로세스의 일부분만 swap 하도록 처리)

메모리 관리 전략

메모리는 CPU가 직접 접근하는 유일한 저장장치로 메모리 시스템(하드웨어)은 주소(메모리 위치)를 관리하며 할당과 접근을 제어한다.

 

목적

  • 제한된 물리 메모리의 효율적인 사용 (할당)
  • 효율적인 메모리 참조(논리 - 물리 주소 할당)

이를 위한 메모리 전략은 크게 3가지가 있다.

 

스와핑 (Swapping)

 

 

CPU에서 실행 중이지 않은 프로세스의 메모리 이미지를 저장장치에 이동 (메모리 사용의 효율성 증가)

 

  • Swap in Ready Queue의 다음 프로세스가 메모리에 없다면
  • Swap out: 메모리 공간이 부족하면 다른 프로세스를 Swap out 후 Swap in
  • 단점: Context Switching Overhead

 

연속 메모리 할당(Contiguous Memory Allocation)

  • 각 프로세스가 필요로 하는 메모리 요구량을 분석해서 필요한 메모리를 연속으로 메모리에 할당하는 방식(연속된 물리 메모리이기 때문에 시작 주소만 알면 됨)
  • 동적 메모리 할당: 어떤 프로세스가 실행했을 때 이 프로세스가 들어갈 적당한 곳을 찾아 할당하는 것
    • 최초 적합 (First-fit) : 요청한 크기를 만족하는 첫 번째 가용 공간을 할당, 속도가 빠름
    • 최적 적합(Best-fit): 요청한 크기를 만족하는 가장 작은 공간을 할당, 남는 가용 공간을 최소화함
    • 최악 적합 (Worst-fit) : 가장 큰 가용 공간을 할당, 가용 공간이 커서 활용 가능성이 높음, 검색 속도가 느리고, 메모리 이용 효율이 좋지 않음

메모리 할당 정책

주 메모리만 이용하는 경우 단일 프로세스 환경과 다중 프로세스 환경으로 나누어진다

단일인 경우 오버레이 방식이 있고, 다중일 경우 아래에 연속 할당 방식처럼 고정 방식과 가변 방식으로 나누어진다.

 

하지만 프로그램의 크기가 커 주 메모리만으로 감당할 수 없을 때 가상 메모리를 사용하게 되는데 

가상 메모리는 다중일 주 메모리와 같이 고정 방식과 가변 방식으로 나누어지는데 고정 방식에는 페이징, 가변 방식으로는 세그멘테이션 방식이 있다.

 

- 연속 할당

주소 변환이 매우 간단하지만 단편화 문제가 많이 발생

 

1. 고정된 크기로 분할

2. 가변 분할

 

- 비연속 할당

연속 할당에 비해 단편화 문제는 적지만 주소변환이 복잡

 

4. 페이징

5. 세그멘테이션

 


 

고정된 크기로 분할

메모리의 크기를 전부 다 똑같이 분할할 수도 있고, 아닐 수도 있지만, 미리 정해진 크기만큼 주 메모리를 분할하여 프로그램들을 적재하는 방식이다. 

 

구현은 간단하지만 메모리 공간의 낭비라는 큰 단점을 가지고 있어 단편화가 발생한다.

단편화에는 외부 단편화 / 내부 단편화로 나뉜다.

 

외부 단편화 : 사용 가능한 공간을 합치면 충분한 공간이 되지만, 개별로 쓰기에는 너무 작은 조각들로 여러 곳에 분산되어있는 상황

 

내부 단편화 : 고정된 크기의 메모리보다 더 크게 할당된 상황

 

그림을 보면 하나의 분할에 하나의 프로그램들이 적재된다.

프로그램의 크기는 2라고 했을 때, 분할 1의 크기인 메모리에는 프로그램이 적재될 수 있다.

 

하지만 2의 경우에는 프로그램의 크기보다 작기 때문에 적재될 수 없는 상황이 발생하고 오른쪽 그림의 초록색 부분,

" 외부 단편화 " 현상이 발생한다. 

 

분할 3의 경우는 프로그램의 크기보다 고정된 메모리의 크기가 크기 때문에 메모리 낭비가 발생,

" 내부 단편화 " 현상이 발생한다.

 


 

가변 분할

 

 

사용 가능한 메모리 블록인 공간(hole)의 크기가 다양하여, 새로운 프로그램이 도착하면, 적재 가능한 충분한 크기의 메모리 공간을 할당해 주는 방식이다. 이런 방식에서 운영체제는 할당된 분할 수와, 사용 가능한 분할에 관한 정보를 유지해야 한다.

현재 프로세스 5,8,2가 메모리에 있는데 8 프로세스가 종료되면 그만큼의 공간이 생기고 그 공간으로 9 프로그램을 적재한다. 적재 후에도 사용 가능한 공간이 존재하기 때문에 10 프로그램 역시 적재할 수 있다. 

 

가변 분할의 경우 프로그램의 크기보다 사용 가능한 메모리 공간이 남는 내부 단편화의 현상은 없지만, 

중간중간에 종료되는 프로그램들이 존재하기에 hole 발생하는데 이런 현상으로 외부 단편화 현상은 발생할 수 있다.

 


 

페이징 (Paging)

 

  • 프로세스가 사용하는 주소 공간을 여러 개로 분할하여 비연속적인 물리 메모리 공간에 할당, 가상 메모리를 모두 같은 크기의 블록으로 편
  • 단위
    • 프레임 : 실제 메모리 공간 (4KB)
    • 페이지 : 프로세스의 메모리 공간 (4KB)
    • 프레임 사이즈 = 페이지 사이즈
    • 논리적 의미와 관계없이 크기가 모두 동일함
  • 페이지 테이블
    • 페이지 테이블 내에 프레임과 페이지가 서로 매핑이 되어 있어서 페이지 테이블을 참조하여 실제 메모리에 접근하게 됩니다.
    • 문제 : 매번 메모리의 페이지 테이블을 먼저 읽어야 하므로 메모리 접근 시간이 두 배가 된다 -> 페이지 테이블의 캐싱을 사용
  • 페이징과 Context Switching : 페이지 테이블을 재설정하기 위한 Context Switching이 발생
  • 공유 페이지 : 비교적 간단하게 메모리 공유

세그멘테이션 (Segmentation)

  • 프로세스가 필요로 하는 메모리 공간을 분할하여 비연속적인 물리 메모리 공간에 할당
  • 단위 : 세그먼트 (서로 다른 크기를 가짐)
  • 페이징과의 차이
    • 논리적 의미에 부합하도록 세그먼트들의 크기가 서로 다름
    • 크기가 다 다르기 때문에 메모리를 페이징 기법에서처럼 미리 분할해 둘 수 없고, 메모리에 적재될 때 빈 공간을 찾아 할당
  • 논리 주소 공간을 세그먼트 집합으로 정의 (세그먼트마다 별도의 독립된 주소 공간 제공)
  • 세그먼트 테이블
    • 사용자가 정의한 주소를 실제 주소로 맵핑하는 정보를 저장하고 있음
    • 개별 세그먼트는 항목별로 Base(세그먼트 시작 주소) + Limit(세그먼트 길이)의 정보를 같습니다.

 페이징 vs세그멘테이션

                                                   페이징                                           세그멘테이션

단위 페이지(가상 공간) / 프레임(물리 공간) 세그먼트
차이점 페이지와 프레임이 모두 같은 크기 논리적 의미에 따라 서로 다른 크기의 세그먼트를 가