이 문서는 Google Cloud Translation API를 사용해 자동 번역되었습니다.
어떤 문서는 원문을 읽는게 나을 수도 있습니다.
Linux 환경에서 작업하는 개발자는 커널이 메모리 및 프로세스 스케줄링을 관리하는 방법을 알고 있어야 합니다. 이 안내서는 Linux의 메모리 관리에 대한 개요를 제공하며 IT 개발과 어떻게 관련되는지에 중점을 둡니다.
Linux 커널은 메모리 및 프로세스 일정 관리를 담당합니다. 다양한 기술을 사용하여 메모리 사용량과 성능을 최적화합니다.
메모리 관리의 가장 중요한 측면 중 하나는 페이지 캐시입니다. 페이지 캐시는 디스크에서 데이터를 캐시하는 데 사용되는 사용 가능한 메모리 풀입니다. 프로세스가 디스크에서 데이터를 읽어야 할 때 커널은 먼저 페이지 캐시를 확인하여 데이터가 이미 메모리에 있는지 확인합니다. 그렇다면 디스크 대신 메모리에서 데이터를 읽어 훨씬 더 빠릅니다.
페이지 캐시는 성능에 중요하지만 문제를 일으킬 수도 있습니다. 프로세스가 디스크에서 많은 양의 데이터를 읽어야 하는 경우 페이지 캐시가 빠르게 채워질 수 있습니다. 이로 인해 시스템의 메모리가 부족해지고 스와핑이 시작되어 매우 느려질 수 있습니다.
이 문제를 피하기 위해 커널은 "swappiness"라는 기술을 사용합니다. Swappiness는 커널이 페이지 캐시를 얼마나 적극적으로 사용할 것인지 제어하는 조정 가능한 매개변수입니다. 0 값은 시스템 메모리가 부족하더라도 커널이 절대 스왑되지 않음을 의미합니다. 값 100은 필요하지 않더라도 커널이 항상 스왑됨을 의미합니다.
swappiness의 기본값은 60입니다. 이는 커널이 페이지 캐시를 적극적으로 사용하지만 필요할 때 여전히 스와핑을 시작함을 의미합니다.
메모리 관리 외에도 Linux 커널은 프로세스 스케줄링도 담당합니다. 데드라인 스케줄러, 페어 스케줄러, 완전 페어 스케줄러 등 다양한 알고리즘을 사용하여 프로세스를 스케줄링합니다.
마감일 스케줄러는 특정 시간 내에 작업을 완료해야 하는 실시간 프로세스를 위해 설계되었습니다.
공정한 스케줄러는 중단 없이 오랫동안 실행할 수 있는 배치 프로세스를 위해 설계되었습니다.
완전히 공정한 스케줄러는 대부분의 Linux 배포판에서 기본 스케줄러입니다. 모든 프로세스에 대해 공정한 CPU 액세스를 제공하도록 설계되었습니다.
메모리 관리 및 프로세스 스케줄링은 Linux 개발의 중요한 측면입니다. 개발자는 성능을 최적화하고 문제를 피하기 위해 커널이 메모리 및 프로세스 일정을 관리하는 방법을 알고 있어야 합니다.