카테고리 없음

(8)Linux 메모리 구조

나뭇빛자루 2020. 9. 19. 17:17
반응형

메모리 관리의 기본이 되는 

물리 어드레스 공간과

논리 어디레스 공간이 있다.

 

서버의 물리 메모리는

리눅스 커널 자신이 사용하는 영역과

유저 PS가 사용 하는 영역으로 나눠진다

 

리눅스 커널은 Low메모리로 불리는 1MB~896MB의 영역에서만 사용하고

그 이외엔 유저 영역인 High메모리 라고 불린다.

 

커널자체를 포함해 서버에서 동작하는 프로그램이 물리 메모리에 접근할때

물리 어드레스를 직접 지정하는 것이 아니고 논리 어드래스를 사용한다.

 

물리어드레스에 접근할 때 논리어드레스와 물리어드레스의 대응표인 

페이지 테이블을 메모리의 커널 데이터 영역에 준비한다.

그리고 CPU에 탑재된 MMU(메모리 메니지먼트 유닛)가 페이지 테이블을 참고하며 

물리 어드레스로 접근한다.

 

이때 커널이 사용하는 Low메모리 영역은 페이지 테이블에 대해 3GB~4GB의

논리 어드레스 공간에 매핑된다. 이부분은 언제든지 커널이 사용할 수 있는 논리 메모리 공간이며

프로세스 마다 독립된 논리 어드레스 공간을 준비하면 PS마다 접근을 분산할 수 있다.

 

x86_64 아키텍처는 논래 어드레스 공간의 범위가 4GB로 제한 되지 않기 때문에 더 넓게 

메모리를 사용할 수 있다.

 

 

유저 메모리의 종류 

cat /proc/meminfo 를 실행 했을때 나타나는 것들중에

anon 메모리와 file 메모리다 (아래 그림 참조)

두 메모리에 차이는 물리 메모리의 내용이 물리디스크에 연결 되어 있는지 여부다

anon메모리는 유저 ps가 계산용의 중간 데이터를 보관해야 하므로 프로그램 실행중에

동적으로 확보한 메모리 영역 등이 할당된다.

C언어에 malloc()로 확보한 메모리 라고 생각하면 이해가 쉽다.

 

file메모리는 디스크 캐시로서 사용하는 메모리 영역 등

물리 메모리의 내용이 물리 디스크의 파일 내용에 대응한다.

논리 어드레스에 집적 연결하는 "파일 매핑용"의 메모리 영역 등 도 존재한다.

 

마지막으로 Active와 Inacive의 뜻은

Active는 가장 최근에 이용한 데이터를 포함한 메모리 영역이고

Inactive는 장기간 이용되지 않은 데이터를 포함한 영역으로 분류 된다.

 

리눅스 커널은 유저 메모리를 4종류로 분석하기 때문에 유저메모리에 대응하는

4종류의 LRU(Least Recently Used)리스트를 우선 기다린다.

 

리눅스 커널은 물리 메모리를 4KB의 페이지라고 불리는 단위로 나눠 관리한다.

Active와 Inactive의 분류는 메모리의 사용 상황에 따라 동적으로 변한다

최근 가장 적게 사용된 메모리 영역이 LRU 페이지에 이동된다.

 

메모리 페이지 중에는 원천적으로 릴리즈가 안 되는 것도 있다. 

이런 메모리 페이지는 4종류의 LRU 리스트에 등록할 이유가 없으므로

대신 LRU 리스트에 등록한다 이걸 확인 하기 위해선 free 명령어를 치면

보통 buffer와 cached의 값을 더한 것이 디스크 캐시의 사용량으로 간주된다.

 

반응형