캐시 메모리는 CPU에 의해 직접 관리된다. 운영 체제의 커널이 아니라 하드웨어 레벨에서 자동으로 데이터를 캐싱하고 관리한다.
캐시 메모리는 시간 근접성(Temporal Locality)과 공간 근접성(Spatial Locality)의 원리를 활용한다.
시간 근접성: 한 번 접근한 데이터는 곧 다시 접근될 가능성이 높다는 원리이다. 따라서 최근에 접근된 데이터는 캐시 메모리에 보관되어 빠르게 재접근할 수 있다.
공간 근접성: 메모리의 특정 위치에 접근했다면, 그 주변 위치의 데이터에도 곧 접근할 가능성이 높다는 원리이다. 이에 따라 CPU가 데이터에 접근할 때 해당 데이터의 주변 데이터도 함께 캐시 메모리에 로드된다.
캐시 메모리는 여러 계층(L1, L2, L3 등)으로 구성되어 있다.
L1 캐시: CPU 코어에 가장 가까우며, 가장 빠른 접근 속도를 제공한다. 그러나 용량이 가장 작다.
L2 캐시: L1 캐시보다는 느리지만, 용량이 더 크다. L1 캐시에서 찾을 수 없는 데이터를 저장하는 데 사용된다.
L3 캐시: 여러 코어 간에 공유될 수 있는 캐시로, L1과 L2 캐시보다 느리지만 더 큰 용량을 제공한다.
캐시 메모리가 가득 찼을 때 어떤 데이터를 캐시에서 제거할지 결정하는 정책이다. 가장 일반적인 캐시 교체 정책에는 최소 최근 사용(LRU, Least Recently Used), 랜덤(Random), FIFO(First-In, First-Out) 등이 있다.
캐시에 데이터를 쓸 때의 동작 방식을 정의한다. 쓰기 즉시(Write-Through) 방식은 데이터를 캐시와 주 메모리 모두에 동시에 쓰는 방식이고, 쓰기 지연(Write-Back) 방식은 변경된 데이터를 캐시에만 저장하고 나중에 주 메모리에 반영하는 방식이다.
페이지 캐시는 운영 체제가 디스크 I/O의 효율성을 향상시키기 위해 사용하는 메모리 관리 기법 중 하나이다. 파일 시스템의 데이터를 메모리에 캐싱함으로써, 디스크 접근 횟수를 줄이고 시스템의 전반적인 성능을 개선한다. 리눅스와 같은 운영 체제에서 페이지 캐시는 파일 데이터를 빠르게 읽고 쓸 수 있도록 지원한다.
페이지 캐시는 운영 체제의 커널에 의해 관리되고 커널은 메모리의 일부를 할당하여 파일 시스템의 데이터를 캐싱하는 데 사용하며, 이 과정은 운영 체제 수준에서 이루어진다.
읽기 연산 (Read Operations): 프로세스가 파일을 읽으려고 할 때, 운영 체제는 먼저 페이지 캐시에서 해당 데이터를 찾는다. 만약 요청된 데이터가 캐시에 있으면(캐시 히트), 데이터는 바로 프로세스에 제공된다. 이는 디스크 접근 시간보다 훨씬 빠르기 때문에 성능 이점을 제공한다. 반면, 요청된 데이터가 캐시에 없으면(캐시 미스), 운영 체제는 디스크에서 데이터를 읽어 페이지 캐시에 저장한 후, 그 데이터를 프로세스에 제공한다.
쓰기 연산 (Write Operations): 프로세스가 파일에 데이터를 쓰려고 할 때, 운영 체제는 해당 데이터를 먼저 페이지 캐시에 기록한다. 실제 디스크에 데이터를 쓰는 작업은 나중에 배경 작업으로 처리된다(쓰기 지연, Write-Back). 이는 쓰기 연산을 빠르게 완료할 수 있도록 하여 프로그램의 응답성을 향상시킨다.
캐시 관리: 운영 체제는 메모리 상황에 따라 페이지 캐시의 크기를 동적으로 조절한다. 메모리가 부족해지면, 운영 체제는 가장 오랫동안 사용되지 않은 데이터부터 페이지 캐시에서 제거(캐시 정리)하여 메모리를 확보한다.
하이퍼스레딩은 하나의 물리적 CPU 코어를 두 개의 독립적인 논리적 프로세싱 유닛으로 나누어 CPU의 처리 능력을 향상시킨다. 각각의 논리 코어는 별도의 스레드를 실행할 수 있어, 멀티 스레드 응용 프로그램의 성능을 개선할 수 있다. 하이퍼스레딩이 활성화되면 운영 체제는 물리적 코어 수의 두 배로 인식하며, 이를 통해 동시에 더 많은 작업을 처리할 수 있다.
하이퍼스레딩의 주요 이점은 CPU의 자원을 보다 효율적으로 사용하여 시스템의 전반적인 처리량을 증가시킨다는 것이다. 특히, 여러 스레드를 동시에 처리해야 하는 멀티태스킹 환경에서 더 높은 성능을 발휘한다. 그러나 모든 응용 프로그램이 하이퍼스레딩에서 이점을 얻는 것은 아니며, 스레드 간의 경쟁으로 인해 일부 경우에는 성능이 오히려 저하될 수도 있다.
하이퍼스레딩은 프로세스 스케줄링과 자원 할당 방식을 최적화함으로써, CPU의 유휴 시간을 최소화하고 작업 처리 속도를 높인다. 하지만, 하이퍼스레딩이 항상 성능 향상을 보장하는 것은 아니며, 실제 효과는 실행 중인 작업의 종류와 시스템 구성에 따라 다를 수 있다.