가상 메모리 구현은 세 가지 구현 방법을 기반으로 해야 합니다. 1. 요청 분할 저장소 관리 방법 3. 세그먼트 페이지 저장소 관리 방법. 어떤 방법을 사용하든 특정 하드웨어 지원이 필요합니다. 1. 특정 용량의 메모리 및 외부 메모리 2. 기본 데이터 구조인 페이지 테이블 메커니즘(또는 세그먼트 테이블 메커니즘) 3. 사용자가 인터럽트할 때 메커니즘 프로그램 필요 액세스된 부분이 아직 메모리로 전송되지 않은 경우 인터럽트가 발생합니다. 4. 주소 변환 메커니즘, 논리 주소에서 물리적 주소로 변환.
이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터.
1. 가상 메모리 개요
기존 스토리지 관리에서는 여러 프로세스를 동시에 메모리에 저장하여 다중 프로그래밍이 가능합니다. 모두 다음과 같은 두 가지 공통 특성을 가지고 있습니다.
일회성: 작업은 실행을 시작하기 전에 한 번에 메모리에 로드되어야 합니다. 이로 인해 다음 두 가지 상황이 발생합니다. 1) 작업이 커서 메모리에 로드할 수 없는 경우 작업을 실행할 수 없습니다. 2) 메모리가 부족하여 많은 수의 작업을 실행해야 하는 경우 모든 작업을 수용할 수 있을 만큼 충분하지만 몇 가지 작업만 먼저 실행되어 다중 프로그래밍이 줄어들 수 있습니다.
상주: 작업이 메모리에 로드된 후에는 항상 메모리에 상주하며 작업이 완료될 때까지 어떤 부분도 교체되지 않습니다. 실행 중인 프로세스는 I/O를 기다리면서 차단되며 장기간 대기 상태에 있을 수 있습니다.
따라서 프로그램 운영 중 사용하지 않거나 일시적으로 사용하지 않는 많은 프로그램(데이터)이 많은 메모리 공간을 차지하고, 실행해야 하는 일부 작업을 로드하여 실행할 수 없어 귀중한 메모리 자원이 낭비되는 것은 당연합니다. .
1.1 가상 메모리의 정의와 특징
지역성원리에 따라 프로그램이 로드되면 프로그램의 일부만 메모리에 로드하고 나머지는 외부 메모리에 남겨두면 됩니다. . 프로그램 실행을 시작합니다. 프로그램 실행 중 접근한 정보가 메모리에 없으면 운영체제는 필요한 부분을 메모리로 옮긴 후 프로그램을 계속 실행합니다. 반면, 운영 체제는 메모리에서 일시적으로 사용되지 않는 콘텐츠를 외부 메모리로 교체하여 메모리로 전송될 정보를 저장할 공간을 확보합니다. 이렇게 시스템이
부분 로딩, 요청 로딩, 교체 기능
(사용자에게 완전히 투명함)을 제공하기 때문에 사용자는 실제 물리적 메모리보다 훨씬 큰 메모리가 있는 것처럼 느끼게 됩니다. 가상 메모리. 가상 메모리의 크기는 컴퓨터의 주소 구조
에 따라 결정되며, 메모리와 외부 메모리의 단순한 합이 아닙니다.
가상 메모리는 다음과 같은 세 가지 주요 특징을 가지고 있습니다.
여러 번
: 작업 실행 시 메모리를 한꺼번에 로드할 필요는 없지만 여러 번 나누어 로드할 수 있습니다. 실행을 위해 메모리에 저장됩니다.
Swapability
: 작업이 실행되는 동안 메모리에 머물 필요는 없지만 작업 실행 프로세스 중에 교체가 가능합니다.
Virtuality
: 사용자가 보는 메모리 용량이 실제 메모리 용량보다 훨씬 크도록 메모리 용량을 논리적으로 확장합니다.
1.2 가상 메모리 기술 구현
가상 메모리를 사용하면 작업을 메모리로 여러 번 전송할 수 있습니다
.
연속 할당 방식을 사용하면 메모리 공간의 상당 부분이 일시적이거나 "영구적으로" 유휴 상태가 되어 심각한 메모리 자원 낭비를 초래하게 되며, 논리적으로 메모리 용량을 확장할 수 없게 됩니다.
따라서 가상 메모리 구현은 이산 할당
메모리 관리 방법을 기반으로 해야 합니다. 가상 메모리를 구현하는 방법에는 세 가지가 있습니다.
요청 페이징
스토리지 관리
요청 분할
스토리지 관리
세그먼트 페이징
스토리지 관리
어떤 방법이든 특정 요구 사항이 필요합니다.
하드웨어 지원
. 일반적으로 필요한 지원에는 다음 측면이 포함됩니다.
일정량의 메모리 및 외부 저장소.
페이지 테이블 메커니즘(또는 세그먼트 테이블 메커니즘)을 기본 데이터 구조로 사용합니다.
인터럽트 메커니즘은 사용자 프로그램이 액세스할 부분이 메모리로 전송되지 않은 경우 인터럽트가 생성됩니다.
주소 변환 메커니즘, 논리 주소를 실제 주소로 변환합니다.
연속 할당 방법
: 사용자 프로그램에 연속적인 메모리 공간을 할당하는 것을 말합니다.
고정 파티션 할당: 메모리 공간을 여러 고정 크기 영역으로 나눕니다. 각 파티션에는 하나의 작업만 로드되며 여러 작업을 동시에 실행할 수 있습니다. 유연성이 부족하면 내부 조각이 많이 발생하고 메모리 활용도가 매우 낮습니다.
동적 파티션 할당: 실제 필요에 따라 프로세스에 메모리 공간을 동적으로 할당합니다. 작업이 메모리에 로드되면 사용 가능한 메모리가 작업에 대한 연속 영역으로 나뉘며 파티션의 크기는 작업 크기에 딱 맞습니다. 외부 이물질이 많을 거에요.
이산 할당 방법: 프로세스를 인접하지 않은 여러 파티션에 분산 로드하여 메모리를 최대한 활용할 수 있습니다.
페이징 저장의 개념:
페이지, 페이지 프레임 및 블록.
process의 블록은 page 또는 페이지(Page)라고 하며, 페이지 번호가 있습니다. memory의 블록은 Page Frame이라고 합니다. (페이지 프레임, 페이지 프레임 = 메모리 블록 = 물리적 블록 = 물리적) 페이지 ), 페이지 프레임 번호 포함. 외부 저장소도 동일한 단위로 나누어져 있으며, 바로 Block이라고 합니다. 프로세스가 실행되면 주 메모리 공간을 적용해야 합니다. 즉, 각 페이지에는 주 메모리에서 사용 가능한 페이지 프레임이 할당되어야 하며, 이는 페이지와 페이지 프레임 간에 일대일 대응을 생성합니다. 각 페이지는 연속적으로 저장될 필요가 없으며 인접하지 않은 페이지 프레임에 배치될 수 있습니다.
주소 구조: 전자는 페이지 번호 P이고 후자는 페이지 내 오프셋 W입니다. 주소 길이는 32비트이며, 그 중 비트 0~11은 페이지 내 주소입니다. 즉, 각 페이지의 크기는 4KB입니다. 비트 12~31은 페이지 번호이고 주소 공간은 최대 2^20입니다. 페이지.
페이지 테이블. 프로세스의 각 페이지에 해당하는 물리 블록을 메모리에 쉽게 찾기 위해 시스템은 각 프로세스마다 페이지 테이블을 구축하여 해당 페이지에 해당하는 물리 블록 번호를 메모리에 기록하는 것이 일반적입니다. 메모리. . 페이지 테이블이 구성된 후 프로세스가 실행되면 테이블을 조회하여 메모리에 있는 각 페이지의 물리적 블록 번호를 알 수 있습니다. 페이지 테이블의 역할은 페이지 번호에서 물리적 블록 번호로의 주소 매핑을 구현하는 것임을 알 수 있습니다.
2. 가상 메모리 구현을 위한 요청 페이징 관리
요청 페이징
은 현재 가상 메모리 구현에 가장 일반적으로 사용되는 방법입니다.
요청 페이징 시스템은 기본 페이징 시스템
을 바탕으로 가상 메모리 기능을 지원하기 위해
요청 페이징 기능과 페이지 교체
기능이 추가되었습니다.
요청 페이징 시스템에서는 작업을 시작하기 전에 현재 필요한 페이지 중 일부만 메모리에 로드하면 됩니다. 작업 실행 중 액세스하려는 페이지가 메모리에 없으면 페이징 기능을 통해 가져올 수 있으며, 동시에 교체 기능을 통해 일시적으로 사용되지 않는 페이지를 외부 저장소로 교체할 수 있습니다. 메모리 공간을 확보하기 위해. 요청 페이징을 구현하려면 시스템에서 특정 하드웨어 지원을 제공해야 합니다. 일정량의 메모리와 외부 저장소
가 필요한 컴퓨터 시스템 외에도
페이지 테이블 메커니즘, 페이지 오류 인터럽트 메커니즘, 주소 변환 메커니즘
도 필요합니다. 2.1 페이지 테이블 메커니즘
요청 페이징 시스템의 페이지 테이블 메커니즘은 기본 페이징 시스템과 다릅니다. 요청 페이징 시스템은 작업 전에 모든 데이터를 한 번에 메모리에 로드할 필요가 없습니다. 실행됩니다.
따라서 작업 실행 과정에서 접근할 페이지가 메모리에 없는 상황이 필연적으로 발생하게 됩니다. 이러한 상황을 감지하고 처리하는 방법은 요청 페이징 시스템이 해결해야 하는 두 가지 기본 문제입니다. 이를 위해 요청 페이지 테이블 항목에 4개의 필드가 추가됩니다. 요청 페이징 시스템의 페이지 테이블 항목
페이지 번호
물리적 블록 번호
상태 비트 P
액세스 필드 A
비트 M 수정
외부 저장 주소
상태 비트 P: 프로그램이 페이지에 액세스할 때 참조를 위해 페이지가 메모리로 전송되었는지 여부를 나타내는 데 사용됩니다.
액세스 필드 A: 교체 알고리즘이 페이지를 교체할 때 참조할 수 있도록 일정 기간 내에 이 페이지에 액세스한 횟수 또는 최근에 이 페이지에 액세스하지 않은 기간을 기록하는 데 사용됩니다.
수정 비트 M: 페이지가 메모리에 로드된 후 수정되었는지 여부를 나타냅니다.
외부 메모리 주소: 페이지를 로드할 때 참조할 수 있도록 외부 메모리의 페이지 주소(일반적으로 물리적 블록 번호)를 나타내는 데 사용됩니다.
2.2 페이지 누락 인터럽트 메커니즘
요청 페이징 시스템에서는 액세스할 페이지가 메모리에 없을 때마다 페이지 누락 인터럽트가 생성되어 운영 체제에 조정을 요청합니다. 페이지가 메모리에 없습니다.
이때 페이지 오류 프로세스를 차단해야 합니다(페이징 완료 후 깨우기). 메모리에 여유 블록이 있으면 블록을 할당하고 해당 블록에 로드할 페이지를 로드한 후 수정합니다. 페이지 테이블의 해당 페이지 테이블 항목, 이때 메모리에 여유 블록이 없으면 특정 페이지를 제거해야 합니다(제거된 페이지가 메모리 기간 동안 수정된 경우 외부 메모리에 다시 기록해야 함). .
페이지 누락 인터럽트 역시 인터럽트로서 CPU 환경 보호, 인터럽트 원인 분석, 페이지 누락 인터럽트 핸들러로 전송, CPU 환경 복원 등 여러 단계를 거쳐야 합니다. 하지만 일반 인터럽트와 비교하면 다음과 같은 두 가지 분명한 차이점이 있습니다.
인터럽트 신호는 내부 인터럽트인 명령어 실행 후가 아닌 명령어 실행 중에 생성되고 처리됩니다.
명령 실행 중에 여러 페이지 오류 인터럽트가 발생할 수 있습니다.
2.3 주소 변환 메커니즘
요청 페이징 시스템의 주소 변환 메커니즘은 페이징 시스템의 주소 변환 메커니즘을 기반으로 하며 가상 메모리를 구현하기 위해 몇 가지 기능을 추가합니다.
주소 변환을 수행할 때 먼저 빠른 테이블을 검색합니다.
액세스할 페이지가 발견되면 페이지 테이블 항목의 액세스 비트가 수정됩니다(명령어 작성 시 수정 비트를 재설정해야 함). 페이지 테이블 항목은 물리적 블록 번호와 물리적 주소 형태로 주어진 페이지 주소를 사용합니다.
페이지의 페이지 테이블 항목을 찾을 수 없으면 메모리에서 페이지 테이블을 검색한 다음 페이지 테이블 항목의 상태 비트 P를 비교하여 페이지가 메모리로 전송되었는지 확인해야 합니다. , 페이지 오류 인터럽트가 발생합니다. 페이지가 외부 저장소에서 메모리로 전송되도록 요청합니다.
페이지 테이블은 논리 주소의 페이지 번호와 점유된 주 메모리의 물리적 블록 번호 간의 대응 관계를 나타냅니다. 페이지 스토리지 관리는 동적 재배치를 사용하여 작업을 로드할 때 페이지 테이블을 사용하여 주소 변환을 수행합니다.
빠른 테이블(TLB, Translation Lookaside Buffer)은 캐시 메모리에 저장된 부분 페이지 테이블입니다. 현재 프로세스의 페이지 테이블의 Cache로 페이지 테이블과 기능은 유사하지만 주소 매핑 속도를 높이고 접근률을 향상시킨다. 주소 변환을 위해 페이지 테이블을 사용하기 때문에 CPU는 메모리 데이터를 읽고 쓸 때 메인 메모리에 두 번 액세스해야 합니다(페이지 테이블 쿼리 및 대상 주소 액세스).
빠른 테이블을 사용하면 때로는 캐시 메모리와 메인 메모리에 한 번만 액세스하면 되므로 검색 속도가 빨라지고 명령 실행 속도가 향상될 수 있습니다.
3. 페이지 교체 알고리즘
프로세스가 실행 중일 때 프로세스가 액세스하는 페이지가 메모리에 없어 가져와야 하지만
메모리에 여유 공간이 없는 경우
프로그램을 메모리에서 호출해야 하거나 데이터가 디스크의 스왑 영역으로 전송됩니다. 호출할 페이지를 선택하는 알고리즘을 페이지 교체 알고리즘 이라고 합니다. 좋은 페이지 교체 알고리즘은 낮은 페이지 교체 빈도를 가져야 합니다. 즉, 앞으로 다시 액세스하지 않거나 오랫동안 액세스하지 않을 페이지를 먼저 호출해야 합니다.
3.1 최적 교체 알고리즘(OPT)
Best(Optimal, OPT) 교체 알고리즘
선택한 제거 페이지는 앞으로 절대 사용되지 않거나, 방문한 가장 오랜 기간 동안 사용되지 않습니다. 페이지 오류율을 가장 낮게 보장합니다. 하지만 현재 사람들은 프로세스 메모리에 있는 수천 페이지 중 어느 페이지가 미래에 가장 오랫동안 더 이상 액세스되지 않을지
예측할 수 없기 때문에
이 알고리즘은 구현할 수 없지만 최고의 대체 알고리즘은 다른 알고리즘을 평가하는 데 사용됩니다. 시스템이 세 개의 물리적 블록을 프로세스에 할당하고 다음 페이지 번호 참조 문자열을 고려한다고 가정합니다. 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
프로세스가 실행되면 먼저 7, 0, 1 세 페이지가 순서대로 메모리에 로드됩니다. 프로세스가 페이지 2에 접근하려고 할 때 페이지 폴트 인터럽트가 발생하고 최적 교체 알고리즘에 따라 18번째 접근 이후에만 전송되어야 하는 페이지 7이 선택되어 제거된다. 그러면 페이지 0에 액세스할 때 이미 메모리에 있으므로 페이지 폴트 인터럽트를 생성할 필요가 없습니다. 페이지 3에 액세스하면 최적 교체 알고리즘에 따라 페이지 1이 제거됩니다... 등등. 그림을 통해 최적 대체 알고리즘을 사용할 때의 상황을 확인할 수 있습니다.
최적 변위 알고리즘 사용 시 변위 맵
페이지 방문
7
0
1
2
0
3
0
4
2
3
0
3
2
1
2
0
1
7
0
1
물리적 블록 1
7
7
7
2
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
7
물리 블록 2
0
0
0
0
4
0
0
0
물리 블록 3
1
1
3
3
3
1
1
누락된 페이지 No
√
√
√
√
√
√
√
√
페이지 폴트 중단 횟수는 9회, 페이지 교체 횟수는 6회임을 알 수 있습니다.
3.2 FIFO(선입선출) 페이지 교체 알고리즘
메모리에 가장 먼저 들어간 페이지, 즉 메모리에 가장 오래 머물렀던 페이지를 제거하는 데 우선순위를 부여합니다.
이 알고리즘은 구현하기가 간단합니다. 순서에 따라 메모리로 전송된 페이지를
queue에 연결하고 항상 가장 빠른 페이지를 가리키도록 포인터를 설정하면 됩니다. 그러나 이 알고리즘은 프로세스 중에 일부 페이지에 자주 액세스하기 때문에 프로세스의 실제 실행 규칙에는 적합하지 않습니다.
FIFO 대체 알고리즘 사용 시 변위 그래프
페이지 방문
7
0
1
2
0
3
0
4
2
3
0
3
2
1
2
0
1
7
0
1
물리적 블록 1
7
7
7
2
2
2
4
4
4
0
0
0
7
7
7
물리적 블록 2
0
0
0
3
3
3
2
2
2
1
1
1
0
0
물리적 블록 3
1
1
1
0
0
0
3
3
3
2
2
2
1
페이지 누락아니요
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
🎜
FIFO 알고리즘을 사용하면 최적 교체 알고리즘의 정확히 2배인 12번의 페이지 교체가 수행됩니다.
FIFO 알고리즘에서도 할당된 물리적 블록 수가 증가하면 페이지 폴트 수가 감소하지 않고 증가하는 비정상적인 현상이 발생합니다. 이는 1969년 Belady가 발견하여 Belady anomaly라고 합니다. 아래 표에 나와 있습니다.
페이지 방문
1
2
3
4
1
2
5
1
2
3
4
5
물리적 블록 1
1
1
1
4
4
4
5
5
5
물리 블록 2
2
2
2
1
1
1
3
3
물리적 블록 3
3
3
3
2
2
2
4
누락된 페이지No
√
√
√
√
√
√
√
√
√
물리적 블록 수를 늘린 후 비교
물리적 블록 1*
1
1
1
1
5
5
5
5
4
4
물리적 블록 2*
2
2
2
2
1
1
1
1
5
물리 블록 3*
3
3
3
3
2
2
2
2
물리적 블록 4*
4
4
4
4
3
3
3
누락된 페이지 번호
√
√
√
√
√
√
√
√
√
√
FIFO 알고리즘에서만 Belady 이상 현상이 발생할 수 있지만 LRU 및 OPT 알고리즘에서는 Belady 이상 현상이 발생하지 않습니다.
3.3 LRU(Least Recent Used) 교체 알고리즘
Least Recent Used(LRU, Least Recent Used)교체 알고리즘 선택가장 오랫동안 방문하지 않은 페이지는 삭제됩니다, 지난 기간에 방문하지 않은 페이지는 가까운 시일 내에 방문하지 않을 수 있다고 가정합니다.
이 알고리즘은 각 페이지에 대해 방문 필드를 설정하여 페이지에 마지막으로 액세스한 이후 경과된 시간을 기록합니다. 페이지를 제거할 때 제거할 기존 페이지 중에서 가장 큰 값을 가진 페이지를 선택합니다.
LRU 페이지 교체 알고리즘 사용 시 변위 그래프
페이지 방문
7
0
1
2
0
3
0
4
2
3
0
3
2
1
2
0
1
7
0
1
물리적 블록 1
7
7
7 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
1
1
1
물리적 블록 2
0
0
0
0
0
0
3
3
3
0
0
물리적 블록 3
1
1
3
3
2
2
2
2
2
7
누락된 페이지 번호
√
√
√
√
√
√
√
√
√
√
√
√
LRU는 성능이 더 뛰어나지만 레지스터와 스택에 대한 하드웨어 지원이 필요하며 가격이 더 비쌉니다.
LRU는 스택 클래스의 알고리즘입니다. 이론적으로 스택 알고리즘에서는 Belady 예외가 발생하지 않는다는 것을 증명할 수 있습니다. FIFO 알고리즘은 스택 알고리즘이 아닌 큐 기반으로 구현됩니다.
3.4 클럭(CLOCK) 대체 알고리즘
LRU 알고리즘의 성능은 OPT에 가깝지만 구현이 어렵고 비용이 많이 듭니다. FIFO 알고리즘은 구현이 간단하지만 성능이 좋지 않습니다. 따라서 운영 체제 설계자들은 비교적 적은 오버헤드로 LRU의 성능에 접근하려고 많은 알고리즘을 시도했습니다. 이러한 알고리즘은 모두 CLOCK 알고리즘의 변형입니다.
간단한 CLOCK 알고리즘은 사용 비트라고 하는 추가 비트를 각 프레임과 연결합니다. 페이지가 주 메모리에 처음 로드되고 이후에 액세스되면 사용 비트가 1로 설정됩니다.
페이지 교체 알고리즘의 경우 교체할 후보 프레임 세트는 원형 버퍼로 간주되며 이와 관련된 포인터를 갖습니다. 페이지가 교체되면 포인터는 버퍼의 다음 프레임을 가리키도록 설정됩니다.
페이지를 교체해야 할 때 운영 체제는 버퍼를 스캔하여 사용 비트가 0인 첫 번째 프레임을 찾습니다. 사용 비트가 1인 프레임이 발견될 때마다 운영 체제는 비트를 0으로 재설정합니다. 모든 프레임의 사용 비트가 1이면 포인터는 버퍼에서 주기를 완료하고 모든 사용 비트를 0으로 설정한 상태로 유지합니다. 원래 위치에서 프레임의 페이지를 교체합니다. 이 알고리즘은 각 페이지의 상태를 주기적으로 확인하기 때문에 CLOCK 알고리즘, Not Recent Used(NRU) 알고리즘이라고도 합니다.
CLOCK 알고리즘의 성능은 상대적으로 LRU에 가깝고, 사용되는 비트 수를 늘려 CLOCK 알고리즘을 더욱 효율적으로 만들 수 있습니다. 사용된 비트에 수정된 비트 수정을 추가하면 향상된 CLOCK 교체 알고리즘을 얻을 수 있습니다.
모든 프레임은 다음 네 가지 상황 중 하나에 속합니다.
최근에 액세스되지 않았으며 수정되지 않았습니다(u=0, m=0).
이(가) 최근에 액세스되었지만 수정되지 않았습니다(u=1, m=0).
최근 방문하지 않았으나 수정되었습니다(u=0, m=1).
이(가) 최근에 액세스되어 수정되었습니다(u=1, m=1).
알고리즘은 다음 단계를 수행합니다.
포인터의 현재 위치에서 시작하여 프레임 버퍼를 스캔합니다. 이 스캔 중에는 사용 비트가 수정되지 않습니다. 발견된 첫 번째 프레임(u=0, m=0)이 교체를 위해 선택됩니다.
1단계가 실패하면 다시 스캔하여 (u=0, m=1)의 프레임을 찾습니다. 처음으로 발견된 프레임이 교체 대상으로 선택됩니다. 이 스캔 동안 건너뛴 각 프레임에 대해 해당 사용 비트는 0으로 설정됩니다.
2단계가 실패하면 포인터는 원래 위치로 돌아가고 세트에 있는 모든 프레임의 사용된 비트는 0이 됩니다. 1단계를 반복하고, 필요한 경우 2단계를 반복합니다. 그러면 교체할 프레임이 검색됩니다.
개선된 CLOCK 알고리즘은
변경되지 않은 페이지를 교체할 때 우선 적용된다는 점에서 단순한 CLOCK 알고리즘보다 좋습니다. 교체하기 전에 수정된 페이지를 다시 작성해야 하므로 시간이 절약됩니다.
4. 페이지 할당 전략
4.1 상주 세트 크기
페이징된 가상 메모리의 경우 실행을 준비할 때 프로세스의 모든 페이지를 주 메모리로 읽어오는 것이 필요하지 않으며 불가능합니다. 따라서 운영 체제는 읽을 페이지 수를 결정해야 합니다. 즉,
특정 프로세스에 할당할 메인 메모리 공간이 얼마나 되는지, 다음 사항을 고려해야 합니다.
프로세스에 할당되는 저장 공간이 작을수록 메인 메모리에 상주하는 프로세스 수가 적어집니다. 언제든지 프로세서의 시간 활용이 더 효율적일 수 있습니다.
프로세스의 주 메모리에
페이지가 너무 적으면 지역성 원칙에도 불구하고 페이지 오류율이 여전히 상대적으로 높습니다.
페이지 수가 너무 많은 경우, 지역성 원칙으로 인해 특정 프로세스에 더 많은 주 메모리 공간을 할당해도 프로세스의 오류율에 뚜렷한 영향을 미치지 않습니다.
이러한 요소를 기반으로 최신 운영 체제는 일반적으로 세 가지 전략을 채택합니다.
고정 할당 로컬 교체: 특정 수의 물리적 블록을 각 프로세스에 할당하며, 전체 실행 중에 변경되지 않습니다. 프로세스가 실행되는 동안 페이지 폴트가 발생하면 프로세스의 메모리에 있는 페이지 중 한 페이지만 선택하여 교체한 후 필요한 페이지를 로드할 수 있습니다. 이 전략을 구현할 때 각 프로세스에 할당해야 하는 물리적 블록 수를 결정하는 것은 어렵습니다. 너무 적으면 페이지 오류가 자주 발생하고, 너무 많으면 CPU 및 기타 리소스 활용도가 감소합니다.
가변 할당 전역 교체
: 이것은 구현하기 가장 쉬운 물리적 블록 할당 및 교체 전략으로, 시스템의 각 프로세스에 특정 수의 물리적 블록을 할당하며 운영 체제 자체도 사용 가능한 물리적 블록의 대기열을 유지합니다. 블록. 프로세스에 페이지 폴트가 발생하면 시스템은 사용 가능한 물리 블록 큐에서 물리 블록을 꺼내어 프로세스에 할당하고, 로드할 페이지를 로드합니다.
가변 할당 로컬 교체: 각 프로세스에 특정 수의 물리적 블록을 할당합니다. 프로세스에서 페이지 오류가 발생하면 프로세스의 메모리 페이지 중 한 페이지만 교체되도록 허용됩니다. 다른 프로세스의 작동에는 영향을 미치지 않습니다. 프로세스가 실행되는 동안 프로세스가 자주 페이지를 누락하는 경우 시스템은 프로세스의 페이지 누락률이 적절한 수준에 도달할 때까지 프로세스에 여러 물리적 블록을 할당합니다. 프로세스가 실행되는 동안 누락률이 특히 낮습니다 그러면 프로세스에 할당되는 물리적 블록 수를 적절하게 줄일 수 있습니다.
4.2 페이지 로드 타이밍
프로세스가 실행 중일 때 누락된 시스템 로드 페이지의 타이밍을 확인하기 위해 다음 두 가지 페이징 전략을 채택할 수 있습니다.
사전 페이징 전략
: 지역성 원칙에 따르면 한 번에 여러 개의 인접한 페이지를 로드하는 것이 한 번에 한 페이지를 로드하는 것보다 더 효율적일 수 있습니다. 그러나 로드된 페이지의 대부분을 액세스하지 못한 경우에는 비효율적입니다. 따라서 가까운 미래에 액세스할 것으로 예상되는 페이지를 메모리에 미리 로드하기 위해 예측 기반 사전 페이징 전략을 사용할 필요가 있습니다. 그러나 현재 사전 조정된 페이지의 성공률은 약 50%에 불과합니다. 따라서 이 전략은 프로세스가 처음 로드될 때 주로 사용되며, 프로그래머는 어떤 페이지를 먼저 로드해야 하는지 지시합니다.
요청 페이징 전략
: 작업 중에 프로세스가 액세스해야 하는
페이지가 메모리에 없고 요청
이 이루어지면 시스템이 필요한 페이지를 메모리로 전송합니다. 이 전략에 의해 전송된 페이지는 확실히 액세스되며 이 전략은 구현하기가 상대적으로 쉽기 때문에 이 전략은 현재 가상 메모리에서 주로 사용됩니다. 단점은 한 번에 한 페이지만 로드한다는 것입니다. 많은 페이지가 들어오고 나가면 I/O 오버헤드가 너무 많이 소모됩니다.
4.3 페이지 로드 위치
요청 페이징 시스템의
외부 저장소
는 두 부분으로 나뉩니다: 파일을 저장하는 파일 영역과 스왑 페이지
스왑 영역. 스왑 영역은 일반적으로 연속 할당 방식을 사용하는 반면, 파일 영역은 개별 할당 방식을 사용하므로 스왑 영역의 디스크 I/O 속도는 파일 영역보다 빠릅니다. 페이지가 전송될 수 있는 세 가지 상황은 다음과 같습니다. 시스템에 스왑 영역 공간이 충분합니다: 스왑 영역에서 필요한 모든 페이지를 전송하여 페이지 전송 속도를 높일 수 있습니다. 이러한 이유로 프로세스가 실행되기 전에 프로세스와 관련된 파일을 파일 영역에서 스왑 영역으로 복사해야 합니다.
시스템에 스왑 영역 공간이 부족합니다: 수정되지 않는 모든 파일은 파일 영역에서 직접 전송됩니다(스왑 아웃 시 다시 쓸 필요 없음). 그러나 수정될 수 있는 부품의 경우 교체할 때 스왑 영역으로 전송해야 하며 나중에 필요할 때 스왑 영역에서 다시 전송해야 합니다.
UNIX 방식: 프로세스와 관련된 파일은 파일 영역에 배치되므로 실행되지 않은 페이지는 파일 영역에서 로드해야 합니다. 이전에 실행되었으나 Swap된 페이지는 Swap 영역에 배치되므로 다음 번에는 Swap 영역에서 로드되어야 합니다. 프로세스가 요청한 공유 페이지가 다른 프로세스에 의해 메모리로 전송되면 이를 스왑 영역에서 전송할 필요가 없습니다.
5. 페이지 지터(Bump) 및 작업 세트(Resident Set)
5.1 페이지 지터(Jump)
페이지 교체 과정 중 최악의 상황 중 하나는 바로 지금 페이지입니다. 스왑 아웃된 페이지는 즉시 메인 메모리로 스왑 아웃되고, 방금 스왑 인된 페이지는 메인 메모리에서 즉시 스왑 아웃됩니다. 이러한
빈번한 페이지 예약 동작을 지터 또는 터뷸런스
라고 합니다. 프로세스가 실행하는 데 걸리는 시간보다 페이징 에 더 많은 시간을 소비한다면 프로세스는 스래싱됩니다.
페이지 오류 인터럽트(지터)가 자주 발생하는 주된 이유는 프로세스에서 자주 액세스하는 페이지 수가 사용 가능한 물리적 페이지 프레임 수보다 높기 때문입니다. 가상 메모리 기술은 더 많은 프로세스를 메모리에 유지하여 시스템 효율성을 향상시킬 수 있습니다. 정상 상태에서는 거의 모든 메인 메모리가 프로세스 블록에 의해 점유되며 프로세서와 운영 체제는 가능한 한 많은 프로세스에 직접 액세스할 수 있습니다. 그러나 제대로 관리되지 않으면 프로세서의 대부분의 시간이 프로세스의 명령을 실행하는 대신 블록 교환, 즉 페이지 로드 작업을 요청하는 데 소비되어 시스템 효율성이 크게 저하됩니다.
5.2 작업 세트(상주 세트)
작업 세트(또는 상주 세트)는 프로세스가 특정 간격 내에 액세스해야 하는 페이지 세트 를 의미합니다. 자주 사용되는 페이지는 워킹 세트에 포함되어야 하고, 오랫동안 사용되지 않은 페이지는 워킹 세트에서 삭제됩니다. 시스템 스래싱을 방지하려면 적절한 작업 세트 크기를 선택해야 합니다.
작업 세트 모델의 원리는 운영 체제가 각 프로세스의 작업 세트를 추적하고 작업 세트보다 큰 프로세스에 물리적 블록을 할당하도록 하는 것입니다. 여유 물리적 블록이 있는 경우 다른 프로세스를 메모리로 전송하여 다중 프로그램 수를 늘릴 수 있습니다. 모든 작업 세트의 합이 증가하여 사용 가능한 총 물리적 블록 수를 초과하는 경우 운영 체제는 프로세스를 일시 중지하고 페이지 아웃한 다음 물리적 블록을 다른 프로세스에 할당하여 스래싱을 방지합니다.
작업 세트의 크기를 올바르게 선택하면 메모리 활용도 및 시스템 처리량 향상 에 중요한 영향을 미칩니다.
6. 요약
페이징 관리 방법과 분할 관리 방법은 메모리가 불연속적이며 주소 매핑을 위한 주소 변환 메커니즘이 있다는 점에서 유사합니다. 그러나 둘 사이에는 많은 차이점이 있습니다. 표 3-20에는 페이징 관리와 분할 관리를 여러 측면에서 비교한 내용이 나와 있습니다.
Paging
Segmentation
Purpose
페이지는 정보의 물리적 단위이며, 페이징은 외부 데이터를 줄이기 위해 이산적 할당을 달성하는 방법입니다. 메모리의 일부를 제공하고 높은 메모리 활용도. 즉, 페이징은 사용자의 필요가 아닌 시스템 관리의 필요로 인한 것일 뿐이며 의미가 상대적으로 완전한 정보 집합을 포함하는 논리적인 정보 단위입니다. 분할의 목적은 사용자
length
페이지의
크기는 시스템에 의해 고정되고 결정됩니다
. 시스템은 논리 주소를 페이지 번호와 인트라의 두 부분으로 나눕니다. -페이지 주소. 기계 하드웨어에 의해 구현되므로 시스템에는 하나의 페이지 크기만 있을 수 있습니다. 세그먼트의 길이는 고정되어 있지 않으며 일반적으로 컴파일러가 스트림 프로그램을 컴파일합니다. 정보에 따르면
주소 공간
작업 주소 공간은 1차원, 즉 단일 선형 주소 공간만 사용하면 됩니다. 주소 공간은 2차원입니다. 주소를 식별할 때 프로그래머는 세그먼트 이름과 세그먼트 내의 주소를 모두 제공해야 합니다. 조각, 내부 조각 없음
"공유" 및 "동적 링크"
구현하기 쉽지 않음
구현하기 쉬움
관련 추천: "
Linux 비디오 튜토리얼
"
위 내용은 Linux는 가상 메모리를 구현하기 위해 무엇을 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!