lottie
Seungjun's blog
blog
가상메모리(logical memory)

가상 메모리란?

  가상 메모리는 메모리가 실제 메모리보다 많아 보이게 하는 기술로, 어떤 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 올라가지 않더라도 실행이 가능하다는 점에 착안하여 고안되었다


  • 애플리케이션이 실행될 때, 실행에 필요한 일부분만 메모리에 올라가며 애플리케이션의 나머지는 디스크에 남게 된다. 즉, 디스크가 RAM의 보조 기억장치(backing store)처럼 작동하는 것이다.

    • 결국 빠르고 작은 기억장치(RAM)을 크고 느린 기억장치(디스크)와 병합하여, 하나의 크고 빠른 기억장치(가상 메모리)처럼 동작하게 하는 것이다.

  • 가상 메모리를 구현하기 위해서는 컴퓨터가 특수 메모리 관리 하드웨어를 갖추고 있어야만 한다.

    ⇒  MMU(Memory Management Unit)!



       예전에는 MMU가 이와 같이 따로 분리된 하드웨어였지만 최근의 아키텍처에서는 프로세서와 같은 칩에 회로로 삽입된다.

    • MMU는 가상주소를 물리주소로 변환하고, 메모리를 보호하는 기능을 수행한다.

    • MMU를 사용하게 되면, CPU가 각 메모리에 접근하기 이전에 메모리 주소 번역 작업이 수행된다.

    • 그러나 메모리를 일일이 가상 주소에서 물리적 주소로 번역하게 되면 작업 부하가 너무 높아지므로, MMU는 RAM을 여러 부분(페이지, pages)로 나누어 각 페이지를 하나의 독립된 항목으로 처리한다. 이를 ‘페이지 테이블’이라 한다. 가상메모리는 가상주소(logical address)와 실제주소(physycal address)가 매핑되어 있고 프로세스의 주소정보가 들어있는 이 ‘페이지 테이블’로 관리된다.

    • 이때 속도 향상을 위해 TLB(Translation Lookaside Buffers)를 사용한다.


메모리 할당

  메모리에 프로그램을 할당할 때는 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당하는데 연속 할당불연속 할당으로 나뉜다.

연속할당

 메모리에 ‘연속적으로’ 공간을 할당하는 것을 말한다. 연속할당은 다시 아래의 방법들이 있다.

  • 고정 분할 방식( fixed partition allocation ) :

    메모리를 미리 나누어 관리하는 방식으로 내부 단편화가 발생합니다.

    • 내부단편화( internal fragmentation) : 메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 많이 발생하는 현상

    • 외부 단편화(external fragmentation) : 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상

  • 가변 분할 방식( variable partition allocation ) :

    매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용합니다. 내부 단편화는 발생하지 않고 외부 단편화는 발생할 수도 있습니다. 이는 최초적합(first fit), 최적적합(best fit), 최약적합(worst fit)이 있다.

    • 최초적합(first fit) : 위쪽이나 아래쪽부터 시작해서 홀을 찾으면 바로 할당한다.

    • 최적적합(best fit) : 프로세스의 크기 이상인 공간 중 가장 작은 홀부터 할당한다.

    • 최약적합(worst fit) : 프로세스의 크기와 가장 많이 차이가 나는 홀에 할당한다


불연속 할당

불연속 할당은 다시 아래의 방법들이 있다.

  • 페이징( paging ) :

    동일한 크기의 페이지 단위(보통4KB)로 나누어 메모리의 서로 다른 위치에 프로세스를 할당한다. 홀의 크기가 균일하지 않은 문제가 없어지지만 주소 변환이 복잡해진다.

  • 세그멘테이션 ( segmentation ) :

    페이지 단위가 아닌 의미 단위인 세그먼트(segment)로 나누는 방식입니다. 프로세스는 코드, 데이터, 스택, 힙 등으로 이루어지는데, 코드와 데이터 등 이를 기반으로 나눌 수도 있으며 함수 단위로 나눌 수도 있다. 공유와 보안 측면에서 좋으며 홀 크기가 균일하지 않은 문제가 발생한다.

  • 페이지드 세그멘테이션 ( paged segmentation ) :

    공유나 보안을 의미 단위의 세그먼트로 나누고, 물리적 메모리는 페이지로 나눈다.