1. 메모리¶
Windows에서는 Committed 메모리라 부른다.
1.1. 물리 메모리¶
실제로 서버 또는 데스크탑에 설치된 메모리의 총량을 뜻한다. 또는 프로세스에서 현재 사용중인 물리메모리를 뜻한다.
1.2. 가상 메모리¶
가상 메모리란 사용자의 논리적 메모리로 나눠 프로세스들이 전체 메모리를 사용하는 것 처럼 만드는 기술이다. 프로세스에 프레임이 할당된 메모리와 할당 되지 않은 메모리로 나눠진다.
OS별 명칭
- 커밋(Committed)된 메모리: Windows에서 프로세스에 할당한 전체 메모리 크기
- VSize(Virtual Memory Size): Linux에서 프로세스에 할당한 전체 메모리 크기(스왑 아웃된 페이지 뿐만 아니라 메모리 맵 파일까지 포함)
1.2.1. 가상 메모리 구조¶
- 먼저 물리적 메모리를 프레임 단위로 나누고 사용자 논리 메모리를 페이지 단위로 나눈다.
- CPU에서 가져온 명령의 주소는 모드 페이지 번호 및 페이지 오프셋으로 구성되어 있다.
- 페이지 번호를 이용해 페이지 테이블의 프레임 번호를 얻어온 뒤 페이지 오프셋을 더하여 최종 물리적 주소를 계산한다.
1.2.2. 페이지 기법¶
페이지 기법이란 논리 주소 공간이 연속적으로 존재해야 한다는 제약을 없애는 기술이다. 이 제약은 메모리 공간을 예약할 필요가 없다는 뜻이다. 이를 사용하여 외부 단편화를 방지하고 및 압축작업을 필요없게 한다.
페이지 테이블의 종류
- 계층적 페이징 : 2개의 페이지 테이블, 즉 외부 페이지 테이블, 페이지 테이블을 두어 물리 주소를 찾을 수 있다.
- 해시된 페이지 테이블 : 페이지 번호 - 오프셋 쌍에서 페이지 번호를 키로 해시 테이블을 탐색하고 연결된 리스트들과 키를 비교하며 같은 값을 찾는 방식이다. 32비트를 넘어가는 프로세스에서 사용할 수 있다.
1.2.3. 단편화¶
외부 단편화는 메모리가 할당되고 제거되는 과정에서 메모리가 너무 작아 더이상 메모리를 사용할 수 없을때를 뜻하는 말이다. 이를 해결하기 위해 압축 기법을 사용한다. 내부 단편화는 프로세스에 할당된 메모리 크기보다 더 작은 프로세스가 로딩됐을때 내부에서 사용되지 않는 공간을 뜻하는 말이다.
1.2.4. 페이지 교체¶
- 디스크에서 필요한 페이지를 찾아낸다.
- 빈 페이지 프레임을 찾는다.
- 빈 페이지 프레임이 없다면 교체될 프레임을 선정하기 위해 페이지 교체 알고리즘을 사용한다.
- 새롭게 비워진 프레임에 새 페이지를 읽어오고 프레임 테이블을 수정한다.
1.2.5. 페이지 교체 알고리즘¶
- FIFO 교체 : 가장 오래된 페이지를 교체한다.
- LRU(Least recently used) 교체 : 가장 오래동안 사용되지 않은 페이지를 교체하는 방법이다.
1.2.6. 물리 메모리와 가상 메모리의 관계¶
프로세스는 항상 가상 메모리의 크기 만큼 물리 메모리를 사용하지 않는다. 실제로 물리 메모리를 얼마나 사용하는지는 얼만큼의 물리 메모리의 프레임이 할당되었는지를 확인하면된다. Swap-in된 페이지의 크기를 확인하는 것과 같다.
OS별 명칭
- 워킹 셋(Working Set): Windows에서 프레임이 할당된 가상 메모리 크기
- RSS(Resident Memory Size): Linux에서 프레임이 할당된 가상 메모리 크기
1.2.7. 세그멘테이션 기법¶
세그멘테이션이란 사용자 관점에서 나눠지는 메모리를 기준으로 나누는 기법을 뜻한다. 스택, 코드영역, 힙, 데이터 영역등을 뜻한다. 이때 Base(기준, 시작지점)과 LIMIT(한계, 길이)를 사용하여 테이블을 구성하여 관리한다.