메모리 관리 전략
가상 메모리
가상 메모리는 프로세스의 일부만 메모리에 로드하고, 난머지는 디스크에 둔 상태로 프로세스를 실행하는 방식이다. 앞서 잠깐 설명했듯이 이 방식은 프로세스 저체가 메모리에 로드를 하지 않아도 프로그램을 실행하는 데 문제가 없다. 그리고 사용자는 프로세스 전체가 메모리에 로드 된 것처럼 보이게 된다.
장점
- 메모리 크기에 대한 제한을 덜 받는다.
- CPU 이용률과 처리율을 높일 수 있다.
- 필요한 영역만 로드해 스와핑 횟수를 줄여 실행 속도를 높일 수 있다.
요구 페이징
요구 페이징은 프로세스에서 필요한 페이지만 메모리에 로드하는 방식이다. 페이지를 필요한 영역만 로드하고 다른 영역은 요청이 올 때 처리한다.
페이지 폴트
페이지 폴트가 발생하면 디스크에서 필요한 페이지를 스왑 인한다. 이때 페이지에 해당하는 메모리 영역이 물리 메모리에 있는지 페이지 테이블에서 확인할 수 있다. 페이지 테이블은 v(valid), i(invalid) 값으로 프레임이 존재 여부, 유효 여부 값을 리턴한다.
페이지 폴트 발생시 처리 과정
- 필요한 페이지가 물리 메모리에 있는지 확인한다.
- i를 반환하면 OS는 참조하려는 페이지 주소 값이 유효하지 않은지 메모리에 로드되지 않은 영역인지 판단한다.
- 메모리에 로드되지 않은 영역이면 디스크에서 해당 영역을 찾는다.
- 디스크에서 비어있는 페이지 영역에 스왑 인한다. 만약 비어있는 프레임이 없으면 페이지 교체 알고리즘을 호출해 기존 페이지를 스왑 인하고 로드한다.
- 페이지 테이블에서 새로 로드한 페이지의 값을 v로 변경한다.
- 프로세스를 다시 실행한다.
스레싱
스레싱은 동시에 일정 수 이상의 프로그램을 실행했을 때 오히려 CPU 이용률이 떨어지는 상황을 말한다. 가상 메모리를 통해 다중 프로그래밍을 하면 CPU 이용률이 높아진다. 그러다 일정 수 이상으로 다중 프로그래밍을 하면 페이지 폴트가 자주 일어나게 되고, 페이지를 스왑 인, 아웃하는 작업도 많이 한다. 그렇게 되면 CPU 이용률이 갑자기 떨어지는 구간이 발생한다. 이를 스레싱이라 한다.
스레싱 예방
스레싱 예방은 워킹 세트(working set)를 설정하는 방법이 있다. 워킹 세트는 지역성을 기반으로 자주 사용하는 페이지를 저장해 두는 것을 의미한다.
캐시 메모리
캐시 메모리는 CPU와 메인 메모리 간에 데이터 접근시 속도 차이를 출이기 위해 사용한다. CPU는 데이터를 가져올 때 자주 사용하는 데이터는 캐시 메모리에 저장하고, 후에 데이터를 가져올 때 캐시 메모리 부터 접근해서 데이터를 가져온다. 캐시 메모리에 저장되는 데이터는 지역성을 기반하여 저장된다.
지역성
지역성(locality)은 CPU가 자주 참조하는 데이터가 고르게 분포되지 않고 특정 부분에 몰려있는 것을 의미한다. 지역성은 캐시 적중률을 높여준다.
- 시간 지역성 : 최근 참조한 내용을 다시 참조
- 공간 지역성 : 실제 참조한 주소 근처의 내용을 참조
캐시 메모리 매핑 방식
직접 매핑(direct mapping) : 메인 메모리와 캐시를 똑같은 크기로 나누고 순서대로 매핑한다.
연관 매핑(associative mapping) : 순서를 일치시키지 않는 방식이다. 캐시 메모리에 영역을 찾을 때는 비효율적이라는 단점이 있다.
집합 연관 매핑(set associative mapping) : 직접 매핑과 연관 매핑을 결합해 단점을 보완한 방식이다.
출처
- 기술 면접 대기 CS 전공 핵심요약집 (책)
- 패스트캠퍼스 강의