OS

[쉽게 배우는 운영체제] 9. 가상 메모리 관리

noahkim_ 2024. 12. 13. 02:20

조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다

 

가져오기 정책: 프로세스가 필요로 하는 데이터를 언제 메모리로 가져올지 결정

 

1. 요구 페이징

  • 사용자가 요구할 때 해당 페이지를 메모리로 가져오는 것

 

미리 가져오기

  • 앞으로 필요할 것이라고 예상되는 페이지를 미리 가져오는 방식
  • 고속의 캐시 메모리에 가져다놓음으로써 시스템의 성능을 향상시킴

 

페이지 테이블 엔트리의 구조

유효 비트
  • 페이지 테이블에는 페이지가 메모리에 있는지, 스왑영역에 있는지 표시함

 

PTE (Page Table Entry)
  • 페이지 번호
  • 프레임 번호 (주소 필드)
  • 플래그 비트
    • 접근 비트: 사용된 적이 있는지 나타내는 비트
    • 변경 비트: 수정된 적이 있는지 나타내는 비트
    • 유효 비트: 실제 메모리에 있는지 나타내는 비트
      • 0 - 페이지가 메모리에 있음 (주소 필드: 프레임 번호)
      • 1 - 페이지가 스왑 영역에 있음 (주소 필드: 스왑 영역 내 페이지 주소)
    • 읽기, 쓰기, 실행 비트

 

페이지 부재

  • 프로세스가 페이지를 요청했을 떄 그 페이지가 메모리에 없는 상황 (유효비트 - 1)
  • 메모리 관리자는 프로세스가 사용할 수 있도록 스왑 영역에서 물리 메모리로 로드함
    • 메모리에 빈 프레임이 없다면, 기존의 프레임 중 하나를 스왑 영역으로 내보낸 후 로드함
    • 이 때 어떤 페이지를 스왑 영역으로 내보낼지 결정하는 알고리즘을 페이지 교체 알고리즘이라 함

 

세그먼테이션 오류

  • 사용자의 프로세스가 주어진 메모리 공간을 벗어나거나 권한이 없는 곳에 접근

 

지역성

  • 기억장치에 접근하는 패턴이 메모리 전체에 고루 분포되는 것이 아니라 특정 영역에 집중되는 성질

 

공간 지역성
  • 현재 위치에서 가까운 데이터에 접근할 확률이 더 높음

 

시간 지역성
  • 현재를 기준으로 가장 가까운 시간에 접근한 데이터가 또 접근할 확률이 더 높음

 

순차적 지역성
  • 여러 작업이 순서대로 진행되는 경향이 있음

 

2. 페이지 교체 알고리즘

FIFO

  • 시간상으로 메모리에 가장 먼저 들어온 페이지를 대상 페이지로 선정하여 스왑 영역으로 쫒아냄

 

최적

  • 미래의 메모리 접근 패턴을 보고 대상 페이지를 결정할 수 있음

 

LRU

  • 최근 최소 사용 페이지 교체 알고리즘
  • 가장 오랫동안 사용되지 않은 페이지를 스왑 영역에 올림

 

종류
  • 카운터 기반
  • 참조 비트 시프트

 

LFU

  • 최소 빈도 사용 알고리즘
  • 그동안 사용된 횟수를 세어 가장 적은 페이지를 스왑 영역에 옮김

 

NUR

  • 최근 미사용 페이지 교체 알고리즘

 

성능 평가 기준

  • 페이지 부재 횟수
  • 페이지 성공 횟수

 

3. 스레싱과 프레임 할당

  • 프로세스가 메모리를 요청할 경우, 메모리의 사정에 따라 메모리를 할당해줌
  • 어떻게 프레임을 할당할 지에 관한 이론

 

스레싱

  • 하드디스크의 입출력이 너무 많아져서 잦은 페이지 부재로 작업이 멈춘것 같은 상태

 

멀티프로그램 수
  • 동시에 실행하는 프로그램의 수
  • 너무 많으면 스레싱이 발생함

 

프레임 할당

  • 남아 있는 프레임을 실행 중인 프로세스에 적절히 나눠주는 정책이 필요함

 

정적 할당
  • 프로세스 실행 초기에 프레임을 나누어준 후 그 크기를 고정하는 것
  • 사용하지 않을 메모리를 처음부터 확보
  • 균등 할당
    • 프로세스의 크기와 상관없이 사용 가능한 프레임을 모든 프로세스에 동일하게 할당
  • 비례 할당
    • 프로세스 크기에 비례하여 프레임 할당
    • 실행 중에 필요로 하는 프레임을 유동적으로 반영하지 못함

 

동적 할당
  • 실행 중 변하는 요청을 수용하여 동적으로 프레임을 할당하는 방식
  • 작업집합 모델
    • 가장 최근에 접근한 프레임 집합
    • 작업집합 윈도우 사이즈를 정하여 어디까지 최근으로 볼지 정함
  • 페이지 부재 빈도
    • 페이지 부재 횟수를 기록하여 비율을 계산하는 방식
    • 상한선, 하한선을 설정하여 초과하거나 밑으로 내려갈 경우 프레임을 조절함

 

4. 프레임 관련 이슈

1. 전역 교체와 지역 교체

전역 교체
  • 전체 프레임을 대상으로 교체 알고리즘 적용
  • 물리 메모리의 모든 프레임을 대상으로 스왑 영역에 보낼 페이지를 찾음
  • 참조 비트와 변경 비트가 작은 값을 대상 프레임으로 찾음

 

지역 교체
  • 현재 실행 중인 프로세스의 프레임들을 대상으로 교체 알고리즘 적용
  • 자신에게 할당된 프레임의 전체 개수에 변화 없음 (다른 프로세스에 영향 X)
  • 자주 사용하는 페이지가 스왑 영역으로 옮겨질 경우 시스템의 효율이 떨어짐

 

2. 페이지 테이블 크기

32bit CPU
  • 2^32 까지의 공간을 표현할 수 있음 (약 4GB)
  • 하나의 페이지가 4,096Byte일 경우, 페이지 인덱스의 마지막 값은 1,048,575가 됨

 

페이지 테이블의 크기를 줄이기 위해 한 페이지의 크기를 크게 하면 좋음
  • 4GB까지의 크기를 페이지 크기 * 페이지 갯수
    • 페이지 갯수가 줄어야 페이지 테이블 크기가 줄어듬
  • 그러나, 페이지 크기가 커지면 내부 단편화로 인해 낭비되는 공간이 많아짐

 

3. 쓰기 시점 복사

  • 같은 프로세스가 여러개 올라온다면, 프레임을 공유해서 사용하여 효율적으로 쓸 수 있음
  • 프로세스의 code 부분은 공유되지만 (읽기전용)
  • 프로세스의 data 부분은 공유 불가 (내용이 바뀌기 때문)
  • 데이터의 변화가 있을 때까지 복사를 미룸