상세 컨텐츠

본문 제목

[정보처리기사 실기 공부] 가상기억장치

정보처리기사 공부지식

by 소란한소란 2024. 6. 12. 21:01

본문

728x90

가상 메모리 이해: 개념 및 관리

가상 메모리는 시스템이 저장소(예: 하드 디스크)의 일부를 주 메모리(RAM)인 것처럼 사용할 수 있도록 하는 현대 컴퓨팅의 기본 개념입니다. 이 접근 방식은 물리적으로 사용 가능한 것보다 더 많은 RAM을 시뮬레이션하여 더 큰 작업 부하와 멀티태스킹을 처리하는 시스템 기능을 크게 향상시킵니다.


가상기억장치

  • 개념
    • 보호기억장치(하드디스크)의 일부를 주기억장치처럼 사용하는 것

블록 분할 방법 (★)

  • 페이징(Paging) 기법
    • 가상기억장치를 모두 같은 크기의 블록으로 편성하여 운용하는 기법

프로그램 - 페이지 / 메모리 영역 - 프레임

페이지 크기별 비교

페이지 크기 기억장소 효율 단편화 입출력 시간 맵 테이블
클수록 감소 증가 감소 감소
작을수록 증가 감소 증가 증가

 

  • 세그먼테이션(Segmentation) 기법
    • 가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할하고 메모리를 할당하는 기법

세그먼트 테이블과 프로세스가 할당된 메모리

가상기억장치 기타 관리사항 (★)

  • 페이지 부재
    • 프로세스 실행 시 참조할 페이지가 주기억장치에 없는 현상
  • 지역성(Locality)
    • 프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질
    • 지역성의 종류
시간 구역성 (Temporal Locality) 프로세스가 실행되면서 하나의 페이지를 일정 시간 동안
집중적으로 액세스하는 현상
공간 구역성 (Spatial Locality) 프로세스 실행 시 일정 위치의 페이지를 집중적으로
액세스하는 현상

 

  • 워킹 셋(Working Set)
    • 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합
  • 스래싱(Thrashing) (★)
    • 프로세스의 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상

페이지 교체 알고리즘 (★)

  • FIFO (First In First Out)
    • 가장 먼저 메모리에 적재된 페이지를 먼저 교체하는 기법
  • OPT(Optimal replacement, 최적 교체)
    • 앞으로 가장 사용되지 않을 페이지를 교체
  • LRU (Least Recently Used)
    • 최근에 가장 오랫동안 사용되지 않은 페이지를 교체
  • LFU (Least Frequently Used)
    • 사용 빈도가 가장 적은 페이지를 교체
  • NUR (Not Used Recently)
    • 최근의 사용여부를 확인하기 위해 각 페이지마다 두 개의 비트 사용
    • 참조비트와 변형비트를 이용해서 페이지 교체
  • SCR(Second Chance Replacement)
    • 가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 것으로,FIFO 기법의 단점을 보완하는 기법

페이지 교체 알고리즘 예제

  • FIFO (First In First Out) 
    • 다음은 메모리 프레임이 3개인 시스템에서 FIFO 알고리즘을 사용하는 예제입니다.
    • 페이지 참조 스트림이 다음과 같다고 가정하겠습니다. ( 7, 0, 1, 2, 0, 3, 0, 4, 2, 3 )
  •  페이지 참조메모리 프레임
페이지 참조 메모리 프레임 상태 페이지 폴트
7 [7, -, -] 폴트 발생
0 [7, 0, -] 폴트 발생
1 [7, 0, 1] 폴트 발생
2 [2, 0, 1] 폴트 발생
0 [2, 0, 1] 없음
3 [2, 3, 1] 폴트 발생
0 [2, 3, 1] 없음
4 [4, 3, 1] 폴트 발생
2 [4, 2, 1] 폴트 발생
3 [4, 2, 3] 폴트 발생

 

  • 설명
  1. 페이지 7 참조:
    • 메모리 프레임이 비어있기 때문에 7을 추가합니다. (폴트 발생)
    • 상태: [7, -, -]
  2. 페이지 0 참조:
    • 0을 메모리에 추가합니다. (폴트 발생)
    • 상태: [7, 0, -]
  3. 페이지 1 참조:
    • 1을 메모리에 추가합니다. (폴트 발생)
    • 상태: [7, 0, 1]
  4. 페이지 2 참조:
    • 메모리가 가득 찼으므로 가장 오래된 페이지인 7을 교체합니다. (폴트 발생)
    • 상태: [2, 0, 1]
  5. 페이지 0 참조:
    • 0은 이미 메모리에 있으므로 교체할 필요가 없습니다. (폴트 없음)
    • 상태: [2, 0, 1]
  6. 페이지 3 참조:
    • 가장 오래된 페이지인 0을 교체합니다. (폴트 발생)
    • 상태: [2, 3, 1]
  7. 페이지 0 참조:
    • 0은 메모리에 없으므로, 가장 오래된 페이지인 1을 교체합니다. (폴트 발생)
    • 상태: [2, 3, 0]
  8. 페이지 4 참조:
    • 가장 오래된 페이지인 2를 교체합니다. (폴트 발생)
    • 상태: [4, 3, 0]
  9. 페이지 2 참조:
    • 가장 오래된 페이지인 3을 교체합니다. (폴트 발생)
    • 상태: [4, 2, 0]
  10. 페이지 3 참조:
    • 가장 오래된 페이지인 0을 교체합니다. (폴트 발생)
    • 상태: [4, 2, 3]
  • 결과
    • 총 10개의 페이지 참조 중 8번의 페이지 폴트가 발생했습니다.

  • LRU (Least Recently Used)
    • 다음은 메모리 프레임이 3개인 시스템에서 LRU 알고리즘을 사용하는 예제입니다.
    • 페이지 참조 스트림이 다음과 같다고 가정하겠습니다. ( 7, 0, 1, 2, 0, 3, 0, 4, 2, 3 )
  •  단계별 설명
단계 페이지 참조 메모리 프레임 상태 페이지 폴트 설명
1 7 [7, -, -] 폴트 발생 7을 메모리에 로드
2 0 [7, 0, -] 폴트 발생 0을 메모리에 로드
3 1 [7, 0, 1] 폴트 발생 1을 메모리에 로드
4 2 [2, 0, 1] 폴트 발생 7을 교체 (가장 오래 사용 안함)
5 0 [2, 0, 1] 없음 0은 이미 메모리에 있음
6 3 [2, 0, 3] 폴트 발생 1을 교체 (가장 오래 사용 안함)
7 0 [2, 0, 3] 없음 0을 이미 메모리에 있음
8 4 [4, 0, 3] 폴트 발생 2를 교체 (가장 오래 사용 안함)
9 2 [4, 2, 3] 폴트 발생 0을 교체 (가장 오래 사용 안함)
10 3 [4, 2, 3] 없음 3은 이미 메모리에 있음

 

  • 설명
  1. 페이지 7 참조:
    • 메모리 프레임이 비어 있으므로 7을 추가합니다. (폴트 발생)
    • 상태: [7, -, -]
  2. 페이지 0 참조:
    • 0을 메모리에 추가합니다. (폴트 발생)
    • 상태: [7, 0, -]
  3. 페이지 1 참조:
    • 1을 메모리에 추가합니다. (폴트 발생)
    • 상태: [7, 0, 1]
  4. 페이지 2 참조:
    • 메모리가 가득 찼으므로 가장 오래 사용되지 않은 페이지인 7을 교체합니다. (폴트 발생)
    • 상태: [2, 0, 1]
  5. 페이지 0 참조:
    • 0은 이미 메모리에 있으므로 교체할 필요가 없습니다. (폴트 없음)
    • 상태: [2, 0, 1]
  6. 페이지 3 참조:
    • 가장 오래 사용되지 않은 페이지인 1을 교체합니다. (폴트 발생)
    • 상태: [2, 0, 3]
  7. 페이지 0 참조:
    • 0은 이미 메모리에 있으므로 교체할 필요가 없습니다. (폴트 없음)
    • 상태: [2, 0, 3]
  8. 페이지 4 참조:
    • 가장 오래 사용되지 않은 페이지인 2를 교체합니다. (폴트 발생)
    • 상태: [4, 0, 3]
  9. 페이지 2 참조:
    • 가장 오래 사용되지 않은 페이지인 0을 교체합니다. (폴트 발생)
    • 상태: [4, 2, 3]
  10. 페이지 3 참조:
    • 3은 이미 메모리에 있으므로 교체할 필요가 없습니다. (폴트 없음)
    • 상태: [4, 2, 3]
  • 결과
    • 총 10개의 페이지 참조 중 7번의 페이지 폴트가 발생했습니다.

  • LFU (Least Frequently Used)
    • 다음은 메모리 프레임이 3개인 시스템에서 LFU 알고리즘을 사용하는 예제입니다.
    • 페이지 참조 스트림이 다음과 같다고 가정하겠습니다. ( 7, 0, 1, 2, 0, 3, 0, 4, 2, 3 )
  • 단계별 설명
단계 페이지 참조 메모리 프레임 상태  참조 횟수 페이지 폴트 설명
1 7 [7, -, -] 7: 1 폴트 발생 7을 메모리에 로드
2 0 [7, 0, -] 7: 1, 0: 1 폴트 발생 0을 메모리에 로드
3 1 [7, 0, 1] 7: 1, 0: 1, 1: 1 폴트 발생 1을 메모리에 로드
4 2 [2, 0, 1] 7: -, 0: 1, 1: 1, 2: 1 폴트 발생 7을 교체 ( 가장 적게 사용됨 )
5 0 [2, 0, 1] 7: -, 0: 2, 1: 1, 2: 1 없음 0은 이미 메모리에 있음
6 3 [2, 0, 3] 7: -, 0: 2, 1: 1, 2: 1, 3: 1 폴트 발생 1을 교체 ( 가장 적게 사용됨 )
7 0 [2, 0, 3] 7: -, 0: 3, 1: -, 2: 1, 3: 1 없음 0을 이미 메모리에 있음
8 4 [4, 0, 3] 7: 0, 0: 3, 1: -, 2: 1, 3: 1, 4: 1 폴트 발생 2를 교체 ( 가장 적게 사용됨 )
9 2 [4, 0, 2] 7: -, 0: 3, 1: -, 2: 2, 3: 1,4: 1 폴트 발생 3을 교체 ( 가장 적게 사용됨 )
10 3 [4, 0, 2] 7: -, 0: 3, 1: -, 2: 2, 3: 1, 4: 1 폴트 발생 4를 교체 (가장 적게 사용됨)
  • 설명
  1. 페이지 7 참조:
    • 메모리 프레임이 비어 있으므로 7을 추가합니다. (폴트 발생)
    • 상태: [7, -, -]
    • 참조 횟수: 7: 1
  2. 페이지 0 참조:
    • 0을 메모리에 추가합니다. (폴트 발생)
    • 상태: [7, 0, -]
    • 참조 횟수: 7: 1, 0: 1
  3. 페이지 1 참조:
    • 1을 메모리에 추가합니다. (폴트 발생)
    • 상태: [7, 0, 1]
    • 참조 횟수: 7: 1, 0: 1, 1: 1
  4. 페이지 2 참조:
    • 메모리가 가득 찼으므로 가장 적게 사용된 페이지인 7을 교체합니다. (폴트 발생)
    • 상태: [2, 0, 1]
    • 참조 횟수: 7: -, 0: 1, 1: 1, 2: 1
  5. 페이지 0 참조:
    • 0은 이미 메모리에 있으므로 교체할 필요가 없습니다. (폴트 없음)
    • 상태: [2, 0, 1]
    • 참조 횟수: 7: -, 0: 2, 1: 1, 2: 1
  6. 페이지 3 참조:
    • 가장 적게 사용된 페이지인 1을 교체합니다. (폴트 발생)
    • 상태: [2, 0, 3]
    • 참조 횟수: 7: -, 0: 2, 1: -, 2: 1, 3: 1
  7. 페이지 0 참조:
    • 0은 이미 메모리에 있으므로 교체할 필요가 없습니다. (폴트 없음)
    • 상태: [2, 0, 3]
    • 참조 횟수: 7: -, 0: 3, 1: -, 2: 1, 3: 1
  8. 페이지 4 참조:
    • 가장 적게 사용된 페이지인 2를 교체합니다. (폴트 발생)
    • 상태: [4, 0, 3]
    • 참조 횟수: 7: -, 0: 3, 1: -, 2: 1, 3: 1, 4: 1
  9. 페이지 2 참조:
    • 가장 적게 사용된 페이지인 3을 교체합니다. (폴트 발생)
    • 상태: [4, 0, 2]
    • 참조 횟수: 7: -, 0: 3, 1: -, 2: 2, 3: 1, 4: 1
  10. 페이지 3 참조:
    • 가장 적게 사용된 페이지인 4를 교체합니다. (폴트 발생)
    • 상태: [4, 0, 2]
    • 참조 횟수: 7: -, 0: 3, 1: -, 2: 2, 3: 1, 4: 1
  • 결과
    • 총 10개의 페이지 참조 중 8번의 페이지 폴트가 발생했습니다.

  • NUR (Not Used Recently)
    • 다음은 메모리 프레임이 3개인 시스템에서 NUR 알고리즘을 사용하는 예제입니다.
    • 페이지 참조 스트림이 다음과 같다고 가정하겠습니다. ( 7, 0, 1, 2, 0, 3, 0, 4, 2, 3 )
  • 단계별 설명
단계 페이지 참조 메모리 프레임 상태 참조 비트 수정 비트 페이지 폴트 설명
1 7 [7, -, -] 1 0 폴트 발생 7을 메모리에 로드
2 0 [7, 0, -] 1, 1 0, 0 폴트 발생 0을 메모리에 로드
3 1 [7, 0, 1] 1, 1, 1 0, 0, 0 폴트 발생 1을 메모리에 로드
4 2 [2, 0, 1] 1, 1, 1 0, 0, 0 폴트 발생 7을 교체 (참조되지 않음)
5 0 [2, 0, 1] 1, 1, 1 0, 0, 0 없음 0은 이미 메모리에 있음
6 3 [2, 0, 3] 1, 1, 1 0, 0, 0 폴트 발생 1을 교체 (참조되지 않음)
7 0 [2, 0, 3] 1, 1, 1 0, 0, 0 없음 0은 이미 메모리에 있음
8 4 [4, 0, 3] 1, 1, 1 0, 0, 0 폴트 발생 2를 교체 (참조되지 않음)
9 2 [4, 0, 2] 1, 1, 1 0, 0, 0 폴트 발생 3을 교체 (참조되지 않음)
10 3 [4, 0, 2] 1, 1, 1 0, 0, 0 폴트 발생 4를 교체 (참조되지 않음)

 

  • 설명
  1. 페이지 7 참조:
    • 메모리 프레임이 비어 있으므로 7을 추가합니다. (폴트 발생)
    • 상태: [7, -, -]
    • 참조 비트: 1
    • 수정 비트: 0
  2. 페이지 0 참조:
    • 0을 메모리에 추가합니다. (폴트 발생)
    • 상태: [7, 0, -]
    • 참조 비트: 1, 1
    • 수정 비트: 0, 0
  3. 페이지 1 참조:
    • 1을 메모리에 추가합니다. (폴트 발생)
    • 상태: [7, 0, 1]
    • 참조 비트: 1, 1, 1
    • 수정 비트: 0, 0, 0
  4. 페이지 2 참조:
    • 메모리가 가득 찼으므로 가장 참조되지 않은 페이지인 7을 교체합니다. (폴트 발생)
    • 상태: [2, 0, 1]
    • 참조 비트: 1, 1, 1
    • 수정 비트: 0, 0, 0
  5. 페이지 0 참조:
    • 0은 이미 메모리에 있으므로 교체할 필요가 없습니다. (폴트 없음)
    • 상태: [2, 0, 1]
    • 참조 비트: 1, 1, 1
    • 수정 비트: 0, 0, 0
  6. 페이지 3 참조:
    • 가장 참조되지 않은 페이지인 1을 교체합니다. (폴트 발생)
    • 상태: [2, 0, 3]
    • 참조 비트: 1, 1, 1
    • 수정 비트: 0, 0, 0
  7. 페이지 0 참조:
    • 0은 이미 메모리에 있으므로 교체할 필요가 없습니다. (폴트 없음)
    • 상태: [2, 0, 3]
    • 참조 비트: 1, 1, 1
    • 수정 비트: 0, 0, 0
  8. 페이지 4 참조:
    • 가장 참조되지 않은 페이지인 2를 교체합니다. (폴트 발생)
    • 상태: [4, 0, 3]
    • 참조 비트: 1, 1, 1
    • 수정 비트: 0, 0, 0
  9. 페이지 2 참조:
    • 가장 참조되지 않은 페이지인 3을 교체합니다. (폴트 발생)
    • 상태: [4, 0, 2]
    • 참조 비트: 1, 1, 1
    • 수정 비트: 0, 0, 0
  10. 페이지 3 참조:
    • 가장 참조되지 않은 페이지인 4를 교체합니다. (폴트 발생)
    • 상태: [4, 0, 2]
    • 참조 비트: 1, 1, 1
    • 수정 비트: 0, 0, 0
  • 결과
    • 총 10개의 페이지 참조 중 8번의 페이지 폴트가 발생했습니다.

가상 메모리 관리는 효율적인 메모리 사용에 대한 요구와 여러 프로세스를 동시에 실행해야 하는 요구 사이의 균형을 맞추는 운영 체제 설계의 중요한 측면입니다. 2024년에 정보처리기사 따기 위해 노력하는 모두에게 행운을 빕니다!

 

 

728x90

관련글 더보기