가상 메모리

갱두·2021년 10월 19일
0

📚 운영체제

목록 보기
5/14

가상 메모리란

다중 프로그래밍을 실현하기 위해서는 많은 프로세스들을 동시에 메모리에 올려두어야 함.
가상메모리는 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법임

가상 메모리가 하는 일

가상 주소 공간

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

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

프로세스 간의 페이지 공유

✔️ 시스템 라이브러리가 여러 프로세스들 사이에 공유될 수 있도록 함
✔️ 프로세스들이 메모리를 공유하는 것을 가능하게 하고, 프로세스들은 공유 메모리를 통해 통신할 수 있음
✔️ fork()를 통해서 페이지들이 공유되는 것을 가능하게 함

Demand Paging(요구 페이징)

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

페이지 교체

프로그램 실행 시에 모든 항목이 물리 메모리에 올라오지 않기 때무에 프로세스의 동작에 필요한 페이지를 요청하는 과정에서 page fault가 발생하면, 원하는 페이지를 가져오게 됨.
하지만 메모리를 모두 사용중이라면 페이지 교체가 이뤄져야 함

기본적인 방법

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

페이지 교체 알고리즘

FIFO, OPR, LRU, LFU, MFU 등이 있음

출처 : https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS#%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC

profile
👩🏻‍💻🔥

0개의 댓글