728x90
메인 메모리의 크기는 한정되어 있다.
따라서 물리적인 메모리 크기보다 크기가 큰 프로세스는 실행시킬 수 없다.
이러한 프로세스를 실행시키기 위해서는 메인 메모리를 크게 키울 수 있겠지만 이것은 굉장히 비효율적이다.
따라서 등장한 방법이 바로 가상 메모리(Virtual Memory)이다.
1. 가상메모리(Virtual Memory)란?
- 정의: 메모리 관리 기법의 하나로 매우 큰 메모리인 것처럼 보이게 만드는 것
👉 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식 - 장점
- 사용자 프로그램이 물리 메모리보다 커져도 됨 👉 메모리 크기의 제약이 자유로워짐
- 각 사용자 프로그램이 더 적은 메모리를 차지하여 더 많은 프로그램을 동시 수행 가능
- CPU 이용률과 처리율이 높아짐
- 프로그램을 메모리에 올리고 스왑할 때 필요한 입출력 횟수가 줄어듦
- 가상 메모리 파일의 공유를 쉽게 하고 공유 메모리 구현을 가능하게 함
- 프로세스 생성을 효율적으로 처리할 수 있는 매커니즘을 제공함
프로세스 실행 시 모든 부분이 필요한 것은 아니다.
따라서 실행 시 필요한 부분만 메모리에 올려 메인 메모리에 올라가는 프로세스의 크기를 줄일 수 있다.
이것이 요구 페이징이다.
2. 요구 페이징 Demand Paging
- 정의: 프로그램 실행 시 프로세스를 구성하는 모든 페이지를 한꺼번에 메모리에 올리는 것이 아니라 당장 사용될 페이지만을 올리는 방식
👉 요구 페이징 기법에서는 특정 페이지에 대해 CPU의 요청이 들어온 뒤 해당 페이지를 메모리에 적재함 - 장점
- 필요한 페이지만 메모리에 적재하므로 메모리 사용량이 감소함
- 프로세스 전체를 메모리에 올리는 데 소요되는 입출력 오버헤드가 감소함
- 사용되지 않는 주소 영역에 대한 입출력이 줄어 응답시간이 줄어듦
- 시스템이 더 많은 프로세스를 수용할 수 있게 해줌
- 물리적 메모리의 제약을 벗어날 수 있음
- 단점
- 페이지 부재(page fault)로 인한 성능 저하
: 페이지 부재는 일반적인 페이징에서도 발생하지만, 특히 요구 페이징에서는 필요한 페이지만 물리 메모리에 적재하므로 더 많은 페이지 부재가 발생할 수 있음
👉 요구 페이징을 사용할 때는 페이지 교체 알고리즘을 잘 설계해야 페이지 부재를 최소화할 수 있음
- 페이지 부재(page fault)로 인한 성능 저하
페이지 부재란?
Page Fault
- 정의: 메모리에 적재된 페이지 중 사용 페이지가 없을 때를 의미함
- 빈 페이지가 하나도 없거나 미리 정한 수보다 적을 때 발생함
페이지 부재가 발생하면 요청된 페이지를 디스크에서 메모리로 읽어와야 한다.
이때 물리적 메모리에 빈 프레임이 존재하지 않을 수 있다.
이 경우 물리적 메모리에 올라와 있는 페이지 중 하나를 선택해서 디스크의 스왑 영역을 보내야 한다.
이와 같은 과정을 페이지 교체라고 한다.
3. 페이지 교체
- 정의: 필요한 페이지가 주기억장치에 적재되지 않았을 시(페이지 부재) 어떤 페이지 프레임을 선택하여 교체할 것인지 결정하는 것
- 프레임: 물리 메모리를 일정한 크기로 나눈 블록
- 페이지: 가상 메모리를 일정한 크기로 나눈 블록
- 페이지 교체 알고리즘이란?
- 정의: 어떠한 프레임에 있는 페이지를 디스크의 스왑 영역으로 보낼 것인지를 결정하는 알고리즘
- 목표: 페이지 부재율을 최소화하는 것
- 페이지 교체 알고리즘의 종류: FIFO, LRU, LFU, 클럭
- 정의: 어떠한 프레임에 있는 페이지를 디스크의 스왑 영역으로 보낼 것인지를 결정하는 알고리즘
- 선입선출 알고리즘 (FIFO, First In First Out)
- 정의: 페이지 교체 시 물리적 메모리에 가장 먼저 올라온 페이지를 우선적으로 내보내는 알고리즘
- 단점: 페이지의 향후 참조 가능성을 고려하지 않으므로 비효율적인 상황이 발생할 수 있음
예) FIFO의 이상 현상(FIFO abnomaly): 페이지 프레임을 더 많이 사용하는데 오히려 페이지 부재 횟수가 증가하는 이상현상
- LRU 알고리즘 (LRU, Least Recently Used Algorithm)
- 정의: 페이지 교체 시 가장 오래 전에 참조가 이루어진 페이지를 내보냄
- 장점: FIFO 알고리즘에 비해 페이지 부재 횟수 감소
- LFU 알고리즘 (Least Frequently Used Algorithm)
- 정의: 과거에 참조 횟수가 가장 적은 페이지를 교체 시킬 페이지로 결정하는 알고리즘
- 단점: 앞으로 가장 많이 사용될 수도 있는 페이지가 참조 횟수가 적다는 이유로 교체될 수 있음
👉 최신 흐름을 잘 반영하지 못할 수도 있음
- 클럭 알고리즘 (NRU(Not Used Recently) or NUR(Not Recently Used))
- 정의: 하드웨어적인 자원을 통해 기존(LRU, LFU) 알고리즘의 소프트웨어적인 운영 오버헤드를 줄인 방식
- 특징: LRU처럼 가장 최근에 참조되지 않은 페이지를 대상으로 선정한다는 점에서 LRU와 유사하지만 교체되는 페이지의 참조 시점이 가장 오래되었다는 것을 보장하지는 않음
참고
- https://code-lab1.tistory.com/59
- https://zangzangs.tistory.com/142
- https://velog.io/@kangdev/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%9A%94%EA%B5%AC-%ED%8E%98%EC%9D%B4%EC%A7%95-Demand-Paging
- https://doh-an.tistory.com/28
- https://zangzangs.tistory.com/143
'Computer Science > OS' 카테고리의 다른 글
[OS] 동기화 (스핀락, 세마포어, 뮤텍스) (0) | 2024.07.03 |
---|---|
[OS] TLB (Translation Lookaside Buffer) (0) | 2024.06.27 |
[OS] 페이징(Paging)과 세그멘테이션(Segmentation) (0) | 2024.06.23 |
[OS] 주소 변환 Address Binding (0) | 2024.06.18 |
[OS] 주소 공간과 가상 메모리 (0) | 2024.06.18 |