[WEEK 06] 컴퓨터 시스템 - 9. 가상메모리

신호정 벨로그·2021년 9월 9일
0

Today I Learned

목록 보기
26/89

9. 가상메모리

한 시스템의 프로세스들은 CPU와 메인 메모리를 다른 프로세스들과 공유한다.

메모리를 보다 효율적이고 더 적은 에러를 갖도록 관리하기 위해서 가상메모리라고 하는 메인 메모리의 추상화를 제공한다.

가상 메모리는 각 프로세스에 하나의 크고 통합된, 사적 주소공간을 제공한다.

  1. 메인 메모리를 디스크에 저장된 주소공간에 대한 캐시로 취급해서 메인 메모리 내 활성화 영역만 유지하고, 데이터를 디스크와 메모리 간에 필요에 따라 전송하는 방법으로 메인 메모리를 효율적으로 사용한다.

  2. 각 프로세스에 통일 된 주소공간을 제공함으로써 메모리 관리를 단순화한다.

  3. 각 프로세스의 주소공간을 다른 프로세스에 의한 손상으로부터 보호한다.

가상메모리는 중앙에 자리한다.
:가상메모리는 모든 컴퓨터 수준에 스며들어 있으며, 하드웨어 예외, 어셈블러, 킹커, 로더, 공유 객체, 파일, 프로세스를 설계하는 데 중요한 역할을 수행한다.

가상메모리는 강력하다.
: 가상메모리는 응용에 메모리 블록을 생성하고 없애고, 메모리 블록을 디스크 파일의 부분으로 매핑하고, 메모리를 다른 프로세스들과 공유할 수 있다.

가상메모리는 위험하다.
: 응용은 이들이 변수를 참조하고, 포인터를 역참조하고, malloc 같은 동적 할당 패키지로 호출할 때마다 가상메모리와 상호작용한다.

9.0 메모리의 구성

  1. 코드 영역: 실행할 프로그램의 코드가 저장되는 메모리 공간
  2. 데이터 영역: 전역변수와 static 변수가 할당되는 메모리 공간
  3. 힙 영역: 동적 메모리 할당 영역
  4. 스택 영역: 지역변수와 매개변수가 할당되는 영역

힙 영역으로의 접근은 포인터를 통해서만 이루어진다.

9.1 물리 및 가상주소 방식

컴퓨터 시스템의 메인 메모리는 M개의 연속적인 바이트 크기 셀의 배열로 구성된다. 각 바이트는 고유의 물리 주소(PA)를 가진다.

CPU가 메모리에 접근하는 가장 자연스러운 방식은 물리 주소를 사용하는 물리 주소 방식이다. CPU가 로드 인스트럭션을 실행할 때 유효 물리 주소를 생성하고, 이것을 메모리 버스를 거쳐서 메인 메모리에 전달한다. 메인 메모리는 물리 주소에서 시작하는 워드를 선입하고, 이것을 CPU에 돌려주고, 다시 이것을 레지스터에 저장한다.

가상주소방식은 CPU는 가상주소지정으로 가상주소(VA)를 생성해서 메인 메모리에 접근하며, 이것은 메모리로 보내지기 전에 적절한 물리 주소로 변환된다.

9.2 주소 공간

주소공간비음수 정수 주소의 정렬된 집합이다. 만일 주소공간의 정수가 연속적이라면 이를 선형 주소공간이라고 한다.

가상메모리를 갖는 시스템에서 CPU는 가상 주소공간이라 불리는 N = 2^n 주소의 주소공간에서 가상의 주소를 생성한다.

주소공간은 데이터 객체와 주소들 간에 명확한 구별을 해주는 개념이기 때문에 중요하다.

각 데이터 객체가 다중 독립 주소를 가질 수 있도록 하고, 각각의 주소는 서로 다른 주소공간에서 선택되었다.

9.3 캐싱 도구로서의 VM

가상메모리디스크에 저장된 N개의 바이트 크기의 셀 배열로 구성된다. 각 바이트는 특정한 가상주소를 가지며, 배열의 인덱스로 작용한다. 디스크 안의 배열 정보는 메인 메모리에 캐시된다.

메모리 계층구조 안에 있는 캐시는 블록 단위로 분할이 되며, 디스크와 메인 메모리 사이에 징검다리 역할을 한다.

VM 시스템가상메모리를 규정된 사이즈 블록 단위로 분할하여 관리하며, 분할된 블록들은 가상페이지라 부른다. 물리 메모리도 물리페이지로 분할되어 사용되며 물리 프레임이라고도 불린다.

9.3.1 DRAM 캐시의 구성

CPU와 메인 메모리 사이에서 L1, L2, L3 캐시 메모리를 SRAM 캐시라고 부르며, DRAM 캐시라는 용어는 가상페이지를 메인 메모리로 캐싱하는 VM 시스템 캐시를 말한다.

9.3.2 페이지 테이블

모든 캐시에서처럼 VM 시스템은 가상페이지가 DRAM 어딘가에 캐시되었는지 결정하기 위한 방법을 갖고 있어야 하고, 이 시스템은 어떤 물리페이지를 캐싱했는지 결정해야 한다.

시스템은 디스크 어디에 가상페이지가 저장되어 있는지 결정해야 하며, 물리 메모리 중에서 희생자 페이지를 선택해야 하고, 가상페이지를 디스크에서 DRAM으로 복사해서 희생자 페이지를 교체한다.

이러한 역량은 운영체제 소프트웨어와 MMU 내의 주소 번역 하드웨어, 가상페이지를 물리페이지로 매핑하는 페이지 테이블이라고 알려진 물리 메모리에 저장된 자료구조의 조합으로 제공된다.

주소 번역 하드웨어는 이들이 가상주소를 물리 주소로 변환할 때마다 페이지 테이블을 읽는다.

페이지 테이블은 페이지 테이블 엔트리(PTE)의 배열이다.

유효비트가 세팅되어 있지 않다면, NULL 주소는 가상페이지가 아직 할당되지 않았음을 나타낸다.

9.3.5 페이지의 할당

운영체제가 가상메모리의 새로운 페이지를 할당할 때, malloc을 호출한 결과로, 페이지 테이블 상의 효과를 보여준다.

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

운영체제는 각 프로세스마다 별도의 페이지 테이블을 제공하며, 별도의 가상 주소공간을 제공한다.

요구 페이징과 분리된 가상 주소공간의 조합은 메모리가 시스템에서 사용되고 관리되는 방식에 중요한 영향을 미친다. 특히 VM은 링킹 과정과 로딩, 코드와 데이터의 공유, 응용으로의 메모리 할당을 단순화해 준다.

  1. 가상메모리는 링킹을 단순화한다.
    : 별도의 주소공간은 각 프로세스들이 각 메모리 이미지에 대해서 코드와 데이터가 실제로 물리 메모리 내 어디에 위치하는지에 상관없이 동일한 기본 포맷을 사용하도록 해준다.

  2. 가상메모리는 로딩을 단순화해 준다.
    : 가상메모리는 실행파일과 공유 목적파일들을 메모리에 로드하기 쉽게 해준다. 각 페이지가 최초로 참조될 때, CPU가 인스트럭션을 선입하거나 메모리 위치를 참조하는 인스트럭션을 실행할 때, 데이터는 요청에 의해 자동으로 페이지화된다.

연속된 가상페이지를 임의의 파일 내의 임의의 위치로 매핑하는 개념을 메모리 매핑이라 한다.

  1. 가상메모리는 공유를 단순화해 준다.
    : 운영체제는 대응되는 가상페이지를 중첩되지 않는 물리페이지로 매핑하는 페이지 테이블을 만든다.

  2. 가상메모리는 메모리 할당을 단순화해 준다.
    : 가상메모리는 추가적인 메모리를 사용자 프로세스에 할당하기 위한 간단한 메커니즘을 제공한다. 사용자 프로세스를 돌고 있는 프로그램이 추가적인 힙 공간을 요청할 때 (malloc을 호출해서), 운영체제는 적당한 수의 연속적인 가상메모리 페이지를 할당하고, 이들을 물리 메모리 내에 위치한 k개의 임의의 물리페이지로 매핑한다.

9.5 메모리 보호를 위한 도구로서의 VM

현대 컴퓨터 시스템은 운영체제가 메모리 시스템에 접근하는 것을 제어할 수 있는 수단을 제공한다.

9.7.2 리눅스 가상메모리 시스템

어떻게 실제 운영체제가 가상메모리를 구성하고 페이지 오류를 처리하는지

커널 가상메모리는 커널 내의 코드와 데이터 구조를 포함한다. 일부 커널 가상메모리 영역은 모든 프로세스가 공유하는 물리페이지에 매핑되어 있다. 각 프로세스는 커널의 코드와 전역 데이터 구조를 공유한다.

리눅스는 세그먼트라고 부르는 가상메모리 영역들의 집합으로 구성되며, 한 개의 영역은 기존 가상메모리의 연속된 묶음이다.

9.8 메모리 매핑

리눅스는 가상메모리 영역의 내용을 디스크의 객체에 연결해서 초기화하며 이러한 과정을 메모리 매핑이라고 한다.

0개의 댓글