2022.05.02 (CS # Virtual memory)

이진호·2022년 5월 2일
0

TIL

목록 보기
9/11

가상메모리(Virtual memory)

  • 기존의 가상 메모리를 사용하지 않는 시스템에서의 메모리 참조 방식
    -> CPU가 물리 주소를 메인 메모리에 바로 입력하여 메모리 참조를 진행함
  • 가상 메모리 시스템
    -> 각 프로그램이 가상의 주소를 사용하도록 하며, CPU가 메모리 참조를 시도할 때는 MMU(Memory Management Unit)라는 하드웨어 장치를 이용하여 해당 가상 주소(Virtual address)를 실제 메인 메모리의 물리 주소로 변환하여 메모리 참조를 진행함.

가상 메모리의 필요성

1) 메인 메모리를 효율적으로 사용하기 위해서이다. 가상 메모리 시스템에서는 각 프로그램이 사용하는 가상 주소 공간(Virtual Address Space)을 우선 디스크에 저장해 두고, 그중에서 자주 사용되는 부분메인 메모리로 가져와서 사용한다. 즉, 메인 메모리를 디스크의 캐시로 사용하는 것으로 이렇게 하면 하나의 메인 메모리에 여러 프로그램의 데이터와 코드를 로드하는 것이 가능해진다.

2) 메모리 관리를 단순화한다. 가상 메모리 시스템에서는 각 프로세스가 완전히 동일한 포맷의 가상 주소 공간을 가진다. 이것이 가능한 이유는 실제로 메모리 참조를 수행할 때는 가상 주소를 물리 주소로 변환하는 작업이 진행되기 때문이다. 따라서, 각각의 프로세스에게 혼자서 메인 메모리를 사용한다는 듯한 착각을 제공하고, 이는 링커 및 로더의 구현과 메모리 할당 방식등을 단순화 한다.

3) 메모리 보호 메커니즘을 단순화한다. 가상 메모리 시스템에서는 한 프로세스가 다른 프로세스의 주소 공간에 접근하는 것을 쉽게 막을 수 있다. 또한, 가상 주소를 물리 주소로 변환할 때 참조하는 맵핑 테이블의 각 엔트리에는 해당 가상 주소에 대한 접근 권한이 명시된다. 따라서, 유저 프로세스가 커널 영역에 접근하는 것처럼 허용되지 않은 주소 공간에 접근하는 것도 쉽게 막을 수 있다.

9.1절
물리 및 가상주소 방식

  • 캐시 메모리와 DRAM의 관계에서 블록(Block)이라는 단위를 사용하듯이, 메인 메모리와 디스크의 관계에서는 페이지(page)라는 단위를 사용함.
  • 디스크에 위치하는 가상 주소 공간(Virtual Address Space)의 각 페이지는 가상 페이지(Virtual Address), 메인 메모리에 위치하는 물리 주소 공간(Physical Address Space)의 각 페이지는 물리 페이지(Physical Page)라고 부른다.

9.2절
주소공간
9.3절
캐싱 도구로서의 VM
9.4절
메모리 관리를 위한 도구로서의 VM

  • 링킹을 단순화, 로딩을 단순화, 공유를 단순화, 메모리 할당을 단순화

9.5절
메모리 보호를 위한 도구로서의 VM
9.6절
주소의 번역

9.9 동적 메모리 할당

메모리 관리(Memory Management)

핵심적인 아이디어는 각 프로세스는 자신만의 가상 주소 공간을 가지기 때문에, 메인 메모리를 혼자서 사용하는 것처럼 생각해도 전혀 문제가 없다.

동적 메모리 할당

변수와 함수를 선언하고 사용하는 과정에서 이들을 저장하기 위한 메모리를 사용하게 되는데 유저가 정의한 변수와 함수스택영역에 저장되고, 함수가 호출되면 스택영역의 메모리를 사용하며 커지고, 리턴되면 줄어드는 방식으로 작동함.

유저가 예상하지 못하는, 사용자가 필요한 만큼의 메모리를 프로그램이 작동하는 도중에 할당받고자 한다면 어떻게 해야 할까? 이럴때 사용하는 방법이 메모리 동적할당이라고 할 수 있음.

``동적 할당된 메모리는 힙(Heap)영역에 mallocfree```를 사용하여 할당되고 해제됨.

할당된 부분들은 얼마든지 연속적으로 붙어있거나 떨어져있을 수 있는데 단, 할당이 해제된 부분은 단편화 문제를 해결하기 위해 연속적으로 존재할 수 없음.

단편화(fragmentation)?

단편화는 쉽게 생각하면 사용하지 않거나 사용하지 못하는 메모리가 쌓여서 메모리 누수를 유발할 수 있는 경우

  • 내부 단편화: 필요한 메모리 만큼 이상의 메모리를 할당해서 할당된 메모리 내에 비어있는 메모리가 발생하게 되는 단편화 현상
  • 외부 단편화: 어떠한 경우에도 할당하기에 너무 적은 공간만 남아 할당이 불가능한 메모리가 존재하는 경우

이러한 단편화 현상을 방지하는 효과적인 메모리 동적할당을 위해서는 다음과 같은 필요한 정보들과 유의점들이 존재함.
1) 할당할 메모리의 크기는 얼마만큼인가?
2) 할당할 메모리의 위치는 어디인가?
3) 메모리를 할당할 수 있을 만큼의 비어있는 공간은 어떻게 찾을 것인가?
4) 해당 메모리 공간이 할당되었는지, 비어있는지는 어떻게 알 것인가?
5) 해제되어 비어있는 메모리들을 어떻게 관리해서 다시 할당 받을 수 있게 할 것인가?
6) 공간의 효율성을 위해 단편화는 어떻게 해결할 것인가?

0개의 댓글