동적 메모리 할당 개념에 들어가기 앞서, 가상메모리가 무엇인지는 알고 들어가야할 것 같다.
Q. 가상메모리가 무엇인가?
단순한 임베디드 마이크로컨트롤러와 같이 가상 메모리 기술을 사용하지 않는 시스템에서는 메모리 참조 방식이 아래 왼쪽 그림과 같다. 즉, CPU가 물리 주소를 메인 메모리에 바로 입력하여 메모리 참조를 진행하는 것이다. 반면 대부분의 현대 데스크탑, 서버, 노트북과 같이 가상 메모리 기술을 사용하는 시스템에서는 메모리 참조 방식이 아래 오른쪽 그림과 같다.
요즘 통상적으로 컴퓨터의 메모리는 8GB 혹은 16GB이다. 리눅스의 경우 하나의 프로세스가 4GB인데, 실제로 각각의 프로세스에 이만큼의 메모리를 할당하기에는 실제 메모리 크기에 한계가 있다. 프로세스를 실행하기 위해서 코드는 반드시 메모리에 있어야 하는데, 어떻게 하면 한정된 메모리에서 여러 프로세스를 실행시킬 수 있도록 메모리 구조를 가져갈 수 있을까?
이때 활용하는 것이 가상메모리이다. 💡 가상 메모리 => 메모리가 실제 메모리보다 많아보이게 하는 기술 💡
즉, 가상메모리는 물리 메모리 크기의 한계를 극복하기 위해 나온 기술이다.
물리 메모리보다 큰 프로세스를 수행하기 위해 가상 메모리를 사용한다.
가상 메모리의 기본 아이디어
- 프로세스는 가상 주소를 사용하고, 실제 해당 주소에서 데이터를 읽고 쓸 때만 물리 주소로 바꿔주면 된다.
- Virtual address(가상 주소): 프로세스가 참조하는 주소
- Physical address(물리 주소): 실제 메모리 주소
CPU가 특정 프로세스의 어떤 공간을 참조할 때는 우선 가상 주소를 먼저 참조하고, 가상 주소에 해당하는 실제 물리 주소를 참조하게 된다. (대박) 가상 주소를 참조할 때마다 매번 이를 물리 주소로 변환을 하게 되니깐 이 시간을 짧게 하려고 MMU라는 하드웨어 칩의 지원을 받는다.
- MMU(Memory Management Unit)는 CPU코어 안에 탑재되어 가상 주소를 물리 주소로 빠르게 변환해주는 장치이다.
- CPU는 가상 메모리 주소를 다루고, 실제 해당 주소 접근시 MMU 하드웨어 장치를 통해 물리 메모리에 접근한다.
- 하드웨어 장치를 이용해야 주소 변환이 빠르기 때문에 MMU라는 별도의 장치를 두고 있는 것이다 ! (오호)
가상 메모리의 필요성
이와 같은 가상 메모리 기술은 왜 사용하는 것일까? 😶🌫️🤔
(크게 Caching, Memory Management, Memory Protection)
1. 메인 메모리를 효율적으로 사용하기 위함이다.
가상 메모리 시스템에서는 각 프로그램이 사용하는 가상 주소 공간(Virtual Address Space)을 우선 디스크에 저장해 두고, 그 중에서 자주 사용되는 부분만 메인 메모리로 가져와서 사용한다. 즉 메인 메모리를 디스크의 캐시로 사용하는 것이다. 이렇게 하면 하나의 메인 메모리에 여러 프로그램의 데이터와 코드를 로드하는 것이 가능해진다.
2. 메모리 관리를 단순화한다.
가상 메모리 시스템에서는 각 프로세스가 완전히 동일한 포맷의 가상 주소 공간을 가진다. 이것이 가능한 이유는 실제로 메모리 참조를 수행할 때는 가상 주소를 물리 주소로 변환하는 작업이 진행되기 때문이다. 따라서 각각의 프로세스에게 혼자 메인 메모리를 사용한다는듯한 착각을 제공한다.(이렇기에 착각을 하는거라고 했구나..!) 이는 링커 및 로더의 구현과 메모리 할당 방식 등을 단순화한다.
3. 메모리 보호 메커니즘을 단순화한다.
가상 메모리 시스템에서는 한 프로세스가 다른 프로세스의 주소 공간에 접근하는 것을 쉽게 막을 수 있다. 또한, 가상 주소를 물리 주소로 변환할 때 참조하는 맵핑 테이블의 각 엔트리에는 해당 가상 주소에 대한 접근 권한이 명시된다. 따라서 유저 프로세스가 커널 영역에 접근하는 것처럼 허용되지 않은 주소 공간에 접근하는 것도 쉽게 막을 수 있다.
추가적으로 더 공부할 수 있는 내용 & Reference
- 페이징 시스템, 다중 단계 페이징 시스템과 페이징 시스템의 적용, 페이지 폴트, 페이지 교체 알고리즘 : https://velog.io/@gndan4/OS-%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC
- MMU란? contiguous allocation(연속 메모리 할당) MMU와 메모리 분할 문제: https://jhnyang.tistory.com/247
- Virtual Memory: https://it-eldorado.tistory.com/52?category=761782
'SW사관학교 정글 > Malloc-lab' 카테고리의 다른 글
[Malloc-lab] 동적 메모리 할당기(Dynamic Memory Allocator) 이해 과정 (0) | 2022.11.02 |
---|---|
[Malloc-lab] malloc, calloc, realloc, free, brk, sbrk, mmap 기본 개념 정리 (1) | 2022.11.02 |
[Malloc-lab] 메모리 영역(데이터 세그먼트) (1) | 2022.10.28 |