[운영체제] 10. Virtual Memory

2024. 6. 19. 01:29·Computer Science/OS
목차
  1. Virtual Memory Concepts
  2. Demand Paging
  3. Demand Paging
  4. Page Replacement
  5. Page Replacement Diagram
  6. Evaluating Page Replacement Algorithms
  7. Page Faults vs. Frames
  8. FIFO Page Replacement
  9. FIFO Page Replacement Example
  10. FIFO Illustrating Belady’s Anomaly
  11. Optimal Page Replacement
  12. Optimal Page Replacement Example
  13. Least Recently Used (LRU)
  14. LRU Approximation Algorithms
  15. Counting Algorithms
  16. Allocation
  17. Fixed Allocation
  18. Priority Allocation
  19. Global vs. Local Allocation

Virtual Memory Concepts

Restricted physical memory size

  • 물리적 메모리 크기의 제한
    • 물리적 메모리 공간보다 큰 프로그램은 실행될 수 없음.

General program execution pattern

  • 일반적인 프로그램 실행 패턴
    • 프로그램의 일부만 실행되고 전체 프로그램은 실행되지 않음.
      • 오류 코드 및 예외 코드
      • 100x100 배열 중 10x10 요소만 사용됨.
      • 프로그램의 특정 옵션 및 기능이 드물게 사용됨.
    • 전체 프로그램이 필요할 때조차도 모든 부분이 동시에 필요하지 않을 수 있음.

Virtual memory

  • 가상 메모리
    • 메모리에 완전히 들어가지 않은 프로세스의 실행을 허용.
    • 프로그램의 일부만 메모리에 있어도 실행 가능.
    • 논리적 메모리 주소 공간과 물리적 메모리 주소 공간의 분리.
    • 논리적 메모리 주소 공간이 물리적 메모리 주소 공간보다 클 수 있음.

Virtual Address Space

  • 가상 주소 공간
    • (프로그램의 코드, 데이터, 힙, 스택이 각각의 세그먼트로 나뉘어 가상 메모리 공간에 배치됨.)
    • (힙과 스택은 서로 반대 방향으로 성장함.)

 

Demand Paging

Virtual memory can be implemented via demand paging.

  • 가상 메모리는 요청 페이징(demand paging)을 통해 구현될 수 있음.
    • 페이지가 필요할 때만 메모리에 가져옴.
      • I/O가 적게 필요함.
      • 메모리가 적게 필요함.
    • 페이지가 교체(swapped in and out)될 수 있어야 함.

When a page is referenced,

  • 페이지가 참조될 때,
    • 유효한 참조면 참조.
    • 유효하지 않은 참조면 메모리에 가져옴.

 

  • 유효-무효 비트(valid-invalid bit)가 각 페이지 테이블 항목과 연관됨. 
    • v(valid) = 메모리에 있음.
    • i = 메모리에 없거나 합법적이지 않음.(bad address, protection violation)
    • 주소 변환 중, 유효-무효 비트가 i면 페이지 폴트(page fault).

Page table when some pages are not in main memory.

  • 일부 페이지가 메인 메모리에 없는 경우의 페이지 테이블.
    • (논리적 메모리에서 페이지가 물리적 메모리와 매핑됨. 유효-무효 비트를 통해 페이지의 존재 여부를 확인.) 

Access to invalid page causes page fault.

  • 유효하지 않은 페이지 접근은 페이지 폴트를 일으킴.
    • 운영 체제 내의 페이지 폴트 핸들러가 호출됨.

Page fault handler deals with the page fault as follows.

  • 페이지 폴트 핸들러가 다음과 같이 페이지 폴트를 처리함.
    1. 유효하지 않은(invalid) 참조인가?
    • 만약 주소 오류나 보호 위반이면 프로세스 중단.
    • 만약 메모리에 없으면 계속 진행.
    1. 빈 페이지 프레임 가져오기.
    • 빈 페이지 프레임이 없으면 일부 페이지 프레임 교체.
    1. 페이지를 페이지 프레임에 읽어오기.
    • 디스크 I/O가 완료될 때까지 프로세스가 차단됨.
    • 디스크 I/O 완료 시 페이지 테이블 항목을 유효(valid)로 설정.
    • 프로세스를 준비 큐(ready quie)에 다시 삽입하고 나중에 dispatch.
    1. 페이지 폴트를 유발한 명령어 재시작.

Demand Paging

Page fault handling

  • 페이지 폴트 처리
    • (페이지 폴트 핸들러가 운영 체제에서 참조를 처리함.)
    • (페이지가 디스크에서 메모리로 가져와짐.)
    • (페이지 테이블이 리셋되고 명령어가 재시작됨.)


Page Fault Rate 0 ≤ p ≤ 1.0

  • 페이지 폴트 비율 0 ≤ p ≤ 1.0
    • p = 0이면 페이지 폴트 없음.
    • p = 1이면 모든 참조가 폴트.

Effective Access Time (EAT)

  • 유효 접근 시간 (EAT)
    • EAT = (1 - p) * 메모리 접근 시간 + p * 페이지 폴트 서비스 시간
    • 예:
      • 메모리 접근 시간 = 200 ns
      • 평균 페이지 폴트 서비스 시간 = 8 ms (8,000,000ns)
      • EAT = (1 - p) * 200 + p * 8,000,000
      • 1,000번 접근 중 1번이 페이지 폴트를 일으키면
        • EAT = 8,200 ns
        • 40배 느려짐.

It is important to keep the page fault rate low.

  • 페이지 폴트 비율을 낮게 유지하는 것이 중요함.
    • 좋은 페이지 교체 정책(good page replacement policy) 필요.

Page Replacement

Page replacement

  • 페이지 교체
    • 실제로 사용되지 않는 페이지를 찾아 교체.
    • 좋은 페이지 교체 알고리즘은 최소한의 페이지 폴트를 발생시킴.

Locality of reference

  • 참조의 지역성
    • 동일한 페이지가 여러 번 메모리에 불러들여질 수 있음.
    • 실제 대부분의 프로그램에서 관찰되는 현상.
    • 일정 시간에 일부 페이지만 집중적으로 참조하는 프로그램 동작.
      • 루프
    • 페이징 시스템의 성능을 좋게 하는 근거.

페이지 폴트 핸들러(page fault handler)에는 페이지 교체가 포함됩니다.

  1. 디스크에서 원하는 페이지의 위치를 찾습니다.
  2. 여유 프레임(free frame)을 찾습니다.
    • 여유 프레임이 있으면 사용합니다.
    • 여유 프레임이 없으면, 페이지 교체 알고리즘(page replacement algorithm)을 사용하여 희생자(victim)를 선택합니다.
  3. 원하는 페이지를 (새로) 여유 프레임에 가져옵니다; 페이지 테이블을 업데이트합니다.
  4. 프로세스를 다시 시작합니다.

Page Replacement Diagram

참고)

    1. 희생 페이지(victim page)를 스왑 아웃합니다.
    2. 페이지 테이블의 유효-무효(valid-invalid) 비트를 무효로 변경합니다.
    3. 원하는 페이지를 스왑 인합니다.
    4. 새로운 페이지에 대해 페이지 테이블을 리셋합니다.

Evaluating Page Replacement Algorithms

  • 이상적인 알고리즘(Ideal Algorithm)
    • 가장 낮은 페이지 폴트(page-fault) 비율을 얻습니다.
  • 알고리즘 평가 방법
    • 특정 메모리 참조 문자열(reference string)에서 실행하고,
    • 해당 문자열에서 페이지 폴트 수를 계산합니다.
  • 예시
    • 참조 문자열: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5

Page Faults vs. Frames

  • 페이지 폴트 수 대 프레임 수
    • (페이지 폴트 수와 프레임 수 간의 관계를 나타내는 그래프를 보여줍니다.)

FIFO Page Replacement

  • FIFO(First In First Out) 순서로 교체합니다.
  • 참조 문자열(reference string): 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
  • 페이지 폴트 수: 15

FIFO Page Replacement Example

  • FIFO 페이지 교체 예시(FIFO Page Replacement Example)
    • 참조 문자열: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
    • 3 프레임: 9 페이지 폴트
    • 4 프레임: 10 페이지 폴트
    • 벨라디의 역설(Belady's Anomaly)
      • 더 많은 프레임이 더 많은 페이지 폴트를 초래합니다.

 

 

 

 

 

 

 


FIFO Illustrating Belady’s Anomaly

  • 벨라디의 역설을 보여주는 FIFO
    • (프레임 수와 페이지 폴트 수의 관계를 보여주는 그래프입니다.)

Optimal Page Replacement

  • 최적 페이지 교체(Optimal Page Replacement)
    • 가장 오랜 기간 사용되지 않을 페이지를 교체합니다.
    • (LRU랑 헷갈리지 말자. 미래의 페이지 참조를 미리 알고 있다고 가정하고, 가장 나중에 참조되는 페이지를 교체하는 방식임! 미래를 봐야해!)
    • 참조 문자열(reference string): 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1

Optimal Page Replacement Example

  • 최적 페이지 교체 예시(Optimal Page Replacement Example) 
    • 참조 문자열: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
    • 페이지 폴트 수: 6
    • 알고리즘 성능 평가에 사용됩니다.
      • 최적 알고리즘은 페이지 폴트 비율의 하한을 제시합니다.

 


Least Recently Used (LRU)

  • LRU (Least Recently Used)
    • 가장 최근에 사용되지 않은 페이지를 교체합니다.
    • 참조 문자열(reference string): 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1

  • LRU (Least Recently Used)
    • 참조 문자열(Reference string): 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
    • 8 페이지 폴트(page faults)

  • 구현 방법? (How to implement it?)
    • 각 페이지에 대한 참조 시간을 기록해야 합니다.
    • 가장 오래된 참조 시간을 가진 페이지를 찾아야 합니다.
    • 너무 큰 공간과 시간 오버헤드 (Too large space and time overhead)
      • 많은 근사 알고리즘이 제안되었습니다.
  • 카운터 구현 (Counter implementation)
    • 모든 페이지 엔트리는 카운터를 가집니다.
    • 페이지가 참조될 때마다 시계(clock)가 증가합니다.
    • 페이지 A가 참조될 때, 클럭을 A의 카운터에 복사합니다.
    • 가장 작은 카운터 값을 가진 페이지를 교체합니다.
  • 스택 구현 (Stack implementation)
    • 페이지의 스택을 유지합니다.
    • 페이지가 참조될 때, 그것을 최상위로 이동합니다.
    • 교체를 위한 검색이 필요 없습니다.

  • 스택 구현 (Stack implementation)
    • 참조 문자열 (reference string): 4, 7, 0, 7, 1, 0, 1, 2, 1, 2, 7, 1, 2
    • 스택 변경 전 (stack before a): [2, 1, 0, 7, 4]
    • 스택 변경 후 (stack before b): [7, 2, 1, 0, 4]

LRU Approximation Algorithms

  • LRU 근사 알고리즘 (LRU Approximation Algorithms)
    • LRU 페이지 교체를 위해, 많은 시스템들이 하드웨어 지원을 제공합니다.
  •  참조 비트 (Reference bit)
    • 각 페이지에 대한 비트가 있고, 초기값은 0입니다.
    • 페이지가 참조될 때 1로 설정됩니다.
    • 0인 페이지를 교체합니다 (존재하는 경우).
    • 그러나 참조 순서를 알 수 없습니다.

  • 세컨드 찬스 페이지 교체 알고리즘 (Second chance page replacement algorithm) 
    • 시계 알고리즘 (clock algorithm)
      • 교체할 페이지가 참조 비트 1을 가지면,
        • 페이지를 메모리에 남겨 둡니다.
        • 참조 비트를 0으로 설정합니다.
        • 다음 희생자를 찾기 위해 포인터를 이동합니다.

Counting Algorithms

  • 카운팅 알고리즘 (Counting Algorithms)
    • LFU (Least Frequently Used) 알고리즘
      • 참조된 횟수를 기록합니다.
      • 가장 적은 횟수를 가진 페이지를 교체합니다.

Allocation

  • 할당 (Allocation)
    • 이전 교체 알고리즘
      • 페이지 폴트가 발생하면 희생자를 선택합니다.
        • 고정 할당(fixed allocation)을 가정했으며, 가변 할당(variable allocation)은 아닙니다.
      • 페이지 폴트 시 한 페이지 프레임을 더 할당하는 것을 고려하지 않았습니다.
    • 할당 문제 (Allocation problem)
      • 페이지 폴트 시 할당 크기를 결정합니다.
        • 고정 할당 (fixed allocation)
        • 우선순위 할당 (priority allocation)

Fixed Allocation

  • 고정 할당 (Fixed Allocation)
    • 균등 할당 (Equal allocation)
      • 100개의 프레임과 5개의 프로세스가 있다면, 각 프로세스에 20개의 프레임을 할당합니다.
    • 비례 할당 (Proportional allocation)
      • 프로세스 크기에 따라 할당합니다.

Priority Allocation

  • 우선순위 할당 (Priority Allocation)
    • 크기보다 우선순위를 사용하는 비례 할당 방식 사용.
    • 더 높은 우선순위를 가진 프로세스에 더 많은 메모리를 할당합니다.

Global vs. Local Allocation

  • 전역 교체 (Global replacement)
    • 프로세스가 모든 프레임 집합에서 교체 프레임을 선택합니다.
    • 하나의 프로세스가 다른 프로세스에서 프레임을 가져갈 수 있습니다.
  • 지역 교체 (Local replacement)
    • 각 프로세스가 할당된 프레임 집합에서만 선택합니다.

Thrashing(스레싱)

  • Thrashing : 프로세스가 "충분한" 페이지를 가지고 있지 않다면, 페이지 폴트 비율이 매우 높아지는 현상
  • 이로 인해 
    • 낮은 CPU 사용률 (low CPU utilization)
    • 운영체제는 멀티프로그래밍의 정도를 증가시켜야 한다고 생각합니다.
    • 또 다른 프로세스가 시스템에 추가됩니다.
  • 스레싱 (Thrashing)
    • 프로세스가 페이지를 교환하는데 바쁩니다.

Why does thrashing occur?

  • 왜 스레싱이 발생하는가? (Why does thrashing occur?)
    • 지역성 크기의 합이 총 메모리 크기를 초과합니다 (∑ size of locality > total memory size).

Working-set Model

  • 작업 집합 모델 (Working-set Model)
    • 메모리 참조 패턴의 지역성 (Locality in a memory-reference pattern) 을 나타낸다
      • 시간적 지역성 (Temporal locality): 상대적으로 짧은 시간 동안 특정 데이터 및/또는 자원의 재사용.
      • 공간적 지역성 (Spatial locality): 상대적으로 가까운 저장 위치 내에서 데이터 요소의 사용.
  • 작업 집합 모델 (Working set model)
    • 지역성(locality) 가정에 기반합니다.
    • Δ는 작업 집합 윈도우 (working-set window)로, 고정된 페이지 참조 수를 의미합니다.
  • WSS_i (프로세스 P_i의 작업 집합)
    • 가장 최근의 Δ에서 참조된 페이지의 총 수
      • Δ가 너무 작으면 전체 지역성을 포괄하지 못합니다.
      • Δ가 너무 크면 여러 지역성을 포함하게 됩니다.
        • Δ가 무한대이면 전체 프로그램을 포괄하게 됩니다.
  • D = ∑ WSS_i = 총 요구 프레임 수 (total demand frames)
    • 만약 D > m 이면, 스레싱이 발생합니다.
    •  --> 프로세스 중 하나를 중단합니다 (suspend).
  • 위는 작업 집합 예시 (Working set example)

Page-Fault Frequency Scheme

  • 페이지 폴트 빈도 방식 (Page-Fault Frequency Scheme)
    • "허용 가능한" 페이지 폴트 비율을 설정합니다.
      • 실제 비율이 너무 낮으면, 프로세스는 프레임을 잃습니다.
      • 실제 비율이 너무 높으면, 프로세스는 프레임을 얻습니다.

'Computer Science > OS' 카테고리의 다른 글

[운영체제] 12. I/O Systems  (0) 2024.06.19
[운영체제] 11. Mass-Storage Structure  (0) 2024.06.19
[운영체제] 09. Main Memory  (0) 2024.06.19
[운영체제] 08. Deadlocks  (0) 2024.06.19
[운영체제] 07. Synchronization Examples  (0) 2024.06.19
  1. Virtual Memory Concepts
  2. Demand Paging
  3. Demand Paging
  4. Page Replacement
  5. Page Replacement Diagram
  6. Evaluating Page Replacement Algorithms
  7. Page Faults vs. Frames
  8. FIFO Page Replacement
  9. FIFO Page Replacement Example
  10. FIFO Illustrating Belady’s Anomaly
  11. Optimal Page Replacement
  12. Optimal Page Replacement Example
  13. Least Recently Used (LRU)
  14. LRU Approximation Algorithms
  15. Counting Algorithms
  16. Allocation
  17. Fixed Allocation
  18. Priority Allocation
  19. Global vs. Local Allocation
'Computer Science/OS' 카테고리의 다른 글
  • [운영체제] 12. I/O Systems
  • [운영체제] 11. Mass-Storage Structure
  • [운영체제] 09. Main Memory
  • [운영체제] 08. Deadlocks
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기 (456)
      • Software Development (27)
        • Performance (0)
        • TroubleShooting (1)
        • Refactoring (0)
        • Test (8)
        • Code Style, Convetion (0)
        • DDD (0)
        • Software Engineering (18)
      • Java (71)
        • Basic (5)
        • Core (21)
        • Collection (7)
        • 멀티스레드&동시성 (13)
        • IO, Network (8)
        • Reflection, Annotation (3)
        • Modern Java(8~) (12)
        • JVM (2)
      • Spring (53)
        • Framework (12)
        • MVC (23)
        • Transaction (3)
        • AOP (11)
        • Boot (0)
        • AI (0)
      • DB Access (1)
        • Jdbc (1)
        • JdbcTemplate (0)
        • JPA (14)
        • Spring Data JPA (0)
        • QueryDSL (0)
      • Computer Science (129)
        • Data Structure (27)
        • OS (14)
        • Database (10)
        • Network (21)
        • 컴퓨터구조 (5)
        • 시스템 프로그래밍 (23)
        • Algorithm (29)
      • HTTP (8)
      • Infra (1)
        • Docker (1)
      • 프로그래밍언어론 (15)
      • Programming Language(Sub) (77)
        • Kotlin (1)
        • Python (25)
        • C++ (51)
        • JavaScript (0)
      • FE (11)
        • HTML (1)
        • CSS (9)
        • React (0)
        • Application (1)
      • Unix_Linux (0)
        • Common (0)
      • PS (13)
        • BOJ (7)
        • Tip (3)
        • 프로그래머스 (0)
        • CodeForce (0)
      • Book Review (4)
        • Clean Code (4)
      • Math (3)
        • Linear Algebra (3)
      • AI (7)
        • DL (0)
        • ML (0)
        • DA (0)
        • Concepts (7)
      • 프리코스 (4)
      • Project Review (6)
      • LegacyPosts (11)
      • 모니터 (0)
      • Diary (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
lumana
[운영체제] 10. Virtual Memory
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.