Virtual memory 또는 Vitrual storage는 메모리 관리 기법의 하나로 컴퓨터 시스템에 실제로 이용 가능한 기억 자원을 이상적으로 추상화하여 사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말한다. 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식이다.
주 메모리(RAM)를 모두 소비하고 고갈될 것으로 생각하여 개발하게 되었으며, 디스크의 일부를 가상 메모리로 할당하고 필요한 데이터를 디스크와 RAM 간에 주고 받는 방식으로 개발했다. 가상 메모리는 사용하지 않는 데이터를 RAM에서 디스크로 스왑하고 다른 작업을 위해 RAM을 확보한다.
가상 메모리의 필요성과 장점
가상 메모리는 멀티태스킹에 매우 중요한 역할을 한다.
컴퓨터가 무거운 프로그램을 둘러싼 메모리 제약에 대해 걱정할 필요가 없어 시스템 성능이 향상한다.
가상 메모리의 필요한 이유는 여러 가지를 이야기 할 수 있다.
- 실행 가능한 프로그램 수 증가
- 보안 및 안정성
- 다중 작업
- 대용량 프로그램 실행 가능
근본적으로 가상 메모리의 장점은 메모리 제약에서 벗어나 필요한 메모리를 확보하고 실행할 수 있다는 것이다.
그렇기에 발생하는 것들이 필요성이자 장점으로 말할 수 있다.
- 여러 프로그램을 실행할 때, 가상 메모리에서는 각 프로그램 간 분리를 하여 서로 다른 메모리에 접근하는 것을 방지한다.
- 메모리 영역을 침범하지 않는다.
여러 프로그램이 동시에 사용하거나 백그라운드 수행하면서 성능 저하 없이 멀티태스킹 환경을 구축할 수 있다. - 서로 분리가 되면서 시스템 보호하고 데이터 손상 위험을 줄일 수 있다.
이러한 가상 메모리의 종류는 2가지가 있다.
- Paging
- Segmentation
페이징 기법의 개념과 동작 원리, 페이지 테이블의 역할
Paging 기법은 메모리를 일정한 페이지로 나누고 프로세스의 주소 공간도 이러한 페이지로 나누어 관리한다.
고정 크기의 페이지로 분할하는데, 그 크기는 4KB 또는 8KB와 같이 고정되어 있다.
가상 주소 공간의 페이지는 물리적 메모리에 있는 페이지와 매핑되어 페이지 테이블에 저장된다.
각 프로세스는 페이지 테이블을 가진다. 사용하지 않는 페이지는 스왑하고 페이지가 사용되면 다시 메모리로 불러온다.
메모리가 부족하면 페이지 스와핑이 발생하여 실행 속도가 저하될 수 있다.
페이지가 클수록 내부에 사용되지 않는 공간이 발생하여 내부 단편화가 발생한다.
> 내부 단편화: 페이지 크기보다 작은 크기의 메모리 공간이 페이지 내부에 발생하여 사용되지 못하는 상태, 메모리 낭비
페이지 테이블
각 페이지가 실제 메모리의 어느 프레임에 할당되었는지에 대한 정보를 담고 있다.
페이지 테이블은 가상 주소를 실제 미모리 주소로 변환하고 사용하지 않는 메모리를 스왑하면서 운영 체제가 메모리를 효율적으로 사용할 수 있도록 관리한다.
세그먼테이션 기법과 개념과 페이징과의 차이점
Sementation은 논리적 구조로 메모리를 관리 한다. 여기서 논리적 구조란 프로그램의 코드, 데이터, 스택, 힙 영역의 의미한다.
각 프로세스마다 각 세그먼트의 시작 주소, 크기, 접근 제한 등 정보가 포함된 세그먼트 테이블을 유지한다.
프로그램들은 필요한 메모리 공간을 자유롭게 확보하고 사용할 수 있다.
외부 단편화가 발생할 확률이 큽니다.
> 외부 단편화: 메모리 공간이 여러 조각으로 나뉘어 있고, 조각 일부는 작은 조각이나 빈 공간으로 사용되어 메모리 낭비
두 기법의 차이점
- 크기
: 페이징은 고정되어 있지만, 세그먼트는 크기가 서로 다를 수 있다. - 단편화
: 모든 단편화는 발생될 확률이 있다.
: 페이징 기법의 경우에는 내부 단편화가 발생될 확률이 높고 세그먼트 기법은 외부 단편화가 발생될 확률이 높다. - 주소 맵핑
: 페이지 번호로 주소를 맵핑, 세그먼트 번호와 오프셋으로 주소를 맵핑
'Life style > TIL' 카테고리의 다른 글
데이터베이스의 종류와 iOS에서 주로 사용되는 데이터베이스 (0) | 2024.05.19 |
---|---|
iOS 앱의 메모리 사용량 최적화를 위한 방안과 고려 사항 (0) | 2024.05.19 |
렌더링 속도의 향상을 위한 MIP maps: 밉맵 (0) | 2024.05.13 |
암호화와 보안의 기본 개념과 iOS 앱 보안을 위한 방안 (0) | 2024.05.09 |
동시성 프로그래밍의 개념과 iOS에서 동시성 처리 방식 (0) | 2024.05.07 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!