- 가상 메모리(VRAM) : 보조기억장치를 주기억장치처럼 주소지정이 가능하게 만든 저장 공간 할당 체제
- 가상 주소 : 가상 메모리의 특정 위치에 배정된 주소 → VRAM에 배정된 주소
- 가상 주소 공간 : 특정 프로세스에 할당된 가상 주소의 영역 → VRAM의 크기
- 주소 공간 : 특정 프로세스에 가용한 주기억장치 주소(물리적 주소)의 영역 → RAM의 크기
- 실 주소(물리적 주소) : 주기억장치 상의 특정 위치의 주소 → RAM의 주소
하드웨어와 제어 구조
- Paging 메모리 관리의 2가지 기본 특성
- 프로세스의 모든 메모리 참조 ⇒ 물리 주소
- → 이는 동적으로 물리 주소로 변환
- 한 프로세스의 주소 공간이 여러 블록으로 분할되고 수행될 때, 메모리의 연속된 영역에 위치할 필요X
But) 프로세스의 코드와 데이터 전체가 메모리에 적재되어야 함
- 수행시간에 프로세스의 모든 블록이 주기억장치에 적재되어 있지 않아도 된다면?
- 프로세스의 크기를 주기억장치의 크기보다 크게 할당 가능
- 멀티 프로그래밍 정도를 높일 수 있다.
방안 ⇒ 부분 적재 수행
- OS는 초기에 수행될 코드와 참조될 데이터가 포함되도록 몇 개의 블록만 적재
- 주기억장치에 적재되지 않은 논리 주소가 참조될 경우 처리기(CPU)는 메모리 접근 오류 인터럽트 를 발생시킨다.
- OS는 해당 프로세스를 Blocking!하고 참조된 논리 주소를 포함하는 블록을 주기억장치로 반입 → I/O 요청
- OS는 I/O가 완료되면 Block된 프로세스를 준비 상태로 전환시킨다.
부분 적재의 이점
- 보다 많은 프로세스를 주기억장치에 유지→ Swapping 오버헤드 감소
- → 준비 상태 프로세스가 존재할 가능성이 높음
- 주기억장치 크기보다 큰 프로세스를 수행
- → 이용 가능한 주기억장치 공간 크기를 의식할 필요가 없다.
타당성
- 단기간, 작은 영역 코드 수행, 적은 데이터
- Swap-out 되기 전에 단지 몇 블록만 사용된다.
- ⇒ 사용하지 않는 블록은 메모리에 적재할 필요X
- 각 프로세스의 일부분 적재 → 많은 프로세스들을 메모리에 유지
- 프로세스 적재 시간 절약
논점 검토
⇒ 실 메모리 전체가 프로세스 블록들로 채워져 있는 상황에서 어떤 프로세스의 참조된 논리 주소(블록)가 적재되지 않았을 경우
- 메모리 접근 오류 인터럽트 발생 → OS는 해당 블록을 가상 메모리에서 실메모리로 적재
- 새로운 블록을 실메모리로 반입하려면 실메모리에 적재되어 있는 블록 하나를 반출해야한다.
- 만일 특정 블록이 사용 직전에 반출되었다면 그 블록은 곧 바로 반입 → 메모리 접근 오류 인터럽트 발생
⇒ 위 과정이 반복되고 이러한 상태로 쓰레씽(Thrashing)
쓰레씽 피하기
- 지역성의 원리 → 블록들의 최근 참조 이력을 근거로 가까운 미래에 사용될 가능성이 적은 블록을 추정하여 반출
- 지역성 : 프로세스 내의 명령어 및 데이터에 대한 참조가 군집을 이루는 특성
- 시간 지역성 : 반복문, 함수 호출
- 공간 지역성 : 순차 수행, 배열 순회
- 짧은 기간 동안 프로세스의 블록 몇 개만 필요 (가정) - 유효 근거
- 가까운 미래에 어떤 블록이 필요할 것인지에 대한 지능적 예측도 가능
- 지역성이 전제될 때, 가상 메모리 실용성의 필요 조건
- 가상 메모리 지원 H/W
- 실 메모리와 가상 메모리 간 블록 이동을 관리할 S/W 모듈
페이징 (Paging)
- 가상 메모리에 있는 프로세스는 고정 크기의 페이지(Page)로 분할
- 실 메모리는 페이지 크기의 프레임(Frame)으로 분할
- 프로세스 당 하나의 Page Table 유지
가상 메모리 : Page ↔ 실 메모리 : Frame ⇒ 크기 동일
→ PFN : Page Frame Number
- 프로세스는 가상 주소로 구성
- P bit : 존재 비트 (메모리에 존재하는가?)
- M bit : 메모리에 적재된 후 내용 변경 여부
- 페이징 시스템에서의 주소 변환
- 페이지가 메모리의 한 워드를 접근할 때마다 주소 변환이 필요함
- CPU -(가상 주소)-→ MMU -(물리 주소)-→ Memory
- 프로세스를 위한 페이지 테이블의 시작 주소가 특정 레지스터에 저장된다.
- 가상 주소의 페이지 번호를 테이블의 인덱스로 사용하여 페이지 테이블 항목을 선정
- 그 항목으로부터 페이지가 적재된 프레임 획득
- 프레임 번호가 가상 주소의 오프셋과 결합되어 물리 주소 획득
페이지 테이블(PT, Page Table)의 구조
2단계 계층구조를 위한 가상 주소
- 루트 PT는 항상 메모리에 적재됨
- 나머지 PT는 일부분만 실 메모리에 적재한채 해당 프로세스 수행 가능
- Page Table의 단점
- 다단계 PT 구조에서 PT 단계 수는 가상 주소 공간의 크기에 비례
- 단계가 클수록 페이지 접근 비용이 증가
역페이지 테이블(Inverted PT)
- 페이지 테이블 항목이 가상 메모리의 페이지당 하나씩이 아니라 실 메모리의 페이지 프레임당 하나씩 설정된다.
- 프로세스의 수나 지원되는 가상 메모리 크기와 상관없이 주기억장치의 일정 부분만이 역페이지 테이블 저장을 위해 사용된다.
- Power PC, UltraSPARC, IA-64 구조에 변형 기법 사용
- Mach 운영체제에 사용
⇒ 문제점 : 실 메모리 공유가 어려움
1단계 PT 구조 : 실 메모리 접근 횟수 2회 ?
2단계 PT 구조 : 실 메모리 접근 횟수 3회 ??
역페이지 테이블 : 실 메모리 접근 횟수 1회 ???
- 페이징에서 가상 주소 참조는 적어도 두 번의 실 메모리의 접근을 필요로 한다.
- 주소 변환에 필요한 PTE를 위해 실 메모리 접근
- 요구된 워드를 가져오기 위해 실 메모리 접근
⇒ 실 메모리 접근 시간이 두 배로 증가하여 역효과를 가져올 수 있다.
⇒ 해결책 : PT를 위한 캐시(TLB)를 사용하는 것
TLB(Translation Lookaside Buffer)
⇒ TLB는 가장 최근에 참조된 PTE를 저장하고 있는 캐시이다.
- 페이지 테이블만 사용하는 직접 검색
- TLB를 사용하는 연관 검색
- 지역성의 원리로 대부분의 가상 주소 참조는 최근에 사용된 페이지들 내의 위치들로 한정될 것이며, 이로 인해 대부분의 참조는 캐시 안에 있는 페이지 테이블 항목(PTE)과 연계될 것이다.
- TLB Entry
- 페이지 테이블 항목의 내용
- 페이지 번호
- 다수의 TLB 항목을 동시에 조사하는 H/W
- TLB
- 가상 주소가 주어진다.
- TLB 조사
- TLB hit : 실주소 구성 (프레임 번호 추출), 5번으로 이동
- TLB miss : 페이지 테이블 인덱싱 후 페이지 테이블 항목 참조, 3번으로 이동
- 존재 비트
- 0 : Page Fault (실 메모리에 Page 없음), OS가 HDD에서 주기억장치로 Page 적재 => 메모리 접근 오류 인터럽트!!
- 1 : 실 메모리에 Page 존재
- TLB 갱신
- CPU가 물리 주소 생성
TLB hit : TLB에 Page 번호가 있으면 바로 Frame 번호 추출
TLB miss : TLB에 Page 번호가 없을 때
→ 메모리에 존재(PT에 존재) ⇒ Frame 번호 추출 ⇒ TLB 갱신
→ 메모리에 미존재 ⇒ Page를 주기억장치(PT)에 적재 ⇒ Frame 번호 추출 ⇒ TLB 갱신
- 해당 블록이 캐시에 있는가? (태그, 나머지)X : Cache miss, 주기억장치로부터 해당 워드가 읽힌 후 CPU로 워드 전송
- O : Cache hit, CPU로 워드 전송
⇒ Page Fault가 많다, 쓰레싱 확률이 높다, 메모리 성능 저하
- 페이지 크기
- 페이지 크기를 결정할 때 고려사항
페이지 크기 ---------- 고려사항 |
작은 경우 | 큰 경우 |
Page Table 크기 | 증가 | 감소 |
프레임 내부 단편화 | 적어짐 | 많아짐 |
팜조 지역성 효과 | 증가함 | 감소함 |
I/O 시간 효율성 | 나쁨 | 좋음 |
- 페이지 크기 매우 작음
- 주기억장치 상에서 한 프로세스가 사용할 수 있는 페이지들이 상대적으로 많아짐
- 시간이 지나면 메모리에 적재된 페이지들이 프로세스가 최근에 참조한 인접 부분을 모두 포함
- 페이지 폴트 발생률 저하
- 페이지 크기가 커질수록
- 개별 페이지들은 최근의 참조로부터 보다 멀리 떨어져 있는 위치를 포함할 것이다.
- 지역성의 원리에 따른 효과가 감소
- 페이지 폴트 발생률 상승
- 페이지 크기가 전체 프로세스의 크기에 근접
- 한 페이지의 크기가 프로세스의 전체를 포함하면 페이지 폴트가 발생하지 않음
- 한 프로세스에 할당된 프레임의 개수에 의해 페이지 폴트 발생률이 결정됨
- 유지되는 페이지의 개수가 늘수록 페이지 폴트 발생률 감소
⇒ S/W 정책 (각 프로세스에 할당된 메모리량)은 H/W 설계시의 결정사항(페이지 크기)과 상호작용
⇒ 한 가지 페이지 크기가 모든 시스템에 최적일 수는 없다.