2024.06.10 - [Computer Science/OS, System] - [System] Memory Managemen in Linux System - 1

 

[System] Memory Management in Linux System - 1

Memory Paging 기법을 이용한 기술 논문을 읽다가 문득 Memory Management 에 대해서 무지했던 것을 알고 이번 기회에 정리하려고 한다. Memory Paging 리눅스에서 페이징 기법은 메모리 관리를 하기 위한

developepe.tistory.com

 

이전 내용에서 이어진 글 입니다

 

우리가 고용량의 파일을 메모리가 부족함에도 불구하고 게임을 돌릴 수 있는 이유가 무엇일까 한번 생각해보자.

내 컴퓨터에는 16GB의 RAM이 장착되어있고 Battleground 같은 게임은 우리가 아는바와 같이 16GB 이상의 용량을 가졌다.

그럼에도 불구하고 우리 컴퓨터가 게임을 실행할 수 있는 이유는 바로 요구 페이징(Demand Paging) 기능 덕분이다.

 

요구 페이징(Demand Paging)

 

요구 페이징은 프로그램이 실제로 필요로 하는 페이지만 메모리에 로드하여 메모리 사용을 최적화 하는 기술이다. 이를 통해 운영체제는 물리 메모리의 제약을 극복하고 더 큰 프로그램을 실행할 수 있게 되는 것이다.

 

프로세스의 페이지 테이블에서 VPFN으로 엔트리를 찾았을 때, 해당 엔트리에 대응하는 물리 페이지가 없다면 페이지 폴트(Page Fault)가 발생하고, 프로세스는 리눅스 커널에게 폴트가 발생한 가상 주소와 폴트의 원인을 통보하게 됩니다.

 

  • 가상 주소가 프로세스의 가상 주소공간 내 유효하지 않다면, Kernel은 SIGSEGV 시그널(세그멘테이션 폴트)을 프로세스에게 전달
  • 가상 주소가 프로세스의 가상 주소공간 내 유효하다면, Kernel은 폴트가 발생한 가상 페이지를 디스크의 실행 이미지에서 찾아서 물리 메모리에 로드한 뒤, 페이지 테이블에 PTE를 추가
    • 이 과정은 디스크에 접근하기 때문에 시간이 걸리므로, 그 시간동안 다른 프로세스를 실행
    • CPU는 페이지 폴트가 발생했던 기계어 명령부터 재실행 (아래 그림의 7번)

https://movefast.tistory.com/341

 

(우리가 게임할 때 엄청나게 거대한 Map을 가져올 때 로딩이 걸리는 이유가 바로 위의 얘기이다.)

 

스와핑(Swapping)은 프로세스의 가상 페이지를 물리 메모리에 로드할 때 빈 물리 페이지가 없는 경우, 기존 물리 페이지를 제거하여 공간을 마련하는 과정이다.

 

  • 커널은 물리 메모리에서 더티 페이지(dirty page, 변경된 페이지)를 제거할 때, 내용을 보존하기 위해 스왑 파일(swap file)에 페이지를 저장
  • 스왑 알고리즘(swap algorithm)은 어떤 페이지를 제거하거나 스왑할 지 결정하는데, 반복적인 스왑으로 디스크에 접근하느라 커널이 다른일을 하지 못하는 쓰래싱 상태(thrashing)를 피하는 것이 중요
  • 따라서, 효율적인 스왑 알고리즘은 프로세스가 현재 사용하고 있는 페이지들의 집합(작업 집합)을 모두 물리 메모리에 있게함
  • 페이지 교체 알고리즘으로 Least Recently Used(LRU) Page Aging 기법을 사용
  • 페이지마다 나이(age)가 있고, 페이지가 자주 접근될 수록 젊어지고, 적게 접근될 수록 나이가 드는 구조
  • 나이든 페이지는 스와핑의 좋은 후보이며, 연결 리스트로 구현됨.( 사용된 페이지를 참조하는 노드는 리스트의 맨 뒤로 이동하며, 결국 리스트 맨 앞에 있는 노드는 가장 적게 참조된 페이지를 가르키됨, 리스트가 꽉차면 맨 앞의 노드를 제거)

 

 

다음 글에서는 캐시(Cache)에 대해 설명하는 글을 포스팅 할 예정입니다~

 

Reference

https://movefast.tistory.com/341