가상 메모리
연속 할당 기법의 문제
연속 할당 기법은 메모리에 적재도니 프로세스들 중에서 현재 실행되지 않는 프로세스가 스왑아웃하고 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 스왑 인을 거치는데 이렇게 메모리를 연속적으로 배치하는 연속 메모리 할달은 외부 단편화 라는 문제를 내포하고 있습니다.
메모리 단편화
RAM 의 전체 공간은 충분하나 조각조각 나눠져 있는공간으로 인해 프로세스가 적재 되지 못하는 상황이다.
외부 단편화
메모리의 여러번의 스와핑 과정으로 인해 메모리의 중간중간 빈 공간이 생기고 이 공간을 다 합치면 메모리 프로세스가 적재 될 수 있지만 그렇지 않으면 프로세스가 할당되지 못해 메모리가 낭비된느 형상을 얘기한다.
해결법 : 여기저기 흩어져 있는 빈 공간들을 하나로 모으는 방식으로 메모리 내에 저장된 프로세스를 적당히 재배치시켜 여기저기 흩어져 있는 작은 빈 공간들의 하나의 큰 빈공간으로 만드는 방법으로 압축 기법이 있다.
내부 단편화
메모리가 할당될 때 필요한 메모리 보다 큰 메모리가 할당되어 메모리가 낭비되는 현상을 얘기한다.
해결법 : 여러 개의 작은 메모리 블록을 큰 하나의 블록으로 통합함으로써 메모리 사용의 효율을 높이는 방법으로 통합 기법이 있다.
가상메모리
실행하고자 하는 프로그램을 일부만 메모리에 적재하여 메모리의 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술이다. 이를 가능하게 하는 가상 메모리 관리 기법에는 크게 페이징과 세크멘테이션이 있다.
페이징
- 프로세스의 논리 주소 공간은 페이지라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임 이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법이다.
- 페이징은 외부 단편화 문제를 해결해 준다
- 모든 메이지를 처음부터 물리 메모리에 로드할 필요가 없이 필요한 페이지만 메모리에 로드하고, 나머지는 디스크에 유지 할 수 있다.
- 메모리가 가득찬 경우 페이지 인,페이지 아웃를 하기 위해 다양한 페이지 교체 알고리즘이 있다.
- 가상 주소를 물리 주소로 변환하기위해 페이지 테이블이라는 데이터 구조를 사용한다.
페이지 테이블
- 페이지 번호와 프레임 번호를 짝지어 주는 일종의 이정표로 CPU로 하여금 페이지 번호만 보고 페이지가 적재된 프레임을 찾을 수 있게 한다.
- 프로세스마다 각자의 프로세스 테이블이 존재한다.
- 프로세스 마다 프로세스 테이블을 가지고 있고 cpu 내의 페이지 테이블 베이스 레지스터는 각 프로세스의 페이지 테이블이 적재된 주소를 가리키고 있다.
작동원리
1. 프로세스가 메모리에 접근하려고 할 때, 가상 주소가 생성된다.
2. 이 가상 주소는 페이지 번호와 오프셋으로 분리된다.
3. 페이지 번호는 페이지 테이블을 통해 해당하는 물리 페이지 프레임 번호로 변환된다.
4. 물리 페이지 프레임 번호와 오프셋이 합쳐져 실제 물리 주소가 완성된다.
5. 이렇게 변환된 물리 주소를 통해 메모리에 접근이 이루어진다.
TLB
- 페이지 테이블을 메모리에 두면 메모리에 있는 페이지 테이블을 위해 한법 프레인에접근하기 위해 한번 통 두번 접근이 필요한데 이는 메모리 접근 시간은 두배로 늘린다는 문제를 야기한다. 이를 해결해기 위해 CPU 곁에 TLB라는 캐시 메모리를 두어 해결한다.
- TLB 페이지는 테이블의 일부 내용을 저장하는데 이는 참조지역성에 근거에 가져와 저장한다.
- CPU에 발생한 논리 주소에 페이지 번호가 있을 경우 이를 TLB히트 그렇지 않은경우 TLB미스 라고 한다.
페이지 테이블 엔트리
페이지들의 각가의 행을 페이지 엔트리 라고 부른다.
페이지 엔트리는 페이지 번호,프레임 번호,유효 비트,보호 비트,참조 비트, 수정 비트 등으로 이루어져 있다.
유효 비트
현재 해당 페이지에 접근이 가능한지 여부를 알려준다. 페이지가 메모리에 적재 되어 있다면 유효비트가 1 보조 기억장치에 있으면 0이 됩니다.
보호 비트
페이지에 대한 권한을 나타 낸다 읽고 쓰기가 가능한페이지 인지 혹은 읽기만 가능한 페이지 인지 나타낼 수 있다.
참조 비트
cpu가 페이지에 접근한 적이 있는지 여부를 나타낸다.
수정 비트
해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부를 알려준다. 더티 비트라고도 불린다,
이는 페이지 아웃 되면서 보조기억장치에 쓰기 작업을 해야될지 할 필요가 없는지를 판단하기 위해 존재한다.
요구 페이징
- 프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재한느 기법을 요구 페이지라고 한다.
- 요구 페이징 시스템이 한정적으로 작동하기 위해선 페이지 교체와 프레임 할당이 해결되어야 한다.
페에지 교체 알고리즘
페이지 폴트를 가장 적게 일으키는 알고리즘을 통해 성능을 올릴 수 있다.
FIFO 페이지 교체 알고리즘
- 메모리에 가장 먼저 올라온 페이지부터 내쫓는 방식의 알고리즘
- 구현이 매우 간단하다
- 예측 가능한 동작 방식을 가진다
Second-Chance 페이지 교체 알고리즘
- FIFO 알고리즘의 변형으로 각 체이지에 참조 비트를 추가하여 최근에 사용된 페이지를 좀더 포호할 수 있는 알고리즘
LRU (Least Frequently Used)
- 가장 최근에 사용되지 않은 페이지를 제거하는 알고리즘
- 페이지의 최근 사용 시간을 계속 추적해야 하므로 오버헤드가 발생 할 수 있다.
- 하드웨어 지원이 없으면 구현이 복잡해질 수 있다.
OPT(Optimal)
- 가장 이성적인 상황을 가정한 알고리즘
- 미래의 페이지가 얼마나 자주 사용될지를 정확하게 알고 있다면 가장 나중에 사용될 페이지를 제거하는 것이 최선의 선택이나 실제로는 구현하기 거의 불가능한 알고리즘
NRU(Not Recently used)
- 페이지가 최근에 참조됭있는지 수정되었는지에 따라 나누어 가장 적게 사용된 페이지를 제거하는 알고리즘
LFU(Least Frequently Used)
- 각 페이지가 얼마나 자주 접근되는지를 계수로 유지하여 가장 적게 접근된 페이지가 제거되는 알고리즘
- 페이지의 사용 빈도를 정확히 추적한다.
- 초기에 사용되었던 페이지가 계속 메모리에 남을 수 있다.