🍣 가상 메모리
메모리:
- 프로그램과 프로그램 수행에 필요한 데이터 및 코드를 저장하는 장치
- 주기억장치(내부 기억장치)와 보조 기억장치(외부 기억장치)로 분류
- 주기억장치: 레지스터, 캐쉬 등
- 보조 기억장치: SSD, HDD 등
가상 메모리 등장 배경
- 사용가능한 RAM 용량보다 가장 큰 실행 애플리케이션의 주소공간이 더 크면 메모리 부족 오류로 해당 애플리케이션 실행 불가
- 프로그래머가 애플리케이션의 일부분만 기억장치에 올려 실행하도록 하는 오버레이 기업으로 메모리 부족 문제 해결 시도
- 오버레이를 사용하는 프로그램은 일반 프로그램보다는 메모리를 덜 사용했지만, 시스템이 프로그램을 위한 충분한 메모리를 갖추지 않으면 결국 메모리 부족 오류 발생
- 가상 메모리 기법: 애플리케이션을 실행하는데 필요한 최소의 메모리에 집중
- 메모리 접근은 순차적이고 지역화되어 있음
- 애플리케이션의 일부분만 메모리에 올려지고 메모리에 올라가지 않는 나머지는 보조기억장치에 위치
가상 메모리: 메모리가 실제 메모리보다 많아 보이게하는 기술
- 어떤 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 올라가지 않아도 실행이 가능하다는 점 활용
- 애플리케이션이 실행될 때 실행에 필요한 일부분만 메모리에 올라가며 애플리케이션의 나머지는 디스크에 남게 됨
- 디스크가 RAM의 보조 기억장치처럼 작동
- 빠르고 작은 기억장치 9RAM)을 크고 느린 기억장치(디스크)와 병합하여 하나의 크고 빠른 기억장치처럼 동작
- 가상 메모리 구현을 위해서는 컴퓨터가 Memory Management Unit(MMU)를 가져야 함
MMU
- 가상주소를 물리주소로 변환 & 메모리 보호
- MMU 사용하면:
- CPU가 각 메모리에 접근하기 전에 메모리 주소 번역 작업 수행
- 메모리를 일일이 가상 주소에서 물리적 주소로 번역하면 작업 부하
- MMU는 RAM을 여러 페이지로 나눠 각 페이지를 하나의 독립된 항목으로 처리
- 가상주소(논리주소): <page, offset> 형태로 구
🍣 가상 메모리가 가능한 이유
어떤 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 올라가지 않아도 실행이 가능하다는 점 활용
🍣 Page Fault가 발생했을 때 처리 방법
Page fault: 어떤 페이지에 접근하려고 했을 때 해당 페이지가 실제 물리 메모리에 부재할 때 뜨는 인터럽트
- 어떤 프로그램이 자신의 주소 공간(가상 메모리 공간)에는 존재하지만 시스템의 RAM에는 현재 존재하지 않는 데이터/코드에 접근을 시도할 경우 발생하는 현상
- 발생시 운영체제가 이를 해결한 뒤 다시 동일 명령 수행함
- 자주 일어날 수록 운영체제의 성능이 많이 저하 됨
페이지 폴트 최소화 방법: 페이지 교체 정책, page replacement policy
- 메모리가 꽉 차있을 때 기존 페이지 중 하나를 물리 메모리에 저장 매체로 내리고 새로운 페이지를 방금 비워진 해당 물리 메모리 공간에 올림
- 기존 페이지 중 어떤 것을 내리면 좋을지에 대한 알고리즘 > 페이지 교체 알고리즘
가상 메모리 기법은 메모리 폴트 발생율을 줄여 스래싱을 방지해야 함
🍣 페이지 크기에 대한 Trade-Off
페이지 크기가 큰 경우:
- 페이지 테이블 크기 작아짐
- 프레임 내부 단편화 증가
- 참조지역성 효과 증가
- 입출력 효율성 나쁨
페이지 크기가 작은 경우:
- 페이지 테이블 크기 커짐
- 프레임 내부 단편화 감소
- 참조지역성 효과 감소
- 입출력 효율성 좋음
참조지역성 효과: 참조한 시간이 최근일수록/참조된 페이지와 가까울수록 참조될 가능성이 높음
- 페이지 크기가 크면 하나의 페이지가 비슷한 내용을 포괄함 > 참조지역성 효과 줄어둠
- 참조지역성 효과가 줄어들면 페이지 폴트 발생률 증가
- 하지만 어느 지점에 도달하면 페이지 하나에 필요한 프로세스 내용이 다 들어가서 페이지 폴트 비율이 줄어듬
🍣 페이지 크기가 커지면, 페이지 폴트가 더 많이 발생하는가
- 페이지 크기가 커지면 각 페이지는 쓰이지 않는 코드를 더 많이 포함 > 페이지 폴트 증가
- 페이지 사이즈와 프로세스의 사이즈가 같아지는 점 P에 도달하면 페이지 폴트 감소
- 프로세스마다 할당된 프레임의 수에 영향 받음
- W개의 프레임이 할당되면 페이지 폴트는 적절한 빈도로 떨어짐
- 프로세스 전체가 메모리에 존재하면 0으로 떨어짐
참고: