OS? Oh Yes! 책을 바탕으로 학습한 내용입니다.
가상메모리는 제한된 크기의 메모리를 다양한 프로세스들이 분할, 적재, 반납을 통해서 실제의 크기보다 더 크게 활용할 수 있도록 하는 방법이다.
모든 프로세스를 같은 크기의 조각들로 나눈다. 그 조각들을 페이지라고 하며 메모리 또한 페이지와 같은 크기로 나누며 프레임이라고 한다. 페이징 테이블은 메모리의 커널에 존재한다.
기본적인 페이징 시스템에서의 진행
TLB(Translation Lookaside Buffer)
고속 캐시의 일종으로 주소값이 아닌 키 값으로 찾고자하는 워드에 동시 접근한다. 최근에 빈번하게 접근한 엔트리들을 TLB에 저장함으로써 페이지 테이블을 참조하지 않고 빠르게 맵핑이 가능하다.
위의 기본적인 페이징 시스템에서의 진행 과정에서 페이징 테이블을 살펴보기 전에 TLB를 먼저 살펴본다. TLB에 존재하는 엔트리들은 최근 접근했던 것들이기에 메모리에 모두 적재되어있다. 따라서 TLB에 있는 엔트리들은 존재 비트를 가지지 않는다.
페이지의 보호
페이지의 공유
페이징 테이블의 구성
페이징은 대부분의 시스템에서 채택하고 있는 방식이지만 마지막 페이지는 내부 단편화가 있을 수 밖에없다.
논리적인 단위별로 프로그램의 조각을 다른 크기로 나누어 메모리 관리를 수행한다. 세그먼트 테이블의 엔트리는 존재 비트, 세그먼트의 길이, 실주소, 접근 제어 키 등으로 구성되어있다. 페이징과 다르게 실주소를 계산하는데 쓰이는 프레임 번호를 저장하는 것이 아니라 실주소를 저장하고 있다.
모든 과정은 페이징과 동일하게 진행되지만 논리적인 단위별로 나누어 분할의 크기가 다르기 때문에 외부 단편화가 발생한다.
세그먼트의 보호와 공유
페이징을 사용하는 세그먼테이션
페이징과 세그먼테이션의 장점을 함께 가지기 위한 기법으로 세그먼트를 다시 페이지로 쪼개는 것이다. 맵핑을 위한 테이블의 크기가 커지고 실주소로의 접근까지 메모리 접근이 더 요구되는 단점이 있다.