[운영체제와 정보기술의 원리] 8. 가상 메모리

진예·2024년 1월 16일
0

Operating System

목록 보기
7/8
post-thumbnail

💡 가상 메모리

한정된 메모리 공간여러 프로그램이 조금씩 나누어 사용하는데, 운영체제어떤 프로그램에게 어느 정도의 프로세스를 할당할 것인가?


📒 요구 페이징

당장 사용될 페이지만 메모리에 올리는 방식

  • CPU의 요청이 들어온 후에 페이지메모리에 적재

  • 물리적 메모리의 크기보다 큰 프로그램 실행 가능

  • 페이지 항목 별로 저장된 유효-무효 비트 값을 통해 메모리 내에 해당 페이지의 존재 여부 판별 가능

    • 무효 : 메모리에 올라가있지 않음 (참조 X, 스왑 영역 등) ➡️ 페이지 부재
    • 유효 : 참조를 통해 메모리에 적재


📝 페이지 부재

CPU무효 상태의 페이지를 참조하는 경우, 부재 트랩을 발생시켜 운영체제페이지 부재 처리루틴을 수행하게 된다. 접근 영역을 넘어서거나, 접근 권한을 위반한 경우에는 프로세스를 종료시키고, 올바른 접근인 경우에는 물리적 메모리에서 비어있는 프레임을 할당 받아 해당 페이지를 읽어온다.

이 때, 페이지 부재 처리루틴은 오랜 시간이 소요되므로 해당 루틴을 발생시킨 프로세스는 봉쇄 상태로 전환된다. 이후 완료 인터럽트가 발생하면 유효 상태가 되어 봉쇄되었던 프로세스를 준비 큐로 이동시킨다. 이러한 이유로 페이지 부재가 적게 발생할 수록 요구 페이징의 성능은 향상된다.


📝 페이지 교체 알고리즘

페이지 부재로 인해 페이지를 읽어올 때, 메모리에 자리가 없는 경우 메모리에 올라와 있는 페이지 중 하나를 디스크로 쫒아내 메모리에 빈 공간을 확보하는 작업

교체 알고리즘 : 메모리에 올라와 있는 페이지 중, 어떤 페이지를 쫓아낼 것인지 결정 ➡️ 페이지 부재율 최소화가 목적!

  1. CPU가 A5 페이지를 참조
  2. 해당 페이지가 무효 상태임을 확인
  3. 메모리에 올라가 있는 페이지 중, B3 페이지를 스왑 영역에 내려놓음
  4. 해당 페이지를 무효 상태로 전환
  5. A5 프레임을 메모리에 적제
  6. 해당 페이지를 유효 상태로 전환

✔️ 최적 페이지 교체

가장 먼 미래에 참조될 페이지를 교체

: 미래에 어떤 페이지가 어떠한 순서로 참조될지 알고 있다는 전제 하에 운영

페이지 부재 횟수 : 6회

  1. 1
  2. 2
  3. 3
  4. 4 : 초기에는 메모리가 비어있기 때문에, 모든 페이지에 대해 부재가 발생
  5. 5 ↔ 이후 1 2 3 4 순서로 참조하므로, 4
  6. 4 ↔ 해당 페이지 이후의 참조 계획이 없으므로 임의로 1

✔️ 선입선출

가장 먼저 올라온 페이지를 교체

페이지 부재 횟수 : 10회

  1. 1
  2. 2
  3. 3
  4. 4
  5. 51
  6. 12
  7. 23
  8. 34
  9. 45
  10. 51

✔️ LRU 알고리즘

시간 지역성에 근거하여, 가장 오래 전에 참조된 페이지를 교체

시간 지역성 : 가장 최근에 참조된 페이지일수록, 미래에 참조될 가능성이 높다.

페이지 부재 횟수 : 8회

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5 ↔ 이전에 3 4 1 2 순서로 참조되었으므로 3
  6. 3 ↔ 이전에 4 5 1 2 순서로 참조되었으므로 4
  7. 4 ↔ 이전에 5 1 2 3 순서로 참조되었으므로 5
  8. 5 ↔ 이전에 1 2 3 4 순서로 참조되었으므로 1

✔️ LFU 알고리즘

과거에 참조 횟수가 가장 적었던 페이지를 교체

  • Incache-LFU : 메모리에 올라온 후부터 참조 횟수 카운트 ➡️ 쫓겨났다가 다시 들어오면 1부터 시작

  • Perfect-LFU : 메모리에 올라온 여부에 상관없이, 과거의 총 참조 횟수


✔️ 클럭 알고리즘

LRU를 근사시킨 알고리즘 : 오랫동안 참조되지 않은 페이지 중 하나를 교체 = 2차 기회 알고리즘

클럭 알고리즘은 페이지가 참조되었을 때 참조비트1로 설정하고, 참조된 프레임들을 원형으로 배치한다. 하드웨어시곗바늘이 돌듯이 참조 페이지의 참조비트를 하나씩 조사한다.

이 때, 참조비트1인 페이지는 0으로 바꾼 후 지나치고, 0인 페이지를 발견하면 해당 페이지는 한 바퀴 돌면서 조사하는 동안 도는 교체되지 않았다는 뜻이므로 해당 페이지를 교체한다. 그 사이에 참조되었다면, 0으로 바뀌었던 참조비트가 1으로 바뀌었을 것이다.


📝 페이지 프레임 할당

시스템 성능 향상을 위해, 효율적으로 메모리를 할당해야 한다.

  • 균등 할당 : 모든 프로세스에게 균일한 크기의 페이지 프레임 할당

  • 비례 할당 : 프로세스의 크기에 비례한 크기의 페이지 프레임 할당

  • 우선순위 할당 : 프로세스의 우선순위에 따른 크기의 페이지 프레임 할당


📝 전역 & 지역 교체

교체 대상이 될 프레임의 범위

  • 전역 교체 : 모든 페이지 프레임이 교체 대상

  • 지역 교체 : 현재 수행 중인 프로세스에게 할당된 프레임 내에서만 교체 대상 선정


📝 스레싱 (thrasing)

페이지 부재율이 크게 상승하여 CPU 이용률이 급격하게 떨어지는 현상

  • MPD : 다중 프로그래밍의 정도

메모리에 올라와 있는 프로세스의 수가 너무 적은 경우, CPU의 이용률이 낮아져 운영체제의 MPD가 높아진다. 이렇게 되면, 프로세스에게 할당되는 메모리의 양이 지나치게 감소하여 프로세스 하나가 원활하게 수행되기 위한 최소한의 프레임조차 할당받지 못하게 된다.

이로 인해 페이지 교체가 빈번하게 발생하게 되고, 해당 프로세스는 봉쇄되어 다른 프로세스에게 CPU가 넘어가게 되는데 해당 프로세스마저 페이지 부재가 발생하여 페이지 교체를 수행하게 되면 CPU처리할 수 있는 프로세스가 없어 CPU의 이용률이 감소하게 된다.

이처럼, 메모리 내에 존재하는 프로세스의 수를 증가시키면 CPU 이용률도 그에 비례하여 증가하다가, 특정 수준을 넘어서게 되면 스레싱이 발생하여 급격하게 떨어지게 된다.

이를 방지하기 위해, 워킹셋 알고리즘페이지 부재 빈도 알고리즘을 사용할 수 있다.

✔️ 워킹셋 알고리즘

집중적으로 참조되는 페이지들의 집합워킹셋한꺼번에 메모리에 올라갈 수 있는 경우에만 해당 프로세스에게 메모리를 할당

: 워킹셋의 크기할당 가능한 프레임의 수보다 경우, 메모리 내의 일부 프로세스스왑 아웃시켜 워킹셋 내의 모든 페이지가 메모리에 모두 적재됨을 보장한다.

✔️ 페이지 부재 빈도 알고리즘

페이지 부재율상한값하한값을 정해놓고, 프로세스의 페이지 부재율을 주기적으로 조사하여 상한값을 넘는 프로세스에게는 추가 프레임을 할당하고, 하한값 이하로 떨어지는 프로세스에 할당된 프레임 수를 감소

profile
백엔드 개발자👩🏻‍💻가 되고 싶다

0개의 댓글