본문 바로가기
공부/CS

기술 면접 대비 정리 - 1.5 가상메모리

by son_i 2024. 3. 10.
728x90

사용자가 프로그램을 실행하면 OS는 디스크에 저장된 데이터를 메모리로 로드한다.

하지만 메모리 공간은 한정되어 있고, 사용자는 동시에 많은 프로그램을 실행하고 싶어 한다. 

이런 메모리 공간의 한계를 극복하기 위해 가상메모리라는 개념이 등장했다.

 

1.5.1 가상 메모리

가상 메모리 프로세스의 일부만 메모리에 로드하고, 나머지는 디스크에 둔 상태로 프로세스를 실행하는 방식이다.

 

이 방식은 프로세스 전체가 메모리에 올라오지 않아도 프로세스를 실행하는데 문제가 없다는 점에서 착안했다.

ㅅㅏ용자에게는 프로세스 전체가 메모리에 로드된 것처럼 보이지만, 실제로는 전체가 로드된 것이 아니어서 가상 메모리라고 한다.

 

다음 그림과 같이 프로세스 일부를 로드하고, 프로세스의 나머지 영역은 디스크에 두면 더 많은 프로세스를 메모리에 로드할 수 있다.

가상 메모리 사용할 때 장점

- 프로그램이 메모리 크기에 대한 제약을 덜 받을 수 있다.

- 동시에 많은 프로그램을 실행하므로 CPU 이용률과 처리율을 높일 수 있다.

- 필요한 영역만 메모리에 로드해 스와핑 횟수를 줄여서 프로그램 실행 속도를 높일 수 있다.

 


1.5.2 요구 페이징

요구페이징프로세스에서 필요한 페이지만 메모리에 로드하는 방식이다. 페이지를 모두 메모리에 로드하지 않고 초기에 필요한 영역만 로드한 후 다른 영역은 요청이 올 때 메모리에 로드한다.

 

다음 그림과 같이 필요한 페이지를 물리 메모리에 로드하고, 필요하지 않은 페이지는 디스크에 저장한다.

프로그램을 실행하다가 물리 메모리에 필요한 페이지가 없을 때 이를 페이지 폴트라고 한다.

 

페이지 폴트가 발생하면 디스크에서 필요한 페이지를 스왑인한다.

이때 페이지에 해당하는 메모리 영역이 물리 메모리에 있는지는 페이지 테이블로 파악할 수 있다.

 

페이지 테이블은 페이지에 해당하는 프레임이 존재하면 v(valid) 값을, 프레임이 존재하지 않거나 유효하지 않은 주소 값이면 i(invalid) 값을 반환한다.

 

페이지 폴트가 발생했을 때 처리 과정

1. 필요한 페이지가 물리 메모리에 있는지 없는지를 페이지 테이블에서 확인한다. 페이지 폴트가 발생하면 i를 반환

2. i를 반환하면 OS는 참조하려는 페이지의 주소 값이 유효하지 않은 건지, 아니면 메모리에 로드되지 않은 영역인지를 확인

3. 필요한 페이지가 메모리에 로드되지 않은 영역이라면 디스크에서 해당 영역을 찾는다.

4. 디스크에서 해당 페이지 영역을 스왑 인한다. 이때 물리 메모리에 비어있는 프레임이 있으면 페이지를 해당 영역에 바로 로드한다. 만약 비어있는 프레임이 없으면 페이지 교체 알고리즘을 호출해 기존에 로드된 페이지를 디스크로 스왑 아웃한 후 새로운 페이지를 로드한다.

5. 페이지 테이블에서 새로 로드한 페이지의 값을 v로 변경한다.

6. 프로세스를 다시 실행한다.,

 


1.5.3 스레싱

스레싱 동시에 일정 수 이상의 프로그램을 실행했을 때 오히려 CPU 이용률이 떨어지는 상황을 말한다.

 

가상 메모리를 구현해 다중 프로그래밍을 하면 CPU이용률이 높아진다. 하지만 일정 수 이상으로 다중 프로그래밍을 하면 페이지 폴트가 자주 일어난다. 따라서 디스크 영역에서 필요한 페이지를 스왑 인하고 불필요한 페이지를 스왑 아웃하는 작업도 자주 하게 된다. 이처럼 다중 프로그래밍 정도가 일정 수준 이상 높아지면 페이징이 빈번하게 일어나게 되고 실질적으로 CPU이용률이 떨어지는 스레싱이 발생한다.

 

다중 프로그래밍 정도에 따른 스레싱 발생 시점은 다음 그림과 같이 나타낼 수 있다.

스레싱을 예방하려면 워킹세트를 설정하는 방법이 있다. 워킹세트는 지역성을 기반으로 자주 사용하는 페이지를 저장해 두는 것을 의미한다. 워킹 세트를 바탕으로 자주 사용하는 페이지를 물리 메모리의 프레임에 고정하면 페이지 폴트가 빈번하게 발생하는 현상을 방지할 수 있다.

 


예상 질문

1. 스레싱이란?

스레싱이란 가상 메모리 환경에서 다중 프로그래밍 정도가 높아지면서 페이지 폴트가 빈번히 발생해 CPU 이용률이 오히려 낮아지는 증상을 의미한다. 즉, 실제 시스템이 작동되는 시간 보다 페이지 교체가 빈번히 일어나 발생하는 문제.
이러한 문제를 예방하기 위해 워킹 세트를 설정할 수 있다. 워킹 세트는 지역성을 기반으로 자주 사용하는 페이지를 저장해 두는 것을 의미한다.