[CS] 가상메모리 Page

wrld_worthy·2023년 12월 15일
0

CS

목록 보기
8/12

Page

Page는 가상 메모리 시스템에서 사용되는 기본 단위로, 메모리는 여러 페이지로 나뉜다. 각 페이지는 일반적으로 몇 킬로바이트(KB) 크기를 가지며, 가상 주소 공간을 물리적 메모리에 매핑하는데 사용된다.

페이지는 프로그램이 메모리에 접근할 때 사용되는 추상화된 개념으로, 프로그램은 연속적인 가상 메모리 주소를 사용하지만, 실제 물리적 메모리는 불연속적일 수 있다.

사용하는 이유

  1. 메모리 관리의 효율성: 페이지를 사용하면 메모리 관리가 더 효율적이게 된다. 프로그램은 필요한 메모리만 사용할 수 있으며, 전체 메모리 공간을 연속적으로 할당할 필요가 없다.

  2. 프로세스 간 메모리 격리: 각 프로세스는 독립적인 가상 주소 공간을 가지는데, 한 프로세스의 메모리 접근이 다른 프로세스에 영향을 미치지 않는다.

  3. 스왑 아웃 / 스왑 인: 시스템 메모리가 부족할 때, 사용되지 않는 페이지를 디스크로 옮기고(스왑 아웃)
    필요할 때 다시 메모리로 가져올 수 있다.(스왑 인)

단점

  1. 페이지 폴트 오버헤드: 메모리에 없는 페이지에 접근하려 할 때 페이지 폴트가 발생할 수 있다.
  2. 페이지 테이블 관리: 페이지 테이블을 관리하는 데 추가적인 메모리와 처리 시간을 요한다.

예시

운영 체제의 메모리 관리: 대부분의 현대 운영 체제는 페이지 기반의 가상 메모리 시스템을 사용한다. 이를 통해 프로세스는 물리적 메모리의 한계를 넘어서는 메모리를 사용할 수 있다.

스왑 공간: Linux와 같른 운영 체제는 디스크에 스왑 공간을 할당하여, 사용되지 않는 페이지를 저장한다. 이는 시스템 메모리가 부족할 때 매우 유용하다.

Page 종류

페이지는 가상 메모리 시스템에서 다양한 역할을 수행하는데, 종류에 따라 다른 역할을 수행한다.

  1. 일반 페이지
    • 대부분 프로그램 데이터와 코드가 저장되는 표준 페이지이다.
    • 이 페이지들은 프로그램의 실행 중에 메모리가 로드되고, 필요에 따라 디스크로 스왑된다.
  2. 공유 페이지
    • 여러 프로세스에 의해 공유되는 페이지이다.
    • 예를들어, 동일한 라이브러리나 실행 파일으 사용하는 여러 프로세스가 메모리 상의 같은 페이지를 공유할 수 있다.
  3. 스왑 페이지
    • 물리적 메모리가 부족할 때, 사용되지 않는 페이지를 디스크의 스왑 공간에 저장하는데 사용되는 페이지.
    • 필요할 때 다시 메모리로 로드 될 수 있다.
  4. 커널 페이지
    • 운영 체제의 커널에 의해 사용된느 페이지.
    • 이 페이지들은 시스템의 핵심 기능ㅇ르 수행, 일반 사용자 프로세스와 분리되어 관리된다.
  5. 페이지 테이블 페이지
    • 가상 주솔르 물리적으로 매핑하는데 사용되는 페이지 테이블 자체가 저장되는 페이지이다.
    • 시스템의 핵심 기능을 수행하며, MMU에 의해 사용 관리된다.
  6. 제로 페이지
    • 초기화된 데이터를 포함하지 않는, 즉 모든 비트가 0으로 설정된 페이지이다.
    • 새로운 메모리 할당 시, 빠르게 초기화된 페이지를 제공하기 위해 사용된다.
  7. Anonymous Page
  8. file-backed Page

Anonymous Page

Anonymous Page는 파일 시스템의 어떠 파일과도 연결되지 않은 메모리 페이지이다. 이 페이지는 프로세스의 실행 중에 동적으로 생성된다. 특정 파일이나, 초기화된 데이터 소스와 연결이 되어있지 않다.

주로 스택이나 힙과 같은 동적 메모리 영역에 사용되며, 프로그램이 실행중에 변수를 할당하거나 메모리를 동적으로 할당할 때 사용된다.

대부분의 운영 체제는 새로운 Anonymous Page를 0또는 다른 기본 값으로 초기화한다.
메모리가 부족할 때는 이 페이지를 디스크의 스왑 영역으로 이동시킬 수 있다.

File-Backed Page

file-backed Page는 파일 시스템상의 특정 파일과 직접적으로 연결된 메모리 페이지이며, 디스크 상의 파일의 내용을 반영한다.

파일 매핑된 메모리, 공유 라이브러리, 실행 파일의 코드 영역 등에 사용되며, mmap() 시스템 호출을 사용하여 파일을 메모리에 매핑할 때 생성된다.

파일 전체 내용을 메모리에 즉시 로드하는 대신, 필요한 부분만 페이지 단위로 로드되고,
페이지는 스왑 아웃될 수 있고 변경된 경우 원본 파일에 변경 사항이 다시 기록될 수 있다.

Anonymous Page/ File-Backed Page 차이점

  • 데이터 소스: Anonymous Page는 파일과 연결되어 있지 않고, Fil-Backed Page는 특정 파일과 연결된다.
  • 생성 방식: Anonymous Page는 동적 메모리 할당과 같은 프로세스의 내부 작업에 의해 생성되는 반면, File_Backed Page는 파일 매핑을 통해 생성된다.
  • 스왑 아웃 동작: Anonymous Page는 스왑 아웃 시 디스크의 스왑 공간에 입시로 저장되지만, File-Backed Page는 원본 파일에 변경 사항이 기록될 수 있다.

유사한 방법

세그멘테이션(Segmentation)

세그멘테이션은 컴퓨터 메모리 관리에 사용된는 주용한 개념으로, 메모리를 의미있는 단위인 세그먼트로 나누는 방식을 말한다. 세그멘테이션은 프로그램의 다양한 부분들(ex:코드, 데이터, 스택)을 서로 다른 세그먼트로 분리하여 관리한다.

특징

  1. 가변 크기의 세그먼트: 각 세그먼트는 가변적인 크기를 가질 수 있으며, 프로그램의 특정 논리적 단위(함수, 배열, 객체 등)에 해당한다.

  2. 세그먼트 테이블: 시스템은 각 세그먼트의 시작 주소와 길이를 저장하는 세그먼트 테이블을 유지한다. 이 테이블은 가상 주소를 물리적 주소로 변환하는데 사용된다.

  3. 논리적 주소 공간: 세그멘테이션은 논리적 주소 공간을 사용한다. 논리적 주소는 세그먼트 번호와 세그먼트 내 오프셋으로 구성되어있다.

Page와 차이

메모리 블록의 크기: 페이지는 고정 크기로 분할되어 있고, 세그먼트는 가변의 크기를 가진다.
메모리 관리 방식: 페이지는 투명한 메모리 관리를 제공하는 반면, 세그먼트는 프로그램의 논리적 구조를 반영한다.
=> 페이지는 고정된 메모리를 할당하면서 메모리 관리의 복잡성을 숨기고, 프로그램에게 단순화된 연속적인 가상 메모리 공간을 제공하며, 세그먼트는 프로그램의 논리적 구조를 메모리에 반영하는데 유리하기 때문이다.

단편화의 종류: 페이지는 내부 단편화의 문제를 가지고 있고, 세그먼트는 외부 단편화의 문제를 가질 수 있다. 페이지는 고정적인 메모리를 쪼개서 관리하고, 세그먼트는 가변적인 필요한 만큼 메모리를 사용하기 때문.

Page Table

페이지 테이블은 컴퓨터 시스템의 가상 메모리 관리에서 핵심적인 역할을 하는 데이터 구조이며,
가상 주소를 물리적 주소로 매핑하는데 사용된다. 각 프로세스는 자신만의 페이지 테이블을 가지고 있으며, 이를 통해 운영 체제는 프로세스의 가상 메모리 공간을 물리적 메모리에 매핑한다.

페이지 테이블의 기능

주소 변환: 페이지 테이블은 프로세스가 사용하는 가상 주소를 실제 물리적 메모리 주소로 변환하는데 사용된다.

메모리 보호: 페이지 테이블을 통해 특정 메모리 영역에 대한 접근 권한(rwx)을 설정할 수 있다. 이를 통해 운영 체제는 프로세스가 허용되지 않은 메모리 영역에 접근하느 ㄴ것을 방지할 수 있다.

메모리 공유: 다른 프로세스와 메모리 영역(ex: 공유 라이브러리)을 공유할 때 페이지 테이블을 사용하여 공유를 관리한다.

구조

  • 페이지 테이블 엔트리(PTE): 페이지 테이블은 여러 페이지 테이블 엔트리로 구성된다. 각 PTE는 가상 페이지와 연결된 물리적 페이지의 정보를 포함한다.

  • 프레임 번호: 각 PTE는 해당 가상 페이지가 매핑된 물리적 메모리의 프레임(페이지)번호를 보함한다.

  • 플래그: PTE에 접근 권한, 수정 여부, 사용 여부 등을 나타내는 플래그가 포함될 수 있다.

관리

  • 메모리 관리 유닛(MMU): CPU에 내장된 MMU는 페이지 테이블을 사용하여 가상 주소를 무릴적 주소로 변환한다.

  • 페이지 테이블 위치: 페이지 테이블은 일반적으로 메인 메모리에 저장되며, 현재 활성화된 페이지 테이블의 기준 주소는 특변한 레지스터에 저장된다.

  • 멀티 레벨 페이지 테이블(MLPT): 대규모 가상 주소 공간을 관리하기 위해, 현대의 시스템은 종종 멀티 레벨 페이지 테이블 구조를 사용한다. 페이지 테이블 자체가 여러 레벨로 나뉘어져 있는 구조이다.

Page Fault

페이지 폴트는 가상 메모리 시스템에서 발생하는 이벤트로 매우 중요한 역할을 한다.
프로세스가 접근하려는 페이지가 현재 물리적인 메모리에 존재하지 않을 때 발생하는데, 좀 더 자세한 원인을 확인해보자.

원인

  1. 비할당 메모리 접근: 프로세스가 아직 할당되지 않은 메모리 영역에 접근할 때 발생한다.

  2. 스왑 아웃 페이지 접근: 프로세스가 필요한 페이지가 디스크 스왑 영역에 있고, 현재 물리적 메모리에 로드되어 있지 않을 때 발생한다.

  3. 페이지 보호 위반: 프로세스가 접근 권한이 없는 페이지(ex: 쓰기 급지된 페이지, 컬널 영역...)에 접근하려고 할 때 발생한다.

페이지 폴트 처리

  1. 인터럽트: 페이지 폴트가 발생하면, 운영 체제는 페이지 폴트 인터럽트를 처리하는 루틴을 실행한다.

  2. 페이지 폴트 원인 분석: 운영 체제는 위와 같은 원인이 존재하는지 페이지 폴트의 원인을 파악한다.

  3. 페이지 로딩 또는 생성: 필요한 페이지가 디스크에 잇다면, 운영 체제는 해당 페이지를 물리적 메모리에 로드한다. 페이지가 아직 생성되지 않았다면, 운영체제는 새로운 페이지를 할당하고 초기화한다.

  4. 페이지 테이블 업데이트: 페이지가 메모리에 로드되면, 페이지 테이블이 업데이트되어 새로운 페이지 매핑이 반연된다.

  5. 프로세스 재개: 페이지 로딩이 완료되면, 프로세스는 중단된 지점부터 실행을 재개한다.

페이지 폴트의 영향

  • 성능저하: 페이지 폴트 처리는 시간이 소요되고 디스크I/O가 필요한 경우 특히 성능에 영향을 줄 수 있다. 때문에 디스크 스왑 인/아웃을 자주 할 수록 성능은 더욱 급격히 떨어진다.
  • 시스템 효율성: 적절한 페이지 교체 알고리즘과 스왑 전략을 사용하면, 페이지 폴트의 영향을 최소화하고 시스템의 전반적인 효율성을 높일 수 있다.

0개의 댓글