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.
- 페이지 폴트 핸들러가 다음과 같이 페이지 폴트를 처리함.
- 유효하지 않은(invalid) 참조인가?
- 만약 주소 오류나 보호 위반이면 프로세스 중단.
- 만약 메모리에 없으면 계속 진행.
- 빈 페이지 프레임 가져오기.
- 빈 페이지 프레임이 없으면 일부 페이지 프레임 교체.
- 페이지를 페이지 프레임에 읽어오기.
- 디스크 I/O가 완료될 때까지 프로세스가 차단됨.
- 디스크 I/O 완료 시 페이지 테이블 항목을 유효(valid)로 설정.
- 프로세스를 준비 큐(ready quie)에 다시 삽입하고 나중에 dispatch.
- 페이지 폴트를 유발한 명령어 재시작.
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)에는 페이지 교체가 포함됩니다.
- 디스크에서 원하는 페이지의 위치를 찾습니다.
- 여유 프레임(free frame)을 찾습니다.
- 여유 프레임이 있으면 사용합니다.
- 여유 프레임이 없으면, 페이지 교체 알고리즘(page replacement algorithm)을 사용하여 희생자(victim)를 선택합니다.
- 원하는 페이지를 (새로) 여유 프레임에 가져옵니다; 페이지 테이블을 업데이트합니다.
- 프로세스를 다시 시작합니다.
Page Replacement Diagram
참고)
-
- 희생 페이지(victim page)를 스왑 아웃합니다.
- 페이지 테이블의 유효-무효(valid-invalid) 비트를 무효로 변경합니다.
- 원하는 페이지를 스왑 인합니다.
- 새로운 페이지에 대해 페이지 테이블을 리셋합니다.
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으로 설정합니다.
- 다음 희생자를 찾기 위해 포인터를 이동합니다.
- 교체할 페이지가 참조 비트 1을 가지면,
- 시계 알고리즘 (clock algorithm)
Counting Algorithms
- 카운팅 알고리즘 (Counting Algorithms)
- LFU (Least Frequently Used) 알고리즘
- 참조된 횟수를 기록합니다.
- 가장 적은 횟수를 가진 페이지를 교체합니다.
- 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)
- 프로세스 크기에 따라 할당합니다.
- 균등 할당 (Equal 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): 상대적으로 가까운 저장 위치 내에서 데이터 요소의 사용.
- 메모리 참조 패턴의 지역성 (Locality in a memory-reference pattern) 을 나타낸다
- 작업 집합 모델 (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 > 운영체제' 카테고리의 다른 글
[운영체제] 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 |