티스토리 뷰
source: https://en.wikipedia.org/wiki/Memory_paging
운영체제에서 메모리 페이징은 메인 메모리가 메인 메모리 이외의 다른 데이터 저장소에서 데이터를 주고 받기 위해 사용하는 메모리 관리 방법scheme이다.
메인 메모리 이외의 저장소에서 데이터를 받을 때는 데이터의 크기를 일정한 블록으로 받는 데 이 단위를 페이지page라고 한다.
페이징은 가상 메모리를 현대의 운영체제 시스템에서 구현하기 위한 중요한 기법이다. 물리적인 메모리의 규격이 다른 부차적인 저장소를 사용함에도 불구하고 프로그램들이 이 메모리에 접근할 수 있게 된다.
Page faults
프로세스가 현재 메인 메모리에 없는 페이지를 참조하려고 할 때, 프로세서는 이런 잘못된 메모리 레퍼런스 접근을 page fault로 다루고 이를 운영체제에서 처리하도록 통제권control을 옮긴다.
운영체제는
1. 디스크(메인 메모리 이외의 데이터 저장소)에서 데이터의 위치를 정한다.
2. 메인 메모리에 있는 빈 페이지 프레임을 데이터의 container로 쓴다.
3. 요청된 데이터를 사용 가능한 페이지 프레임으로 옮긴다. load
4. 페이지 테이블에서 새로운 페이지 프레임으로 교체한다.
5. 통제권control을 운영체제에서 프로그램으로 다시 되돌려주고 판단하지 않고transparently, page fault를 발생시킨 명령어instruction을 다시 구동한다.
모든 페이지 프레임이 사용중이면 운영체제는 당장 요구하는 프로그램을 위해서 재사용할 페이지 프레임을 지정해야만 한다. 만약 (당장 프로그램이 써야 해서) 쫓겨난evicted 페이지 프레임이 프로그램이 데이터를 보관하기hold 위해 동적으로 할당된 페이지 프레임이었거나, 해당 페이지 프레임이 메인 메모리에 의해 읽혔기 때문에 프로그램이 수정된 페이지 프레임이었다면, 풀려나기 전에 디스크에 써져 있어야 한다. 만약 프로그램이 쫓겨난evicted 페이지를 나중에 참고하려고 하면 또 다른 page fault가 발생한다. 페이지는 반드시 RAM으로 돌아와야 한다.
운영체제가 재사용할 페이지 프레임을 고르는 방법을 page replacement algorithm 페이지 교체 알고리즘/정책 이라고 한다. 운영체제는 근시에 가장 사용되지 않을 것 같은 페이지를 예측해야 한다. 주로 Least Recently Used, LRU나 프로그램의 working set(프로그램이 자주 접근하는 페이지 집합)에 기반해서 예측한다. 응답률responsiveness을 개선하기 위해서 페이징 시스템은 곧 어떤 페이지가 사용될 것인지 예측하기도 한다. 그리고 사용될 거라고 예측한 페이지들을 프로그램이 참조하기 전에 우선 RAM으로 올린다.load
Thrashing
대부분의 프로그램은 초기화가 끝나고 나면 프로그램이 필요로하는 전체 메모리보다 적은 양의 코드와 데이터 페이지를 구동한다.
자주 불리는 페이지들의 집합을 working set이라고 한다. 시스템의 전체 페이지에 비해 working set이 적은 비중이라면, page fault를 해결 하는데 컴퓨터 연산이 적게 소모되고, 가상 메모리 시스템은 가장 효과적으로 작동한다.
working set이 커져도 임계점ciritical point에 도달하기 전까지는 page fault를 해결할 수 있다. 그러나 임계점에 도달하면 page fault가 엄청나게 치솟아 page fault를 해결 하는데 엄청난 시간이 소모된다. 이런 현상을 thrashing이라고 한다. Thrashing은 엄청나게 큰 데이터 구조를 다루거나 working set이 너무 커져서 지속적으로 page fault를 발생 시켜서 시스템이 느려질 때 일어난다.
Page falut를 해결하기 위해서는 어쩌면 곧 메인 메모리 이외의 데이터 저장소가 다시 읽으려고 하는 페이지를 풀어줘야free 할 수도 있다.
Thrashing이라는 용어는 가상 메모리 시스템 이외에서도 사용될 수 있다. 예를 들면, 컴퓨터 연산에서 cache 문제나 네트워크에서 silly window syndrome에서도 Thrashing이라고 하기도 한다.
과도한 페이징이나 thrashing을 해결하기 위해서는 사용자가 프로그램 당 사용하는 페이지의 수를 늘리거나, 동시에 구동하는 프로그램의 숫자를 제한하거나, 컴퓨터의 RAM 용량을 증가시켜야 한다.
'컴퓨터 > 운영체제' 카테고리의 다른 글
Context Switching (0) | 2022.01.03 |
---|---|
논리 주소와 물리 주소 (0) | 2021.12.31 |
Translation-Lookaside Buffer, TLB (0) | 2021.12.30 |