[운영체제] 10. Virtual Memory(2)

오영선·2022년 7월 20일
0

10.5 프레임의 할당

총 128개의 프레임이 있고, 프로세스가 3개있다면 각 프로세스는 몇 프레임씩 할당 받는가?
운영체제가 35개를 점유하면 나머지 93개는 처음에 가용 프레임 리스트에 들어가게 된다. 93개의 프레임은 페이지 교체, 페이지 스왑을 처리하며 사용자 프로세스에게 할당되어야 한다.(단, 3개는 운영체제 버퍼를 위해 예비로 남겨둔다. 즉, 사용자는 90개를 사용한다)

10.5.1 최소로 할당해야 할 프레임 수

성능때문에 하나의 명령어가 참조하는 모든 페이지는 동시에 메모리에 올라와 있어야 한다.(명령어 재실행 방지)
최소 프레임 수는 컴퓨터 아키텍쳐에 의해 정의된다. 반면 최대 수는 사용 가능한 물리 메모리 양에 의해 정의된다. 우리는 여전히 프레임 할당에 중여한 선택을 해야한다.

10.5.2 할당 알고리즘

균등 할당 : m개의 프레임은 n개의 프로세스에 m/n개 프레임을 분할된다.

비례할당 : 프로세스의 크기 비율에 맞춰 할당한다.

둘 다 다중 프로그래밍 정도에 따라 정도가 높아지면 덜받고, 정도가 낮아지면 넉넉히 받는다. 두 방법 다 우선순위를 고려하지 않고 있다.

비례할당(for 우선순위) : 우선순위가 높은 프로세스에 더 많이 할당한다.

10.5.3 전역 vs 지역 할당

전역교체와 지역 교체 : 전역은 프로세스가 교체할 프레임을 모든 프레임 중에서 찾는다. 지역은 프로세스 내의 프레임에서만 찾는다.

이때 전역교체의 경우 프레임의 수가 늘어날수 있다.(다른 프로세스 프레임 뻇어옴) 한가지 문제점은 이 페이징 동작이 다른 프로세스에 영향을 미쳐 성능에 영향을 준다. (매번 프로세스가 외부환경에 따라 시간이 바뀐다) 다만, 지역교체는 잘 안쓴느 페이지 프레임도 계속 사용해 낭비할 수 있기 떄문에, 일반적으로 전역 교체를 많이 쓴다.

전역 페이지 교체를 구현하는 방법은, 리퍼라고 하는 루틴을 사용한다. 특정 임계값 아래로 가용 리스트 항목 개수가 떨어지면 페이지를 회수하는 커널 루틴이며. 10.4에서 나온 알고리즘 모두 적용이 가능한다.(보통 LRU)

만약 리퍼 루틴으로도 최소 임계값 이상으로 유지가 안된다면? 이때는 FIFO를 사용할 것이다. 그외에도 리눅스에 더 극단적인 예가 있지만 생략하겠다..

복숭아..먹고싶다. . 내일장보러가야지 . ..

10.5.4 비균등 메모리 접근

운영체제 1강에서 NUMA 시스템을 배웠다. 이러한 구조에서 메인메모리는 동등한 접근 시간을 가지지 않는다.어느 페이지를 어떤 프레임에 할당하는 지가 numa 성능에 큰 영향을 미친다. ㅣ런 모든 목표는 프로세스가 실행중인 CPU에 "가능한 가장 가까운" 메모리 프레임이 할당 되어야 한다. 따라서 프로세스가 페이지 폴트를 일으키면 이 NUMA VM시스템은 프로세스 CPU에 최소 지연시간을 가진 프레임을 할당한다.
그렇지만.. 스레드까지 고려하기 시작하면 상황은 더욱 복잡해진다. Solaris는 커널에서 lgroups를 쓰기도하는데 내가 신경쓸 바는 아닌듯함

10.6 Thrashing

프로세스에 "충분한" 프레임이 없는 경우 어떤 일이 발생할까?
페이지 교체가 일어나봤자 이미 활발하게 사용되는 페이지들만 있어 곧바로 또 폴트가 일어날 것이다. 이러한 과도한 페이징 작업을 스레싱이라고 부른다.

10.6.1 스레싱의 원인

  1. 지나친 다중 프로그래밍

    그림 10.20) 다중 프로그래밍 정도에 따른 CPU 이용률

다중 프로그래밍 정도가 높아지면 CPU 이욜률도 높아진다. 최댓값 이후로는 스레싱이 일어나고, CPU이용률은 급격히 낮춰야 한다. 다중 프로그래밍 정도를 낮춰야 하는 상황.
스레싱을 막기 위한 방법으로 지역교체 알고리즘을 쓸 수 있다.(자기꺼만 쓰니까) 그러나 문제가 완전히 해겨되지는 않는다. 프로세스가 스레싱 하는 경우 대부분 페이징 장치의 큐에서 기다리게 된다. 페이징 장치의 평균 대기열이 길어지면 페이지 폴트 시간도 길어져 스레싱되지 않은 프로세스도 느려진다.4
즉, 자기만 스레싱 일어나도 전체적으로 성능이 떨어진다는 소리인듯

스레싱 현상을 방지하려면 각 프로세스가 최소한의 프레임 개수를 가지면 된다
이걸 어떻게 알아? -> locality model
프로세스가 실행될때 항상 어떤 특정 지역 메모리를 집중적으로 참조한다는 특성을 이용한다.

필요로 하는 지역성의 크기보다 적은 프레임을 할당하게 되면, 지속적인 스레싱이 일어날 수 있다.

10.6.2 작업 집합 모델

지역성을 토대로, 프로그램 지역성의 근사값을 이용해 최근 00범위만큼의 페이지 참조를 관찰해 작업 집합에 넣고, 마지막 참조로부터 00만큼의 참조 후에는 자겁 집합에서 제외된다.

10.6.3 페이지 폴트 빈도

보다 직접적으로 스레싱을 조절한다.

스레싱의 빈도에 따라 프레임을 동적으로 할당하는 것이다. 만약 줄 프레임이 없으면, 희생자 프로세스를 예비 저장장치로 스왑아웃하기도 한다.

10.6.4 현재 관행

최선책 : 충분한 물리 메모리 장착하기(당연한소리)

10.7 메모리 압축

페이징의 대안으로 메모리 압축이 있다. 여러 프레임을 하나의 프레임으로 압축하는 방법이다. 페이징없이도 메모리 사용량을 줄이고자 사용한다.
모바일 시스템은 일반적으로 스와핑을 지원하지 않아서 이 방법을 핵심 전략으로 사용한다.

10.8 커널 메모리의 할당

사용자 모드의 프로세스가 추가 메모리를 요구하면 커널의 가용프레임을 내어준다.

커널 메모리는 사용자의 페이지 리스트와 달리 메모리 풀에서 할당받는다.

왜??
1. 커널은 다양한 크기의 자료구조를 가진다. 메모리를 조심히 사용하고 낭비를 최소화하기 위해 데이터를 페이징 하지 않는다.
2. 사용자 프로세스에 할당될 페이지는 물리 메모리에서 굳이 연속적일 필요 없다. 그러나 물리 메모리에 직접 접근하는 특정 하드웨어장치는 물리적으로 연속적인 메모리가 필요할 때가 있다.

10.8.1 버디 시스템

물리적으로 연속된 페이지들로 이루어진 고정된 크기의 세그먼트(버디)로부터 메모리를 할당한다.

장점 " 합병이라고 부르는 과정을 통해 인접한 버디들이 손쉽게 하나의 큰 세그먼트로 합쳐질 수 있다.
단점 : 33kb요청했는데 64kb를 주는 낭비가 있다.

10.8.2 슬랩 할당

슬랩은 하나또는 그 이상으로 연속된 페이지로 구성된다. 캐시는 하나혹은 그 이상의 슬랩으로 구성된다.

장점 ; 1) 단편화로 낭비되는 메모리가 없다. 정확히 필요한 만큼의 메모리를 할당한다.
2) 메모리 요청이 빠르게 처리된다.
사실이해못했다.

10.9 기타 고려 사항

  1. 프리 페이징
  2. 페이지 크기
  3. TLB Reach
  4. 역 페이지 테이블
  5. 프로그램 구조
  6. I/O상호 장금, 페이징 잠금

다들 한번씩 읽어오기로 하자(난 안읽음)

0개의 댓글