✅ 가상 메모리란?

가상 메모리는 메모리가 실제 메모리보다 많아 보이게 하는 기술입니다.
어떠한 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 올라가지 않더라도 실행이 가능하다는 점에 착안하여 고안되었습니다.

1️⃣ 가상 메모리의 기본

애플리케이션이 실행될 때, 실행에 필요한 일부분만 메모리에 올라가며 애플리케이션의 나머지는 디스크에 남게 됩니다.
(디스크가 RAM의 보조 기억장치(backing store)처럼 작동)

가상 메모리를 구현하기 위해서는 컴퓨터가 특수 메모리 관리 하드웨어를 갖추고 있어야만 합니다. MMU(Memory Management Unit)


2️⃣ 가상 메모리의 장점

  1. 사용자 프로그램이 물리 메모리보다 커도 됩니다. (메모리 크기의 제약이 자유롭다.)
  2. 각 사용자 프로그램이 더 적은 메모리를 차지하여 더 많은 프로그램을 동시에 수행할 수 있습니다.
  3. CPU 이용률과 처리율이 높아집니다.
  4. 프로그램을 메모리에 올리고 스왑 하는 필요한 입출력 횟수가 줄어듭니다.
  5. 가상 메모리 파일의 공유를 쉽게 하고 공유 메모리 구현을 가능하게 합니다.

4️⃣ 주소

virtual address(가상 주소): 프로세스가 참조하는 주소
physical address(물리 주소): 실제 메모리 주소

두 주소를 맵핑하는 로직이 있는데 그 로직을 담당하는 부분이 MMU입니다.


✅ 페이징 시스템

1️⃣ 페이징 시스템이란?

크기가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 관리하는 시스템 입니다.
현대에서 가장 많이 사용되고 있는 알고리즘 입니다.


2️⃣ 페이징 테이블

  • 물리 주소에 있는 페이지 번호와 해당 페이지의 첫 물리 주소 정보를 매핑한 표 입니다.

가상 주소 v = (p, d)
p : 가상 메모리 페이지
d : p 안에서 참조하는 위치

위 설명에서 p(페이지 번호)만 물리주소로 변환해도 d(변위)를 더해 원하는 주소가 있는 곳을 알 수 있습니다.


3️⃣ 페이징 시스템 동작 순서

  • 해당 프로세스에서 특정 가장 주소를 엑세스 하려면
  1. 프로세스의 페이지 테이블에 가상 주소가 포함된 페이지 번호 확인
  2. 있다면 페이지가 맵핑된 첫 물리 주소 확인 (p')
  3. 물리 주소 계산 (p' + d)

✅ MMU

  • MMU는 가상주소를 물리주소로 변환하고, 메모리를 보호하는 기능을 수행합니다.
  • MMU를 사용하게 되면, CPU가 각 메모리에 접근하기 이전에 메모리 주소 번역 작업을 수행합니다.
  • 메모리를 일일이 가상 주소에서 물리적 주소로 번역하게 되면 작업 부하가 너무 높아지므로, MMU는 RAM을 여러 부분(페이지, pages)로 나누어 각 페이지를 하나의 독립된 항목으로 처리합니다.

✅ 페이징 시스템과 MMU

  • CPU는 가상 주소 접근 시 MMU 하드웨어 장치를 통해 물리 메모리에 접근합니다.
  • 프로세스 생성 시, 페이지 테이블 정보를 생성하고 PCB등에서 해당 페이지 테이블 접근 후 관련정보는 물리 메모리에 적재합니다.
  • 프로세스 구동 시, 해당 페이지 테이블 base 주소가 별도 레지스터에 저장합니다.(CR3)
  • CPU가 가상 주소 접근 시, MMU가 페이지 테이블 base 주소에 접근해서 물리 주소를 가져옵니다.

✏️ 다중 단계 페이징 시스템

Page Directory로 영역을 구분하여, 그 중에 데이터가 있는 디렉터리만 페이지 테이블을 만들어 메모리 공간을 절약하는 시스템 입니다.

전체 페이지 32bit 중, 12bit는 원래대로 페이지 주소로부터의 변위를 나타내는 정보고, 나머지 20bit 중 10bit는 페이지 디렉터리 정보, 10bit는 해당 디렉터리의 페이지 테이블입니다.
리눅스에서는 3단계로 구분했다가, 최근에는 4단계로 나누어 처리하는 경우도 있습니다.

✅ MMU와 TLB

1️⃣ TLB(Translation Lookaside Buffer)

가상 메모리 주소를 물리적인 주소로 변환하는 속도를 높이기 위해 사용되는 캐시를 말합니다.

✏️ 발생 이유

  • 모든 가상 메모리 참조는 두 번의 물리 메모리 참조를 수반하기 때문입니다.
  • 두 배의 메모리 접근 시간을 갖기 때문입니다.

2️⃣ IPC

프로세스간 동일한 물리 주소를 가리킬 수 있습니다. (공간 절약, 메모리 할당 시간 절약)


✅ 요구 페이징(Demand Paging)

프로그램 실행 시 프로세스를 구성하는 모든 페이지를 한번에 메모리에 올리는 것이 아닌, 당장 사용될 페이지만 올리는 방식입니다.

✏️ 요구 페이징의 장점

* 필요한 페이지만 메모리에 적재하기 때문에 메모리 사용량이 감소
* 프로세스 전체를 메모리에 올리는 데 소요되는 입출력 오버헤드가 감소
* 사용되지 않는 주소 영역에 대한 입출력이 줄어 응답시간이 줄어든다.
* 시스템이 더 많은 프로세스를 수용할 수 있게 해준다.
* 물리적 메모리의 제약을 벗어날 수 있다. 

✏️ 페이지 폴트(Page fault)

어떤 페이지가 실제 물리 메모리에 없을 때 일어나는 인터럽트 입니다.
운영체제에서 Page fault가 일어나면, 해당 페이지를 물리 메모리에 올리게 됩니다.


✅ 페이지 교체 정책(page replacement policy)

페이지 교체 정책은 한정적인 메모리를 효율적으로 사용하기 위한 기법 중 하나입니다.
메모리에 올려진 페이지 중 어떤 것을 내리고 어떤 새로운 페이지를 올릴지를 결정함

1️⃣ FIFO 페이지 교체 정책

  • 가장 먼저 메모리에 올려진 페이지를 교체하는 방식입니다.
  • 일반적인 OS에서는 구현이 불가합니다.(예측이 불가능하기 때문에)

2️⃣ OPT 최적 페이지 교체 정책

  • 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 방식입니다.
  • 일반적인 OS에서는 구현이 불가합니다.(예측이 불가능하기 때문에)

3️⃣ LRU 페이지 교체 정책

  • 가장 오래전에 사용한 페이지를 교체하는 방식입니다.
  • OPT 교체 정책의 아이디어를 참고하여 과거 기록을 기반으로 구현한 정책입니다.
  • 가장 자주 사용되는 페이지 교체 정책입니다.

4️⃣ LFU 페이지 교체 정책

  • 가장 적게 사용한 페이지를 교체하는 방식입니다.

5️⃣ NUR 페이지 교체 정책

  • LRU와 마찬가지로 최근에 사용하지 않는 페이지를 교체하는 방식입니다.
  • 각 페이지마다 참조비트(R)와 수정비트(M)를 할당합니다.
  • (0,0) (0,1) (1,0) (1,1) 순서로 페이지를 교체합니다. (0 - false / 1 - true)
profile
#UXUI #코린이

0개의 댓글