요구페이징 / 가상메모리 / 세그멘테이션

담당
김준표
완료
완료
유형
OS
비고

가상메모리

물리적인 메모리 크기보다 큰 프로세스를 실행할 수 있도록 가상의 메모리 공간을 만드는 메모리 관리 기법
  • 프로세스 전체가 메모리에 올라오지 않더라도 실행이 가능하도록 하는 기법이다.
  • 실제로 이용 가능한 자원을 추상화하여 균일한 크기의 저장 공간으로 구성된 엄청나게 큰 배열로 추상화 시켜준다.
    • 작은 크기의 물리적인 메모리로도 큰 가상 주소 공간을 제공해준다.
  • 프로그램에 실제 메모리 주소인 물리 주소를 전달하지 않고 가상의 메모리 주소인 가상 주소(논리 주소)를 전달한다.
    • 이후 가상 주소의 공간은 메모리 관리 장치(MMU, Memory Management Unit)에 의해 물리 주소로 변환된다.
    • 일반적으로 MMU의 내부에 페이지 테이블이 있으며 이 페이지 테이블을 통해 물리 주소 변환을 수행한다.
 

가상메모리의 장점

  • 메모리 크기의 제약이 자유로워져 물리 메모리보다 프로그램이 커져도 상관없다.
  • 각 프로그램이 더 작은 메모리를 차지하므로 많은 프로그램들을 동시에 수행할 수 있지만, 응답시간은 늘어나지 않으면서 CPU 이용률과 처리율은 높아진다.
  • 프로그램을 메모리에 올리고 swap 하는데 필요한 입/출력 횟수가 줄어든다. 이를 통해 프로그램들이 더욱 빨리 실행된다.
  • 가상메모리 파일의 공유를 쉽게 해주고 공유 메모리 구현을 가능하게 한다.
  • 프로세스의 생성을 효율적으로 처리할 수 있는 메커니즘을 제공한다.

가상메모리의 단점

  • 구현의 난이도가 높다.
  • 페이지 스왑이나 Page Fault가 너무 자주 발생하는 경우 현저한 성능 저하가 발생할 수 있다.
 

요구 페이징

필요한 프로그램만 메모리에 적재하는 방법
notion image
  • 가상메모리 시스템에서 많이 사용되며, 프로세스를 페이지 단위로 나누어 실행에 필요한 부분과 필요하지 않은 부분을 나누고 당장 실행에 필요한 페이지만 메모리에 적재하는 방법이다.
  • 현재 실행이 필요하지 않은 페이지는 Backing store에 저장하고, 실행이 필요할 때 메모리에 올린다.
 

요구 페이징의 장점

  1. 메모리 효율성
      • 물리적인 메모리 공간은 최대한 아끼며, 필요한 페이지만 메모리에 적재하기 때문에 메모리 공간 사용이 효율적이다.
  1. 프로세스 실행 속도
      • 필요한 페이지만 적재하므로 한꺼번에 많은 페이지를 메모리에 올리지 않기 때문에 실행 속도가 빠르다.
  1. 대용량 메모리 지원
      • 가상 메모리를 사용하므로 물리적인 메모리보다 큰 용량도 지원이 가능하다.
  1. 프로세스 독립성
      • 각각의 프로세스는 독립된 가상 주소 공간을 가진다. 따라서 서로의 메모리에 영향을 미치지 않기 때문에 안정성과 보안성을 가진다.
  1. 유연한 메모리 할당
      • 페이지 단위로 메모리 할당이 되기 때문에 메모리 공간 할당이 유연하다.
  1. 높은 처리량
      • 필요한 페이지만 메모리에 올리므로 전반적인 데이터 I/O 작업이 줄어들어 처리량이 전반적으로 높아진다.
 

요구 페이징의 작동 원리

  1. 프로세스 실행
      • 프로세스 실행 시, 운영체제가 해당 프로세스의 가상 주소 공간을 만든다.
      • 필요한 페이지들만 물리적인 메모리에 적재하고 그 외의 페이지들은 모두 가상 주소 공간에 존재한다.
  1. Page Fault 발생 시
      • 프로세스는 실행 중이지만 필요한 페이지가 메모리에 없으면 발생하는 오류이다.
      • 운영체제는 해당 페이지를 Backing store에서 물리적인 메모리로 적재한다.
  1. 페이지 교체
      • 새로운 페이지를 로드해야 할 때 메모리 공간이 부족하다면 가장 오랫동안 사용되지 않은 페이지를 다시 Backing store로 옮기고 새로운 페이지를 적재하는 방식을 사용한다.
  1. 페이지 교체 알고리즘
      • 페이지 교체를 할 때, 어떤 페이지를 교체할지 결정하는 알고리즘이다.
      • 대표적으로 LRU(Least Recently Used) 알고리즘이 있다.
  1. 페이지 적재 시점
      • 페이지가 처음에 메모리에 적재될 때, 페이지 테이블에 해당 페이지가 메모리에 적재되었다는 정보를 저장한다.
      • 이후 해당 페이지를 참조할 때 마다 페이지 테이블을 검색하여 메모리 적재 여부를 판단하고 존재하지 않는다면 Page Fault를 발생시킨다.
  1. 페이지 BackStore 저장
      • 메모리에 적재되지 않은 페이지들은 모두 Backing store에 저장된다.
      • Backing store에서 Swap File이라는 특수한 형태의 파일에 저장된다.
 

Page Fault

페이지 부재라고 불리며, 페이지가 메모리에 존재하지 않을 때 발생하는 오류이다.
  • 운영체제는 각 프로세스에 대해 하나의 페이지 테이블을 가진다.
  • 페이지 테이블에는 해당 가상 페이지를 물리적 메모리의 어느 위치(프레임)에 매핑하는 정보와 valid-invalid bit가 존재한다.
    • 이 비트값이 v(valid, 1)이라면 해당 페이지는 물리 메모리에 적재되어 있다는 의미이고, i(invalid, 0)이라면 해당 페이지는 물리 메모리에 존재하지 않는다는 의미이다.
    • 즉, 비트값이 i인 경우 Page Fault가 발생했다고 한다.
  • Page Fault는 발생 횟수가 많을 수록 시스템의 성능이 저하되므로 페이지 교체 알고리즘을 최적화하여 발생 횟수를 줄이는 것이 중요하다.

Page Fault 과정

notion image
  1. 페이지 테이블을 통해 페이지가 i라면 MMU가 OS에게 요청하여 Page Fault Trap을 발생시킨다.
  1. Page Fault Trap이 발생하여 OS는 PCB에 존재하는 내부 테이블을 체크하여 참조할 수 없는 곳을 참조하는 부적절한 참조라면 프로세스를 중지시킨다. 그렇지 않고 메모리에만 존재하지 않는 상태라면 Backing store에 페이지가 존재하는지 확인한다.
  1. 만약 Backing store에 값이 있다면 4번 동작 과정으로 넘어간다.
  1. Backing store에서 필요한 페이지를 가져와 물리 메모리 공간에 비어있는 프레임으로 저장한다.
      • 이때, 만약 물리 메모리 공간의 프레임에 빈 공간이 없다면 페이지 교체 알고리즘을 통해 교체할 페이지를 골라 페이지를 교체한다.
  1. 페이지 테이블을 리셋하여 i 데이터를 v로 수정한다.
  1. 프로세스를 재실행한다.
 

Pure Demand Paging(순수 요구 페이징)

메모리의 페이지를 하나도 가지지 않은 상태로 프로세스를 실행하는 것
  • 프로세스 실행 초기에 Page Fault가 계속 발생하게 된다.
 

Thrashing 현상

너무 많은 Page Fault가 발생하여 시스템 성능 저하가 심각해지는 것
 
 
 
 

세그멘테이션

notion image
물리적인 고정 크기로 분할하는 페이징과 다르게 프로그램을 논리적인 내용 단위로 프로세스의 메모리 공간을 분리하는 기법
  • 논리적인 내용 단위는 대표적으로 method, function, object, stack 등 함수 단위 혹은 코드, 전역 변수, 힙 등으로도 구분지어 나눌 수 있다.
  • 일반적으로 논리 내용 단위로 자르기 때문에 크기가 같지 않다.
  • 세그멘테이션으로 분리된 단위들은 세그먼트라고 한다.
  • 각각의 세그먼트별 크기가 다르기 때문에 외부 단편화 문제가 발생할 가능성이 있다.
 

외부 단편화

세그멘테이션은 논리적인 단위로 나뉘기 때문에 세그먼트의 크기가 다양하고, 이로 인해 다양한 크기의 hole이 발생한다.
  • 다양한 크기의 hole이 발생하지만, hole에 완벽하게 세그먼트들을 할당하는 최적화 알고리즘이 존재하지 않기 때문에 메모리 낭비가 크게 발생하는 현상이다.
 

세그먼트 테이블

세그먼트의 번호와 시작 주소, 크기를 갖는 테이블
  • 세그먼트가 일정한 크기를 갖지 않기 때문에 크기에 대한 데이터가 있는 형태를 갖는다.
  • CPU는 해당 세그먼트의 크기를 넘어서는 주소가 들어오면 인터럽트를 발생시켜 프로세스를 강제 종료한다.
  • 논리적인 주소값으로 s(세그먼트 번호), d(오프셋)에 해당하는 값을 입력받고 d와 limit[s]을 비교하여 전자가 더 클 때 인터럽트를 발생시킨다.
    • ex) 논리 주소 (1, 500) / base[1]: 6300 limit[1]: 400
    • ⇒ 500 > 400, 인터럽트 발생
  • base[s] + d는 물리 주소를 의미한다.

출처