가상 메모리
기법을 사용한다.CPU 내부의 저장 공간 부족
, 효율성
, 주기적인 메모리에 적재된 프로세스 삭제/등록
등 여러 사유로 인해서 메모리의 모든 정보를 알고 있을 수 없습니다.물리/논리 주소
, 가상 메모리
, 페이징
의 개념에 대해서 알아보자물리 주소
가 아니라, 다른 주소 체계를 이용한다. 논리 주소
논리 주소
는 프로세스 마다 부여되는 가상의 논리 주소이다.물리 주소
는, 중복 될 수 없으나, 논리 주소
는 얼마든지 중복될 수 있다.왜? 논리 주소를 사용하는가?
물리 주소
는 실제 메모리(RAM)의 주소이다.물리 주소 공간은 RAM 크기에 따라 고정된 범위를 가진다.
예를 들어, 8GB 메모리를 가진 PC는 8GB 만큼의 물리 주소 공간을 가진다.
그렇다면, 하나의 프로세스가 1GB의 메모리를 사용한다면, 동시에 최대 8개의 프로세스만 실행할 수 있을까?
실제로는 그렇지 않다. 프로세스가 실행되기 위해 전체가 메모리에 올라올 필요는 없으며, 실행에 필요한 일부 페이지만 물리 메모리에 올라간다. 나머지는 뒤에서 알아볼
가상 메모리
에 보관된다.이처럼 실행 중인 프로세스의 일부분만 물리 메모리에 올라가므로,
물리 주소
에 어떤 프로세스의 어떤 페이지가 매핑될지는 상황에 따라 계속 바뀐다.뒤에서 설명할
스와핑
과 연관 있다.예를 들어, 프로세스 A가 물리 주소
0x1000
을 사용하고 있다가컨텍스트 스위칭
등으로 인해 메모리에서 내려갔다가 다시 올라올 경우,0x1000
은 더 이상 A의 데이터가 아닌, 다른 프로세스의 데이터가 저장된 주소일 수 있다.이런 이유로, 프로그램 입장에서는 항상 일관된 주소를 사용하는 것이 중요하다.
그래서 운영체제는
논리 주소
(또는 가상 주소)라는 개념을 도입해, 프로세스마다 독립된 주소 공간을 제공한다.이를 통해 가용성(더 많은 프로세스 실행 가능), 안정성(주소 충돌 없음), 보안성(프로세스 간 메모리 접근 차단) 등의 다양한 이점을 얻을 수 있다.
논리 주소
를 사용할때 결국 실행될 때는 실제 메모리에 있는 물리 주소
를 참조해야 한다.논리 주소
로 물리 주소
를 알 수 있어야 한다는 것이다. (상호작용을 위해)MMU(Memory Management Unit)
이라는 하드웨어를 통해 논리 주소를 물리 주소로 변환하여 사용하게 된다.스왑 영역
에 보내고, 확보된 공간에 다른 프로세스를 적재하여 실행하는 메모리 관리 방식을 스와핑
이라고 한다.스왑 아웃
스왑 인
이라고 한다.스왑 아웃
-> 스왑 인
될 때는 다른 주소로 적재될 수 있다.스와핑
을 통해 사용되지 않는 프로세스를 스왑 영역
에 보내, 알뜰하게 메모리 관리하는 건 알았다.연속 메모리 할당
방법이다.A ~ D
까지의 프로세스를 연속 메모리 할당
으로 적재한다면 다음과 같이 적재 될 것이다.프로세스B
, 프로세스 D
가 실행 완료된다면 이렇게 될 것 이다.프로세스 E
가 들어오는데 이 프로세스는 60MB 의 용량을 필요해 한다.외부 단편화
라고 한다.스와핑
과 연속 메모리 할당
은, 외부 단편화 문제를 가지고 있다.가상 메모리란?
- 실행하고자 하는 프로그램의 일부만 메모리에 적재해, 실제 메모리보다 더 큰 프로세스를 실행할 수 있도록 만드는 메모리 관리 기법
- 보조 기억 장치의 일부를 메모리처럼 사용하거나, 프로세스의 일부만 메모리에 적재함으로써 메모리를 실제 크기보다 더 크게 보이게 하는 기술이라고 할 수 있다.
가상 주소 공간
이라고 한다.페이징
과 세그멘테이션
이 있다.페이지
라는 일정한 단위로 나누고, 물리 주소 공간을 페이지와 동일한 크기의 프레임
이라는 일정한 단위로 나눈다.세그먼트
라고 한다.연속 메모리 할당
과 다른점은, 전체 프로세스가 스왑 인/아웃
되는 것이 아니라, 나눠진 페이지 단위로 인/아웃 된다.페이지 아웃
, 페이지 인
이라고 한다.스왑 영역
에 저장되어 있다고 생각하자.
스왑 영역
은 보조 기억 장치로 운용된다.페이지 4
번이 실행에 필요하다면, 페이지 인
시키고, 공간이 부족하다면 현재 실행중이지 않은 페이지 1번
은 페이지 아웃
시키며 효율적으로 운용할 수 있게 된다.페이지 테이블
을 통해 각 페이지의 정보를 저장/관리 하게 된다.