정글 TIL 26 (02.17) "가상 메모리"

김동준·2024년 2월 17일
2

진심

목록 보기
7/15
post-thumbnail

9장 가상메모리

INTRO

한 시스템의 프로세스들이 메인 메모리를 공유할 때 어려움이 있습니다.
너무 많은 프로세스들이 메모리를 과도하게 요규하면 이들 중 일부는 실행 못 할 수도 있습니다.
또한 메모리 손실에도 취약할 수 있습니다.

가상 메모리란 현대 시스템에서 메모리를 보다 효율적이고 적은 에러를 갖도록 관리하기 위한 메인 메모리의 추상화입니다.
가상 메모리는 중요한 기능 세 가지를 제공합니다.

  • 메인 메모리를 디스크에 저장된 주소공간에 대한 캐시로 취급하여 메인 메모리 내 활성화 영역만 유지합니다. 데이터를 디스크와 메모리 간에 필요에 따라 전송하는 방법으로 메인 메모리를 효율적으로 사용합니다.
  • 각 프로세스에 통일된 주소 공간을 제공함으로써 메모리 관리를 단순화합니다.
  • 각 프로세스의 주소공간을 다른 프로세스에 의한 손상으로부터 보호합니다.

이러한 가상 메모리를 설명하기 위해, 전반부에서는 어떻게 가상메모리가 작동하는지 설명합니다.
후반부에서는 어떻게 가상메모리가 사용되고 응용에 의해 관리되는지를 설명합니다.

9.1 물리 및 가상 주소 방식

컴퓨터 시스템의 메인 메모리는 M개의 연속적인 바이트 크기 셀의 배열로 구성됩니다.
각 바이트는 고유의 물리주소(PA)를 가집니다.
이와 같은 구조에서 CPU가 메모리에 접근하는 가장 자연스러운 방식은 물리 주소를 사용하는 물리 주소 방식입니다.

위 그림은 물리 주소 4에서 시작하는 4바이트 워드를 읽는 로드 인스트럭션의 컨텍스트에서 물리 주소를 찾아가는 예를 보여줍니다.
1. CPU가 로드 인스트럭션을 실행할 때 유효 물리 주소를 생성합니다.
2. 이것을 메모리 버스를 거쳐서 메인 메모리에 전달합니다.
3. 메인 메모리는 물리 주소 4에서 시작하는 4바이트 워드를 선입합니다.
4. 메인 메모리는 이것을 CPU에 전달하고, 레지스터에 저장합니다.

현대의 프로세스들은 위와같은 가상주소 방식이라는 주소 형태를 사용합니다.

CPU는 가상주소 지정으로 가상주소(VA)를 생성해서 메인 메모리에 접근하며, 이것은 메모리로 보내지기 전에 물리 주소로 변환됩니다.
이처럼 가상주소를 물리주소로 변환하는 작업을 주소 번역이라고 합니다.
CPU 칩내 메모리 관리 유닛(MMU)에서 메인 메모리에 저장된 참조 테이블을 사용해서 실행 중에 가상 주소를 번역하며, 이 테이블의 내용은 운영체제가 관리합니다.

주소 공간

{0, 1, 2, ... , N - 1}

연속적인 비음수 정수 주소가 정렬된 집합을 선형 주소공간이라고 합니다.
주소 공간의 크기는 가장 큰 주소를 표시하는 데 필요한 비트 수이며, N=2^n의 주소를 갖는 가상 주소공간은 n-비트 주소공간이라고 부릅니다.
컴퓨터 시스템은 이 시스템 내의 M바이트의 물리메모리로 대응되는 물리 주소 공간을 갖습니다.

이러한 주소공간의 개념은 중요한데, 그것은 이 개념이 데이터 객체와 그들의 특성(주소)들 간에 명확한 구별을 해줍니다.

9.3 캐싱 도구로서의 VM

캐시(Cache)란?
데이터의 임시 저장소입니다.
CPU 캐시 : 자주 액세스하는 데이터와 명령을 저장하는 컴퓨터 중앙 처리 장치(CPU)에 내장된 소량의 메모리입니다. CPU 캐시를 사용하면 CPU가 데이터와 명령에 더 빠르게 도달할 수 있으므로 느린 주 메모리나 저장 장치로 자주 이동할 필요가 없습니다.
메모리 캐시 : 자주 액세스하는 데이터를 임시 저장하기 위해 별도로 확보한 메인 메모리(RAM)의 작은 부분입니다. 메모리 캐싱은 하드 디스크 드라이브나 네트워크와 같은 속도가 느린 저장 매체의 데이터에 액세스하는 데 걸리는 시간을 줄여 애플리케이션 성능을 향상시키는 데 도움이 됩니다.
디스크 캐시 : 하드디스크 드라이브나 SSD 등 디스크에서 최근 읽거나 쓴 데이터를 저장하는 데 사용되는 메인 메모리(RAM)의 일부입니다. 디스크 캐싱은 디스크에 대한 읽기 및 쓰기 작업 수를 줄여 시스템의 전반적인 성능을 향상시키는 데 도움이 됩니다.

캐싱(Caching)이란?
캐싱은 컴퓨터 응용 프로그램이 해당 데이터를 빠르게 검색할 수 있도록 컴퓨터의 주 메모리에 데이터를 일시적으로 저장하는 기술입니다. RAM에 액세스하는 것은 하드 디스크 드라이브나 네트워크와 같은 다른 미디어에 액세스하는 것보다 훨씬 빠르기 때문에 캐싱을 사용하면 더 빠른 데이터 액세스로 인해 애플리케이션이 더 빠르게 실행되는 데 도움이 됩니다.

가상 메모리는 디스크에 저장된 N개의 바이트 크기의 셀 배열로 구성됩니다.
각 바이트는 특정한 가상주소를 가지며, 배열의 인덱스로 작용합니다.
디스크 안의 배열 정보는 메인 메모리에 캐시됩니다.
VM system은 가상메모리를 규정된 사이즈 블록 단위로 분할하여 관리합니다. 분할된 블록들을 가상페이지라고 부릅니다.

가상페이지는 세 개의 중첩되지 않은 부분집합으로 나뉩니다.

  • Unallocated : 디스크 상에 어떤 공간도 차지하지 않는 할당되지도, 캐시되지도 않은 공간입니다.
  • Cached : 현재 물리 메모리에 캐시되어 할당된 페이지들입니다.
  • Uncached : 물리 메모리에 캐시되지 않은 할당된 페이지들입니다.

9.3.1 DRAM 캐시의 구성

디스크 섹터로부터 첫 번째 바이트를 읽는 비용은 섹터에서 연속적인 바이트를 읽는 것보다 약 100,000배 느립니다.
큰 규모의 미스 비용과 첫 번째 바이트를 접근하는 데 드는 비용 때문에 가상 페이지는 커지고 있습니다. DRAM 캐시에서의 모든 가상페이지는 물리페이지에 둘 수 있습니다.

9.3.2 페이지 테이블

VM 시스템은 가상페이지가 DRAM 어딘가에 캐시되었는지 결정하기 위한 방법을 가지고 있어야 합니다. 그리고 어떤 물리 페이지를 캐싱했는지 결정해야 합니다.
만일 미스가 존재한다면
1. 시스템은 디스크 어디에 가상페지이가 저장되어 있는지 결정해야 합니다.
2. 물리 메모리 중에서 희생자 페이지를 선택해야 합니다.
3. 가상페이지를 디스크에서 DRAM으로 복사해서 희생자 페이지를 교체해야 합니다.

이러한 기술은

  • 운영체제 소프트웨어
  • MMU 내의 주소 번역 하드웨어
  • 가상페이지를 물리 페이지로 매핑하는 페이지 테이블이라고 알려진 물리 메모리 내의 자료구조
    의 조합입니다.

주소 번역 하드웨어는 이들이 가상주소를 물리주소로 변환할 때 마다 페이지 테이블을 읽습니다.
운영체제는 페이지 테이블의 콘텐츠 관리와 콘텐츠 관리와 페이지들을 디스크와 DRAM 사이에서 왔다갔다 하는 것을 관장합니다.

페이지 테이블의 기본 구조는 페이지 테이블은 페이지 테이블 엔트리(PTE)의 배열입니다. 가상 주소공간의 각 페이지는 페이지 테이블 내에 고정된 오프셋 위치에 PTE를 갖습니다.
DRAM 캐시가 완전 결합성이므로 물리페이지가 모든 가상페이지를 포함할 수 있다는 점입니다.

오프셋(offset)은 상대주소입니다.

9.3.3 페이지 적중

CPU가 DRAM에 캐시되어 있는 가상메모리의 VP2 워드를 읽는 상황을 가정해보겠습니다.

주소 번역 하드웨어는 PTE2를 찾기 위해서 인덱스로 가상주소를 사용하고, 이것을 메모리에서 읽습니다. 유효비트가 세트되어 있기 때문에 주소 번역 하드웨어는 VP2가 메모리에 캐시되어 있다는 것을 알고 있습니다.

9.3.4 페이지 오류

DRAM 캐시 미스를 일컫습니다. CPU는 DRAM에 캐시되어 있지 않은 VP3 내의 워드를 참조합니다.

  1. PTE3를 읽으며, VP3가 캐시되어 있지 않다는 것을 유효비트로부터 유추해서 페이지 오류 예외를 유발시킵니다.
  2. 페이지 오류 예외는 커널 내에 페이지 오류 예외 핸들러를 호출해서 희생자 페이지인 PP3에 저장된 VP4를 선택합니다.
  3. VP4가 변경되었다면, 커널은 VP3를 디스크에서 메모리 내의 PP3로 복사하고, PTE3을 갱신한 뒤 리턴합니다.
  4. 핸들러가 리턴할 때 오류 인스트럭션을 재시작하고, 이것은 오류 가상주소를 주소 번역 하드웨어로 재전송합니다.

페이지는 가상 메모리 용어에서 블록입니다.

스와핑(swapping 혹은 페이징)은 디스크와 메모리 사이에서 페이지를 전송하는 동작입니다.

요구 페이징이란 미스가 발생할 때, 하나의 페이지로 스와핑되어 들어오는 마지막 순간까지 기다리는 전략입니다.

9.3.5 페이지의 할당

운영체제가 가상메모리의 새로운 페이지를 할당할 때(예를 들어 malloc) 디스크 상에 공간을 만들고, PTE 5를 디스크에 새롭게 만든 페이지를 가리키도록 할당합니다.

9.3.6 문제해결을 위한 또 한 번의 지역성의 등장

지역성의 원리는 시간상의 어느 시점에서라도 이들이 동작 집합 또는 거주 집합이라고 알려진 보다 작은 활성화된 페이지 집합에서의 동작하는 경향을 보일 것이라는 점을 약속해줍니다.

만일 동작 집합 크기가 물리 메모리보다 더 크면, 프로그램에서 쓰레싱(Thrashing)이라는 문제 상황이 발생할 수 있습니다. 이 경우 페이지들이 연속적으로 스왑해서 들어오고 나가기를 반복하게 됩니다.

9.4 메모리 관리를 위한 도구로서의 VM

여기까지 가상메모리가 일반적으로 더 큰 가상 주소공간에서 페이지를 캐시하기 위해 DRAM을 사용하기 위한 메커니즘을 보았습니다.

실제 운영체제에서는 각 프로세스마다 별도의 페이지 테이블을 제공합니다. 그래서 별도의 가상 주소 공간을 제공합니다.
또한 다수의 가상 페이지들이 동일한 공유된 물리페이지에 매핑될 수 있다는 점에 주목해야 합니다.

요구 페이징과 분리된 가상 주소공간의 조합은 메모리가 시스템에서 사용되고 관리되는 방식에 중요한 영향을 미칩니다.

  • 별도의 주소공간은 각 프로세스들이 각 메모리 이미지에 대해서 코드와 데이터가 실제로 물리 메모리 내 어디에 위치하는지에 상관없이 동일한 기본 포맷을 사용하도록 해줍니다. 이러한 통일성은 물리 메모리 상에서 궁극적으로 코드와 데이터의 위치에 독립적인 완전히 링크된 실행가능 파일을 만들 수 있게 해줍니다.
  • 가상메모리는 실행파일과 공유 목적파일들을 메모리에 로드하기 쉽게 해줍니다.
  • 별도의 주소공간은 운영체제에 사용자 프로세스와 운영체제 자신 사이에 공유를 관리하는 일정한 메커니즘을 제공합니다.
  • 페이지들은 물리 메모리 내에 랜덤하게 흩어져 있습니다.
profile
고민하고 고뇌하는 개발자 (점심, 저녁 메뉴를)

0개의 댓글