[운영체제] 가상 메모리

혀니앤·2022년 10월 12일
0

컴퓨터 지식 공부

목록 보기
8/10

가상 메모리 배경

  • 실행되는 모든 코드를 물리 메모리에 로드하고, 프로그램이 메모리 용량보다 크면 실행할 수 없었음 ⇒ 용량 문제, 페이지를 교체하면서 생기는 성능 이슈 발생
  • 페이징, 세그먼트로 메인 메모리에 프로그램이 연속해서 들어갈 필요가 없어짐
  • Locality Principle : 특정 값에 관계된 스토리지 위치가 자주 액세스되는 특성
    → 이 특성을 활용해서 모든 부분을 메모리에 올리지 않고, 관련된 부분의 메모리만 로드하면 됨 (불필요한 전체 프로그램을 메모리에 올릴 필요 없음)
    ⇒ 모든 주소를 가상으로 처리할 수 있게 됨

가상 메모리의 장점

  • 물리 메모리 크기에 제약받지 않고 더 많은 프로그램을 동시에 실행할 수 있음 ⇒ 많은 프로그램을 메모리에 올림 ⇒ Ready State인 Precess가 많아짐 ⇒ CPU 이용률, 처리율 높아짐
  • Swap에 필요한 입출력이 줄어들기 때문에 프로그램이 더 빠르게 실행됨

가상 메모리란?

  • 가상 주소로 메모리를 참조할 수 있다
  • 주로 보조기억장치에 위치하다가 필요할 때에만 메인 메모리에 저장 (Demand Paging)
  • 실제의 물리 메모리 개념과 사용자의 논리 메모리 개념을 분리함
  • 작은 메모리를 가지고도 큰 가상 주소 공간을 프로그래머에게 제공함

가상 주소 공간

  • 한 프로세스가 메모리에 저장되는 논리적인 모습을 가상메모리에 구현
  • 프로세스가 요구하는 메모리 공간을 가상 메모리에 제공함으로써 현재 직접적으로 필요하지 않은 공간은 실제 물리 메모리에 올리지 않음
  • 실행까지 필요한 Stack, Heap, Data, Code를 먼저 물리 메모리에 올리고, 나머지는 필요시에 요구한다

프로세스 간의 페이지 공유

  • 가상 메모리에서는 여러 프로세스들 사이에서 시스템 라이브러리가 공유됨
  • 각 프로세스는 라이브러리의 물리 메모리 페이지는 모든 프로세스에 공유됨
  • 프로세스들은 메모리를 공유하고, 공유 메모리를 통해 통신함
  • 프로세스들은 각자 자신의 주소 공간이라고 인식함
  • fork() 를 통해 프로세스를 생성하는 과정에서 페이지가 공유되는 과정을 포함함

Demand Paging

  • 초기에 필요한 부분만 메모리에 로드하고, 필요할 때에만 디스크에서 가져옴한 번도 접근되지 않은 페이지는 물리 메모리에 로드되지 않음
  • 페이저 : 프로세스 내의 개별 페이지들을 관리하며, 실행에 실제 필요한 페이지들만 메로리로 읽어온다
  • 장점
    • 사용되지 않을 페이지를 가져오는 시간, 메모리 낭비를 줄일 수 있음
    • 반응 속도가 빨라짐
    • 더 많은 프로세스 실행 가능
  • Page Fault Trap : 페이지를 처음으로 참조할 경우 Page Fault가 발생. OS에게 Trap을 보내 페이지를 로드하도록 한다

페이지 교체

  • 프로세스의 동작 시에 필요한 페이지를 요청하는 과정에서 Page Fault 가 발생하면, 원하는 페이지를 보조저장장치에서 가져옴
  • 이때 모든 물리 메모리가 사용중이라면 페이지 교체가 필요해진다.
  • 메모리 교체 과정
    1. 디스크에서 필요한 페이지의 위치를 찾는다
    2. 빈 페이지 프레임을 찾는다
    1. 페이지 교체 알고리즘을 통해 희생될 페이지를 고른다
    2. 희생될 페이지를 디스크에 기록하고, 관련 페이지 테이블을 수정한다
    3. 새롭게 비워진 페이지 테이블 내 프레임에 새 페이지를 읽어오고, 프레임 테이블을 수정한다
    4. 사용자 프로세스를 재시작한다

페이지 교체 알고리즘

1. FIFO 페이지 교체

  • 가장 간단한 페이지 교체 알고리즘
  • 가장 먼저 물리 메모리에 들어온 페이지 순서대로 페이지 교체 시점에 나감
  • 장점 : 쉽다
  • 단점
    - 오래된 페이지가 필요한 정보를 포함할 수도 있다
    - 처음부터 계속해서 활발하게 쓰이는 페이지를 교체해서 페이지 Fault가 증가할 수 있다
    - Belady’s Anomaly (Belady의 모순) : 페이지를 교체함으로써 저장할 수 있는 페이지 프레임의 개수를 늘려도 되려 페이지 Fault가 더 많이 발생하는 현상

2. 최적 페이지 교체 Optimal Algorithm

  • 앞으로 가장 오랫동안 사용되지 않을 페이지를 찾아 교체한다
  • 뒤에 들어오는 참조 요청들을 통해 결정해야 함 ⇒ 뒤의 요청을 미리 알고있어야 하므로 사실상 불가능함
  • 장점 : 알고리즘 중 가장 낮은 페이지 Fault를 보인다
  • 단점 : 모든 프로세스의 메모리 참조 계획을 미리 파악할 수 없다

3. LRU 페이지 교체 (Least Recently Used)

  • 현재까지 가장 오랫동안 사용되지 않은 페이지를 선택하여 교체한다
  • Time stamp (언제 썼었는지) , Page Stack 이 필요함 → 매 접근마다 이 변수들을 갱신해야 하는 Overhead가 있다
  • FIFO 보다 우수함

4. LFU 페이지 교체 (Least Frequently Used)

  • 참조 횟수가 가장 적은 페이지를 교체하는 방법
  • 단점 : 어떤 프로세스가 특정 페이지를 집중적으로 사용하다 다른 기능을 사용하여 더이상 사용하지 않아도 계속 메모리에 머물게 되는 상황 발생할 수 있음

5. MFS 페이지 교체 (Most Frequently Used)

  • 참조 횟수가 가장 작은 페이지가 최근에 메모리에 올라왔고, 앞으로도 계속 사용될 것이라는 가정에 기반

참고

https://jwprogramming.tistory.com/18

https://velog.io/@codemcd/운영체제OS-16.-페이지-교체-알고리즘

profile
일단 시작하기

0개의 댓글