OS

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

noahkim_ 2024. 12. 13. 02:20

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

 

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

 

1. 요구 페이징

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

 

미리 가져오기

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

 

지역성

  • 기억장치에 접근하는 패턴이 특정 영역에 집중되는 성질
지역성 유형 설명
공간 지역성
현재 위치에서 가까운 데이터에 접근할 확률이 높음
시간 지역성
현재를 기준으로 가장 가까운 시간에 접근한 데이터가 다시 접근할 확률이 높음
순차적 지역성 여러 작업이 순서대로 진행되는 경향이 있음

 

페이지 테이블 엔트리 구조

필드 설명
페이지 번호 가상 주소의 페이지 번호
프레임 번호
물리 메모리에서 페이지가 저장된 프레임 번호 (주소 필드)
플래그 비트
페이지의 접근 상태 및 속성을 나타내는 여러 비트들
- 접근 비트 페이지가 사용된 적이 있는지 나타내는 비트
- 변경 비트 페이지가 수정된 적이 있는지 나타내는 비트
- 유효 비트
페이지가 실제 메모리에 존재하는지, 스왑 영역에 있는지를 나타내는 비트
- 0: 페이지가 메모리에 있음 
- 1: 페이지가 스왑 영역에 있음 
- 읽기 비트 페이지가 읽기 가능한지 나타내는 비트
- 쓰기 비트 페이지가 쓰기 가능한지 나타내는 비트
- 실행 비트 페이지가 실행 가능한지 나타내는 비트

 

세그먼테이션 오류

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

 

페이지 부재

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

 

2. 페이지 교체 알고리즘

알고리즘 설명
FIFO
시간상으로 메모리에 가장 먼저 들어온 페이지를 대상 페이지로 선정하여 스왑 영역으로 쫓아냄
최적
미래의 메모리 접근 패턴을 보고 대상 페이지를 결정할 수 있음
LRU
최근 최소 사용 페이지 교체 알고리즘
가장 오랫동안 사용되지 않은 페이지를 스왑 영역에 올림
LFU
최소 빈도 사용 알고리즘
그동안 사용된 횟수를 세어 가장 적은 페이지를 스왑 영역에 옮김
NUR 최근 미사용 페이지 교체 알고리즘

 

성능 평가 기준

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

 

3. 스레싱과 프레임 할당

스레싱

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

 

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

 

프레임 할당

  • 남아 있는 프레임을 실행 중인 프로세스에 적절히 나눠주는 정책
  • 어떻게 프레임을 할당할 지에 관한 이론
할당 방식 설명
정적 할당
프로세스 실행 초기에 고정된 메모리 크기를 나누어주는 방식
- 할당된 메모리는 변경되지 않음
- 사용하지 않을 메모리까지 미리 확보
- 균등 할당
프로세스의 크기와 상관없이 사용 가능한 프레임을 모든 프로세스에 동일하게 할당.
- 비례 할당
프로세스 크기에 비례하여 프레임 할당.
- 실행 중에 필요로 하는 프레임을 유동적으로 반영하지 못함.
동적 할당
실행 중 변하는 요청을 수용하여 동적으로 프레임을 할당하는 방식.
- 작업집합 모델
프로세스에서 가장 최근에 사용된 메모리 블록을 모아두고, 일정한 윈도우 크기 내에서 관리함
- 더 자주 사용되는 데이터는 메모리에 유지
- 페이지 부재 빈도
페이지 부재 횟수를 기록하여 빈도를 기준으로 메모리 할당을 조정
- 상한선, 하한선을 설정하여 초과하거나 밑으로 내려갈 경우 메모리 프레임을 조절함

 

4. 프레임 관련 이슈

전역 교체와 지역 교체

구분 전역 교체 지역 교체
대상 전체 프레임을 대상으로 교체 알고리즘을 적용 실행 중인 프로세스의 프레임들만 대상으로 교체 알고리즘을 적용
영향 범위 물리 메모리의 모든 프레임 대상 현재 프로세스의 프레임만 교체
(다른 프로세스에는 영향을 주지 않음)
교체 기준 참조 비트와 변경 비트가 작은 페이지를 교체 대상으로 선정 자주 사용되는 페이지가 스왑 영역으로 옮겨질 경우 시스템 효율 저하 가능
효율성 다른 프로세스의 페이지를 스왑할 수 있어 효율적일 수 있음 현재 프로세스만 교체하여 효율적
(단, 자주 사용하는 페이지가 교체될 위험 있음)

 

페이지 테이블 크기

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

 

페이지 크기 증가
항목 설명
장점
페이지 테이블 크기가 줄어듬.
- 페이지 크기 증가 시 페이지 테이블 크기 감소 (페이지 테이블 크기 = 페이지 크기 * 페이지 갯수)
단점
페이지 크기 증가 시 내부 단편화로 많은 공간이 낭비될 수 있음

 

쓰기 시점 복사

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

 

변경 시점에 복사
  • 데이터의 변화가 있을 때까지 복사를 미룸
  • 초기에는 코드 영역을 포함한 모든 영역을 공유
  • 실제로 프로세스가 데이터를 수정하려 할 때, 그때 데이터 복사를 진행함