OS

[쉽게 배우는 운영체제] 8. 가상 메모리의 기초

noahkim_ 2024. 12. 12. 22:45

조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다


1. 개요

  • 메모리의 크기는 컴퓨터마다 다름
  • OS가 물리 메모리의 크기에 의존한다면 메모리 크기별로 프로그램이 동작하지 않을 수 있음

 

가상 메모리

  • 물리 메모리의 크기와 상관없이 프로세스에 커다란 메모리 공간을 제공하는 기술
  • 프로세스는 운영체제가 어디있는지, 물리 메모리의 크기가 어느 정도인지 신경 쓰지 않고 메모리를 마음대로 사용할 수 있음

 

프로세스 가상 주소
  • 0번지부터 시작하는 연속된 메모리 공간을 가짐 (자신이 어느 위치에 있는지 상관 X)

 

메모리 관리자
  • 스왑 영역: 물리 메모리의 부족한 부분을 스왑 영역으로 보충
  • 동적 주소 변환: 물리 메모리와 스왑 영역을 합쳐 프로세스가 사용하는 가상 주소를 실제 메모리의 물리 주소로 변환함

 

메모리 분할 방식
  • 운영체제를 제외한 나머지 메모리 영역을 일정한 크기로 나누어 프로세스에게 할당함
  • 세그먼테이션, 페이징, 세그먼테이션-페이징 혼용

 

매핑 테이블

  • 메모리 관리자는 가상 주소와 물리 주소를 일대일 매핑 테이블로 관리함

 

2. 페이징 기법

구현

  • 고정 분할 방식을 이용한 가상 메모리 관리 기법
  • 물리 주소 공간을 같은 크기로 나누어 사용함

 

페이지
  • 페이지 단위라 부르며, 0번부터 번호를 매겨 관리함
  • 페이지당 프레임이라는 물리 주소의 단위로 매핑됨
  • 페이지와 프레임의 크기는 같음

 

페이지 테이블
  • 특정 페이지에 매핑된 프레임 정보는 페이지 테이블에 담겨있음
  • 프레임이 스왑 영역에 있을 경우, invalid라고 표시됨

 

주소 변환

과정
  • 가상 주소 x번지가 어느 페이지에 해당하는지 찾기
  • 페이지 테이블의 페이지 y로 가서 해당 페이지의 프레임 찾기
  • 물리 메모리 프레임 y의 (x번지 % 페이지 크기) 번째 위치에 접근

 

페이지 테이블 관리

  • 페이지 테이블은 운영체제 영역에 존재함
  • 어떤 페이지가 어떤 프레임에 있는지 관리하기 위해 프로세스마다 페이지 테이블을 운영함
  • 프로세스 수에 따라 페이지 테이블이 생겨나고, 페이지 테이블의 크기가 커지면 이를 저장하기 위한 메모리 자원이 많이 필요
    • 페이지 테이블 용량이 커질수록, 실제 사용할 수 있는 영역이 줄어듬
    • 페이지 테이블의 크기를 적정하게 유지하는 것이 중요

 

PTBR
  • 각 프로세스의 PCB에 저장되는 데이터
  • 물리 메모리 내에 페이지 테이블의 시작 주소를 가지고 있음

 

페이지 테이블 매핑 방식

  • 사용할 수 있는 물리 메모리 영역이 적을 경우, 페이지 테이블의 일부도 스왑 영역으로 옮겨짐
  • 전체를 메모리에 관리할 경우와 일부를 스왑 영역에서 관리할 경우, 가상 주소를 물리 주소로 변환하는 방법이 달라짐

 

직접 매핑
  • 페이지 테이블 전체가 물리 메모리의 운영체제 영역에 상주
  • 장점
    • 주소 변환이 빠름
  • 단점
    • 메모리를 많이 차지

 

연관 매핑
  • 페이지 테이블 전체를 스왑 영역에 저장
  • 무작위로 일부만 물리 메모리에 로드하여 사용 
  • 변환 색인 버퍼 (연관 레지스터) 
    • 일부 로드된 페이지 테이블
  • 장점
    • 메모리 사용량이 효율적
  • 단점
    • 물리 메모리 내의 페이지 테이블을 다 검색해야 함
    • 이렇게 해도 원하는 프레임 번호를 번호를 얻지 못하면 스왑 영역에 있는 페이지 테이블을 검색함

 

집합-연관 매핑
  • 페이지 테이블을 일정한 크기의 디렉토리로 나누어 관리
    • 연관 매핑의 문제를 개선한 방식
    • 스왑 영역에서 무작위로 물리 메모리에 로드 X
  • 디렉토리 테이블
    • 같은 크기의 여러 묶음으로 나눔 (디렉토리 단위)
    • 현재 메모리에 로드된 집합을 표시

 

역매핑
  • 물리 메모리의 프레임 번호를 기준으로 테이블 구성
    • 페이지 넘버를 기준으로 구성 X
    • 프레임 1 -> 페이지 0으로 매핑됨
    • 현재 어떤 프레임이 메모리에 올라와있는지 표시
  • 장점
    • 프로세스의 수와 상관없이 테이블이 하나만 존재함
  • 단점
    • 원하는 PID, page를 전체 스캔해서 찾아야 함

 

3. 세그먼테이션 기법

  • 프로세스의 크기에 따라 메모리를 분할

 

구현

  • 매핑 테이블을 사용함
  • 각 세그먼트가 자신에게 주어진 메모리 영역을 넘어가면 안됨 (limit 컬럼 사용)
  • 스왑 영역을 사용할 경우 address 컬럼에 'I'로 표시함

 

주소 변환

  • 가상 주소에 따른 물리 주소를 구함
  • 해당 물리주소에서 쓰고자 하는 데이터가 범위에 넘어가는지 검사
  • 물리 주소에 접근하여 원하는 데이터를 읽거나 씀

 

4. 세그먼테이션 - 페이징 기법

메모리 접근 권한

코드 영역
  • 읽기 및 실행 권한

 

데이터 영역
  • 읽기 및 쓰기

 

세그먼테이션 - 페이징 혼용 기법의 도입

권한 비트가 같은 영역을 세그먼테이션 테이블로 관리
  • 페이지마다 접근 권한이 다름
  • 페이지 테이블의 모든 행에는 권한 비트가 추가됨
  • 메모리 관리자는 주소 변환이 이루어질 때마다 페이지 테이블의 권한 비트로 적절한 접근인지 확인함
  • 인접한 페이지에는 권한이 같은 페이지가 많은데, 중복적인 값이 많아 메모리를 낭비하게 됨
  • 이러한 문제를 해결하기 위해 세그먼테이션 테이블을 이용함

 

세그먼테이션 - 페이징 혼용 기법의 주소 변환

  • 순수 페이징 기법을 사용하면 중복되는 데이터로 페이지 테이블이 커지므로 혼합하여 사용함

 

5. 캐시 매핑 기법

캐시 직접 매핑

block
  • 메모리의 페이지 수를 캐시의 페이지 수로 나눔
    • 하나의 단위를 블록이라 함
  • 메모리의 블록이 캐시로 올라올 때 항상 같은 위치에 올라옴
    • 메모리의 어떤 블록에서 올라온 페이지인지만 확인하면 됨

 

tag
  • 캐시의 블록 번호

 

block distance
  • 블록에서의 거리
  • 올라가야 할 캐시의 위치 정보

 

장점
  • 태그만 확인하면 캐시 히트나 캐시 미스를 빠르게 확인할 수 있음

 

단점
  • 메모리 블록이 정해진 캐시 블록에만 매핑됨
  • 여러 메모리 블록이 같은 캐시 블록을 공유할 때 자리다툼 문제가 발생함
  • 서로 다른 메모리 블록들이 같은 캐시 블록을 공유해야 할 경우, 자주 덮어씌워짐

 

캐시 연관 매핑

  • 메모리 워드가 캐시 메모리를 자유롭게 사용할 수 있음
  • 캐시가 메모리 워드의 주소를 전부 가지고 있음
  • 자리를 고정하지 않고 필요한 블록을 선택할 수 있음

 

단점
  • 캐시 히트인지 캐시 미스인지 확인하기 위해 캐시의 모든 주소를 검색해야 함

 

캐시 집합-연관 매핑

  • 캐시를 K개의 집합으로 나누고 각 집합에 직접 매핑을 사용함
  • 각 집합에는 직접 매핑과 같이 자리를 가지도록 설정함

 

장점
  • 자리다툼 문제가 완화됨