나만의 작은 도서관

[OS] 가상 주소(Virtual Address) 본문

Common/CS-일반

[OS] 가상 주소(Virtual Address)

pledge24 2025. 3. 10. 17:57

개요

프로세스의 메모리는 독립적이다. 즉, 다른 프로세스는 프로세스 메모리에 간섭할 수 없다.

그럼에도 불구하고, 프로세스는 다른 프로세스가 어떤 메모리 주소를 사용하던지 상관없이 메모리 주소를 사용할 수 있다.

예를 들어, 프로세스 A 가 0x1000이라는 주소를 사용하고 있어도, 프로세스 B가 0x1000이라는 주소를 사용해도 전혀 문제없다.

 

이렇게 각 프로세스가 같은 주소를 사용할 수 있는 이유는 프로세스가 사용하는 주소는 실제 주소가 아닌 "가상 주소"이기 때문이다. 

 


 

가상 주소란(virtual Address)?

가상 주소 구조

 

가상 주소는 운영체제(OS)의 "가상 메모리 시스템"에서 사용하는 주소다. 프로세스는 이 가상 주소를 통해 메모리에 접근할 수 있다.

 

운영체제가 가상 메모리(Virtual Memory) 시스템을 사용하는 이유로는 1) 물리 메모리(RAM) 크기와 상관없이 주소를 사용할 수 있다는 점, 2) 프로세스가 독립적인 메모리 구조를 가질 수 있다는 점, 3) 메모리 보호 기능, 4) 메모리 관리의 효율성(연속적인 가상 메모리를 비연속적으로 관리 가능) 등이 있다.

 

가상 주소는 실제 메모리를 가리키지 않는다. 그럼에도 가상 주소를 통해 메모리에 접근할 수 있는 이유는 OS가 관리하는 "페이지 테이블"을 통해 가상 주소를 실제 주소로 변환하여 사용할 수 있기 때문이다.

 


페이지 테이블(Page Table)

페이지 테이블

 

페이지 테이블은 가상 주소를 물리 주소로 변환할 때 필요한 매핑 정보를 저장하는 테이블 형식의 데이터 구조이다. 프로세스마다 독립적으로 존재하며, OS가 관리한다.

 

저장된 위치

페이지 테이블은 메인 메모리인 RAM에 적재되어 있다. 따라서, 페이지 테이블에 접근한다는 것은 RAM에 있는 데이터에 접근한다는 것을 의미한다.

 

페이지 테이블 엔트리(PTE, Page Table Entry)

페이지 테이블 엔트리는 페이지 테이블의 각 행들을 의미한다. 가상 주소 -> 물리 주소 변환에 대한 매핑 정보 뿐만 아니라, 다양한 정보들을 저장하고 있는데 아래와 같은 정보들을 저장하고 있다.

  • 가상 페이지 번호(VPN, Virtual Page Number), 물리 페이지 번호(PPN, Physical Page Number)의 매핑 정보
  • 페이지 보호 비트 (읽기/쓰기/실행 권한)
  • 페이지가 메모리에 존재하는지 여부 (미할당/페이지 폴트 여부)
  • 캐싱 정책등 추가 정보 저장

페이지(Page)

페이지는 운영체제(OS)의 메모리를 관리할 때 사용하는 메모리 단위로, 하나의 페이지는 고정된 크기를 가지며, 보통 4KB의 크기를 가진다.

 

페이지에 대한 자세한 내용은 아래 링크 글에 정리해 두었다. 

https://pledge24.tistory.com/443

 

페이지 테이블 동작 과정(간단 버전)

  1. 가상 주소 분해
    • 가상 주소는 가상 페이지 번호(VPN, Virtual Page Number) + 페이지 오프셋으로 이루어져 있다. 가상 주소에서 가상 페이지 번호, 페이지 오프셋으로 분해한다.
  2. 페이지 테이블 조회
    • CPU의 메모리 관리 장치(MMU, Memory Management Unit)가 페이지 테이블의 위치를 확인.
    • 페이지 테이블에서 가상 페이지 번호를 사용하여 물리 프레임 번호(PFN, Physical Frame Number 또는 물리 페이지 번호라고도 부름)를 찾는다.
    • 페이지 테이블에서 해당 페이지 번호에 매핑된 물리 프레임 번호(Frame Number)를 찾지 못했다면, 페이지 폴트(Page fault, 해당 페이지가 RAM에 없음을 의미)가 발생하며, 운영체제(OS)는 디스크(SSD/HHD)로 가서 해당 페이지를 가져와 메인 메모리에 페이지를 적재한 다음(Load), 페이지 테이블을 갱신한다.
  3. 물리 주소 계산
    • 물리 프레임 번호와 페이지 오프셋을 결합하여 물리 주소를 만들어낸다.
      • 물리 주소 = [물리 프레임 번호] + [페이지 오프셋]

TLB(Translation Lookaside Buffer)

TLB 구조

 

가상 주소 -> 물리 주소로 변환하기 위해 매번 페이지 테이블에 접근하는 것보단, 페이지 테이블에 있는 데이터를 캐싱하여 캐시 메모리에 들고 있는 것이 작업 속도가 더 빠를 것이다. 그래서, 일반적으로는 페이지 테이블의 데이터의 일부를 캐시 메모리에 들고 있게 되는데, 이러한 캐시 메모리를 들고 있는 자료구조를 TLB라고 부른다.

 

 

페이지 테이블 동작 과정(TLB 포함)

  1. 가상 주소 분해
    • 가상 주소는 가상 페이지 번호(VPN, Virtual Page Number) + 페이지 오프셋으로 이루어져 있다. 가상 주소에서 가상 페이지 번호, 페이지 오프셋으로 분해한다.
  2. TLB 조회(TLB Lookup)
    • 추출한 가상 페이지 번호를 TLB에서 검색.
    • 가상 페이지 번호가 TLB에 존재하면 (TLB Hit), 매핑된 물리 페이지 번호(PPN, Physical Page Number)를 찾았으므로 물리 주소 계산 단계(5번 과정)로 넘어간다.
    • 가상 페이지 번호가 TLB에 존재하지 않는다면 (TLB Miss), 페이지 테이블에 접근해서 해당 가상 페이지 번호에 대한 매핑 정보를 찾는다.
  3. 페이지 테이블 조회(TLB Miss시)
    • CPU의 메모리 관리 장치(MMU, Memory Management Unit)가 페이지 테이블의 위치를 확인.
    • 페이지 테이블에서 가상 페이지 번호를 사용하여 물리 프레임 번호(PFN, Physical Frame Number 또는 물리 페이지 번호라고도 부름)를 찾는다.
    • 페이지 테이블에서 해당 페이지 번호에 매핑된 물리 프레임 번호(Frame Number)를 찾지 못했다면, 페이지 폴트(Page fault, 해당 페이지가 RAM에 없음을 의미)가 발생하며, 운영체제(OS)는 디스크(SSD/HHD)로 가서 해당 페이지를 가져와 메인 메모리에 페이지를 적재한 다음(Load), 페이지 테이블을 갱신한다.
  4. TLB에 매핑 정보 저장(TLB Miss시)
    • 페이지 테이블에서 찾은 매핑 정보를 TLB에 저장한다.
  5. 물리 주소 계산
    • 물리 프레임 번호와 페이지 오프셋을 결합하여 물리 주소를 만들어낸다.
      • 물리 주소 = [물리 프레임 번호] + [페이지 오프셋]

참고 자료

https://denninginstitute.com/itcore/virtualmemory/vmideas.html

https://code-lab1.tistory.com/55

https://prepinsta.com/operating-systems/translation-lookaside-buffer-tlb/