사용자가 프로그램을 실행하면 OS는 디스크에 저장된 데이터를 메모리로 로드한다.
하지만, 메모리 공간은 한정되어 있고, 사용자는 동시에 많은 프로그램을 실행하고 싶어한다.
이런 메모리 공간의 한계를 극복하기 위해 가상 메모리
라는 개념이 등장했다.
가상 메모리는 크기가 다른 다른 물리 메모리에서 일관되게 프로세스를 실행할 수 있는 기술이다.
가상 메모리 시스템에서 모든 프로세스는 메모리의 어느 위치에 있는지 상관없이 0번부터 시작하는 연속된 메모리 공간을 갖는다.
가상 주소는 물리 메모리 공간이 아닌 가상의 주소 공간을 갖는다.
가상 메모리는 크게 프로세스가 바라보는 메모리 영역과 메모리 관리자가 바라보는 메모리 영역으로 나뉜다.
스왑 영역은 하드디스크에 존재하지만, 메모리 관리자가 관리하는 영역으로서 메모리의 일부이며, 가상 메모리의 구성 요소 중 하나다.
메모리 관리자는 물리 메모리의 부족한 부분을 스왑 영역으로 보충한다.
가상 메모리 시스템에서 메모리 관리자는 물리 메모리와 스왑 영역을 합쳐서 프로세스가 사용하는 가상 주소를 실제 메모리의 물리 주소로 변환한다.
이러한 작업을 동적 주소 변환 (DAT)
이라고 한다.
동적 주소 변환
을 거치면 프로세스가 아무 제약 없이 사용자 데이터를 물리 메모리에 배치할 수 있다.
가상 메모리는 프로세스의 일부만 메모리에 로드하고, 나머지는 디스크에 둔 상태로 프로세스를 실행하는 방식이다.
사용자에게는 프로세스 전체가 메모리에 로드된 것처럼 보이지만, 실제로는 전체가 로드된 것이 아니어서 가상 메모리라고 한다.
메모리 관리 기법의 하나로, 컴퓨터 시스템에 실제로 이용 가능한 기억 자원을 이상적으로 추상화하여 사용자에게 매우 큰 메모리로 보이게 만드는 것을 말한다.
각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식이다.
이러한 방식은 멀티태스킹 운영 체제에서도 흔히 사용되며, 실제 주기억장치보다 큰 메모리 영역을 제공하는 방법으로도 사용된다.
가상적으로 주어진 주소를 가상 주소, 또는 논리 주소라고 하며 실제 메모리 상에서 유효한 주소를 물리 주소 또는 실주소라고 한다.
가상 주소의 범위를 가상 주소 공간, 물리 주소의 범위를 물리 주소 공간이라고 한다.
가상 주소 공간은 메모리 관리 장치(MMU)
에 의해서 물리 주소로 변환된다.
이 덕분에 프로그래머는 가상 주소 공간상에서 프로그램을 짜게 되어 프로그램이나 데이터가 주메모리 상에 어떻게 존재하는지 의식할 필요가 없어진다.
가상 메모리에 대해 설명해주세요.
가상 메모리는 프로세스마다 가상 주소를 할당하는 메모리 관리 기법입니다.
가상 메모리 기법에서 프로세스의 가상 메모리 공간 중 일부는 메모리에 적재되거나 일부는 디스크의 스왑 영역에 존재할 수 있습니다.
물리적 메모리의 연장 공간으로써 디스크의 스왑영역이 사용될 수 있기 때문에, 프로그램 입장에서 물리적 메모리 크기에 대한 제약을 극복할 수 있습니다.
가상 메모리는 프로세스의 주소 공간을 메모리로 적재하는 단위에 따라 페이징 또는 세그먼테이션 방식으로 구현될 수 있습니다.
메모리 관리자는 가상 주소와 물리 주소를 일대일로 매핑한 테이블로 관리한다.
가상 메모리 시스템에서 가변 분할 방식을 이용한 메모리 관리 기법은 세그먼테이션, 고정 분할 방식을 이용한 메모리 관리 기법은 페이징이라고 한다.
매핑 테이블은 물리 메모리가 세그먼테이션으로 분할된 경우뿐 아니라 페이징으로 분할된 경우에도 똑같은 방식으로 적용된다.
페이징 기법에서 사용하는 매핑 테이블을 페이지 매핑 테이블
이라 하며,
세그먼테이션 기법에서 사용하는 매핑 테이블을 세그먼테이션 매핑 테이블
이라 한다.
기억장치에 접근하는 패턴이 메모리 전체에 고루 분포되는 것이 아니라 특정 영역에 집중되는 성질을 말한다.
공간의 지역성
현재 위치에서 가까운 데이터에 접근할 확률이 먼 거리에 있는 데이터에 접근할 확률보다 높다.
시간의 지역성
현재를 기준으로 가장 가까운 시간에 접근한 데이터가 더 먼 시간에 접근한 데이터보다 사용될 확률이 높다.
순차적 지역성
작업이 순선대로 진행된다.
캐시는 지역성 이론을 사용하는 대표적인 장치다.
시간적으로나 지역적으로 가까이 있는 데이터를 가져옴으로써, 캐시 적중률을 높일 수 있다.
고정 분할 방식을 이용한 가상 메모리 관리 기법
가상 주소의 분할된 각 영역을 페이지
라고 부르며, 첫 번째 영역은 페이지 0, 두 번째 영역은 페이지 1과 같이 번호를 매겨 관리한다.
물리 메모리의 각 영역은 가상 주소의 페이지와 구분하기 위해 프레임
이라고 부른다.
페이지와 프레임의 크기는 같다.
어떤 페이지가 어떤 프레임에 있는지에 대한 연결(매핑) 정보는 페이지 테이블에 담겨있다.
페이지 테이블의 첫 번째 칸에 있는 2는, 페이지 0이 프레임 2에 있다는 의미다.
invalid는 해당 페이지가 물리 메모리에 없다는 것이며, 스왑 영역에 존재한다는 것을 의미한다.
페이지 테이블은 페이지 번호와 프레임 번호로 구성되며, 각각의 한 줄을 페이지 테이블 엔트리
라고 부른다.
페이지 테이블은 페이지 테이블 엔트리의 집합이다.
페이지 0에는 0~9번의 10개 주소가, 페이지 1에는 10~19번의 10개 주소가 있다.
물리 주소 공간도 마찬가지로 각 프레임에 10개의 주소가 있다.
[주소 변환 과정]
1. 가상 주소 18번이 어느 페이지에 있는 찾는다. 18번은 페이지 1의 8번 위치에 있다.
페이지 테이블의 페이지 1로 가서, 해당 페이지가 프레임 3에 있다는 것을 알아낸다.
프로세스가 저장하려는 값을 프레임 3의 8번 위치에 저장한다.
VA=<1,8> -> PA<3,8>
프로세스마다 페이지 테이블이 하나씩 있기 때문에 페이지 테이블 관리가 복잡하다.
한 번에 실행하는 프로세스 수가 많으면 페이지 테이블의 크기가 같이 커지고, 그에 따라 프로세스가 실제로 사용할 수 있는 메모리 영역이 줄어든다.
따라서 페이지 테이블의 크기를 적정하게 유지하는 것이 페이지 테이블 관리의 핵심이다.
물리 메모리의 크기가 작을 때는 프로세스만 스왑 영역으로 옮겨지는 것이 아니라, 페이지 테이블의 일부도 스왑 영역으로 옮겨진다.
가상 주소를 물리 주소로 변환하려면 메모리에 두 번 접근해야 한다.
메모리 관리 유닛은 페이지 테이블이 메모리에 있기에 메모리에 있는 페이지 테이블에 접근하여 물리 주소로 변환한다.
변환된 물리 주소를 이용하여 필요한 데이터를 가져온다.
가상 주소를 물리 주소로 변환한 후 데이터를 가져오기 위해 메모리에 두 번이나 접근하는 방식은 CPU 성능을 떨어뜨린다.
이러한 문제를 개선하기 위해 페이지 테이블의 일부를 CPU 안쪽으로 가져오는데, 이를 변환 색인 버퍼(TLB)
라고 한다.
이는 캐시된 페이지 테이블이다.
캐시와 똑같이 TLB 히트, TLB 미스가 존재한다.
변환 색인 버퍼에는 전체 페이지 테이블의 일부만 있어서 <페이지 번호, 프레임 번호>의 쌍으로 이루어진다.
역 페이지 테이블 방식은 기존 페이징 방식과는 반대로 페이지 테이블을 구성한다.
물리 메모리의 프레임 번호를 기준으로 테이블을 구성하는 것으로 물리 메모리의 프레임에 어떤 프로세스의 어떤 페이지가 올라와 있는지를 표시한다.
역 페이지 테이블의 위치가 프레임 번호가 된다.
역 페이지 테이블의 가장 큰 특징은 프로세스의 수와 상관없이 테이블이 하나만 존재한다는 것이다.
물리 메모리를 기준으로 프레임 테이블을 만들기 때문에 전체 시스템에서 테이블 수가 1개이다.
즉, 프로세스의 수와 상관없이 항상 일정 크기의 페이지 테이블을 유지하며, 테이블의 크기가 작다는 장점이 있다.
하지만 프로세스가 물리 메모리에 접근할 때 프로세스 아이디와 페이지 번호를 모두 찾아야 하는 것이 단점이다.
ex) 프로세스 1번의 10번 페이지가 메모리에 있는지 확인하려면 <PID 1, 페이지 10>을 모든 테이블에서 찾아야만 결과를 알 수 있다.
(이는 프레임 번호를 기준으로 테이블을 구성하기 때문이다.)
세그먼테이션 기법은 가변 분할 방식을 이용한 가상 메모리 관리 기법이다.
페이징 기법과 마찬가지로 세그먼테이션 기법도 테이블을 사용하는데, 이를 세그먼테이션 테이블
이라고 한다.
세그먼테이션 기법에서는 프로세스 크기에 따라 메모리를 분할하기 때문에, 크기 정보를 포함한다.
즉, 세그먼트의 크기를 나타내는 limit와 물리 메모리의 시작 주소를 나타내는 base address가 사용된다.
세그먼테이션 기법에서도 물리 메모리가 부족할 때는 스왑 영역을 사용한다.
세그먼테이션 테이블의 limit은 메모리를 보호하는 역할을 한다.
메모리를 프로세스 단위로 관리하기 때문에, 세그먼테이션 테이블이 작고 단순하다는 장점이 있으며, 물리 메모리의 외부 단편화로 인해 관리가 복잡하다는 단점이 있다.
먼저 가상 주소를 구한다.
프로세스 A는 세그먼트 0으로 분할되었으므로 S는 0, D는 32다.
따라서 가상 주소는 VA=<0,32>이다.
세그먼테이션 테이블에서 세그먼트 0의 시작 주소 120을 알아낸 후 거리 32를 더하여 물리 주소 152번을 구한다.
이때 메모리 관리자는 거리가 세그먼트의 크기보다 큰지 점검한다.
크다면 메모리를 벗어나는 것이므로 메모리 오류(트랩)을 출력하고, 해당 프로세스를 강제 종료한다.
크지 않다면 물리 주소를 구한다.
물리 주소 152번에 접근하여 원하는 데이터를 읽거나 쓴다.
캐시 메모리
는 CPU와 메인 메모리 간에 데이터 접근 시 속도 차이를 줄이기 위해 사용한다.
CPU에서 메인 메모리에 있는 데이터를 가져올 때 자주 사용하는 데이터는 캐시 메모리에 저장한다.
이후에 해당 데이터가 필요하면 캐시 메모리에 접근하면 메인 메모리에 접근하는 것보다 속도를 향상시킬 수 있다.
캐시 메모리에 어떤 데이터를 저장할지는 지역성
을 바탕으로 결정한다.
지역성
CPU가 자주 참조하는 데이터가 고르게 분호되지 않고 특정 부분에 몰려 있는 것을 뜻한다.
캐시 적중률을 높이려면 지역성을 바탕으로 데이터를 저장해야 한다.
캐시도 메모리를 일정 크기로 나누며 일정 크기로 나눈 덩어리를 페이지 P라고 부른다.
CPU가 메모리에 접근하려 할 때 사용하는 주소를 <P, D>로 표현하는데 여기서 P는 페이지 번호, D는 페이지 내에서 거리를 의미한다.
여기까지는 페이징 기법과 똑같다.
메모리는 N개의 페이지로, 캐시는 M개의 페이지로 구성된다.
캐시는 메모리보다 작기 때문에 N이 M보다 훨씬 많다. (N > M)
직접 매핑
메인 메모리를 일정한 크기로 나누고 각 영역을 캐시 메모리에 매핑하는 방식
메인 메모리는 캐시 메모리보다 크드로, 나눠진 N개의 메모리 영역이 1개의 캐시 메모리에 매핑된다.
캐시 직접 매핑에서는 메모리의 패이지 수 N을 캐시의 페이지 수 M으로 나누고, 이를 블록이라고 부른다.
블록 번호는 블록에서의 거리고, 올라가야 할 캐시의 위치 정보를 나타낸다.
연관 매핑
메모리 영역을 캐시 메모리에 규칙 없이 매핑하는 방식이다.
메모리 영역을 캐시 메모리에 적재할 때는 간단하지만, 캐시 메모리에서 필요한 메모리 영역을 찾을 때는 비효율적이다.
집합 연관 매핑
직접 매핑
과 연관 매핑
을 결합해 단점을 보완한 방식이다.
정해진 장소(직접 매핑) 내 어느 블록에나(연관 매핑) 매핑하는 방식이다.
캐시를 일정 개수의 집합으로 나누어 놓고, 그 집합에서는 비어있는 한 어느 곳에서나 위치 가능하다.
캐시 직접 매핑에서는 메모리 블록이 같은 위치의 캐시로 올라오며, 캐시에 명시하는 블록 번호를 태그(tag)라고 한다.
캐시 직접 매핑 방식의 가장 큰 특징은 메모리의 페이지가 캐시의 정해진 위치에만 들어갈 수 있다는 것이다.
캐시는 태그를 유지한다.
태그는 위 사진에서 메모리 주소의 앞 2bit에 해당하는 값으로, 어떤 블록에서 올라온 데이터인지 나타낸다.
캐시 직접 매핑에서 캐시 히트나 캐시 미스가 있는지 알기 위해서는 태그를 확인한다.
예를 들어 CPU가 메모리 1101의 cobra가 필요한 경우, CPU는 캐시의 01위치에 가서 태그가 11인지 확인한다.
태그가 11이므로 캐시 히트다.
캐시 직접 매핑의 장점은 메모리 페이지가 캐시의 같은 위치에 올라오기 때문에 태그만 확인하면 캐시 히트나 미스를 빠르게 확인할 수 있다는 것이다.
하지만, 페이지가 같은 위치에만 올라오기 때문에 자리다툼이 발생한다는 단점도 있다.
ex) CPU가 1100, 1000, 0100을 연달아 필요로 한다면 bd 00 위치(캐시의 00위치)에 있는 데이터만 캐시에 올라왔다가 금세 쫓겨나는 현상이 발생한다.
이러한 문제를 완화한 방법이 캐시 연관 매핑이다.
메모리가 캐시의 어느 위치에도 자유롭게 올라갈 수 있으므로, 캐시가 메모리의 주소를 전부 가지고 있다.
캐시 연관 매핑은 캐시 메모리를 자유롭게 사용할 수 있다는 것이 장점이다.
그러나 캐시 히트인지, 캐시 미스인지 확인하기 위해 캐시의 모든 주소를 검색해야 한다는 단점이 있다.
따라서 캐시 연관 매핑은 캐시 직접 매핑보다 느리다.
캐시 집합-연관 매핑은 캐시 직접 매핑과 캐시 연관 매핑의 장점만 취한 방식이다.
캐시를 K개 집합으로 나누고, 각 집합에 캐시 직접 매핑을 사용한다.
어느 집합에 매핑할 것인지는 연관 매핑을 사용한다.
집합-연관 매핑에서는 직접 매핑을 하는 캐시 메모리를 K개로 나눔으로써 같은 끝자리를 가진 캐시 메모리도 K개 되어 자리다툼 문제가 완화된다.
또한 집합 내에서 직접 매핑을 사용하기 때문에, 연관 매핑처럼 모든 캐시를 뒤지는 일 없이 바로 캐시 히트 여부를 알 수 있다.
프로세스가 필요로 하는 데이터를 언제 메모리로 가져올지 결정하는 것이 가져오기 정책이다.
일반적인 방법은 프로세스가 요청할 때 메모리로 가져오는 것으로, 이를 요구 페이징이라고 한다.
프로세스에서 필요한 페이지만 메모리에 로드하는 방식이다.
페이지를 모두 메모리에 로드하지 않고, 초기에 필요한 영역만 로드한 후 다른 영역은 요청이 올 때 메모리에 로드한다.
운영체제는 프로세스를 구성하는 모듈을 전부 메모리에 올리지 않는다.
필요한 모듈만 메모리에 올려 실행하고, 나머지 모듈은 필요하다고 판단될 때 메모리로 불러온다.
이는 다음과 같은 이유댜.
필요한 페이지를 물리 메모리에 로드하고, 필요하지 않은 페이지는 디스크에 저장한다.
이처럼 사용자가 특정 기능을 요구할 때 해당 모듈을 메모리에 올리면, 메모리의 절약과 효율적 관리, 프로세스의 응답 속도 향상 등의 효과를 볼 수 있다.
스와핑과 게으른 스와퍼
프로세스를 구성하는 모든 페이지를 메모리에 올리는 것을 순수한 스와핑(swapping)이라고 한다.
사용자가 요구할 때 메모리에 올리는 것을 게으른 스와퍼(lazy swapper)라고 한다.
페이지 테이블에는 페이지가 메모리에 있는지, 스왑 영역에 있는지 표시해야 한다.
이때 사용하는 비트가 유효 비트이다.
PTE(Page Table Entry)는 페이지 번호와 프레임 번호보단 정확하겐 페이지 번호, 플래그 비트, 프레임 번호로 구성된다.
페이지 번호는 매핑 방식에 따라 포함되기도 하고 제외되기도 한다.
PTE를 구성하는 프레임 번호는 가상 주소의 해당 페이지가 어느 프레임에 있는지 알려주는 자료구조로 페이지 테이블의 핵심이다.
접근 비트와 변경 비트는 페이지가 메모리에 올라온 후 어떤 작업이 있었는지 알려주는 역할을 한다.
두 비트는 메모리가 꽉 차서 어떤 페이지를 스왑 영역으로 옮겨야 할지 선택할 때 사용한다.
유효 비트가 0일 때는 페이지가 메모리에 있으므로 주소 필드에 물리 메모리의 프레임 번호가 저장된다.
유효 비트가 1일 때는 페이지가 스왑 영역에 있으므로 주소 필드에 스왑 영역 내 페이지 주소가 저장된다.
프로그램을 실행하다가 물리 메모리에 필요한 페이지가 없을 때가 있으면, 이를 페이지 폴트(페이지 부재)
라고 한다.
페이지 부재가 발생하면 프로세스가 해당 페이지를 사용할 수 있도록 스왑 영역에서 물리 메모리로 옮겨야 한다. (스왑 인
)
이때 페이지에 해당하는 메모리 영역이 물리 메모리에 있는지는 페이지 테이블로 파악할 수 있다. (유효 비트)
페이지 테이블은 페이지에 해당하는 프레임이 존재하면 v(valid)
값을, 프레임이 존재하지 않거나 유효하지 않은 주소 값이면 i(invalid)
값을 반환한다.
필요한 페이지가 물리 메모리에 있는지 없는지를 페이지 테이블에서 확인한다.
페이지 폴트가 발생하면 i
를 반환한다.
i를 반환하면, OS는 참조하려는 페이지의 주소 값이 유효하지 않은지 아니면 메모리에 로드되지 않은 영역인지 판단한다.
필요한 페이지가 메모리에 로드되지 않은 영역이라면, 디스크에서 해당 영역을 찾는다.
디스크에서 해당 페이지 영역을 스왑 인
한다.
이때 물리 메모리에 비어 있는 프레임이 있으면 페이지를 해당 영역으로 바로 로드한다.
만약 비어있는 프레임이 없으면, 페이지 교체 알고리즘
을 호출해 기존에 로드된 페이지를 디스크로 스왑 아웃
한 후 새로운 페이지를 로드한다.
페이지 테이블에서 새로 로드한 페이지의 값을 v
로 변경한다.
프로세스를 다시 실행한다.
대상 페이지
페이지 교체 알고리즘에 의해 스왑 영역으로 보낼 페이지를 대상 페이지라고 한다.
페이지 교체에 대해서 설명해주세요.
CPU가 참조하려는 페이지가 현재 메모리에 올라와 있지 않은 상황이(페이지 부재)가 발생하면, 해당 페이지를 디스크에서 메모리로 읽어와야 합니다.
이때 물리적 메모리의 페이지 프레임 중 빈 공간이 없다면, 현재 적재 되어 있는 페이지 중 하나를 디스크로 쫓아내서 빈 공간을 마련해야 합니다.
이러한 작업을 페이지 교체라고 합니다.
처음에는 프로그램이 정상적으로 메모리에 올라오지만, 메모리가 꽉 찬 후에는 새로운 프로그램을 메모리에 올리기 위해 기존 프로그램을 스왑 영역으로 옮기는 횟수가 잦아지기 때문에 느려진다.
이와 같이 하드디스크의 입출력이 너무 많아져서 잦은 페이지 부재로 작업이 멈춘 것 같은 상태를 스레싱
이라고 한다.
동시에 일정 수 이상의 프로그램을 실행했을 때 오히려 CPU 이용률이 떨어지는 상황이다.
가상 메모리르 구현해 멀티 프로그래밍을 하면 CPU 이용률이 높아진다.
동시에 실행하는 프로그램의 수를 멀티프로그래밍 정도라고 하는데, 멀티프로그래밍 정도가 너무 높으면 스레싱이 발생한다.
일정 수 이상으로 멀티 프로그래밍을 하면, 페이지 폴트가 자주 일어난다.
따라서 디스크 영역에서 필요한 페이지를 스왑 인하고, 불필요한 페이지를 스왑 아웃하는 작업도 자주 하게 된다.
이처럼 다중 프로그래밍 정도가 일정 수준 이상 높아지면, 페이징이 빈번히 일어나게 되고, 실질적으로 CPU 이용률이 떨어지는 스레싱
이 발생한다.
물리 메모리의 크기를 늘리면 스레싱 발생 지점이 늦춰져서 프로세스를 원만하게 실행할 수 있다.
물리 메모리가 작업하는 데 충분한 크기가 되면, 그 이후에는 크기를 늘려도 작업 속도에 영향을 미치지 않는다.
스레싱은 각 프로세스에 프레임을 할당하는 문제와도 연관된다.
실행 중인 여러 프로세스에 프레임을 얼마나 나누어 주느냐에 따라 시스템의 성능이 달라진다.
즉, 남아있는 프레임을 실행 중인 프로세스에 적절히 나누어 주는 정책이 필요하다.
프로세스에 프레임을 할당하는 방식은 크게 정적 할당과 동적 할당으로 구분된다.
프로세스 실행 초기에 프레임을 나누어 준 후 그 크기를 고정하는 것으로, 균등 할당 방식과 비례 할당 방식이 있다.
균등 할당
프로세스의 크기와 상관없이 사용 가능한 프레임을 모든 프로세스에 동일하게 할당한다.
균등 할당 방식에서는 크기가 큰 프로세스의 경우 필요한 만큼 프레임을 할당받지 못하기 때문에 페이지 부재가 빈번하게 발생하고, 크기가 작은 프로세스의 경우 메모리가 낭비된다.
비례 할당
프로세스의 크기에 비례하여 프레임을 할당하는 방식이다.
프로세스가 실행 중에 필요로 하는 프레임을 유동적으로 반영하지 못하며, 사용하지 않을 메모리를 처음부터 미리 확보하여 공간을 낭비한다.
요구 페이징 방식에서는 아무리 큰 프로세스라도 처음부터 메모리에 모두 올리지 않는데, 비례 할당 방식에서는 큰 프로세스를 실행하면서 당장 필요 없는 프레임을 미리 할당해 놓기 때문에 메모리가 낭비된다.
정적 할당 방식은 프로세스를 실행하는 초기에 프레임을 할당하기 때문에 프로세스를 실행하는 동안 메모리 요구를 반영하지 못한다는 단점이 있다.
동적 할당 방식은 프로세스가 실행 중에 시시각각 변하는 요청을 수용하는 방식이다.
작업 집합 모델(working set)
지역성 이론을 바탕으로, 최근 일정 시간 동안 참조된 페이지들을 집합으로 만들고, 이 집합에 있는 페이지들을 물리 메모리에 유지하여 프로세스의 실행을 돕는다.
작업 집합에 포함되는 페이지의 범위를 작업 집합 윈도우라고 한다.
현재 시점에서 최대 어느 범위까지의 페이지를 살펴볼 것인가를 결정하는 것이 작업 집합 윈도우이다.
작업 집합 모델에서는 작업 집합 윈도우의 크기에 따라 프로세스의 실행 성능이 달라진다.
작업 집합 윈도우를 너무 크게 잡으면 필요 없는 페이지가 메모리에 남아서 다른 프로세스에 영향을 미치고, 너무 작게 잡으면 필요한 페이지가 스왑 영역으로 옮겨져서 프로세스 성능이 떨어진다.
작업 집합 모델에서는 어떤 프레임을 물리 메모리에 유지해야 하는지는 알 수 있지만, 프레임을 얼마나 할당해야 하는지는 알 수 없다.
작업 집합 모델은 프로세스의 성능을 높이는 방법이지만, 스레싱 문제를 해결하지는 못한다.
페이지 부재 빈도
페이지 부재 횟수를 기록하여 페이지 부재 비율을 계산하는 방식으로, 페이지 부재 비율의 상한선과 하한선을 결정한다.
페이지 부재율이 상한선을 초과하면 할당한 프레임이 적다는 의미이므로 프레임을 추가하여 늘린다.
반대로 페이지 부재 비율이 하한선 밑으로 내려가면, 메모리가 낭비된다는 의미이므로 할당한 프레임을 회수한다.
쓰레싱에 대해 설명해주세요.
CPU 이용률이 낮으면 운영체제는 메모리에 적재된 프로세스의 수가 적기 때문이라고 판단합니다.
따라서 운영체제는 메모리에 더 많은 프로세스를 적재 시킵니다.
한편 프로세스는 원할한 수행을 위해 일정 개수 이상의 페이지 프레임을 할당 받아야 합니다.
하지만 메모리에 적재되는 프로세스가 너무 많아지면, 프로세스 수행에 필요한 최소한의 페이지 프레임 개수도 할당받지 못하여 페이지 부재율이 크게 상승하고, CPU 이용률은 급격히 떨어지게 됩니다.
이를 쓰레싱이라고 합니다.
워킹셋 알고리즘에 대해 설명해주세요.
프로세스는 일정 시간 동안 특정 주소 영역을 집중적으로 참조하는 경향이 있습니다.
워킹셋이란, 지역성 이론을 바탕으로 최근 일정 시간 동안 참조된 페이지들을 집합으로 만들고, 이 집합에 있는 페이지들을 물리 메모리에 유지하여 프로세스의 실행을 돕는것입니다.
워킹셋이 메모리에 한꺼번에 올라갈 수 있을 때만 프로세스를 메모리에 적재함으로써 쓰레싱을 방지할 수 있습니다.
워킹셋 알고리즘이란, 워킹셋을 구성하는 방법입니다.
가변적인 크기를 갖는 워킹셋 윈도우를 통해 최근 일정 시간내에 참조되었던 페이지들을 워킹셋으로 선정합니다.
페이지 부재 빈도 알고리즘에 대해 설명해주세요.
페이지 부재 빈도 알고리즘은 프로세스의 페이지 부재율을 주기적으로 확인하여 각 프로세스에 할당할 메모리양을 동적으로 조절하는 알고리즘입니다.
어떤 프로세스의 페이지 부재율이 미리 정해놓은 상한값을 넘어서면 그 프로세스에게 페이지 프레임을 추가로 할당합니다.
어떤 프로세스의 페이지 부재율이 하한값 이하로 떨어지면 해당 프로세스에 할당된 페이지 프레임 개수를 줄입니다.