Cute Running Puppy

cs/[OS] 혼자 공부하는 컴퓨터 구조 + 운영체제

[혼공컴운] chapter 14. 가상 메모리

R.silver 2024. 2. 15. 14:05
반응형

14-1. 연속 메모리 할당 

- 연속 메모리 할당: 프로세스에 연속적인 메모리 공간을 할당하는 것 

 

스와핑

현재 실행되지 않는 프로세스를 쫓아내고 생긴 빈 공간에 다른 프로세스를 적재하여 실행하는 방식 

- 스왑 영역: 프로세스들이 쫒겨나는 보조기억장치의 일부 영역

- 스왑 아웃: 현재 실행되지 않는 프로세스가 스왑 영역으로 옮겨지는 것 

- 스왑 인: 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것 (이전과 다른 메모리 주소에 적재될 수 있음)

 

-> 실제 메모리 크기보다 요구하는 메모리가 클 때 활용 가능 

스와핑
메모리 할당

 

  • 최소 적합
    • 적재할 수 있는 공간을 발견하면 바로 그 공간에 프로세스 배치 
    • 검색 최소화, 빠른 할당 
  • 최적 적합
    • 적재할 수 있는 공간 중 가장 작은 공간에 프로세스 배치 
  • 최악 적합 
    • 적재할 수 있는 공간 중 가장 큰 공간에 프로세스 배치 

외부 단편화 

프로세스를 연속으로 할당 할 때 생기는 문제 

프로세스 외부에 생기는 빈 공간 (적재할 프로세스의 크기보다 작아 적재가 불가능) -> 메모리 낭비

 

  • 해결 방법 
    • 1. 메모리 압축 (메모리 조각 모음) : 여기저기 흩어져 있는 공간을 하나로 모으는 방식 
      • 많은 오버헤드, 시스템 중지 
    • 2. 페이징/세그멘테이션 기법 

14-2. 페이징을 통한 가상 메모리 관리 

실행할 프로그램의 일부만 메모리에 적재하여 실제 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술 

 

페이징이란

메모리와 프로세스를 일정한 단위로 자르고, 메모리에 불연속적으로 할당하는 방식

  • 페이지
    • 프로세스의 논리 주소 공간을 일정한 크기로 자른 것 
  • 프레임
    • 메모리의 주소 공간을 페이지 크기로 자른 것 

=> 프로세스를 페이지 단위로 자르고, 메모리를 프레임 단위(페이지와 동일)로 자르고 

페이지를 프레임에 할당하는 방식  

 

프로세스 전체가 스와핑 되는 것이 아니라 페이지 단위로 스와핑된다 

 

페이지 테이블

물리 주소에 불연속적으로 배치되더라도 논리 주소에는 연속적으로 배치되도록 사용하는 테이블 

페이지 번호와 프레임 번호를 짝지어 주는 테이블

-> 페이지가 어디에 적재되었는지 찾을 수 있음 

  • 페이지 테이블 베이스 레지스터 (PTBR)
    • 페이지 테이블이 적재된 메모리 공간을 담은 레지스터 
      페이지 프레임 레지스터
  • TLB
    • 페이지 테이블 캐시 
    • 페이지 테이블의 일부를 참조 지역성에 근거하여 저장 
    • 페이지 테이블을 메모리에 두었을 때 메모리 접근 시간이 두 배로 늘어나는 것을 막는 방법 (1. 페이지 테이블 보기, 2. 프레임 접근하기)
  • TLB 히트
    • 발생한 논리주소에 대한 페이지 번호가 TLB에 있을 경우 
    • 메모리에 접근하지 않아도 된다 
  • TLB 미스 
    • TLB에 페이지 번호가 없어 메모리 내의 페이지 테이블에 접근하는 경우

내부 단편화

페이지 크기 보다 프로세스가 작을 때 나타나는 메모리 낭비 

항상 페이지 크기보다 작은 크기로 발생

 

페이징에서의 주소 변환 

 

1. 접근하고자 하는 페이지/프레임

2. 해당 주소가 얼마나 떨어져 있는지

특정 주소에 접근하려면 이 두 가지 정보가 필요함 

 

  • 페이지 번호
    • 접근할 페이지 번호
    • 어떤 프레임에 할당 되었는지 알 수 있음 
  • 변위
    • 접근 주소가 프레임의 시작 번지로부터 얼마나 떨어져 있는지 

=> 논리 주소 <페이지 번호, 변위> -> 물리 주소 <프레임 번호, 변위>로 변환 

 

프레임 번호 시작 주소 + 변위 => 실제로 적재되어 있는 공간 

 

페이지 테이블 엔트리

페이지 테이블의 각각의 행동

  • 유효 비트
    • 해당 페이지 접근 가능 여부 제공 
    • 0: 적재 x, 1: 적재 o
    • 페이지 폴트 : 적재되어 있지 않은 페이지로 접근할 때 발생하는 예외 
      • 인터럽트와 유사한 방식으로 처리
  • 보호 비트
    • 읽고 쓰기 가능 여부 제공
    • rwx
  • 참조 비트 
    • cpu가 접근한 적 있는지 여부 제공 
    • 1: 접근 한 적 있음, 0: 접근한 적 없음 
  • 수정 비트 (더티 비트)
    • 해당 페이지에 데이터를 쓴 적이 있는지 
    • 1: 변경 된 적 있음, 0: 변경된 적 없음 
    • 페이지가 메모리에서 사라질 때 보조기억장치에 쓰기 작업을 해야 하는지 알려주는 역할 

14-3. 페이지 교체와 프레임 할당

 

요구 페이징

필요한 페이지만을 메모리에 적재하는 기법 

 

1. cpu 가 특정 페이지에 접근하는 명령어 실행 

2. 해당 페이지가 현재 메모리에 있을 경우 cpu는 페이지가 적재된 프레임에 접근한다 

3. 해당 페이지가 현재 메모리에 없을 경우 페이지 폴트가 발생한다 

4. 페이지 폴트를 처리한다 (해당 페이지를 메모리로 적재하고, 유효 비트를 1로 설정한다)

5. 1번 부터 다시 수행한다 

 

  • 순수 요구 페이징
    • 아무런 페이지도 메모리에 적재하지 않고 실행부터 하는 것 
    • 첫 명령어 부터 페이지 폴트 발생 
    • 적재 이후로는 페이지 폴트 발생 빈도가 낮아짐 

페이지 교체 알고리즘

  • 실행할 페이지를 담을 공간을 만들기 위해 기존의 페이지를 보조기억장치로 내보낼 때 사용 
  • 찾아낼 페이지를 결정하는 방법 

페이지 폴트를 적게 일으킬수록 좋은 알고리즘 

 

  • 페이지 참조열
    • 페이지 폴트 횟수를 알 수 있는 정보 
    • cpu가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지열 
    • 2 2 2 3 5 5 3 3 7 -> 2 3 5 3 7

FIFO 페이지 교체 알고리즘

메모리에 가장 먼저 올라온 페이지부터 내쫓는 방식

FIFO 페이지 교체 알고리즘

프로그램 내내 사용할 페이지이지만 먼저 적재되어 쫓아내면 좋지 않다

-> 2차 기회 페이지 교체 알고리즘 

    FIFO 방식에 참조비트를 사용하여 기회를 한 번 더 주는 방식 

 

최적 페이지 교체 알고리즘

CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘

 

오래 남아야 할 페이지: 자주 사용될 페이지 

오랫동안 사용되지 않을 페이지: 자주 사용되지 않을 페이지 

-> 오랜 기간 머물렀다고 내쫓는 것은 비합리적

최적 페이지 교체 알고리즘

 

가장 낮은 페이지 폴트율을 보장함 

그러나 실제 구현이 어렵다 (앞으로 사용하지 않을 페이지를 고려하기가 불가능에 가까움)

 

LRU 페이지 교체 알고리즘

가장 오랫동안 사용되지 않은 페이지를 교체하는 알고리즘 

LRU 페이지 교체 알고리즘

 

 

 

스래싱과 프레임 할당

 

페이지 폴트가 자주 발생하는 이유 

1. 나쁜 페이지 교체 알고리즘 

2. 프로세스가 사용할 수 있는 프레임 수가 적을 때 

 

스래싱

페이징에 소요되는 시간이 프로세스가 실제 실행되는 시간보다 커 성능이 저해되는 문제

  • 멀티프로그래밍의 정도 
    • 메모리에서 동시에 실행되는 프로세스의 수 

 

  • 프레임 할당 방식
    • 프로세스들이 무리없이 실행될 수 있는 최소한의 프레임 수를 파악하여 할당하는 방식 
    • 균등 할당 (정적 할당) 
      • 모든 프로세스에게 동일한 개수의 프레임을 할당 
    • 비례 할당 (정적 할당) 
      • 프로세스의 크기에 비례하여 프레임을 할당
    • 작업 집합 모델 (동적 할당)
      • 프로세스가 일정 기간 동안 참조한 페이지 집합 (작업 집합)을 기억하여 프레임 할당 
    • 페이지 폴트 빈도
      • 페이지 폴드율이 높으면 해당 프로세스는 너무 적은 프레임을 가지고 있는 것 (폴트의 상한과 하한을 정함)
      • 해당 내용을 기반으로 프레임 할당 

 

 

 

 

반응형