가상 메모리
가상 메모리는 논리적으로 4GB의 연속된 메모리 공간을 제공하며,
실제 물리 메모리와는 독립적으로 동작한다.
이 메모리 공간은 운영체제가 관리하며 각 프로세스가 자신의 공간을 가진다.
페이지와 프레임, 오프셋
- 페이지 (Page) : 가상 메모리는 일정한 크기의 블록으로 나뉘며, 이를 페이지라고 한다. windows에서는 기본적으로 4KB 크기의 페이지를 기본적으로 사용한다.
- 프레임 (Frame) : 물리 메모리 역시 페이지와 동일한 크기로 나뉘며, 이를 프레임이라고 한다.
- 오프셋 (Offset) : 절대적인 기준이 되는 페이지 번호와 상대적인 기준이 되는 오프셋이 있다. 오프셋은 해당 페이지 내에서의 위치를 의미한다.
페이지 테이블
페이지 테이블은 가상 메모리의 페이지와 물리 메모리의 프레임을 매핑하는 데 사용된다.
가상 주소는 페이지 번호와 오프셋(디스턴스)으로 구성되며,
페이지 테이블을 통해 해당 메모리가 물리 메모리의 어느 프레임에 있는지 찾을 수 있다.
주소 변환 과정
가상 주소(va)와 물리 주소(pa)
가상 주소는 프로그램이 사용하는 논리적 주소로, 페이지 번호와 오프셋으로 구성된다.
가상 주소는 물리 메모리의 특정 위치로 매핑된다.
- 가상 주소는 페이지 번호(P)와 오프셋(D)로 나뉜다.
-> 페이지 테이블에서 페이지 번호 P에 해당하는 프레임 번호를 찾는다.
-> 물리 주소는 프레임 번호와 오프셋의 조합으로 결정된다.
페이지 폴트 Page Fault
페이지 폴트는 가상 주소를 물리 주소로 변환하는 과정에서
페이지 테이블에 해당 페이지가 물리 메모리에 존재하지 않는 경우 발생한다.
- 페이지가 물리 메모리에 없는 경우 : 페이지 테이블 엔트리가 'invaild'로 설정된 경우, 이는 해당 페이지가 물리 메모리에 존재하지 않음을 의미한다.
인벨리드 프레임이란, 유효하지 않은 테이블 항목을 가리키는 것을 말한다. (물리 메모리가 할당되지 않은 영역)
페이지 폴트는 필요한 페이지가 메모리에 없는 경우 발생하는 예외 상황이다.
페이지 폴트가 발생하면 운영체제는 해당 페이지를 디스크에서 메모리로 가져온다.
요구 페이징 Demand Paging
필요한 시점에만 페이지를 메모리에 적재하는 방식이다.
프로그램이 실행될 때 모든 페이지를 적재하지 않고, 실제로 필요한 페이지만 메모리에 올린다.
페이지 교체 Page Replacement
메모리의 페이지가 부재시,
필요하지 않은 페이지를 디스크로 보내고 필요한 페이지를 메모리로 가져오는 과정이다.
(빈 메모리 영역에 페이지 올리는 과정, 스왑 영역으로 내보낼 페이지 결정)
페이지 교체 알고리즘
- FIFO
- LRU(Least Recently Used) : 가장 오래 사용하지 않은
- LFU(Least Frequently Used) : 빈도 가장 낮은
- OPT(Optional Page Replacement) : 미래 사용되지 않을 (실제 구현 불가)
페이지 폴트 처리 과정 (요구 페이징)
1. 가상 주소 접근 & 페이지 테이블 조회 : cpu가 가상 주소(va)에 접근한다. 페이지 테이블에서 해당 가상 주소의 페이지 번호 (p)를 조회한다.
2. 페이지 폴트 발생 : 페이지 테이블 엔트리가 'invaild'로 설정되어 있거나, 해당 페이지가 메모리에 없는 경우 페이지 폴트가 발생한다.
3. 운영체제 개입 : 페이지 폴트가 발생하면 운영체제가 개입하여 필요한 페이지를 디스크에서 물리 메모리로 로드한다.
4. 페이지 테이블 갱신 : 페이지가 물리 메모리에 로드되면, 페이지 테이블을 갱신하여 해당 페이지가 어느 프레임에 로드되었는지 기록한다.
5. 프로세스 재개 : 페이지 테이블이 갱신되면, cpu는 중단된 명령어를 다시 실행해 작업을 재개한다.
페이지 교체 과정
1. 페이지 폴트 발생 : cpu가 가상 주소에 접근할 때, 해당 페이지가 메모리에 없으면 페이지 폴트가 발생한다.
2. 페이지 교체 필요성 확인 : 페이지 폴트가 발생하면 운영체제는 현재 메모리에 빈 공간이 있는지 확인한다. 빈 공간이 없으면 페이지 교체가 필요하다.
3. 페이지 교체 알고리즘 적용 : 운영체제는 적절한 페이지 교체 알고리즘을 사용해 내보낼 페이지를 결정한다.
4. 페이지 내보내기 : 선택된 페이지를 디스크로 내보내고, 페이지 테이블을 갱신한다.
5. 필요 페이지 로드 : 디스크에서 필요한 페이지를 메모리로 로드하고, 페이지 테이블을 갱신한다.
6. 프로세스 재개 : cpu는 중단된 명령어를 다시 실행해 작업을 재개한다.
∴ 페이지 폴트는 요구 페이징의 일환으로 발생하고(요구 페이징에서'만' 발생하는 건 아니다),
페이지 교체는 페이지 폴트가 발생했을 때, 빈 메모리 공간이 없는 경우 수행된다.
요구페이징(페이지 폴트 발생) --> 페이지 교체 수행
+⍺
. 페이지 부재는 요구 페이징에서만 발생하는 것이 아니다.
페이지 부재는 메모리 관리 기법에서, 필요한 페이지가 현재 물리 메모리에 존재하지 않아 디스크에서 해당 페이지를 가져와야 하는 상황을 의미한다.
따라서, 페이지 부재는 여러 페이징 기법에서 발생할 수 있으며, 요구 페이징은 그 중 하나일 뿐이다.
요구 페이징(Demand Paging)은 기본적으로 다음과 같은 과정을 반복하는 알고리즘이다:
- 페이지 탐색: CPU가 특정 가상 주소에 접근할 때, 해당 페이지가 메모리에 있는지 페이지 테이블을 조회한다.
- 페이지 부재(Page Fault): 페이지가 메모리에 없는 경우, 페이지 부재가 발생한다.
- 페이지 로딩: 운영체제가 디스크에서 필요한 페이지를 메모리로 로드하고, 페이지 테이블을 갱신한다.
이 과정에서 페이지 부재는 필연적으로 발생한다. 이를 극복하고 메모리 관리의 효율성을 높이기 위해 다음과 같은 방법들을 사용한다:
- 페이지 교체 알고리즘 적용:
- 메모리에 빈 공간이 없을 때 어떤 페이지를 내보내고 새로운 페이지를 로드할지 결정하기 위해 페이지 교체 알고리즘을 사용한다.
- 대표적인 페이지 교체 알고리즘에는 FIFO(First-In, First-Out), LRU(Least Recently Used), LFU(Least Frequently Used) 등이 있다.
- 워크셋(Working Set) 관리:
- 프로그램이 실행될 때 자주 사용하는 페이지들을 메모리에 유지하려는 기법이다.
- 워크셋 모델은 현재 작업에 필요한 페이지들을 미리 예측하고 유지함으로써 페이지 부재를 줄이려 한다.
- 프리페칭(Prefetching):
- 프로그램이 앞으로 사용할 것으로 예측되는 페이지들을 미리 메모리에 로드하는 방법이다.
- 예측이 정확하다면 페이지 부재를 줄일 수 있지만, 잘못된 예측은 오히려 성능 저하를 초래할 수 있다.
- 메모리 압축:
- 메모리 압축을 통해 메모리 사용 효율을 높여 더 많은 페이지를 메모리에 유지할 수 있다.
따라서, 요구 페이징은 페이지 부재 -> 페이지 로딩의 반복되는 과정에서 효율성을 극대화하기 위해 다양한 페이지 교체 기법과 메모리 관리 기법을 함께 사용한다. 이를 통해 메모리 사용의 최적화를 도모하고, 페이지 부재로 인한 성능 저하를 최소화 한다.
'CS' 카테고리의 다른 글
CS_운영체제_TLB (0) | 2024.06.25 |
---|---|
CS_운영체제_세그먼테이션, 페이징 (0) | 2024.06.23 |
CS_운영체제_PCB & Context Switching (0) | 2024.06.18 |
CS_운영체제_주소 변환(Address Translation) (0) | 2024.06.18 |
CS_운영체제_주소 공간과 가상 메모리 (0) | 2024.06.18 |