OS 페이징과 캐시
운영체제에서 캐싱과 페이징은 메모리 관리와 성능 향상을 위한 핵심 개념입니다. 이 둘은 프로세스와 데이터를 더 빠르고 효율적으로 처리하기 위해 CPU와 메모리 사이의 자원 관리 방식에 관련된 개념입니다. 아래에서는 각각의 내부 로직을 설명하겠습니다.
1. 캐싱 (Caching)
개념:
캐싱은 자주 사용되거나 접근할 가능성이 높은 데이터를 저장 공간에 임시로 저장하여, 해당 데이터에 대한 접근 속도를 높이는 방법입니다. 일반적으로 CPU 캐시나 디스크 캐시로 나누어지며, 운영체제는 이 캐싱을 통해 I/O 병목 현상을 줄이고, 데이터 접근 속도를 크게 향상시킬 수 있습니다.
캐시의 내부 로직:
1. CPU 캐시:
CPU는 메모리(RAM)보다 속도가 훨씬 빠릅니다. 하지만 RAM에서 데이터를 가져오는 것이 상대적으로 느리기 때문에, CPU는 캐시 메모리(L1, L2, L3 캐시)를 사용해 데이터를 임시 저장합니다.
- 캐시 히트(Cache Hit):
- CPU가 데이터를 읽을 때 먼저 캐시 메모리에서 해당 데이터가 있는지 확인합니다.
- 캐시 히트가 발생하면, 데이터를 캐시에서 가져와 매우 빠르게 처리합니다.
- 캐시 미스(Cache Miss):
- CPU가 캐시에서 데이터를 찾지 못하는 경우 캐시 미스가 발생합니다.
- 이 경우, CPU는 데이터를 메모리(RAM)에서 읽어와야 하며, 그 데이터를 캐시에 새로운 항목으로 저장해 두고, 이후의 데이터 요청을 빠르게 처리할 수 있도록 준비합니다.
- 교체 정책 (Cache Replacement Policy):
- 캐시 메모리 공간은 한정되어 있기 때문에, 새로운 데이터를 캐시에 저장할 때 기존의 덜 사용된 데이터를 교체해야 합니다.
- 일반적인 교체 정책에는 LRU(Least Recently Used), FIFO(First In First Out), LFU(Least Frequently Used) 등이 있습니다. 예를 들어, LRU는 가장 오랫동안 사용되지 않은 데이터를 교체하는 방식입니다.
2. 디스크 캐시 (Page Cache):
디스크 접근은 메모리 접근보다 훨씬 느리기 때문에, 운영체제는 디스크 캐시를 사용하여 자주 사용되는 디스크 데이터를 메모리에 저장해 둡니다. 디스크 캐시는 일반적으로 파일 시스템의 I/O 성능을 향상시키는 데 사용됩니다.
- 읽기 캐시:
- 운영체제는 파일을 읽을 때, 그 파일의 내용을 메모리에 캐시해 둡니다.
- 나중에 동일한 파일을 다시 요청하면 디스크 대신 캐시에서 데이터를 가져오므로 I/O 비용을 줄일 수 있습니다.
- 쓰기 캐시:
- 운영체제는 데이터를 디스크에 쓰기 전에 메모리의 캐시에 저장해 두고, 나중에 배치 작업(batch)으로 디스크에 쓰는 방식(지연 쓰기)을 사용합니다.
- 이를 통해 자주 변경되는 데이터를 빠르게 처리할 수 있으며, 디스크에 접근하는 빈도를 줄입니다.
2. 페이징 (Paging)
개념:
페이징은 운영체제가 프로세스의 가상 메모리를 고정 크기의 페이지로 나누고, 이를 물리 메모리(RAM)와 매핑하여 관리하는 방식입니다. 이는 프로세스가 실제 물리 메모리의 크기보다 더 큰 메모리 공간을 사용하는 것처럼 보이게 만들어 줍니다. 페이징의 목적은 메모리 관리의 효율성을 높이고, 메모리 부족 현상을 해결하는 것입니다.
페이징의 내부 로직:
1. 가상 메모리와 물리 메모리의 매핑:
- 가상 메모리는 프로세스가 사용하는 논리적인 메모리 주소 공간입니다. 이 가상 주소는 페이지 테이블을 통해 실제 물리 메모리의 프레임에 매핑됩니다.
- 가상 메모리의 각 페이지(Page)는 물리 메모리의 페이지 프레임에 대응하며, 이 과정에서 필요한 데이터만 물리 메모리에 올려놓고 나머지는 디스크(스왑 공간)에 저장할 수 있습니다.
2. 페이지 테이블:
- 운영체제는 페이지 테이블을 유지하며, 각 프로세스의 가상 페이지가 물리 메모리의 어느 프레임에 저장되어 있는지 기록합니다.
- 프로세스가 가상 주소를 접근할 때, 페이지 테이블을 참조하여 그에 대응하는 물리적 주소를 찾아 실제 데이터를 읽거나 씁니다.
3. 페이지 폴트(Page Fault):
- 만약 프로세스가 메모리에 존재하지 않는 페이지에 접근하려 할 때 페이지 폴트가 발생합니다. 이는 가상 메모리의 페이지가 현재 물리 메모리에 없는 경우입니다.
- 페이지 폴트가 발생하면 운영체제는 디스크(스왑 공간)에서 해당 페이지를 읽어 물리 메모리에 올리고, 페이지 테이블을 갱신합니다.
- 페이지 폴트는 디스크 I/O를 수반하므로 비교적 느린 작업이며, 페이지 폴트 빈도를 줄이는 것이 시스템 성능에 중요합니다.
4. 페이지 교체 (Page Replacement):
- 물리 메모리가 가득 차면, 새로운 페이지를 메모리에 로드하기 위해 기존의 페이지를 제거해야 합니다. 이 때 사용하는 것이 페이지 교체 알고리즘입니다.
- 대표적인 알고리즘으로는 LRU(Least Recently Used), FIFO(First In First Out), Optimal Page Replacement 등이 있습니다.
- 페이지 교체는 페이징의 핵심 메커니즘 중 하나로, 효율적인 교체 정책을 통해 페이지 폴트의 발생을 최소화하는 것이 중요합니다.
5. 스왑 공간 (Swap Space):
- 가상 메모리의 일부 페이지가 물리 메모리에서 쫓겨났을 때, 그 페이지는 디스크의 스왑 공간으로 이동합니다.
- 운영체제는 스왑 공간에 있는 페이지를 다시 필요할 때 페이지 폴트를 통해 불러옵니다. 스왑 공간은 실제 메모리 공간이 부족할 때 사용하는 보조 저장 장치입니다.
캐싱과 페이징의 차이점
- 캐싱: 자주 사용되는 데이터를 임시로 저장하여 빠르게 접근하는 방법입니다. 주로 CPU 캐시와 디스크 캐시에서 발생하며, 속도 향상을 목표로 합니다.
- 페이징: 가상 메모리에서 실제 메모리로 데이터를 관리하는 방식으로, 메모리를 효율적으로 사용하는 데 목적이 있습니다. 페이지 폴트와 페이지 교체가 핵심 메커니즘입니다.
요약
- 캐싱은 CPU와 디스크 성능을 높이기 위한 빠른 임시 저장 메커니즘입니다. CPU 캐시는 자주 사용하는 데이터를 메모리에 임시로 저장하고, 디스크 캐시는 파일 데이터를 메모리에 저장하여 성능을 높입니다.
- 페이징은 운영체제가 프로세스의 가상 메모리와 물리 메모리를 효율적으로 관리하기 위한 방법으로, 페이지 단위로 메모리를 할당하고 페이지 교체와 페이지 폴트를 통해 메모리를 관리합니다.
'Interview > OS' 카테고리의 다른 글
OS Disk Swap 디스크 스왑 (0) | 2024.09.28 |
---|---|
OS Delayed Write 지연 쓰기 (0) | 2024.09.28 |
Multiprocess간 IPC 중 메모리 매핑 파일 (1) | 2024.09.28 |
Multiprocess간 IPC 중 공유 메모리 (0) | 2024.09.28 |
OS Semaphore 세마포어 (0) | 2024.09.28 |