(windows의 사례로..)
MS-DOS 시절에는..
애플리케이션에게 많은 권한을 주어서 프로그램이 문제 생길시 OS가 멈추는 더 큰 문제가 발생했다.
(인터럽트 제어도 애플리케이션이 수행해서 메모리에 따라 코드를 수정해야했다..)
이 때 가상메모리 개념이 등장했다.
가상메모리를 사용하게 되면서..
실제 필요한 메모리만 로드해서 물리적 메모리를 효율적으로 사용하게 됐다.
▷ 디스크 공간을 활용하여 물리적 메모리의 한계를 넘어서는 작업을 처리할 수 있다.
프로세스가 죽어도 os는 가상메모리를 사용하므로 실제 메모리를 회수할 수 있다.
▷ 메모리 낭비를 방지하고, os가 손상되지 않도록 한다.
∴ 가상 메모리는 단순히 자원을 폭넓게 사용하기 위한 것이 아니라, 안전하게 사용하기 위한 방식이기도 하다.
가상 메모리 (Virtual Memory)
가상 메모리는 실제 물리적 메모리의 크기와 관계없이 큰 주소 공간을 제공하여
프로그램이 물리적 메모리보다 더 큰 메모리를 사용하게 하는 것처럼 동작하게 한다.
가상 주소를 물리적 주소로 매핑하여 메모리를 효율적으로 사용할 수 있게 한다.
이를 통해 프로그램이 실제 물리적 메모리의 제한을 극복할 수 있게 되었다.
가상 메모리의 동작
1. 페이지 (Pages): 메모리를 작은 블록으로 나누어 관리한다. 각 블록은 페이지라고 하며, 가상 메모리와 물리적 메모리 모두에서 동일한 크기를 가진다.
2. 페이지 테이블 (Page Table): 가상 메모리 주소와 물리적 메모리 주소 간의 매핑을 관리하는 구조
3. 페이지 교체 (Page Replacement): 필요 시 디스크에 저장된 페이지를 메모리로 불러오고, 사용하지 않는 페이지를 디스크로 내보내는 과정
가상 메모리의 장점
- 메모리 확장성: 프로세스는 물리적 메모리의 크기에 구애받지 않고 더 큰 주소 공간을 사용할 수 있다.
- 프로세스 보호: 각 프로세스는 독립된 가상 주소 공간을 사용하여 다른 프로세스의 메모리 영역에 접근할 수 없다.
- 효율적 메모리 사용: 실제로 필요한 메모리만 물리적 메모리에 로드되므로 메모리 사용의 효율성을 높인다.
- 편리한 프로그래밍: 프로그래머는 물리적 메모리 크기를 신경 쓰지 않고 프로그램을 작성할 수 있다.
가상 메모리의 단점
- 복잡성 증가: 가상 메모리를 구현하고 관리하는 것은 운영체제의 복잡성을 증가시킨다.
- 성능 오버헤드: 페이지 폴트가 발생할 때 디스크에서 메모리로 페이지를 로드해야 하므로 성능 저하가 발생할 수 있다.
- 메모리 사용량 증가: 페이지 테이블과 같은 추가적인 구조를 유지하기 위해 더 많은 메모리가 필요하다.
주소 공간 (Address Space)
주소공간은 프로그램이 접근할 수 있는 메모리의 주소의 범위를 의미한다.
가상 주소 공간과 물리적 메모리 주소으로 나뉜다.
주요 3개 영역
- 코드 영역 (텍스트 영역): 실행 코드가 저장되는 영역.
- 힙 영역: 동적 메모리 할당이 이루어지는 영역.
- 스택 영역: 함수 호출과 관련된 지역 변수와 반환 주소가 저장되는 영역.
가상 주소 공간 (Virtual Address Space):
각 프로그램이 독립적으로 가지는 주소 공간이다. 프로그램은 전체 메모리를 독점하는 것처럼 동작한다.
- 프로세스 독립성: 프로그램이 독립된 가상 주소 공간을 가짐으로써, 다른 프로그램의 메모리 영역에 접근하지 못하게 한다.
이는 프로그램 간의 메모리 충돌을 방지하고, 시스템의 안정성을 높인다.
- 주소 변환: 가상 주소는 물리적 주소로 변환되어 실제 메모리에 접근한다. 이 과정은 MMU(Memory Management Unit)에 의해 수행된다.
- 페이지화: 가상 주소 공간은 페이지 단위로 나뉘어 관리되며, 각 페이지는 물리적 메모리의 프레임에 매핑된다.
물리적 주소 공간 (Physical Address Space):
실제 물리적 메모리의 주소 공간이다. 운영체제는 가상 주소를 물리적 주소로 매핑하여 실제 메모리를 관리한다.
- 메모리 할당: 운영체제는 가상 주소를 물리적 주소에 매핑하여 메모리를 효울적으로 할당한다. 메모리 자원을 최적화하고, 사용 가능한 메모리를 최대한 활용하는 데 도움을 준다.
- 페이지 테이블: 각 프로세스는 자신의 페이지 테이블을 가지며, 이는 가상 주소와 물리적 주소 간의 매핑 정보를 포함한다. 페이지 테이블은 운영체제가 관리하며, 메모리 접근시 MMU가 이를 참조한다.
- 메모리 보호: 물리적 주소 공간에서 각 프로세스는 자신의 메모리 영역만 접근할 수 있도록 보호된다. 이는 메모리 침범을 방지하고, 시스템의 안정성을 높인다.
예를 들어, 프로그램이 0x00400000 주소에 있는 코드를 실행하려고 할 때:
- 가상 주소 공간: 0x00400000
- 페이지 테이블: 이 가상 주소가 페이지 테이블을 통해 물리적 주소 0x00100000에 매핑됨.
- 물리적 주소 공간: 실제 메모리에서 0x00100000 주소에 있는 데이터를 참조하여 실행.
가상 메모리와 주소 공간
가상 메모리와 주소 공간의 개념은 서로 밀접하게 연결되어 있다.
가상 메모리는 가상 주소 공간을 통해 물리적 메모리 자원을 효율적으로 사용할 수 있도록 한다.
- 분리와 보호: 각 프로그램이 독립된 가상 주소 공간을 가지도록 하여 프로그램 간의 간섭을 방지한다.
- 효율성: 실제로 필요한 메모리만 물리적 메모리에 로드하여 메모리를 효율적으로 사용할 수 있게 한다.
- 확장성: 디스크 공간을 활용하여 물리적 메모리의 한계를 넘어 더 많은 프로그램을 동시에 실행할 수 있게 한다.
∴ 프로그램은 메모리 자원의 제약 없이 실행될 수 있으며, 시스템의 안정성과 성능을 극대화할 수 있다.
예시
가상 주소 공간
물리적 주소 공간
디스크 공간
예시 1: 프로그램 A
- 가상 주소 공간: 프로그램 A는 4GB의 가상 주소 공간을 가진다. 이는 프로그램이 전체 4GB의 메모리를 사용하는 것처럼 보이게 한다.
- 실제 물리적 메모리 사용: 그러나 실제 물리적 메모리에는 1GB만 할당한다. 나머지 메모리 요구는 디스크를 통해 관리한다.
- 페이지 테이블: 가상 주소와 물리적 주소 간의 매핑은 페이지 테이블에 저장된다. 예를 들어, 가상 주소 0x0000A000이 물리적 주소 0x00002000에 매핑된다.
- 페이지 교체: 필요할 때마다 디스크에 저장된 페이지를 물리적 메모리에 로드하고, 사용하지 않는 페이지를 디스크로 내보낸다. 예를 들어, 가상 주소 0x0000B000이 디스크에 저장되어 있다가 필요할 때 메모리에 로드된다.
예시 2: 프로그램 B
- 가상 주소 공간: 프로그램 B는 2GB의 가상 주소 공간을 가진다. 프로그램은 이 공간을 통해 작업을 수행한다.
- 실제 물리적 메모리 사용: 프로그램 B는 실제로는 512MB의 물리적 메모리를 사용한다. 나머지 메모리 요구는 디스크를 통해 관리된다.
- 페이지 테이블: 프로그램 B의 가상 주소와 물리적 주소 간의 매핑 정보도 페이지 테이블에 저장된다. 예를 들어, 가상 주소 0x0010A000이 물리적 주소 0x00003000에 매핑된다.
- 페이지 교체: 필요한 경우 디스크에서 페이지를 로드하고, 사용하지 않는 페이지는 디스크로 내보냅니다. 예를 들어, 가상 주소 0x0010B000이 디스크에 저장되어 있다가 필요할 때 메모리에 로드된다.
'CS' 카테고리의 다른 글
CS_운영체제_PCB & Context Switching (0) | 2024.06.18 |
---|---|
CS_운영체제_주소 변환(Address Translation) (0) | 2024.06.18 |
CS_운영체제_인터럽트 & 시스템콜 (0) | 2024.06.16 |
CS_운영체제_CPU 스케줄링 (2) | 2024.06.15 |
CS_운영체제_프로세스 & 스레드 (2) | 2024.06.13 |