가상메모리
비연속 메모리할당에서 필요한 기법
비연속 메모리할당은 프로세스에서 필요한 부분들만 메모리에 올리는 방법
인데 이때 가상주소
(논리주소)를 사용한다. 이는 연속적으로 메모리를 할당받은 것처럼
사용할 수 있는 주소이다. 따라서 가상주소와 물리주소의 매핑
이 중요하다.
프로그램
을 같은 크기
의 블록으로 분할한다. 이를 page
라고 부르며 메모리
공간도 이와 같은 크기로 분할하여 page frame
이라고 부른다.
특징
일정크기로 분할
하기 때문에 힙, 스택, 데이터..등등 경계를 무시하고 분할내부단편화
는 발생할 수 있음. 주소매핑
VA(가상주소) = (p,d) (p는 페이지 넘버, d는 offset)와 PMT을 가지고 매핑한다.
직접사상
PMT는 커널안에 저장해놓는다
1. b + p entrysize로 PMT에서 해당하는 entry찾는다.
2. 만약 해당 entry의 residence bit가 0이라면 page fault를 내고 보조기억장치에서 메모리로 올린뒤 PMT 갱신
3. 찾은 entry에서 page frame number를 획득한다.
3. 이 PFN pagesize + d로 메인메모리에서 위치를 찾는다.
4. 메인메모리에 접근한다.
이 방법의 문제는 PMT가 메모리에 있기 때문에 메모리 접근
이 두번씩 일어난다는 것이다. 해결방안은 TLB를 사용하는 방법이다.
간접사상
TLB
는 HW로 병렬검색등 속도가 매우 빠르기 때문에 이를 PMT로 사용하면 직접사상의 문제를 해결할 수 있다. 하지만 비싸다.. 과정은 위와 비슷하나 페이지 넘버로 바로 병렬탐색을
한다는 점이 다르다. 또한 메인메모리 접근 횟수도 낮출 수 있다.
이 방법의 단점은 바로 비싸다
는 것이다. 따라서 두 방법을 혼용한 해결책이 나온다.
하이브리드
작은 크기의 TLB
를 이용해 PMT로 가기전 캐시
로 사용한다.
프로그램을 논리적인
block으로 분할하는 방법이다. 따라서 block의 크기가 다를 수 있다. 따라서 내부단편화는 일어나지 않지만 외부단편화
가 일어난다. 여기서 논리적이라는 것은 heap, stack..등등 같은 의미를 가지고 있는 부분들 끼리 나누는 것을 의미한다.
이 방법은 메모리를 미리 분할하지 않는다. segment를 적재시에 크기에 맞추어 분할 후 적재한다.
주소매핑
VA = (s,d) (segment number, offset)
paging과 segmntation의 장점을 결합
한 방법으로 먼저 각각 논리단위로 나눈뒤 다시 그 안에서 Page로 나눈다.
주소매핑
각 프로세스마다 하나의 SMT, 하나의 segment마다 PMT를 가진다. 따라서 memeory에 부담이 간다. SMT에는 resident bit가 없고 PMT address가 들어있다.
VA = (s, p, d) (segment number, page number, offset)
이 방법으로 page sharing
과 protection
이 쉬워지고 메모리 할당 및 관리
overhead도 적게 가져갈 수 있다. 외부단편화는 일어나지 않는다. 하지만 메모리 소모
가 크고 매핑과정
이 복잡하다. 그리고 메모리 접근 횟수
가 늘어나서 성능이 저하될 수 있음.