크래프톤 정글 일지

[PintOS] Lazy Loading

나한나한나한나 2024. 6. 1. 17:02

 

 

 

지연 로딩(Lazy Loading) 개념

**지연 로딩(Lazy Loading)**은 필요한 시점까지 실제 리소스의 로드를 지연시키는 프로그래밍 기법입니다. 메모리 관리를 개선하고, 초기 로딩 시간을 단축하며, 시스템 리소스를 효율적으로 사용하기 위해 사용됩니다. 데이터가 실제로 필요할 때까지 로드를 지연시켜 불필요한 메모리 사용과 성능 저하를 방지합니다.

지연 로딩의 이점

  1. 메모리 사용 최적화: 실제로 필요한 데이터만 메모리에 로드하여 메모리 사용량을 줄입니다.
  2. 초기 로드 시간 단축: 초기 실행 시점에 필요한 데이터만 로드하므로 애플리케이션의 시작 시간을 단축시킵니다.
  3. 성능 향상: 필요할 때 데이터 로드를 수행하므로 전체적인 애플리케이션 성능이 향상됩니다.

Pintos에서 지연 로딩 적용 방법론

1. 가상 주소와 struct page 연관 짓기

가상 주소가 생성될 때마다 해당 주소에 struct page를 연관시킵니다. 이는 익명 메모리나 파일 기반 메모리 등 다양한 목적에 사용될 수 있습니다. struct page는 페이지의 타입과 초기화 방법 등을 반영합니다.

2. struct page의 초기화

페이지는 초기에는 uninit_page로 시작합니다. 그런 다음, 각 타입에 따라 적절한 초기화 함수가 할당됩니다:

  • 익명 메모리: anon_initializer
  • 파일 기반 메모리: file_map_initializer

이 초기화 함수들은 페이지가 실제로 액세스될 때 해당 페이지의 내용을 채우는 역할을 합니다.

3. 보조 페이지 테이블(Supplemental Page Table, SPT)

보조 페이지 테이블은 각 페이지에 대한 추가 정보를 제공하며, 페이지 폴트가 발생했을 때 또는 프로세스가 종료될 때 커널이 적절한 처리를 할 수 있도록 돕습니다.

  • spt_find_page 함수를 통해 가상 주소에 해당하는 struct page를 찾습니다.

4. 페이지 폴트 처리

페이지 폴트가 발생하면 커널은 보조 페이지 테이블을 조회하여 해당 페이지가 어디에서 로드되어야 하는지 확인합니다. 이 정보를 기반으로 해당 페이지를 실제로 메모리에 로드합니다.

5. 페이지 프레임 할당

페이지 프레임이 할당된 후에는 다음 단계로 해당 프레임의 내용을 채우는 작업이 이루어집니다. 예를 들어, 파일 기반 메모리 페이지는 파일 시스템에서 데이터를 읽어오고, 익명 메모리 페이지는 0으로 초기화될 수 있습니다.

구현 단계 요약

  1. 구조체 정의 및 초기화: struct page와 보조 페이지 테이블(SPT)을 정의하고 초기화합니다.
  2. 페이지 타입에 따른 초기화 함수 작성: 각 페이지 타입(익명 메모리, 파일 기반 메모리)에 따른 초기화 함수를 작성합니다.
  3. 페이지 테이블과 보조 페이지 테이블 연동: 페이지 테이블과 보조 페이지 테이블을 연동하여 페이지 폴트 시 적절한 처리가 이루어지도록 합니다.
  4. 페이지 폴트 핸들러 작성: 페이지 폴트 발생 시, 보조 페이지 테이블을 참조하여 적절한 페이지를 로드하는 핸들러를 작성합니다.
  5. 테스트 및 디버깅: 지연 로딩이 올바르게 작동하는지 테스트하고, 문제 발생 시 디버깅합니다.

이러한 방식으로 Pintos에 지연 로딩을 적용하여 메모리 사용을 최적화하고 성능을 향상시킬 수 있습니다.