가상메모리
주 기억장치의 부족한 물리적 공간을 보조 기억장치를 이용해서 확장시킨 것처럼 사용하는 기술
- 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능케 함
- 실행에 필요한 부분만 메모리에 올라옴
- CPU는 MMU와 TLB를 사용하여 가상 메모리 주소에 접근
- MMU가 실제 메모리에서 유효한 페이지를 찾지 못할 경우 Page Fault
발생
- Paging, Segmentation, Memory Pool 등을 사용
MMU (Memory Management Unit)
- 가상 주소를 물리 주소로 변환하는 하드웨어 디바이스
- OS를 통해 페이지(세그먼트) 테이블에 접근하고, MMU가 변환 작업을 진행
- 일반적으로 CPU 내에 존재
- 메모리의 실제 배열과 상관없이, 연속된 메모리로 취급할 수 있게 함
TLB (Translation Lookaside Buffer)
- 자주 참조되는 Page Table Entry를 저장하는 하드웨어 캐시
- MMU 내부 (CPU 내부)에 존재
- 크기가 작아, 검색 시간이 짧음
장점
- 메모리 크기의 제약에서 자유로워짐
- 프로그램이 실행에 필요한 최소 크기의 메모리만을 요구하기 때문에, 더 많은 프로그램을 동시 실행 가능해짐
- 각 프로세스에 메모리에 대해 제한된 엑세스 권한을 부여함으로써 메모리를 보호
- 각 프로세스는 서로 독립적인 메모리 공간을 가짐
페이징 (Paging)
물리 메모리를 서로 일정한 크기인 Frame으로 나눔
가상 메모리를 Frame과 동일한 크기의 Page로 나눔
= 이후 필요한 Page를 Frame에 적재하고 실행

특징
- 각 Page는 연속적이지 않은 공간에 존재 가능
- 각 프로세스는 독자적인 Page Table을 가짐
- 외부 단편화가 발생하지 않지만, 내부 단편화가 발생할 수 있다.
Page size 크기에 따른 차이
- Page size가 작을 때
-> 프로세스 당 Page 수가 증가
-> Page Table 크기가 증가
-> 더 많은 메모리 공간을 차지
- Page size가 클 때
-> 내부 단편화 발생 확률이 증가 (사용하지 않는 부분도 메모리에 적재될 수 있음 )
-> Page Fault
발생 확률 증가
페이지 폴트 (Page Fault)
- 발생이유
- 페이지가 물리 메모리에 없는 경우
- 페이지 교체 ( 물리 메모리에 여유 공간이 부족할 때 )
- 읽기 전용 페이지에 쓰기 시도
- 해결과정
- CPU에서 특정 데이터에 대한 가상 주소를 요청
- MMU에서 해당 가상 주소를 기반으로 TLB를 조회
- 조회 결과, 데이터가 있으면 바로 해당 데이터 반환
- TLB에 데이터가 없으면 메인 메모리의 Page Table에 접근하여 해당 가상 주소의 물리 주소 검색
- 해당 물리 주소가 메모리에 적재되어 있는지 확인
- 해당 물리 주소가 메모리에 적재되어 있으면 데이터를 CPU에 반환
- 해당 물리 주소가 메모리에 적재되어 있지 않으면,
Page Fault
가 발생하여 운영체제에 전달
- 운영체제는
Pafe Fault
를 전달받고 해당 페이지를 갖고있는 프로세스에 접근하여 해당 페이지를 물리 메모리에 적재
- 물리 메모리에 비어있는 프레임이 없다면, 희생 프레임을 선택해야함 ( 페이지 교체 알고리즘 활용 )
- 적재된 페이지에 대한 정보를 Page Table에 업데이트
- 이후 CPU는 가상 주소를 재요청
페이지 폴트가 자주 발생 시, 위의 과정을 거쳐야 하기 때문에 프로그램의 실행 속도가 저하될 수 있음
세그멘테이션 (Segmentation)
페이징 프로세스를 물리적으로 일정한 크기로 나누어 메모리에 할당
세그멘테이션 프로세스를 논리적 내용을 기반으로 나눠서 메모리에 할당
세그멘테이션은 프로세스를 세그먼트의 집합으로 표현
세그먼트의 논리 단위에 해당되는 것
- main program
- procedure
- function
- method
- object
- stack
- local variable
- global variable
- etc...
메모리 풀 (Memory Pool)