[CS Study : OS] 가상 메모리

Byuk_mm·2022년 7월 28일
1
post-thumbnail

컴퓨터 과학에 대한 지식을 습득하고 정리하는 기록용 포스팅입니다.
예외를 판단하는 사고를 기르고, 효율적인 코드를 작성하기 위해
컴퓨터 과학 지식을 활용하는 것을 목표로 합니다.


✅ 가상 메모리 개요


📌 기본 개념

  • 프로그래머는 메모리 크기에 맞는 응용 프로그램만 개발해야 하는데, 실제로 메모리 크기를 고려하여 프로그래밍하기란 매우 어렵다.
  • 가상 메모리(Virtual Memory)는 이러한 물리적 메모리 크기의 한계를 극복하기 위해 나온 기술이며, 프로세스를 실행할 때 실행에 필요한 일부만 메모리에 로드하고 나머지는 디스크에 두는 것이다.이를 통해 프로세스 전체가 물리적 메모리에 있는 것처럼 수행된다.
  • 현대 메모리 관리의 가장 큰 특징은 물리 메모리의 크기프로세스가 올라갈 메모리의 위치를 신경 쓰지 않고 프로그래밍하도록 지원한다는 것이다. 이러한 메모리 시스템을 '가상 메모리'라고 부른다.

📌 가상메모리 관리

  • 이때 가상적으로 주어지는 주소를 가상 주소(logical address)라고 하며,
    실제 메모리상에 있는 주소를 실제 주소(physical address)라고 한다.
  • 가상 주소는 메모리 관리 장치(MMU)에 의해 실제 주소로 변환되며, 이 덕분에 사용자는 실제 주소를 의식할 필요 없이 프로그램을 구축할 수 있게 된다.
  • 가상 메모리는 가상 주소와 실제 주소가 매핑되어 있고 프로세스의 주소 정보가 들어 있는 페이지 테이블로 관리된다. 이때 속도 향상을 위해 TLB를 사용한다.

    TLB(Translation Lookaside Buffer, 페이지 정보 캐쉬)
    메모리와 CPU 사이에 있는 주소 변환을 위한 캐시이다. 최근에 일어난 가상 메모리와 물리 주소의 변환 테이블을 저장해둔다.
    CPU가 가상 주소를 가지고 메모리에 접근하려고 할 때 우선은 TLB에 접근하여 가상 주소에 해당되는 물리 주소를 찾고, 만약 TLB에 매핑이 존재하지 않는다면 MMU가 페이지 테이블에서 해당되는 물리 주소로 변환한 후 메모리에 접근하게 된다.
    출처 : https://ahnanne.tistory.com/15




✅ 페이징 기법


📌 기본 개념

  • 페이징 기법은 고정 분할 방식을 이용한 가상 메모리 관리 기법으로, 물리 주소 공간같은 크기로 나누어 사용한다.
  • 가상 주소의 분할된 각 영역은 페이지라고 부른다. 물리 메모리의 각 영역은 가상 주소의 페이지와 구분하기 위해 프레임(frame)이라고 부르며 페이지와 마찬가지로 번호를 매겨 관리한다.
  • 페이지와 프레임의 크기는 같다.
  • 페이지 테이블은 하나의 열(column)으로 표현된다. 모든 페이지 정보를 순서대로 가지고 있기 때문에 위에서부터 차례대로 페이지 0,1,2... 와 같은 프레임 번호를 가지고 있어 추가 열이 필요없다.

    프레임(Frame): 물리 메모리를 사용하는 최소 크기 단위.
    페이지(Page): 가상 메모리를 사용하는 최소 크기 단위.


📌 페이징 기법의 주소 변환

  • 페이징 기법에서 페이지는 페이지 테이블(Page Table)이라는 자료구조 형태로 관리된다.

  • 가상주소는 페이지 번호(P)와 변위(d)로 구성 -> 가상 주소 V = (p,d)
    p는 페이지 번호, d는 페이지 p의 시작 위치로부터의 변위.

  • 프레임 시작 주소(f) + 변위(d)를 통해 물리 주소를 계산하여 실제 물리 주소에 접근한다.

  • 요구 페이징(Demand Paging) : 프로세스의 모든 데이터를 물리 메모리에 적재하지 않고, 필요한 시점에만 메모리에 적재한다. 필요하지 않은 페이지 프레임은 다시 저장매체에 저장한다(물리 메모리에서 내린다). 

  • 페이지 부재(Page Fault) : 가상 메모리 공간에는 존재하지만 실제 물리 메모리에는 없을 때 일어나는 인터럽트를 말한다. 페이지 폴트가 발생하면 운영체제에서 해당 페이지를 물리 메모리에 올린다.


📌 페이징 테이블 매핑 방식

시스템 내에는 여러 개의 프로세스가 존재하고, 각 프로세는 하나의 페이지 테이블을 가지며, 페이지 테이블은 운영체제 영역에 있다. 따라서 페이지 테이블의 크기가 너무 커지면 프로세스가 실제로 사용할 수 있는 메모리 영역이 줄어든다.

사용할 수 있는 물리 메모리 영역이 적을 경우 페이지 테이블의 일부도 스왑 영역으로 옮겨질 수 있다. 때문에 다양한 페이지 테이블 매핑 방식이 등장한다.

스왑 공간 (Swap space)이란 물리적 메모리 (RAM)의 용량이 가득 차게될 경우 사용되는 여유 공간을 말합니다

1. 직접 매핑(Direct Mapping)

  • 페이지 테이블 전체가 물리 메모리의 운영체제 영역에 존재하는 방식이다.
  • 페이지 테이블을 말 그대로 직접 활용한다.

2. 연관 매핑(Associative Mapping)

  • 페이지 테이블 전체를 스왑 영역에 관리하는 방식이다.
  • 물리 메모리의 여유 공간이 적을 때 사용하는 방식으로, 모든 페이지 테이블을 저장장치의 스왑 영역에 저장하고 그 중 일부만 물리 메모리에 가지고 있는다.
  • 연관 매핑은 페이지 테이블의 일부만 무작위로 가지고 오기 때문에 페이지와 프레임 번호를 둘다 표시해준다.
  • 무작위로 저장된 일부분의 테이블을 변환 색인 버퍼(TLB) 또는 연관 레지스터라고 부른다.
  • 물리 메모리 내의 페이지 테이블을 다 검색해야하는 문제가 있다. 검색 실패 시 스왑 영역에서 다시 찾아야한다.

3. 집합-연관 매핑(Set-Associative Mapping)

  • 연관 매핑에서는 모든 TLB를 검색한 후에야 TLB 미스가 있다는 사실을 알게된다. 집합-연관 매핑은 이 문제를 개선한 방식이다.
  • 페이지 테이블을 같은 크기의 여러 묶음(집합)으로 나누고, 각 묶음의 시작 주소를 가진 디렉터리 테이블을 새로 만들어 관리한다.
  • 전체 페이지 테이블은 연관 매핑과 마친가지로 스왑 영역에 있으며, 일부 테이블 묶음 단위로 메모리에 옮긴다.
  • 원하는 페이지 테이블 엔트리가 스왑 영역에 있는지, 물리 메모리 영역에 있는지 간단히 파악할 수 있다.

4. 역 매핑(Invert Mapping)

  • 물리 메모리의 프레임 번호를 기준으로 테이블을 구성한다.
    다시 말해, 물리 메모리의 프레임에 어떤 프로세스의 어떤 페이지가 올라와 있는지를 표시한다.
  • 프로세스 수 상관 없이 테이블 하나만 존재하여 테이블 크기가 매우 작다.
  • 모든 페이지 테이블을 다 검색한 후에야, 해당 페이지가 스왑 영역에 있다는 것을 알게 되므로 속도가 느려 질 수 있다.

📌 페이징 장단점

장점

  • 논리 메모리는 물리 메모리에 저장될 때 연속되어 저장될 필요가 없고, 물리 메모리의 남는 프레임에 적절히 배치되기 때문에 외부 단편화가 생기지 않는다.
  • 물리 메모리를 같은 크기로 나누어 관리하기 때문에 메모리 관리가 수월하다.

단점

  • 내부 단편화 문제가 발생할 수 있다. 페이지 단위를 작게하면 해결할 수 있지만, 페이지 매핑 과정이 복잡해져 오히려 비효율적이다.



✅ 세그먼테이션 기법


📌 기본 개념

  • 가변 분할 방식을 이용한 가상 메모리 관리 기법으로, 물리 메모리를 프로세스의 크기에 따라 가변적으로 나누어 사용한다.
  • 세그먼테이션 기법에도 매핑 테이블을 사용하는데 이를 세그먼테이션 테이블이라고 한다.
  • 세그먼테이션 테이블에는 세그먼트의 크기를 나타내는 limit물리 메모리상의 시작 주소를 나타내는 address가 있다. 프로세스의 크기에 따라 메모리를 분할하기 때문에 매핑 테이블에 크기 정보를 포함한다.

📌 세그먼테이션 기법의 주소 변환


  • 세그먼테이션 기법에서는 가상 주소를 VA=(S,D)라고 표현한다.
    여기서 S는 세그먼테이션 번호, D는 세그먼트 시작 지점에서 해당 주소까지의 거리를 의미한다.

📌 세그먼테이션 장단점

장점

  • 내부 단편화 문제가 해소된다.
  • 호와 공유 기능을 수행할 수 있다. 프로그램의 중요한 부분과 중요하지 않은 부분을 분리하여 저장할 수 있고, 같은 코드 영역은 한 번에 저장할 수 있다.

단점

  • 외부 단편화 문제로 인해 추가적인 관리가 불가피하다.



✅ 단편화


📌 단편화

  • 주기억장치 상에서 빈번하게 기억장소가 할당되고 반납됨에 따라 기억장소들이 조각들로 나누어지는 현상이다.
  • 메모리 공간이 조각조각 나뉘게 되어 실제로는 사용가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태가 발생하게 된다.

📌 내부 단편화

  • 프로세스가 요청한 양보다 더 많은 메모리를 할당할 때 발생하며, 메모리 분할 자유 공간과 프로세스가 사용하는 공간의 크기 차이를 의미한다.
  • 주기억장치 내 사용자 영역 > 실행 프로그램

📌 외부 단편화

  • 메모리 할당 및 해제 작업의 반복으로 작은 메모리가 중간 중간 존재할 수 있다. 이렇게 사용하지 않는 메모리가 존재해서 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황이다.
  • 주기억장치 내 사용자 영역 < 실행 프로그램



✅ 세그먼테이션-페이징 혼용 기법

  • 페이징 기법과 세그먼테이션 기법은 각각의 장단점이 있다.
  • 세그먼테이션-페이징 혼합 기법은 페이지로 분할된 가상 주소 공간에서 서로 관련 있는 영역을 하나의 세그먼트로 묶어 세그먼테이션 테이블로 관리하고, 각 세그먼트를 구성하는 페이지를 해당 페이지 테이블로 관리하는 방식이다.
  • 페이징 기법에 세그먼테이션을 추가하고, 중복되는 데이터를 세그먼테이션 테이블로 옮겨 오면 테이블의 크기를 줄일 수 있다.
  • 현재의 대부분의 OS에서 이 기법을 활용하고 있다.



✅ 참고

https://velog.io/@nnnyeong/OS-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%8B%A8%ED%8E%B8%ED%99%94-%ED%8E%98%EC%9D%B4%EC%A7%95-%EC%84%B8%EA%B7%B8%EB%A9%98%ED%85%8C%EC%9D%B4%EC%85%98
https://steady-coding.tistory.com/524
https://chelseashin.tistory.com/41

profile
어디야 벽벽 / 블로그 이전 -> byuk.dev

0개의 댓글