운영체제. 가상 메모리, 페이징

sanghee·2021년 12월 24일
0

👩‍💻면접 스터디

목록 보기
14/22

매주 진행하는 면접스터디에서 아래의 질문들에 대한 정리를 모은 글입니다.
Interview_Question_for_Beginner/OS

📌가상 메모리(Virtual Memory)?

말 그대로 가상의 메모리이다.

다중 프로그래밍을 실현하기 위해서는 많은 프로세스들을 동시에 메모리에 올려야 한다. 하지만 메모리는 한정되어 있다. 가상 메모리는 프로세스 전체가 메모리에 올라오지 않더라도 실행이 가능하도록 하는 기법이다. 프로그램이 물리 메모리보다 커도 된다는 장점이 있다.

이전에는 실행되는 코드의 전부를 물리 메모리에 적재해야 했기에, 메모리 용량보다 큰 프로그램을 실행시킬 수 없었다. 또한 여러 프로그램을 동시에 메모리에 올리기에는 메모리의 한계와, 페이지 교체 등의 이슈가 발생하였다.

프로그램의 일부분만 메모리에 올린다면?

  • 물리 메모리의 크기에 제약받지 않는다.
  • 더 많은 프로그램을 실행할 수 있다. 응답시간은 유지되고, CPU 이용률과 처리율이 높아진다.
  • Swap에 필요한 입출력이 줄어들기에 프로그램이 빠르게 실행된다.

MMU(Memory Management Unit)

가상 메모리와 물리 메모리를 변환하고 관리한다.

가상 메모리가 하는 일

가상메모리는 실제의 물리 메모리 개념과 사용자의 논리 메모리 개념을 분리한 것이다. 작은 메모리를 가지고도 얼마든지 큰 가상 주소 공간을 제공한다.

가상 주소 공간?

한 프로세스가 메모리에 저장되는 논리적인 모습을 가상메모리에 구현한 공간이다. 프로세스가 요구하는 메모리 공간을 가상메모리에 제공함으로써 현재 직접적으로 필요하지 않은 메모리 공간은 실제 물리 메모리에 올리지 않는 것으로 물리 메모리를 절약할 수 있다.

예를 들어, 한 프로그램이 실행되며 논리 메모리로 100KB를 요구한다. 하지만 실행시까지 필요한 메모리 공간(코드, 데이터, Heap, Stack)의 합이 40KB이다. 그러면 실제 물리 메모리에는 40KB만 올라가고, 나머지 60KB는 필요시에 물리메모리에 요구한다.

논리 메모리

논리 파티션에 지정된 주소 공간이다.

물리 메모리

실제 메모리 주소 공간이다.

가상 메모리는...

프로세스들이 메모리를 공유할 수 있게 하지만 각 프로세스들은 각자 자신의 주소 공간처럼 인식한다.

📌Demand Paging(요구 페이징)

말 그대로, 처음에 요구되는(필요한) 페이지들만 올리는 것이다.

프로그램 실행 시작 시에 프로그램 전체를 디스크에서 물리 메모리에 적재하는 대신, 초기에 필요한 페이지들만 적재하는 전략을 요구 페이징이라고 한다. 가상 메모리 시스템에서 많이 사용한다. 실행 과정에서 필요해질 때 해당 페이지들이 물리 메모리에 적재된다. 한 번도 접근되지 않은 페이지는 적재되지 않는다.

Pager(페이저)

프로세스 내의 개별 페이지들은 페이저(Pager)에 의해 관리된다. 페이저는 프로세스 실행에 실제 필요한 페이지들만 메모리로 읽어옴으로써, 사용되지 않을 페이지를 가져오는 시간낭비와 메모리 낭비를 줄일 수 있다.

Page Fault(페이지 부제)

페이지가 실제 메모리에 없을 때 발생하는 인터럽트이다.

📌페이지 교체

프로세스 동작에 필요한 페이지를 요청하는 과정에서 페이지 부재(Page fault)가 발생하게 되면, 원하는 페이지를 보조저장장치에서 가져오게 된다. 하지만, 만약 물리 메모리가 모두 사용중인 상황이라면, 페이지 교체가 이루어져야 한다. 또는 운영체제가 프로세스를 강제 종료할 수도 있다.

페이지 교체 과정

  1. 디스크에서 필요한 페이지의 위치를 찾는다.
  2. 빈 페이지 프레임을 찾는다.
  3. 페이지 교체 알고리즘을 통해 희생될 페이지를 고른다.
  4. 희생될 페이지를 디스크에 기록하고 관련 페이지 테이블을 수정한다.
  5. 새롭게 비워진 페이지 테이블 내 프레임에 새 페이지를 읽어오고, 페이지 테이블을 수정한다.
  6. 사용자 프로세스를 재시작한다.

📌페이지 교체 알고리즘

FIFO(First In First Out) 페이지 교체

가장 단순한 페이지 교체 알고리즘이다. 먼저 물리 메모리에 들어온 페이지를 먼저 교체한다.

  • 장점
    • 이해하기 쉽고, 짜기도 쉽다.
  • 단점
    • 오래된 페이지가 필요한 정보를 포함할 수 있다(ex. 초기 변수).
    • 초기부터 계속 사용중인 페이지를 교체해서 페이지 부재율을 높일 수 있다.
    • Belady의 모순: 페이지를 저장할 수 있는 페이지 프레임의 갯수를 늘려도, 되려 페이지 부재가 더 많이 발생하는 모순이 존재한다.

Belady 모순

사용하는 페이지 프레임이 많아질수록, 가지고 있는 페이지의 개수가 많기 때문에 페이지 폴트(사용하려는 페이지가 없음) 문제가 덜 발생할 것이라고 예측한다. 그러나 일부에서는 페이지 프레임이 증가할 경우 페이지 폴트값도 증가하는 모순 현상도 발생한다.

최적(Optional) 페이지 교체

Belady의 모순을 해결한 알고리즘이다. 최적 알고리즘이다. 앞으로 가장 오랫동안 사용되지 않을 페이지를 찾아 교체한다. 주로 비교 연구 목적을 위해 사용된다.

  • 장점
    • 알고리즘 중 가장 낮은 페이지 부재율을 보장한다.
  • 단점
    • 구현의 어려움이 있다. 미리 어떤 페이지가 사용될 것인지 파악할 방법이 없다.

📌LRU(Least Recently Used) 페이지 교체

최적 알고리즘의 근사 알고리즘이다. 가장 오랫동안 사용되지 않은 페이지를 선택하여 교체한다.

  • 장점
    • 대체적으로 FIFO 알고리즘보다 우수하다.

LFU(Least Frequently Used)

참조 횟수가 가장 적은 페이지를 교체하는 방법이다. 페이지가 활발하게 참조될수록 참조 횟수가 많을 것이라는 가정하에 만들어졌다.

  • 단점
    • 어떤 프로세스가 특정 페이지를 집중적으로 사용하다가, 사용하지 않아도 계속 메모리에 머물게 될 수 있다.
    • 최적 알고리즘을 제대로 근사하지 못한다.

MFU(Most Frequently Used) 페이지 교체

참조 횟수가 가장 적은 페이지가 최근에 메모리에 올라왔고, 앞으로 계속 사용될 것이라는 가정하에 만들어졌다.

  • 단점
    • 최적 알고리즘을 제대로 근사하지 못한다.
profile
👩‍💻

0개의 댓글