[운영체제] 가상메모리

su_y2on·2022년 10월 19일
0

CS

목록 보기
7/9
post-thumbnail

가상메모리

가상 메모리

비연속 메모리할당에서 필요한 기법


비연속 메모리할당

비연속 메모리할당은 프로세스에서 필요한 부분들만 메모리에 올리는 방법인데 이때 가상주소(논리주소)를 사용한다. 이는 연속적으로 메모리를 할당받은 것처럼 사용할 수 있는 주소이다. 따라서 가상주소와 물리주소의 매핑이 중요하다.




Paging System

프로그램같은 크기의 블록으로 분할한다. 이를 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로 가기전 캐시로 사용한다.

    1. TLB에 있다면 residence bit 조사후 PFN번호를 이용해서 메모리 접근
    2. TLB에 없다면 PMT로가서 residence bit 조사후 PFN확인한 뒤 해당 entry TLB에 적재
    3. 어디든 residence bit 0이면 swap device가서 메모리에 올린 뒤 PMT에 반영하고 해당 entry TLB에도 반영




Segmentation System

프로그램을 논리적인 block으로 분할하는 방법이다. 따라서 block의 크기가 다를 수 있다. 따라서 내부단편화는 일어나지 않지만 외부단편화가 일어난다. 여기서 논리적이라는 것은 heap, stack..등등 같은 의미를 가지고 있는 부분들 끼리 나누는 것을 의미한다.

이 방법은 메모리를 미리 분할하지 않는다. segment를 적재시에 크기에 맞추어 분할 후 적재한다.

주소매핑
VA = (s,d) (segment number, offset)

  1. s를 보고 SMT에서 세그먼트 번호에 맞는 entry를 찾는다.
  2. block마다 크기가 다르기 때문에 limit라는 길이 제한이 있다.
  3. limit와 offset을 비교해서 offset이 크다면 overflow
  4. residence bit가 0이면 swap device에서 메모리로 적재하고 SMT갱신
  5. 물리주소 base + offset로 접근




Hybrid System

paging과 segmntation의 장점을 결합한 방법으로 먼저 각각 논리단위로 나눈뒤 다시 그 안에서 Page로 나눈다.

주소매핑
각 프로세스마다 하나의 SMT, 하나의 segment마다 PMT를 가진다. 따라서 memeory에 부담이 간다. SMT에는 resident bit가 없고 PMT address가 들어있다.

VA = (s, p, d) (segment number, page number, offset)

  1. s를 보고 SMT에서 entry를 찾는다.
  2. 해당 entry에서 PMT address a를 얻는다
  3. a에서 시작해서 p번째 entry를 찾아간다
  4. 해당 entry에서 PFN인 p'를 얻는다.
  5. p' * pagesize + d로 메모리에 접근한다.

이 방법으로 page sharingprotection이 쉬워지고 메모리 할당 및 관리 overhead도 적게 가져갈 수 있다. 외부단편화는 일어나지 않는다. 하지만 메모리 소모가 크고 매핑과정이 복잡하다. 그리고 메모리 접근 횟수가 늘어나서 성능이 저하될 수 있음.

0개의 댓글