프로세스의 논리적 주소가 실제로 어떤 물리적 주소에 있는지 (매핑되어 있는지) 확인하는 과정
페이징 (Paging) 개념
프로세스의 메모리와 물리적 메모리를 일정한 크기, 즉 page 단위로 미리 나누어, 물리적 메모리의 서로 다른 위치에 page 단위로 저장하는 메모리 관리 기법
미리 분할해두면 메모리 할당이 빠르기 때문!
모든 프로세스는 각각의 논리적 주소의 page가 물리적 주소의 어떤 page에 있는지 변환시켜주는 page table을 가짐
메모리 단편화 (Memory Fragmentation)
내부 단편화
프로세스 메모리에 단편화가 생기는 경우
프로세스 메모리를 page 단위로 나누다가 맨 끝 부분이 사이즈가 딱 안맞아 떨어지고 페이지에 남는 부분이 생김
외부 단편화
물리적 메모리에 단편화가 생기는 경우
page들이 물리적 메모리에 적재될 수록, 중간 중간에 page가 들어가기 애매만 크기만큼 낭비되는 공간들이 생김
세그멘테이션 (Segmentation)
개념
프로세스 메모리를 논리적 의미 단위인 segment로 나누어 물리적 메모리에 연속되지 않게 할당하는 기법
일반적으로 Code, Data, Heap, Stack 등의 기능 단위로 segment를 정의하는 경우가 많음
프로세스의 segment 주소를 물리 메모리의 주소로 바인딩하는 segmenttable 가짐
메모리 단편화 (Memory Fragmentation)
내부 단편화
프로세스 메모리를 기능 단위인 segment로 나누기 때문에 단편화가 발생하지 않음
외부 단편화
서로 다른 크기의 segment들이 메모리에 적재, 제거되다 보면 사이 사이 낭비되는 공간이 생김
Paged Segmentation
Segmentation 후 Paging하는 기법
segment를 기본으로 하되, 이를 다시 page로 나누어주는 기법
프로세스 메모리 → segment 단위로 나누기 → 이를 다시 page 단위로 나누기
segmentation의 외부 단편화 해결 가능
가상 메모리 (Virtual Memory)
개념
프로세스 전체가 물리 메모리에 적재되지 않더라도 실행 가능하게 하는 기법
사용자 프로그램이 물리적 메모리보다 커도 실행 가능하다는 장점
→ 개발자는 메모리 크기 문제 염려할 필요 없이 쉽게 프로그램 작성 가능
운영체제는 가상 메모리 기법을 통해 프로그램의 논리적 영역에서 필요한 부분만 물리적 메모리에 적재, 나머지는 디스크(swap)에 적재
요구 페이징 (demand paging)
“CPU가 가상 메모리 기법으로 프로세스의 ‘필요한 부분’에 접근할 때, 이 부분을 page 단위로 나눈 것”
‘당장 사용될’ 주소 공간을page단위로 메모리에 적재하는 방법
CPU가 특정 page에 대한 요청을 하면, 이를 메모리에 적재
메모리 사용량, 프로세스 전체를 메모리에 적재하는 입출력 오버헤드 감소
유효∙무효 비트 (valid∙invalid bit)를 두어 각 page가 메모리에 존재하는지 표시
유효 → 메모리에 있음, 무효 → 디스크(swap)에 있음
Page Fault
“근데 만약에 CPU가 무효 비트에 접근하면 어떻게 됨? 이 상황이 Page Fault” ”어라 (물리적 메모리에) 없네 ,,, 긁적 ,,, (디스크에서) 가져올게 ,,,”
CPU가 무효 비트(invalid bit)라고 표시된 page에 엑세스하는 상황
page fault가 발생하면 MMU가 page fault trap을 발생
순서
CPU가 page N 참조
Page table에서 무효 비트임을 확인
MMU에서 page fault trap 발생 (커널에 디스크에서 메모리에 실으라고 요청)
디스크에서 page N을 빈 프레임에 적재, page table 업데이트 (invalid → valid)
페이지 교체 알고리즘 (Replacement Algorithm)
“Page Fault 나서 메모리로 가져오는데, 만약 자리 없으면 우짬? 누구 자리 뺏어야할 것 같은데 …” -> 이에 대한 방법이 페이지 교체 알고리즘
page fault 발생 시, 디스크에서 메모리로 페이지를 적재해야 함. 이때 물리적 메모리에 자리가 부족할 경우, 메모리의 페이지를 디스크로 옮겨서 자리를 확보하는 방법이 **페이지 교체(page replacement)**라고 하고, 어떤 페이지를 교체할 것이냐 결정하는 알고리즘이 페이지 교체 알고리즘 (replacement algorithm)
페이지 교체 알고리즘은 최대한 page fault가 적게 일어나도록 도와줘야 함
따라서 앞으로 참조될 가능성이 적은 페이지를 선택해 교체하는 것이 성능 향상에 도움이 됨
페이지 교체 알고리즘 종류
FIFO : 메모리에 올라온지 가장 오래된 페이지 교체
최적 페이지 교체 : 앞으로 가장 오래 사용되지 ‘않을’ 페이지 교체. 구현 어려움
LRU (Least Recently Used) : 가장 오래 사용되지 ‘않았던’ 페이지 교체
LFU (Least Frequently Used) : 참조 횟수가 가장 적은 페이지 교체. 비용 대비 성능이 안좋음