■ 요구 페이징
· Process가 요청할 때 메모리로 가져오는 것
→ 메모리를 효율적으로 관리, 응답 속도 향상의 이유로 process 일부만 가져옴 (나머지는 필요할 때)
■ 가상 메모리
· 물리 메모리 + 스왑 영역 (Harddisk or 메모리 관리자의 영역)
→ 스왑-in : 메모리로 data를 가져오는 것 ↔ 스왑-out
■ Flag Bit (Access-Modifed-Valid-Read-Write-Excute bit)
· 접근 비트(참조 비트) : 페이지의 사용 여부
· 변경 비트 : 페이지의 변경 여부
· 유효 비트(현재 비트) : 요구하는 페이지의 위치를 표시
→ 0 : 메모리에 위치, frame num 저장 / 1 : 스왑 영역에 위치, page의 주소 저장
· 읽기, 쓰기, 실행 비트(권한 비트) : 권한 제어
■ Page fault(페이지 부재)
· 요구한 페이지가 메모리에 없는 경우
→ Page Table을 갱신 / 만약 빈 프레임이 없다면 프레임 중 하나를 스왑 영역으로 보냄 → 지역성 기반
■ 지역성
· 공간 지역성 : 더 가까운 data가 사용 확률이 높음
· 시간 지역성 : 더 최근에 쓴 data가 사용 확률이 높음
· 순차적 지역성 : 순차적으로 작업하는 경향이 있음
■ 페이지 교체 알고리즘
· 스왑 영역으로 보낼 페이지를 결정하는 방법 (Page Fault의 최소화)
1. 무작위 : 무작위로 선정한 page OUT / 간단 but 효율 ×
2. FIFO : 가장 먼저 들어온 page OUT / 시간 지역성만 따짐
3. 최적 : 앞으로 사용하지 않을 page OUT / 미래를 예측할 수 없어 구현 불가
4. LRU(Least Recently Used) : 가장 오랫동안 사용하지 않은 page OUT / 연산이 이루어진 시간이 기준
→ 카운터 기반 : 추가적인 메모리가 필요 → 공간 낭비
→ 참조 비트 쉬프트 : 1B 공간에서 사용 여부를 매번 갱신 → 약간의 공간 낭비
5. LFU(Least Frequently Used) : 가장 적게 사용한 page OUT / 추가적인 공간이 필요 → 공간 낭비
6. NUR(Not Used Recently) : LRU, LFU와 비슷한 성능 그러나 적은 메모리 낭비(2bit)
→ 참조 비트(접근 비트, 변경 비트) 이용 : (0, 0) → (0, 1) → (1, 0) → (1, 1) 순서로 OUT
→ 모두 (1, 1)이라면 모두 (0, 0)으로 초기화
7. FIFO 변형
→ 2차 기회 : Page Fault가 없으면 큐의 맨 뒤로 보냄 / 추가적인 작업을 요구
→ 시계 : 원형 큐 사용(pointer의 순회) + 참조 bit / 추가 작업이 복잡, 많은 계산양
성공 시 참조 bit = 1 / 실패 시 pointing 하는 page의 bit가 1이면 0으로 초기화하고 넘어간다, 아니면 OUT
■ 스레싱(Threshing)
· 잦은 페이지 부재로 작업이 멈춘 것 같은 상태
※ 메모리가 일정 크기 이상이면 아무리 커져도 속도의 변화 ×
■ 정적 할당
· process 실행 초기에 프레임 배부 후 크기 조정
· 균등 할당 : process 크기 상관없이 동일한 프레임 배부 / 균등해서 문제
· 비례 할당 : process 크기 비례 / 유동적인 반영 ×, 미리 공간을 확보해 낭비가 생김
■ 동적 할당
· 유동성 있게 프레임 배부 및 크기 조정
· 작업 집합(Working-Set) : 공간 지역성 기반 / 최근 참조된 페이지들의 집합, 집합을 메모리에 유지
→ 작업 집합의 크기 : 메모리에 들어갈 최대 page의 수 (얼마나 자주 작업할 것인지)
→ WSW(작업집합 윈도우) : 선정할 페이지의 범위
· 페이지 부재 빈도 : Page Fault의 회수를 기록해 부재 비율을 계산 → 상한선과 하한선을 설정
→ 상한선 : 프레임 할당의 기준 / 하한선 : 프레임 회수의 기준
'개인 공부 > OS (쉽게 배우는 운영체제)' 카테고리의 다른 글
쉽게 배우는 운영체제 : 컴퓨터의 구조와 성능 향상 (2장) (0) | 2021.10.29 |
---|---|
쉽게 배우는 운영체제 : 운영체제의 개요 (1장) (0) | 2021.09.26 |
댓글