가상 메모리의 정의
가상 메모리(Virtual Memory)는 프로세스를 실행할 때 실행에 필요한 일부만 메모리에 로드하고 나머지는 디스크에 두는 것을 말한다.
이를 통해 프로세스 전체가 물리적 메모리에 있는 것 '처럼' 수행되는, 즉 물리적 메모리가 훨씬 많이 있는 것처럼 보이게 된다.
결과적으로 메모리에 작은 양의 주소 공간만 있으면 충분히 프로세스를 수행할 수 있고, 그에 따라 더 많은 프로그램을 동시에 실행할 수 있게 된다. (물리적인 메모리 크기보다 크기가 큰 프로세스 또한 실행이 가능하다)
가상적으로 주어진 주소를 가상 주소(virtual address) 혹은 논리 주소(logical address)라고 하며, 실제 메모리 상에서 유효한 주소를 물리 주소(physical address)라고 한다. 논리 주소 공간은 메모리 관리 장치(MMU)에 의해 물리 주소로 변환된다.
가상 메모리의 장점은 다음과 같은 것들이 있다.
- 사용자 프로그램이 물리 메모리보다 커져도 된다. 즉 메모리 크기의 제약이 자유로워진다.
- 각 사용자 프로그램이 더 적은 메모리를 차지하여 더 많은 프로그램을 동시에 수행할 수 있다.
- CPU 이용률과 처리율이 높아진다.
- 프로그램을 메모리에 올리고 스왑 하는 필요한 입출력 횟수가 줄어든다.
- 가상 메모리 파일의 공유를 쉽게 하고 공유 메모리 구현을 가능하게 한다.
- 프로세스 생성을 효율적으로 처리할 수 있는 메커니즘을 제공한다.
Demand Paging
이 때 프로세스의 현재 필요한 부분만 메모리에 올리는 것을 Demand Paging이라고 한다. 프로세스를 페이지 단위로 나누어 실행에 필요한 부분과 필요 없는 부분으로 나누고, 당장 실행에 필요한 페이지만 메모리에 적재한다.
Demand paging은 page table에서 해당 page가 메모리에 있는지를 나타내는 valid-invalid bit를 사용한다. bit가 valid인 경우 페이지가 physical memory에 존재하고, invalid인 경우 존재하지 않는다는 것이다.
따라서 처음에는 모든 page entry가 invalid로 초기화되어있고, 주소 변환 시 bit가 invalid로 되어있다면 page fault가 발생한다.
Demand Paging이 진행되는 과정은 다음과 같다.
(1) CPU가 가상 주소를 MMU에게 요청하면,
(2) MMU는 먼저 TLB(페이지 테이블의 Cache)로 가서 그 가상주소에 대한 물리주소가 캐싱돼 있는지 확인한다.
(3) TLB에 캐싱된 물리주소가
- 있으면 MMU가 해당 페이지의 물리 주소로 데이터를 갖고 와서 CPU에게 보내고 (주소를 변환하고)
- 없으면 MMU가 물리 메모리에 해당 프로세스의 페이지 테이블에 접근한다.
(4) MMU가 페이지 테이블에서 물리주소가 있는지 valid bit를 확인한다.
(5) valid bit의 값이
- 1이면 MMU가 해당 페이지의 물리 주소로 데이터를 갖고 와서 CPU에게 보내고
- 0이면 MMU가 페이지 폴트 인터럽트를 운영체제에 발생시킨다.
(6) 운영체제는 해당 페이지를 저장공간에서 가져온다.
(7) 운영체제는 저장공간에서 가져온 데이터를 메모리에 올려주고, 페이지 테이블을 업데이트 해준다. valid bit -> 1, 물리주소 업뎃
(8) 운영체제는 CPU에게 프로세스를 다시 실행하라고 한다.
(9) CPU는 다시 MMU에 가상 주소를 요청한다.
Page Replacement Algorithm
1. OPT(Optimal Algorithm)
Optimal Algorithm은 가장 먼 미래에 참조되는 page를 대체하는 방법이다. 이 방법은 항상 최적의 결과를 갖는다.
해당 예시에서 빨간색이 Page fault가 발생한 부분이다.
2. FIFO(First In First Out) Algorithm
FIFO 알고리즘은 제일 먼저 들어온 것을 먼저 내쫓는 방법이다. 모든 page가 평등하며, 구현하기 쉽다는 장점이 있다.
3. LRU (Least Recently Used) Algorithm
LRU 알고리즘은 가장 오래전에 참조된 것을 지우는 방법이다.
4. LFU(Least Frequently Used) Algorithm
LFU 알고리즘은 참조 횟수가 가장 적은 page를 지우는 방법이다.
5. Second Chance Algorithm (Clock Algorithm)
실제 paging. 시스템에서는 운영체제가 참조한 지 오래되거나 참조 횟수가 적은 페이지를 정확하게 알 수 없다. 그래서 이에 대한 해결법으로 제시 된 것이 Second Chance Algorithm이다.
Second Chance Algorithm은 LRU의 근사(approximation) 알고리즘으로, 최근에 참조되었는지 여부를 나타내는 Reference bit이라는 정보를 사용한다.
Reference bit가 0인 것을 찾을 때까지 시계처럼 한 바퀴씩 포인터를 이동하다가 0인 것을 찾으면 해당 page를 교체하는 방식이다.
Thrashing
프로세스가 원활한 수행에 필요한 최소한의 page frame을 할당받지 못해서, 실행보다 프로세스 Swapping 하는데 더 많은 시간을 소모하는 현상이다.
출처
'Computer Science > 운영체제' 카테고리의 다른 글
Sync vs Async & Block vs Non-Block (0) | 2023.03.19 |
---|---|
캐시 메모리 (0) | 2023.03.18 |
교착상태와 기아상태 (1) | 2023.03.18 |
운영체제란 (0) | 2023.03.17 |
멀티 프로세스와 멀티 스레드 (0) | 2023.03.17 |