페이지 폴트 (page fault)
어떤 페이지가 실제 물리 메모리에 없을 때 일어나는 인터럽트
운영 체제가 page fault가 일어나면 해당 페이지를 물리 메모리에 올림
생각해보기
페이지 폴트가 자주 일어나면?
실행되기 전에 해당 페이지를 물리 메모리에 올려야 함 - 시간이 오래 거림
페이지 폴트가 안 일어나게 하려면?
향후 실행/참조될 코드/데이터를 미리 물리 메모리에 올리면 됨
- 앞으로 있을 일을 예측해야한다 -> 신의 영역이다
페이지 교체 정책 (page replacement policy)
운영체제가 특정 페이지를 물리 메모리에 올리려 하는데 물리 메모리가 다 차있다면?
기존 페이지 중 하나를 물리 메모리에서 저장 매체로 내리고 (저장)
새로운 페이지를 해당 물리 메모리 공간에 올린다
페이지 교체 알고리즘 (FIFO)
FIFO Page Replacement Algotrithm : 가장 먼저 들어온 페이지를 내리자
페이지 교체 알고리즘
OPT(OPTimal Replacement Algorithm) - 최적 페이지 교체 알고리즘
앞으로 가장 오랫동안 사용하지 않을 페이지를 내리자
일반 OS에서는 구현 불가
LRU(Least Recently Used) Page Replacement Algorithm
가장 오래 전에 사용된 페이지를 교체
OPT 교체 알고리즘이 구현이 불가하므로 과거 시록을 기반으로 시도
* 참고 : 메모리 지역성
페이지 스왑 알고리즘
LFU(Least Frequently Used) Page Replacement Algorithm
가장 적게 사용된 페이지를 내리자
NUR(Not Used Recently) Page Replacement Algorithm
LRU와 마찬가지로 최근에 사용하지 않은 페이지로부터 교체하는 기법
각 페이지마다 참조비트(R), 수정비트(M)을 둠 (R, M)
-> (0,0), (0,1), (1,0), (1,1) 순으로 페이지를 교체한다
쉬어가기
프로그램을 여러 개 띄우면 프로그램 전환시 컴퓨터가 버벅 거려요!
-> 램을 늘려야 해요! 램을 왜 늘려야 할까요?
스레싱 (Thrashing)
반복적으로 페이지 폴트가 발생해서, 과도하게 페이지 교체 작업이 일어나 실제로는
아무일도 하지 못하는 상황
세그멘테이션(Segmentation) 기법
가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트(Segment)로 분할
페이징 기법에서는 가상 메모리를 같은 크기의 블록으로 분할
예 : x86 리얼모드
- CS(Code Segment), DS(Data Segment), SS(Stack Segment), ES(Extra Segment) 로
세그먼트를 나누어 메모리 접근
세그먼트 가상주소 v=(s,d)
s : 세그먼트 번호 / d = 블록 내 세그먼트의 변위
세그멘테이션은 크기가 다른 segment 단위로 물리 메모리에 로딩
참고
* 내부 단편화 (페이지 기법) : 페이지 블록만큼 데이터가 딱 맞게 채워져있지 않을 때 공간 낭비
* 외부 단편화 (세그멘테이션 기법)
: 물리 메모리가 원하는 연속된 크기의 메모리를 제공해주지 못하는 경우
* 세그멘테이션 / 페이징 모두 하드웨어 지원 필요
: 다양한 컴퓨터 시스템에 이식성을 중요시하는 리눅스는 페이징 기법을 기반으로 구현
출처 : 제로베이스
'공부 Note > 운영체제' 카테고리의 다른 글
Chapter 07 부팅의 이해 (0) | 2022.01.04 |
---|---|
Chapter 06 파일 시스템의 이해 (0) | 2022.01.04 |
Chapter 05 가상 메모리 (2) (0) | 2022.01.04 |
Chapter 05 가상 메모리 (1) (0) | 2022.01.04 |
Chapter 04 쓰레드의 이해 (3) (0) | 2021.12.30 |