[운영체제] 가상 메모리

컴공생의 코딩 일기·2023년 5월 11일
0

운영체제

목록 보기
6/9

가상 메모리

가상 메모리(virtual memory)는 컴퓨터 시스템에서 물리적 메모리(예: RAM)의 용량을 초과하는 메모리를 제공하기 위해 사용되는 기술이다. 가상 메모리는 물리적 메모리를 보다 효율적으로 사용하고, 실행 중인 프로그램과 데이터에 대한 접근을 빠르게 할 수 있도록 지원한다. 가상 메모리는 주소 공간(address space)을 물리적 메모리와 디스크 스토리지 사이에 매핑하여 구현된다.

가상 메모리 크기와 주소

가상 메모리 시스템에서 모든 프로세스는 메모리의 어느 위치에 있는지 상관없이 0부터 시작하는 연속된 메모리 공간을 가진다.

가상 메모리는 크게 프로세스가 바라보는 메모리 영역과 메모리 관리자가 바라보는 메모리 영역으로 나뉜다.

가상 메모리의 크기:
가상 메모리에서 메모리 관리자가 사용할 수 있는 메모리의 전체 크기는 물리 메모리(실제 메모리)와 스왑 영역을 합한 크기다.

동적 주소 변환

동적 주소 변환(dynamic address translation)은 가상 메모리 시스템에서 실행 중인 프로그램이 사용하는 가상 주소를 실제 물리 주소로 변환하는 과정이다. 이 과정은 메모리 관리 유닛(MMU, Memory Management Unit)에 의해 수행되며, 주소 변환을 위해 페이지 테이블 같은 데이터 구조를 사용한다.

매핑 테이블

메모리는 매핑 테이블을 작성하여 관리한다. 메모리 관리자는 가상 주소와 물리 주소를 일대일로 매핑한 테이블로 관리한다.

  • 페이지 매핑 테이블(page mapping table): 고정 분할 방식
  • 세그먼테이션 매핑 테이블(segmentation mapping table): 가변 분할 방식

지역성(locality)

지역성(locality)은 기억장치에 접근하는 패턴이 메모리 전체에 고루 분포되는 것이 아니라 특정 영역에 집중되는 성질을 말한다.

  • 공간의 지역성: 현재 위치에서 가까운 데이터에 접근할 확률이 먼 거리에 있는 데이터에 접근할 확률보다 높음을 의미
  • 시간의 지역성: 현재를 기준으로 가장 가까운 시간에 접근할 데이터가 먼 시간에 접근할 데이터보다 사용될 확률이 높음을 의미
  • 순차적 지역성: 작업이 순서대로 진행되는 것을 의미

페이징 기법

페이징 기법은 고정 분할 방식을 이용한 가상 메모리 관리 기법으로, 물리 주소 공간을 같은 크기로 나누어 사용한다. 어떤 페이지가 어떤 프레임에 있는지에 대한 연결(매핑) 정보는 페이지 테이블에 담겨 있다.
예) 첫번째 값에 2는 페이지 0이 프레임 2에 있다는 의미이다. invalid는 swap을 의미한다.

페이징 기법의 주소 변환

페이징 기법의 주소 변환은 페이지 테이블과 메모리 관리 유닛(MMU, Memory Management Unit)이 사용된다. 주소 변환 과정은 다음과 같은 단계를 거친다.

가상 주소의 페이지 번호와 오프셋 추출: 가상 주소를 구성하는 비트를 페이지 번호(page number)와 오프셋(offset)으로 나눈다. 페이지 번호는 페이지 테이블에서 해당 페이지의 위치를 찾는 데 사용되며, 오프셋은 페이지 내에서 실제 데이터 위치를 찾는 데 사용된다.

페이지 테이블 조회: 페이지 번호를 사용하여 페이지 테이블에서 해당 페이지의 물리 주소 정보를 찾는다. 이 정보는 프레임 번호(frame number)로 표시된다.

물리 주소 생성: 프레임 번호와 가상 주소의 오프셋을 조합하여 최종적인 물리 주소를 생성한다.

정형화된 주소 변환

  • 가상 주소: VA=<P, D> (VA: virtual address)

    • P(페이지) = 나눗셈(가상주소/한 페이지의 크기)의 몫
    • D(처음 위치에서 주소까지의 거리) = 나눗셈(가상주소/한 페이지의 크기)의 나머지
  • 물리 주소: PA=<F, D>

    • F = 프레임
    • D = 프레임의 처음 위치에서 해당 주소까지의 거리

페이징 기법의 주소 변환 과정
VA=<P, D> --> PA=<F, D>

페이지 테이블은 페이지 번호와 프로임 번호로 구성되며 페이지 테이블 엔트리(PTE: Page Table Entry)라고 부른다.

페이지 테이블 관리

페이지 테이블 관리(Page Table Management)는 가상 메모리 시스템에서 주요한 역할을 수행한다. 페이지 테이블 관리의 몇 가지 중요한 개념은 다음과 같다.

  • 메모리 공유(Memory Sharing): 여러 프로세스가 동일한 메모리 영역을 공유할 수 있도록 하는 기능. 페이지 테이블은 각 프로세스의 가상 주소를 같은 물리 주소로 매핑하여 메모리 공유를 지원한다.

  • 쓰기 시점 복사(Copy-on-Write): 메모리 공유 중 변경이 발생할 때, 해당 메모리 영역을 복사하여 공유가 끊기지 않도록 하는 기법. 이를 통해 메모리 자원을 절약하고 성능을 향상시킬 수 있다.

  • 변환 색인 버퍼(Translation Look-ahead Buffer, TLB): 페이지 테이블 조회 과정의 성능을 향상시키기 위해 사용되는 캐시. TLB는 최근에 사용된 페이지 테이블 항목을 저장하여 빠른 접근이 가능하게 한다. 원하는 페이지 번호가 변환 색인 버퍼에 있으면 TLB 히트(TLB hit)라고 하며 곧바로 물리 주소로 변환되고 원하는 페이지 번호가 없으면 TLB 미스(TLB miss)라고하며, 메모리에 있는 페이지 테이블을 사용하여 프레임 번호로 변환한다.

역 페이지 테이블(Inverted Page Table): 기존 페이지 테이블의 크기를 줄이기 위한 기법으로, 물리 메모리 프레임에 대한 정보를 저장하고 가상 주소와 물리 주소 사이의 매핑을 관리합니다.

다중 단계 페이지 테이블(Multi-Level Page Table): 페이지 테이블의 크기와 메모리 사용량을 줄이기 위한 계층적 구조이다. 여러 단계의 페이지 테이블을 사용하여 가상 주소를 물리 주소로 변환하는 과정을 단계별로 수행한다.

세그먼테이션 기법

세그먼테이션 기법은 세그먼트 번호와 오프셋을 사용하여 주소를 표현한다. 세그먼트 번호는 세그먼트의 식별자로 사용되며, 오프셋은 해당 세그먼트 내에서의 상대적인 위치(address)를 나타낸다. 따라서 가상 주소는 세그먼트 번호와 오프셋으로 구성되며, 다음과 같이 표현될 수 있다:

가상 주소 = 세그먼트 번호 + 오프셋

세그먼트 테이블(Segment Table)은 세그먼트 번호와 실제 메모리 주소 간의 매핑 정보를 포함한다. 이 테이블은 운영체제에 의해 유지되며, 각 세그먼트의 기준(Base)과 한계(Limit)를 저장한다. 기준은 세그먼트가 시작되는 물리 메모리 주소를 가리키고, 한계는 세그먼트의 크기를 나타낸다. 세그먼트 테이블은 다음과 같이 표현될 수 있다:

세그먼트 번호기준 주소한계
0Base0Limit0
1Base1Limit1
2Base2Limit2
.........

프로세스가 메모리 참조를 수행할 때, 운영체제는 세그먼트 번호를 확인하여 해당 세그먼트의 기준과 한계를 찾는다. 그리고 오프셋을 사용하여 실제 물리 메모리 주소를 계산한다. 만약 주소가 세그먼트의 한계를 벗어난 경우에는 예외 처리를 수행하여 프로세스의 안전성과 메모리 보호를 유지한다.

예를 들어, 세그먼트 테이블에 다음과 같은 정보가 저장되어 있다고 가정해 보자:

세그먼트 번호기준 주소한계
02000100
15000300
29000150

프로세스가 세그먼트 번호 1과 오프셋 50을 참조한다면, 운영체제는 세그먼트 테이블에서 세그먼트 번호 1을 확인하고 해당 세그먼트의 기준과 한계를 가져온다. 이 경우, 세그먼트 번호 1에 대한 기준은 5000이고 한계는 300이다. 따라서 오프셋 50을 기준과 합산하여 실제 물리 메모리 주소 5050을 계산한다.

하지만 만약 프로세스가 세그먼트 번호 2와 오프셋 200을 참조한다면, 세그먼트 테이블에서 세그먼트 번호 2를 확인하고 해당 세그먼트의 기준과 한계를 가져온다. 그러나 세그먼트 번호 2의 한계는 150이므로 오프셋 200은 세그먼트의 한계를 초과하는 주소이다. 이 경우, 예외 처리(세그멘테이션 오류 segmentation fault)가 수행되어 프로세스의 실행이 중단되고 적절한 예외 처리 메커니즘을 통해 오류가 처리된다. 이를 통해 메모리 접근 오류로부터 시스템을 보호할 수 있다.

세그멘테이션 정형화된 주소 변환

VA = <S, D>는 가상 주소(Virtual Address)를 나타내는 표기 방법이다. 여기서 S는 세그먼트 번호(Segment Number)이고, D는 오프셋(Offset or Distance)이다.

가상 주소는 세그먼트 번호와 오프셋으로 구성되며, 세그먼테이션 기법에서 주소 변환에 사용된다. 세그먼트 번호는 세그먼트를 식별하기 위한 번호이고, 오프셋은 해당 세그먼트 내에서의 상대적인 위치를 나타낸다.

예를 들어, VA = <2, 500>는 세그먼트 번호 2에 대한 가상 주소이며, 해당 세그먼트 내에서 500번지의 위치를 나타낸다. 이 가상 주소는 주소 변환을 통해 실제 물리 메모리 주소로 매핑되어야 한다.

세그먼트 테이블을 사용하여 VA = <S, D>를 가상 주소에서 실제 메모리 주소로 변환하는 과정을 수행한다. 세그먼트 번호를 기반으로 세그먼트 테이블에서 해당 세그먼트의 기준과 한계 정보를 찾고, 오프셋을 기준과 합산하여 실제 메모리 주소를 계산한다.

이를 통해 가상 주소 VA = <S, D>를 사용하여 프로세스가 메모리에 접근할 수 있고, 메모리 관리와 보호를 효율적으로 수행할 수 있다.

profile
더 좋은 개발자가 되기위한 과정

0개의 댓글