가상 메모리
스왑 영역으로 프로세스의 모든 정보를 주고 받는 것은 매우 비효율적이고,
게다가 램보다 큰 용량을 요구하는 프로그램의 경우에는 실행이 불가능하다.
이를 해결하기위해 메모리 공간이 연속적일 필요가 없다는 생각에 나온게 가상 메모리이다.
가상 메모리는 컴퓨터가 프로그램을 실행할 때 필요한 물리적 메모리(RAM)의 양보다 더 많은 메모리를 사용하는 것처럼 혹은 연속된 메모리처럼 만드는 시스템이다. 이를 위해 남은 RAM의 메모리 공간, 일부 하드 디스크나 SSD공간을 활용하여 물리적 메모리의 확장처럼 사용한다.
사용 목적
- 메모리 공간 확장: 가상 메모리를 사용하면 시스템은 물리적 메모리 크기를 초과하는 양의 메모리를 가지는 것과 마찬가지이다. 더 크고 복잡한 애플리케이션을 실행할 수 있다
- 보안과 격리: 프로세스는 독립된 가상 메모리 공간을 가지므로, 한 프로세스의 오류가 다른 프로세스나 시스템 전체에 영향을 미치는 것을 방지한다.
- 메모리 관리의 효율성: 가상 메모리는 메모리를 보다 유연하고 효율적으로 관리할 수 있도록 도와준다.
작동 원리
- 페이징 시스템: 대부분의 가상 메모리는 페이징 기법을 사용하며, 메모리를 고정된 크기의 페이지로 나누고, 페이지 단위로 메모리를 관리한다.
- 페이지 테이블: 각 프로세스는 페이지 테이블을 갖고 있으며, 이는 가상 주소를 물리적 주소로 변환하는데 사용된다.
- 스왑 공간: 물리적 메모리가 부족할 때, 운영 체제는 사용하지 않는 페이지를 스왑 공간(ex: disk)으로 옮긴다.
장단점
장점
- 물리적 메모리 용량보다 큰 메모리를 요구하는 프로그램을 실행할 수 있다.
- 프로세스 간 메모리 보호 및 격리
- 메모리 관리의 유연성 향상
단점
- 스왑 공간에 대한 의존도 증가하는 성능 저하를 가져올 수 있다.
- 페이지 교체 알고리즘과 스왑 정책에 따라 시스템의 성능차이가 발생한다.
가상 메모리는 현대 컴퓨팅 시스템에서 필수적인 기능으로, 메모리 사용의 효율성을 크게 향상시키고 다양한 프로그램을 동시에 실행할 수 있는 환경을 제공한다. 그러나 적잘한 관리와 최적화가 이루어지지 않으면 시스템의 성능에 부정적인 영향을 끼칠 수 있다.
스왑(SWAP)
스왑은 컴퓨터 시스템 메모리 기법 중 하나로, 주로 가상 메모리 시스템에서 사용된다. 물리적 메모리(RAM)의 부족한 공간을 보완하기 위해 보조 장치(하드 드라이브, SSD)의 일부를 메모리 처럼 사용하는 것을 말한다.ㅏ
작동 원리
- 스왑 공간
- 운영 체제는 하드 드라이브에 스왑 공간을 설정한다. 이 공간은 물리적 메모리의 연장으로 사용되며 스왑 파일 또는 스왑 파티션으로 존재할 수 있다.
- 페이지 교체
- 물리적 메모리가 부족할 때, 운영 체제는 현재 사용 빈도가 낮은 메모리 페이지를 선택하여 스오바 공간으로 이동시킨다. 이 과정을 페이지 아웃이라고 한다.
- 반대로, 필요한 페이지가 스왑 공간에 있따면, 해당 페이지를 물리적 메모리로 다시 불러온다. 이 과정을 페이지 인 이라고한다.
- 스왑 파일 관리:
- 운영 체제는 스오바 파일을 관리하고, 어떤 데이터타 스왑 되었는지, 되어야 하는지 추적한다. 스왑 파일은 물리적 메모리의 페이지와 1:1로 매핑될 수 있다.
스왑 사용 목적
- 메모리 확장: 스오바 공간은 물맂거 메모리의 크기를 가상적으로 확장하여, 더 많은 프로그램을 실행할 수 있게 해준다.
- 메모리 효율성 향상: 가장 자주 사용되는 데이터를 물리적 메모리에 유지하고, 그렇지 않은 데이터를 스오바 공간으로 이동시킴으로써 메모리 사용의 효율성을 높으니다.
단점
- 성능 저하: 스오바 공간에 접근하는 속도는 물리적 메모리에 접근하는 속도보다 훨씬 느리다. 따라서 스왑을 과도하게 사용하면 시스템의 성능이 저하될 수 있다.
- 스왑 스래싱: 시스템이 스왑 공간에 너무 많이 의존하면, 끊임없는 페이지 인과 아웃으로 인해 시스템의 성능이 급격히 떨어지는 현상이 발생할 수 있다.
페이징
페이징(paging)은 가상 메모리 시스템을 구현할 때 사용하는 메모리 관리 기법 중 하나이다. 이 기법은 물리적 메모리를 일정한 크기의 페이지라는 단위로 분할하고, 이와 동일한 크기로 가상 주로 공간을 가상페이지로 분할한다. 프로그램이 메모리를 사용할 때, 실제로 물맂거 메모리의 연속적인 공간에 있지 안아도 되며, 어느 페이지든 물리적 메모리의 어느 위치에나 배치될 수 있다.
페이징의 핵심
- 가상 페이지(Virtual Page): 가상 메모리는 가상 페이지로 나뉘어 있으며, 이는 프로그램이 메모리를 사용하는 단위이다.
- 페이지 프레임(Page Frame): 물리적 메모리(RAM)는 페이지 프레임으로 나뉘어 있으며, 각 페이지 프레임은 하나의 가상 페이지를 저장할 수 있는 크기를 가진다.
- 페이지 테이블(Page Table): 시스템은 각 프로세스의 페이지 테이블을 유지한다. 이 테이블은 가상 페이지와 해당 페이지가 저장된 물리적 페이지 프레임 사이의 매핑을 관리한다.
- 페이지 테이블 레지스터: CPU에는 페이지 테이블 레지스터가 있어서, 현재 실행 중인 프로세스의 페이지 테이블의 위치를 가리킨다.
- 메모리 관리 유닛(Memory Management Unit, MMU): CPU가 가상 주소를 사용하여 메모리에 접근할 때, MMU는 페이지 테이블을 사용하여 해당 주소를 물리적 주소로 변환한다.
작동 과정
- 프로그램이 메모리에 접근하려고 할 때, 가상 주소를 생성한다.
- 가상 주소는 두 부분으로 나뉜다.
- 페이지 번호는 페이지 테이블을 참조하여 해당 페이지가 메모리의 어느 페이지 프레임에 있는지 확인한다.
- 페이지 내 오프셋은 해당 페이지 프레임 내에서의 실제 데이터의 위치를 가리킨다.
- MMU는 이 두 정보를 결합하여 실제 물리적 주소를 생성한다.
페이징 장단점
페이징 장점
- 주소 공간의 분할: 프로세스는 물리적 메모리가 아니라 가상 주소 공간을 사용하기 때문에, 메모리 사용이 더 유연해진다.
- 메모리 보호: 각 프로세스는 자신의 가상 주소 공간을 가지므로 다른 프로세스의 메모리 영역에 접근하는 것을 방지한다.
- 프로세스 격리: 각 프로세스는 마치 전체 메모리를 독점적으로 사용하는 것처럼 독립된 가상 메모리 공간을 가진다.
- 스왑 아웃: 시스템이 물맂거 메모리보다 많은 메모리를 필요로 할 때, 사용되지 않는 페이지를 디스크의 스왑 공간으로 이동시켜 메모리를 확보할 수 있다.
페이징 단점
- 페이지 폴트(Page Fault): 프로그램이 요청한 페이지가 물리적 메모리에 없을 경우, 페이지 폴트가 발생하고 해당 페이지를 디스크에서 불러오야 한다. 이 과정은 시간이 많이 소요될 수 있음.
- 페이지 테이블의 크기: 크고 복잡한 프로그램일수록 페이지 테이블의 크기도 커지고, 이는 추가적인 메모리 사용을 의미한다.
- 외부 단편화: 페이징 시스템은 내부 단편화는 줄일 수 있지만, 페이지 프레임의 크기가 프로세스의 요구 사이즈와 정확히 맞지 않을 때 발생하는 작은 공간의 낭비, 즉 외부 단편화는 여전히 존재한다.
페이징은 가상 메모리를 효율적으로 사용하고 프로세스 간 메모리르 격리하는데 매우 중요한 역할을 한다. 아지만 페이징을 통한 메모리 관리는 시스템의 메모리 엑세스 패턴, 프로세스의 크기 및 수, 페이지의 크기 등 다양한 요소에 따라 최적화 되어야 한다.
가상 메모리 생성 과정
가상 주소는 OS의해 생성되고 관리가 되어진다. 프로세스가 실행되면 운영 체제는 프로세스에 가상 메모리를 제공한다.
- 프로세스 생성: 사용자가 프로그램을 실행하거나 시스템이 백그라운드 작업을 시작할 때, 운영체제는 새 프로세스를 생성한다.
- 주소 공간 할당: 운영 체제는 프로세스에 대한 독립적인 가상 주소 공간을 할당한다. 이 주소 공간은 물리적 메모리의 실제 상태와는 독립적으로 프로세스에게 제공된다.
- 페이지 테이블 초기화: 운영 체제는 프로세스의 가상 주소를 물리적 주소로 매핑하기 위한 페이지 테이블을 생성하고 초기화 한다.
- 메모리 요청 처리: 프로세스가 메모리를 요청하면, 예를 들어 변수 할당이나 메모리 할당 함수(malloc) 호출을 통해, 운영 체제는 이 요청을 가상 주소 공간에 매핑한다.
- 주소 변환: 프로세스가 메모리에 접근 하려고 할 때, CPU 내의 메모리 관리 유닛(MMU)은 페이지 테이블을 참조하여 가상 주소를 물리적 주소로 변환한다.
- 실행: 프로세스는 이 가상 주소를 통해 코드를 실행하고 데이터를 저장한다. 프로세스는 실제 물리적 메모리의 위치를 알 필요 없이, 운영 체제가 제공하는 가상 주소 공간 내에서 동작한다.
MMU
MMU(Memort Mangemant Unit)는 컴퓨터 하드웨어의 중요한 부분으로, CPU와 물리적 메모리 사이에 가상 주소를 물리적 주소로 변환하는 역할을 한다. 가상 메모리 기법을 지원하는 모던 운영 시스템에서 MMU는 필수적인 요소로 사용된다.
MMU 주요 기능
- 주소 변환
- MMU는 프로세스가 생성한 가상 주소를 실제 메모리의 물리적 주소로 매핑한다.
- 이 변환은 페이지 테이블이나 세그먼트 테이블 같은 데이터 구조를 사용하여 수행됨.
- 메모리 보호
- MMU는 프로세스가 자신에게 할당되지 앟은 메모리에 접근하는 것을 방지하여, 시스템의 안전성을 높인다.
- 각 메모리 접근 요청은 허가된 영역의 모드에 대해서 검사된다.
- 캐싱
- 변호나 색인 버퍼를 통해 가장 최근에 사용된 주소 변환을 캐시하여, 주소 변환 속도를 빠르게 한다.
- 스왑 아웃/ 스왑 인
- 가상 메모리가 물리적 메모리보다 크게 설정된 시스템에서, MMU는 현재 필요하지 않은 데이터를 스왑 공간(디스크)에 옮기고, 필요할 때, 다시 메모리로 불러오는 과정을 관리한다.