[OS] 가상 메모리

joyful·2024년 2월 5일
0

CS

목록 보기
13/14
post-custom-banner

1. 절대주소 vs 상대주소

절대 주소상대 주소
관점메모리 관리자 입장사용자 프로세스 입장
시작 주소물리 주소 0번지 부터물리 주소와 관계 없이 항상 0번지 부터
주소 공간물리 주소(실제 주소) 공간논리 주소 공간
  • 절대 주소값 = 상대 주소 값 + 재배치 레지스터 값

2. 메모리 분할

  • 여러 프로세스를 메모리에 적재하기 위해 고안된 방법
  • 하나의 분할에 하나의 프로세스가 적재되는 방식

2-1. 고정 분할

메모리를 여러 개의 고정된 크기의 영역으로 분할하는 방식

2-1-1. 프로세스 배치 방법

절대번역 및 적재재배치 가능 번역 및 적재
큐 설정각 분할영역마다 별도의 큐 설정메모리 전체에 하나의 큐만 설정
프로세스 적재 방식큐에 들어온 프로세스는 해당 분할영역에만 적재모든 프로세스를 하나의 작업 큐에 넣어서 어느 분할에서든 실행 가능
주소 번역 방식프로그램 컴파일 시 절대주소로 번역프로그램 컴파일 시 상대주소로 번역
장점구현 용이절대번역 및 적재보다 기억장치의 낭비 감소
단점큐가 빈 분할이 있어도 다른 큐의 프로세스를 적재할 수 없음
→ 효율성이 낮음
절대번역기보다 더 복잡함

2-1-2. 내부 단편화(Internal fragmentation)

  • 고정 분할 방식에서 프로세스의 크기가 적재된 분할영역의 크기보다 작아서 분할영역 내에 남게 되는 메모리가 낭비되는 현상
  • 수행할 프로세스의 크기를 미리 알고 그에 맞춰 고정 분할을 할 경우 해결 가능

2-2. 동적 분할

메모리의 분할경계가 고정되지 않고 각 프로세스에 필요한 만큼의 메모리만 할당하는 방식

  • 필요한 시점에 필요한 만큼의 메모리만 할당 받음 → 내부 단편화 X

2-2-1. 외부 단편화(External fragmentation)

  • 메모리의 할당과 반환이 계속 반복됨에 따라 작은 크기의 공백이 메모리 공간에 흩어져 생기는 현상
  • 공백보다 큰 프로세스가 메모리 할당을 요청하는 경우 대기 필요

2-2-1-1. 해결 방법

✅ 통합(coalescing)

인접된 공백을 더 큰 하나의 공백으로 만드는 과정

  1. 하나의 프로세스 종료
  2. 종료된 프로세스가 차지하고 있는 메모리 영역이 다른 비어 있는 메모리와 인접해 있는지 조사
  3. 인접된 경우 빈 공간 리스트에 새로운 공백이나 기존의 공백과 합쳐 하나의 공백으로 만듦
  • 문제점
    • 공백이 메모리 내에서 여기저기 분산되어 상당한 크기의 메모리를 차지하고 있는 경우 발생
    • 하나의 프로세스가 일정 크기의 큰 메모리 영역이 필요할 때 다음과 같은 경우 발생
      • 통합된 여러 공백의 합 > 작업의 기억장소 필요량
      • 제일 큰 공백 하나로는 그 프로세스를 수행할 수 없음

✅ 집약(compaction) = 압축

메모리 내의 모든 공백을 하나로 모으는 작업

  • 동적 분할에서 통상적으로 발생하게 되는 여러 개의 작은 공백을 하나의 커다란 저장공간으로 만드는 것
    • 이용 가능한 기억장소가 연속으로 모여있게 됨
      • 집약으로 생긴 하나의 공백 > 작업의 기억장소 필요량 → 작업 실행 가능

3. 메모리 배치기법(메모리 관리 전략)

  • 동적 분할 다중 프로그래밍에서 새로 반입된 프로그램이나 데이터를 메모리의 어느 위치에 배치할 것인가를 결정하는 것
  • 운영체제가 유지하는 빈 공간 리스트 중 적합한 공간을 찾음
할당 전략설명특징
최초 적합
(first-fit)
프로세스가 적재될 수 있는 빈 공간 중
가장 먼저 발견되는 빈 공간 할당
· 메모리의 주소순으로 빈 공간 리스트 유지
· 할당 속도 빠름
후속 적합
(next-fit)
이전에 탐색이 끝난 그다음 부분부터 시작하여
사용 가능한 빈 공간 중에서 가장 먼저 발견되는 곳 할당
최초 적합 변형 방식
최적 적합
(best-fit)
필요한 공간을 제공할 수 있는 빈 공간 중
가장 작은 곳을 선택하여 할당
큰 빈 공간을 최대한 많이 확보
최악 적합
(worst-fit)
필요한 공간을 제공할 수 있는 빈 공간 중
가장 큰 곳을 선택하여 할당
작은 자투리 공간 발생 최소화

4. 버디 시스템(buddy system)

4-1. 개념

  • 컴퓨터 운영체제에서 메모리를 효율적으로 할당하고 관리하기 위해 사용하는 메모리 할당 기술

4-2. 구현

  1. 메모리 분할 : 메모리를 고정된 크기의 블록으로 나눔(2의 거듭제곱)
  2. 할당 요청 처리 : 프로세스가 메모리를 요청할 때마다 시스템이 요청된 메모리 크기를 수용할 수 있는 가장 작은 사용 가능한 블록 탐색
  3. 메모리 할당 및 해제
    • 프로세스가 메모리를 해제하면 시스템은 해당 블록을 사용 가능한 것으로 표시하고 버디 블록 재탐색
    • 인접한 해제된 블록들은 다시 합쳐져 더 큰 블록을 형성할 수 있음

4-3. 특징

  • 내부 단편화 발생
  • 제한된 메모리를 가진 환경에서 유용 ex) 임베디드 시스템

5. 가상 메모리(virtual memory)

5-1. 개념

  • 컴퓨터 시스템의 메모리 크기보다 더 큰 기억공간이 필요한 프로세스를 실행할 수 있게 하는 방법
  • 실행 중인 프로세스에 의해 참조되는 주소를 실제 메모리에서 사용하는 주소와 분리
  • 전체 프로그램 및 데이터 중 현재 필요한 일부만 메모리에 적재

5-2. 사상(mapping)

  • 가상주소를 참조하는 프로세스를 메모리에서 실행시키기 위해 가상주소물리주소변환하는 과정

5-2-1. 가상 주소(virtual address)

  • 실행 프로세스가 참조하는 주소

5-2-2. 물리 주소(physical address) = 실주소(real address)

  • 실제 메모리에서 사용하는 주소

5-3. 동적 주소 변환(Dynamic Address Traslation: DAT)

  • 프로세스가 실행되는 동안 가상주소를 실주소로 변경하는 절차
  • 주소변환 사상표 이용
  • 인위적 연속성을 가짐

    💡 인위적 연속성
    가상주소 공간에서 연속적인 주소가 실주소 공간에서도 연속적일 필요는 없음

5-3-1. 페이징(paging) 기법

✅ 개념

  • 가상 메모리를 페이지 단위로 나누어 관리하는 기법

    💡 페이지(page)
    고정된 크기의 블록

✅ 페이지 프레임

  • 가상 메모리와 동일하게 고정된 크기로 분할된 메모리 영역의 블록
  • 가상 메모리상의 페이지를 담을 수 있도록 실제 메모리에 틀(frame)을 만들어 둔 것

✅ 페이지 사상표

  • 페이지가 메모리에 적재된 후에도 바로 찾을 수 있도록 프로세스가 사용하는 가상주소를 실주소로 동적 변환할 수 있게 함
  • 가상주소의 페이지 번호별 저장 정보

✅ 동적 주소변환

설명
직접사상페이지 사상표를 직접 이용하여 동적 주소변환을 하는 방식
연관사상페이지 변환 정보를 연관 메모리에 저장한 연관사상표를 이용하여
동적 주소변환을 하는 방식
연관/직접
사상
· 연관사상표에 참조된 페이지 항목이 없을 경우
  직접사상 기법으로 변환하는 방식
· 연관사상표에는 가장 최근에 참조된 페이지 항목만 보관하고
  나머지는 페이지 사상표에 수록

✅ 특징

  • 메모리 보호는 페이지 단위로 이루어짐
  • 외부 단편화 X, 내부 단편화 O

5-3-2. 세그먼테이션(segmentation) 기법

✅ 개념

  • 가상 메모리를 세그먼트 단위로 나누어 관리하는 기법

    💡 세그먼트(segment)
    논리적 의미에 부합하는 다양한 크기의 블록 ex) 함수, 배열 등

  • 메모리 적재는 최초 적합, 최적 적합 등의 방법 이용

✅ 세그먼트 사상표

  • 페이지 사상표와 유사
  • 가상주소의 세그먼트 번호별 저장 정보

5-3-3. 페이징/세그먼테이션 혼용기법

  • 세그먼테이션 기법의 논리적 장점 + 페이징 기법의 메모리 관리 측면 장점
  • 프로그램을 논리적인 세그먼트로 구분한 후, 각 세그먼트를 더 작은 페이지로 나누어 메모리에 적재하는 방식

6. swapping

6-1. 정의

  • 현재 사용되지 않는 프로세스들을 보조기억장치의 일부 영역으로 쫓아내고, 그렇게 생긴 빈 공간에 새 프로세스를 적재하는 메모리 관리 방식

6-2. 과정

우선 순위가 높은 프로세스가 실행 대기 중인 경우,
우선 순위가 낮은 프로세스는 swap-out,
우선 순위가 높은 프로세스를 메모리에 로드하여 실행

  • swap-in : 하드 디스크에서 프로세스를 주 메모리로 가져옴
  • swap-out : 주 메모리에서 프로세스를 하드 디스크로 옮김

6-3. 장점

  • 프로세스 실행 대기 시간 감소 → CPU 활용도 향상

6-4. 단점

  • 프로세스의 주 메모리 ↔ 보조 메모리 이동으로 인한 시스템 성능 저하
  • swapping 중 갑자기 종료되면 swap-out된 프로세스의 데이터가 손실될 수 있음

7. 페이지 교체 알고리즘

7-1. 정의

  • 페이지 교체를 할 때 어떠한 프레임에 있는 페이지를 쫓아낼 것인지 결정하는 알고리즘

7-2. 페이지 부재 최소화

7-2-1. 페이지 부재(page fault)

  • CPU가 참조하려는 페이지가 현재 메모리에 올라와 있지 않아 무효 비트로 표시되어 있는 경우

7-2-2. 최적화 원칙

  • 최적의 성과를 얻기 위해 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체 대상으로 선택
  • 미래를 예측할 수 없으므로 실제로 실현 불가능

7-2-3. 교체 제외 페이지

효율적인 동작을 위해 교체가 발생하지 않도록 페이지 프레임에 페이지 고정

  • 페이징을 위한 커널 코드 영역
  • 커널에 속하지 못한 보조기억장치 드라이버 영역
  • 시간을 맞춰 동작해야 하는 코드 영역
  • I/O 장치로부터 직접 데이터가 교환되어야 하는 데이터 버퍼 영역

7-3. 알고리즘

7-3-1. FIFO(First-In First-Out)

✅ 개념

  • 메모리 내에 가장 오래 있었던 페이지 교체
  • FIFO 큐로 구현

✅ 단점

  • 가장 많이 사용하는 페이지를 교체시킬 가능성 존재

  • Belady의 이상현상 발생

    💡 Belady의 이상현상
    메모리에 더 많은 수의 페이지 프레임을 할당했을 때, 기대와 달리 페이지 부재가 더 많이 발생하는 현상

    • 메모리에 더 많은 페이지 프레임을 할당하면 프로세스가 사용할 수 있는 메모리 공간이 늘어나므로 페이지 부재가 발생할 확률이 낮아져야 함
    • 즉, 더 많은 데이터를 메모리에 적재할 수 있으므로 swapping이 감소할 것으로 기대
    • 그러나 새로운 페이지 프레임의 추가가 기존에 메모리에 있던 페이지들의 교체 순서를 바꿔 더 많은 페이지 부재를 발생시키게 됨

7-3-2. LRU(Least Recently Used)

✅ 개념

  • 메모리 내에서 가장 오랫동안 사용되지 않은 페이지 교체

  • 국부성 휴리스틱에 의존

    💡 국부성(locality)
    프로세스는 기억장치 내의 정보를 어느 한 순간에 특정 부분을 집중적으로 참조한다는 것

    💡 국부성 휴리스틱
    최근의 상황이 가까운 미래에 대한 좋은 척도

    • 시간 국부성 : 참조시간이 가장 오래된 페이지를 교체 대상으로 선택
    • 공간 국부성 : 메모리에 적재된 페이지 번호를 저장하는 리스트의 끝에 있는 페이지를 교체 대상으로 선택

✅ 장점

  • Belady의 이상현상이 발생하지 않음
  • 최적화 원칙에 근사한 선택이 가능함

✅ 단점

  • 경험적 판단이 맞지 않는 상황이 존재함
  • 막대한 오버헤드 발생
    • 시간 스탬프 관리
    • 가장 오래된 페이지 탐색

7-3-3. LFU(Least Frequently Used)

✅ 개념

  • 메모리 내에서 참조된 횟수가 가장 적은 페이지 교체

✅ 단점

  • 가장 드물게 사용되는 페이지가 가장 최근에 메모리로 옮겨진 페이지일 가능성 존재
  • 초기에 매우 많이 사용된 후 더 이상 사용되지 않는 페이지가 불필요하게 메모리를 점유할 가능성 존재
  • 막대한 오버헤드 발생
    • 사용 빈도 카운팅
    • 페이지 교체 결정 과정

7-3-4. 클럭 알고리즘

  • 2차 기회 알고리즘에서 큐를 변형된 원형 큐로 관리

    💡 2차 기회 알고리즘
    참조 비트가 0이면서 메모리 내에 가장 오래 있었던 페이지 교체

  • 원형 큐의 포인터는 마지막에 추가된 페이지의 다음 위치를 가리킴


8. 프로세스별 페이지 집합관리

8-1. 워킹 세트 알고리즘

8-1-1. 워킹 세트(working set)

  • 한 프로세스가 최근에 참조한 페이지의 집합
  • 페이지 부재 비율을 감소시키기 위해 데닝(Denning)이 제안한 모델

8-1-2. 쓰레싱(thrashing)

  • 페이지 부재비정상적으로 많이 발생하여 프로세스 처리보다 페이지 교체처리에 너무 많은 시간을 소비함으로써 시스템의 처리량급격히 저하되는 현상

8-1-3. 워킹 세트 알고리즘

✅ 개념

  • 프로세스의 워킹 세트를 메모리에 유지시키는 것을 원칙으로 하는 기법

✅ 방식
1. 각 프로세스의 워킹 세트를 감시하여 워킹 세트 크기에 해당하는 충분한 페이지 프레임 할당
2. 충분한 여분의 페이지 프레임이 존재하면 다른 프로세스를 들여와 실행 프로세스의 수 증가시킴
3. 실행 중인 프로세스들의 워킹 세트 크기의 합이 증가하여 총페이지 프레임 수를 넘을 경우 다음 과정 수행

  • 우선순위가 가장 낮은 프로세스를 일시적으로 중지시켜 여유 페이지 프레임 확보
  • 워킹 세트에 포함되지 않는 페이지를 담고 있는 프레임은 필요시 교체 대상으로 선택

✅ 문제점

  • 과거를 통해 미래를 예측하는 것이 정확하지 않음
  • 워킹 세트를 알아내고 업데이트하는 것이 현실적으로 어려움
  • 워킹 세트를 구하기 위한 윈도 크기 δ의 최적값을 알기 어려움

8-2. 페이지 부재 빈도 알고리즘

8-2-1. 개념

  • 페이지 부재 빈도(PFF)를 이용하여 프로세스별 페이지 집합의 크기를 변화시키는 기법

    💡 페이지 부재 빈도(Page Fault Frequently: PFF)
    페이지 부재로 교체가 발생하는 빈도를 나타내는 척도

  • PFF > 상한 : 페이지 프레임 개수 1 증가
  • PFF < 하한 : 그 사이에 참조되지 않았던 페이지 모두 제거

8-2-2. 장점

  • 프로세스별 페이지 집합이 워킹 세트 알고리즘처럼 자주 바뀌지 않음
    → 페이지 부재가 발생하거나 PFF가 상한이나 하한을 벗어나는 경우에만 바뀜
profile
기쁘게 코딩하고 싶은 백엔드 개발자
post-custom-banner

0개의 댓글