8-1. 가상 메모리의 이해
virtual memory
- 개념
- 가상 메모리 주소를 주는 방법
- 사용자와 논리적 주소를 물리적으로 분리
- 메인 메모리 용량을 초과한 프로세스에 주소를 지정해서 메모리를 제한 없이 사용할 수 있게 함
- 활용
- 필요할 때, 디스크와 메모리 사이에 프로세스 코드와 데이터 저장
- 디스크에 저장된 주소 공간은 캐시로 처리 (메인 메모리 효율적 사용)
- 페이징을 이용하여 가상 메모리 시스템 구현
- 주소
- 가상 주소(논리적): 실행 중인 프로세스가 참조
- mapping: 가상 주소를 물리적 주소로 변환
- DAT(dynamic address translation): 인위적으로 연속적, 가상 주소에서 연속적 + 메인 메모리에서는 연속 필요 X
가상 주소와 테이블 항목
- 메인 메모리는 가상 page와 동일한 크기의 page frame으로 분할
8-2. 요구 페이징
요구 페이징
- 가상 메모리에서 가장 많이 사용하는 메모리 관리 방법
- 순차적인 프로그램의 모듈을 처리할 때, 다른 부분은 실행하지 않는다는 특성 이용
- 지연 기술/lazy swapper
- 실행 중인 process의 요구 page만 memory에 fetch
- 모든 페이지를 동시 적재 X
- 페이지 테이블 유지 필요
- page fault (페이지 부재)
page fault
- 프로그램이 메모리에 저장되지 않은 페이지에 엑세스
- 타당 비트/비타당 비트로 처리 가능
- 비타당 비트를 발견하면 무효 주소 오류로 처리
- 페이지 부재로 트랩이 발생한 경우
- 해당 페이지를 메모리에서 가져옴
- 메모리에서 빈 프레임 중 하나 결정
- 할당된 프레임에 요구된 페이지를 디스크에서 적재
- 적재되었음을 알리기 위해 페이지 테이블의 비트를 타당으로 변경
- 주소 트랩으로 인터럽트된 명령어 다시 시작
- 과도한 페이지 교체로 인한 오버헤드는 시스템 성능을 저하시킴
- COW(copy-on-write)기술로 더 많은 자원 저장
- 페이지 효율성을 올림
페이지 성능
- MAT(memory access time): 메모리 액세스 시간
- EAT(effective access time): 유효 액세스 시간, 페이지 부재가 없다면 MAT와 동일
- 페이지 부재 비율을 낮추는 것이 중요: 알고리즘과 정책이 필요
페이지 대치
- 페이지 부재가 발생한 경우 발생
- 메인 메모리에 있으면서 사용하지 않는 페이지를 없애고 새로운 페이지로 교체
8-3. 페이지 대치 알고리즘
- 내보낼 페이지를 고르는 방법을 위한 알고리즘
- 보통은 페이지 부재 비율이 낮은 알고리즘을 기본으로 선택
선입선출 대치 알고리즘(FIFO)
- queue 구조로 유지
- Belady’s anomaly 발생: 할당하는 프레임 수가 증가하면 페이지 부재 비율도 증가
최적 페이지 대치 알고리즘
- 페이지 부재 비율이 낮은 페이지 대치 알고리즘을 찾기 위함
- 최적 페이지 대치 알고리즘(Optimal replacement algorithm)은 밸래디의 알고리즘으로도 알려져있음
- 앞으로 가장 오래 사용하지 않을 페이지를 대치
- 참조 문자열을 언제 사용할 것인지에 대한 정확한 정보를 요구
최근 최소 사용 대치 알고리즘
- 최근 최소 사용(Least Recently Used)
- 미래를 예측하려는 통계적 개념임
- 마지막으로 사용한 시간이 멀 수록 대치 대상
- 최종 참조로 정의되는 프레임 순서 결정이 필요
- 카운터(계수기)를 이용
- 프로세서에 논리 클록을 추가
- 모든 참조의 프로세서 클록을 각 페이지 테이블 항목에 업데이트
- 참조할 떄 마다 클록 증가 (최후 참조 시간을 가짐)
- 시간 값이 작은 페이지는 대치
- 스택을 이용
- 페이지 번호를 스택에 넣어 관리
- 페이지를 참조하면 페이지 번호를 스택의 top으로 이동
- 카운터(계수기)를 이용
최근 최소 사용 근접 알고리즘
- 저렴한 비용으로 최근 최소 사용 알고리즘 구현
- 이를 위해 system이 참조 비트의 형태를 지원
- 프로세스를 수행할 때 참조된 각 페이지와 관련된 비트를 1로 변환
- 어느 페이지를 사용했는지 조사하여 부분적인 순서 정보로 LRU에 근접한 알고리즘
- 참조 비트 알고리즘
- 각 페이지의 8 bit 정보에 참조 비트를 기록
- 최근 8번의 페이지 기록 정보를 유지
- 시계(2차적 기회 대치) 알고리즘
- 가장 오랫동안 메인 메모리에 있던 페이지 중, 자주 사용하는 페이지의 대치를 방지
- 각 프레임의 사용 여부를 나타내는 참조 비트를 추가
- 원형 버퍼로 구성, 각각 포인터를 가짐
- 참조하면 해당 비트를 1로 변경
- 검사 중, 1을 발견하면 0으로 변경 (한 번의 기회를 더 줌)
- 검사 중, 0을 발견하면 대치
- NUR(not used recently) 알고리즘
- 최근 사용하지 않는 페이지를 교체
- 수정 비트
- 모든 페이지의 참조 비트와 수정 비트를 (0, 0)으로 설정
- (최근에 사용, 최근에 수정)
- 최소 사용 빈도수 알고리즘
- LFU (least frequently used)
- 각 페이지마다 참조 횟수 카운터가 존재
- 수가 가장 작은 페이지를 대치
- 일반적이지 않음
- 최대 사용 빈도수 알고리즘
- MFU (most frequently used)
- 위와 반대
- 페이지 버퍼링
- 교체 대상으로 선책한 페이지를 즉시 교체하지 않은 채 잠시 메인 메모리에 유지
- 메모리에 원하는 페이지가 없으면 가용 페이지 리스트의 첫 프레임에 적재
- 입출력 연산 횟수가 크게 감소 → 디스크 액세스 시간 감소
- 참조 비트 알고리즘
8-4. 프레임 할당 알고리즘
- 페이지 부재 횟수를 줄이기 위한 알고리즘
- 최소 프레임 수는 명령어 구조로 정의
- 명령어가 참조하는 모든 페이지를 수용할 수 있는, 충분한 프레임이 있어야 명령어 하나를 실행할 수 있음
균일/비례 프레임 할당 알고리즘
- 균일 할당
- 프레임 m개를 프로세스 n개에 나눠주는 가장 쉬운 방법
- 프로세스가 페이지 프레임을 낭비하거나 페이지 부재가 빈번한 문제 발생
- 비례 할당
- 사용 가능한 메모리를 각 프로세스의 크기에 비례하여 할당하는 것
- 크기나 우선순위를 결합하여 할당하는 방법
- 주로 혼합하여 사용
8-5. 메모리를 관리하는 프로세스 적재 정책
- 메모리에 상주할 프로세스 수를 결정
스레싱(thrashing)
- 페이지 교환이 계속 일어나는 현상
- 프로세스가
페이지 교환에 보내는 시간 > 프로세스 수행에 보내는 시간
인 상태 - 발생 원인
- 너무 많은 다중 프로그래밍으로 새로운 프로세스 증가
- 프로세스에 고정된 프레임 수가 현재 활동에 충분하지 않음
- 서로 프레임을 뺏는 과정(지속적인 페이지 부재) 발생
- 프러세서의 이용률은 감소하고 이를 위해 다중 프로그래밍의 정도가 올라가지만 악효과
- 예방
- 다중 프로그래밍 수준과 프로세서 사용률의 수준을 비교 평가
- 프로세스에 많은 프레임을 제공
- 작업 집합(워킹 셋) 모델: 프로세스가 얼마큼 프레임을 많이 사용하는지 검사 후, 지역 모델 정의
- 지역 모델: 한 지역에서 다른 지역으로 이동하는 과정, (지역: 동시에 사용하는 페이지 집합)
- Denning은 50% 수준의 다중 프로그래밍 정도를 제안
지역성(locality)
- 동일한 값이나 관련 저장 위치를 자주 액세스하는 현상
- 정보를 균일하게 액세스하지 않고, 선호하는 특정 페이지만 집중적으로 참조
- 분류
- 시간 지역성: 특정 자원들을 상대적으로 짧은 시간 안에 재사용
- 공간 지역성: 프로세스가 메모리의 어떤 위치를 참조하면 그 근처를 이후에도 계속 참조
작업 집합 모델(WSM: Working Set Model)
- 프로그램 수행 과정을 지역성으로 설명
- 프로세스가 많이 참조하는 페이지 집합을 메모리 공간에 계속 상주시킴
- 작업 집합 크기(WSS)
- 작업 집합 창을 이용해서 구함
D = 모든 WSS의 합
(D: 전체 요구 프레임)D > m
(m: 총 유효 프레임)의 경우 스레싱 발생- 스레싱 발생 시, 중지할 프로세스 선정 후 페이지 회수
- 작업 집합 창: 매개 변수를 이요해서 정의, 시간 단위에 의힘
- 새로운 프로세스는 메인 메모리에 자신의 작업 집합을 적재할 수 있는 공간이 있을 때만 시작
페이지 부재 비율(PFF: page fault frequency)
- 스레싱을 예방하는 직접적인 액세스 방법
- 페이지 환경에서 프로세스의 실행을 측정하는 기준
- 프로세스를 중지 후, 페이지 부재 비율이 높은 프로세스에 중지된 프로세스에 할당된 프레임 분배
페이지 부재 비율 > 상한 값
: 프로세스에 다른 프레임을 더 할당페이지 부재 비율 < 하한 값
: 프레임 회수
8-6. 메모리 관리와 관련된 기타 이슈
대치 범위
- 대치할 희생 페이지 결정 방법
- 전역 대치
- 프레임 할당 기준으로 페이지의 대치 범위를 모든 프로세스에 적용
- 교체할 프레임을 다른 프로세스에서 획득 (메인 메모리에서 자유롭게 선택)
- 각 프로세스의 부재 비율을 조절할 수 없음
- 페이지 테이블이 소프트웨어로 유지/관리 됨
- 지역 대치
- 프로세스를 개별적으로 제한
- 프로세스에 할당된 페이지만 선정 가능
- 프로세스의 상대적인 중요도에 따라 메모리 할당 조정
- 일관된 성능
- 프로세스 끼리의 경쟁 X
프리 페이징
- 예상되는 모든 페이지를 사전에 한꺼번에 메모리 내로 가져옴
- 실제 사용 확률 a(
0 <= a <= 1
)일 경우, a가 1에 가까울 수록 좋음
페이지 크기
- 페이지 크기는 하드웨어 디자인에서 중요한 요소
- 메인 메모리 크기와 프로그램 크기 자체에 영향을 받음
- 페이지 크기와 페이지 테이블의 크기
- 페이지 크기가 감소하면 페이지 수가 증가하여 테이블이 커짐
- 작은 크기의 페이지
- 페이지 테이블 증가
- 내부 단편화 감소
- 디스크 IO 증가
- 지역성 증가, 페이지 부재 비율 증가
- 큰 크기의 페이지
- 페이지 테이블 감소
- 내부 단편화 증가
- 디스크 IO 감소
- 지역성 악화, 페이지 부재 비율 감소
페이지 테이블의 구조
- 가상 주소를 프레임 번호와 오프셋으로 구성된 물리적 주소로 변환
- 역 페이지 테이블
- 프로세스들이 물리적 페이지를 공유할 때 필요한 전역 페이지 테이블
- 페이지 테이블 일부를 메인 메모리에 적재해야하는 문제 해결
- 물리적 주소로 정렬
- 전체 탐색 탓에 페이지 테이블 탐색은 비효율적 → 해싱 사용
- 변환 우선참조 버퍼(Translation Look-aside Buffer)
- 가상 메모리를 참조하는 메모리 엑세스 시간을 줄이기 위함
- 페이지 테이블의 항목들에 특별한 캐시 사용
- 지역성에 따름 : 최근 참조한 페이지 일부를 저장