매일을 설렘으로

[컴퓨터시스템] 가상메모리 (Virtual Memory) 본문

CS

[컴퓨터시스템] 가상메모리 (Virtual Memory)

하루설렘 2021. 12. 15. 19:52

목차

  • 가상메모리란 무엇이고, 왜 필요한가
  • 가상메모리 주소 공간 (Virtual Address Space, VAS)
    • Stack
    • Heap
    • Data
    • Code, Text

 


가상 메모리 (Virtual Memory)

실제 메모리 크기와 상관없이 메모리를 이용할 수 있도록 가상의 메모리 주소를 사용하는 방법이다. 

예를 들어, 100MB 메모리 크기에서 200MB 크기의 프로세스를 수행할 수 있도록 하는 것이다.

 

가상 메모리 필요한가? 
한 마디로, 물리적 공간의 제한을 극복하기 위해 만들어진 기술이다. 

 

 

프로그램을 동작하기 위해서는 실제 프로그램 파일에 메모리에 할당되어 프로세스가 처리된다. 하지만 실제 메모리의 용량은 비싸고 제한적이다. 그래서 보조 기억장치 (HDD, SSD 등)로 메모리 확장을 하여 사용하게 된다. 메모리 용량 이상의 주소 할당 요청을 하면, 보통 덜 사용하고 있는 프로그램은 보조 기억장치로 옮겨진다. (Swap) 여유 공간을 확보한 메모리 주소에 새 할당 요청을 처리한다.  

 

 

가상 메모리의 장점

  • 보조 기억장치 공간을 사용하여 메인 메모리(RAM) 크기보다 더 큰 공간 사용이 가능하다. (확장성)
  • 물리 주소를 연속적인 주소로 바꿔준다. (물리적으로 별개의 메모리면 주소가 비 연속적)

 

Summary

  • 시간 단위로 처리하기 때문에 많은 양을 유연하게 처리할 수 있다. 
  • 느린 속도를 개선한다. 
  • 물리 주소를 직접적으로 알 필요가 없다.

 

 

공부해 볼 주제
  - MMU는 가상 메모리 주소를 물리 주소와 연결 지어주는 하드웨어 장치이다.
      . 물리 주소 연결 방식
      . Page table은 DRAM에 저장
  - 메모리와 하드 디스크의 차이
  - 멀티 태스킹을 하기 위한 스와핑 기술

 


가상 주소 공간 (Virtual Address Space)

가상 메모리(Virtual Memory) 가상(논리) 주소 공간(Virtual Address Space)은 다른 개념이다.

가상 주소 공간은 각 프로세스 당 주어지는 논리적인 공간이다.
가상 주소 공간의 크기는 물리 메모리(RAM)의 크기와는 독립적이며, 레지스터 크기에 종속적이다.
Word Size가 32비트인 컴퓨터의 경우 레지스터의 크기도 32비트다.
이는 2^32 개의 주소를 나타낼 수 있음을 의미하고,
1Byte당 주소가 주어지므로 최대 4GB의 가상 주소 공간을 가질 수 있다.

> 레지스터는 비트당 하나의 가상 주소를 나타낼 수 있다. 
> 2^32비트 = 4,294,967,296 비트 => 4,294,967,296 Byte (주소) = 4GB (주소)

 

가상 주소 공간 구조 (@ 프로세스 당)

가상 주소 공간은 크게 아래와 같이 나뉜다.

  • Stack : 지역변수, 함수의 매개변수 (함수 실행 시 저장, 종료 시 반환)
  • Unused Address Space : 필요할 경우 (런타임 간 저장, 원할 때 반환)
  • Heap : 사용자의 동적 할당 (런타임 간 저장, 원할 때 반환)
  • Data and BSS : 초기화된 변수(Data), 초기화 안 된 변수(BSS) (컴파일 시 저장, 프로그램 종료 시 반환)
  • Instruction(Code or Text) : 실행할 코드 (기계어 형태) (컴파일 시 저장, 프로그램 종료 시 반환)

 

 

 

가상 주소 공간 관리

프로세스의 주소 공간은 페이지(page) 단위로 관리된다.

가상 주소 공간의 주소를 논리 주소라고 하는데,
모든 논리 주소가 반드시 물리적인 메모리의 물리 주소로 할당받는 것은 아니다.
가상 주소 공간의 페이지가 물리 주소 공간에 할당되지 않은 케이스는 다음과 같다.

  • 필요할 때 물리 주소 할당 받는 경우
  • 접근 금지 페이지로 남겨둔 경우
  • 사용되지 않은 (unused) 논리 주소인 경우 

Process Life Cycle(프로세스가 생성되고 종료될 때까지의 과정) 중에 동시에 전체의 Data나 Instruction이 필요한 것이 아니기 때문에 필요할 때 물리 주소를 할당받고 반환하면 메모리를 효율적으로 사용할 수 있다. 

 

그리고, 사용되지 않은 (unused) 논리 주소는 동적 할당을 위해 남겨두었다.

 

 

 

공부해 볼 주제
  - 가상 주소 공간은 Page단위 관리/ Segment단위 관리