새소식

Programming Study/ETC

가상 메모리(Virtual Memory)란? 정의와 동작원리 [OS]

  • -

 

가상 메모리 (Virtual Memory) 란?

 

  • 메인메모리(RAM)의 공간보다 큰 공간의 프로그램을 실행시키기 위해 만들어진 기술이다.
    • 쉽게 말해 RAM 8GB로 16GB 프로그램을 실행시키기 위해 만든 기술이란 뜻이다.

 

그렇다면 이게 어떻게 가능한 것일까? 비결은 보조기억장치(하드디스크)에 있다.

디스크의 일부를 보조메모리화시켜, 하드디스크를 가방처럼 필요한 물품들(프로그램 실행에 필요한 정보들)을 담아두는 형태로 사용하게 만든 것.

가방에 물품을 담아두고 필요할때 가방에서 물품을 꺼내쓰는 형식을 취하게 만들어 실제 RAM은 당장에 사용하는 것들만 담아두게 만들었다.

필통으로 예를 들자면 당신이 사용하고 있는 필기구는 RAM, 필통이 디스크라고 볼 수 있겠다.

 

 

가상메모리는 실제로 어떻게 동작할까?

 

 

 가상 메모리의 동작원리

기본적으로는 프로그램 실행에 필요한 정보들은 보조기억장치(디스크)에 담아두고 실제로 사용이 필요한 정보들만 RAM으로 꺼내서 실행하는 방식으로 돌아간다.

 

사실 이대로는 어떤 형식인지 잘 이해하기 힘들 것이다. 조금 더 깊게 들어가보자.

 

 

 

Paging System 

 

우선 가상메모리로 만들 디스크를 동일한 크기로 잘라 여러개의 조각(Page)으로 만든다.

  • 여기서 잘려진 하나의 조각을 Page라고 부른다. 그래서 Paging System이다!
  • 보편적으로 Page 하나의 크기는 4KB, 8KB, 16KB등의 작은 조각이다.
  • 참고로 정보를 찾기 용이하게 만들고, 메모리 관리를 쉽게하기 위해서 자르는 것이다.

 

프로그램 실행에 필요한 정보들을 각 Page에 옮겨담고, 메인메모리(RAM)도 Page와 같은 크기로 자른다. (frame)

이후 정보값들이 RAM에 있는지, 가상메모리에 있는지를 나타내는 Page TableRAM에 저장한다.

 

그리고 프로그램에게 "네가 필요로하는 정보 메모리에 저장됐어!" 라고 거짓말을 치면서 프로그램을 실행한다.

 

실행 중 당장 필요해진 데이터들만 가방(Page)에서 꺼내, 실제 메모리인 RAM으로 올려 데이터를 사용한다.

 

이해를 돕기위해 그림을 가져와봤다.

 

 

  1. 제일 왼쪽이 [프로그램에 실행에 필요한 정보들]이고, 순서대로 특징을 설명하자면 아래와 같다.
  2. [가상으로 메모리를 할당하여 프로그램에게 거짓말을 치는 것 (메모리 할당됐어!)]
  3. [가상메모리 주소와 실제 메모리주소를 잇는 Table]
  4. [실제 메인메모리(RAM)에 저장된 데이터들(당장 필요한 것들)]
  5. [실행에 필요한 정보들을 저장해둔 보조메모리(가방=디스크)다]

 

자, 지금까지 가상메모리를 사용해 프로그램이 실행되는 과정을 알아보았다.

하지만 아직 알아보지 않은 것이 하나가 있다.

 

프로그램에서 필요한 정보가 RAM에 있는 데이터라면 바로 전송을 해주면 되겠다.

 

  • 프로그램 : "C 값 보내주세요!"

하지만 프로그램에서 위처럼 Page Table에 RAM에 없다고 표시(i)된 값을 요청하면 어떻게 될까?

보조메모리(디스크)에서 바로 값을 보내주면 좋겠지만 아쉽게도 그런 일은 일어나지 않는다.

기본적으로 프로그램에서 RAM에 올라와있지 않은 값을 요청하면, "데이터가 메모리에 없어요!" 상태인 Page Fault가 발생한다.

 

 

Page Fault

 

Page Fault는 프로그램이 요청한 데이터가 메모리에 존재하지 않는 상황으로, Page Table에 invalid(데이터는 디스크에 있어요.)로 되어있는 상태를 말한다.

이 상황이 발생하게 되면 운영체제는 해당 페이지의 데이터를 디스크에서 가져와 RAM에 보내고, 페이지의 상태를 valid 형태로 변경하는 과정을 수행한다. 그렇다 사실 이게 끝이다.

 

과정을 설명해보자면 아래와 같다.

 

 

 

 

그 외 심화내용.

 

  • 다중 가상메모리도 가능하다!

https://velog.io/@gndan4/OS-%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.