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