크래프톤 정글 일지

[PintOS] '프레임에 대한 백 레퍼런스' 가 뭔 소리임? What is 'Back reference for frame'?

나한나한나한나 2024. 6. 3. 16:32

'프레임에 대한 백 레퍼런스'라는 표현은 구조체 page에서 frame 필드가 프레임을 가리키는 포인터를 저장하고 있다는 의미입니다. 이를 이해하려면 '프레임'과 '백 레퍼런스'의 개념을 분리해서 설명해보겠습니다.

프레임 (Frame)

  • 프레임은 물리 메모리의 페이지를 의미합니다. 즉, 실제 메모리의 한 블록을 나타냅니다.
  • 가상 메모리 시스템에서 페이지와 프레임은 일대일로 매핑됩니다. 페이지는 가상 주소 공간에서의 단위이고, 프레임은 물리 주소 공간에서의 단위입니다.

백 레퍼런스 (Back Reference)

  • 백 레퍼런스는 양방향 참조를 의미합니다. 즉, 객체 A가 객체 B를 참조하고 있고, 동시에 객체 B도 객체 A를 참조하고 있는 경우입니다.
  • 이는 객체 간의 상호 참조를 가능하게 하여, 한 객체에서 다른 객체로 쉽게 접근할 수 있게 합니다.

구조체 pageframe 간의 관계

구조체 pageframe은 양방향 참조를 통해 서로 연결됩니다. 이를 통해 페이지와 프레임 간의 연관성을 유지하고, 서로의 정보를 쉽게 접근할 수 있습니다.

구조체 정의

struct page {
    const struct page_operations *operations;
    void *va;              /* Address in terms of user space */
    struct frame *frame;   /* Back reference for frame */
    union {
        struct uninit_page uninit;
        struct anon_page anon;
        struct file_page file;
#ifdef EFILESYS
        struct page_cache page_cache;
#endif
    };
};

struct frame {
    void *kva;             /* Kernel virtual address */
    struct page *page;     /* Reference to the corresponding page */
};

예제

예를 들어, 페이지 p가 있고, 이에 대응하는 프레임 f가 있다고 가정해봅시다.

struct page p;
struct frame f;

p.frame = &f;  // 페이지가 프레임을 참조
f.page = &p;   // 프레임이 페이지를 참조

이 경우:

  • p.frame은 페이지 p가 프레임 f를 가리키고 있음을 나타냅니다.
  • f.page는 프레임 f가 페이지 p를 가리키고 있음을 나타냅니다.

이렇게 하면:

  • 페이지 구조체에서 해당 페이지가 매핑된 프레임을 쉽게 찾을 수 있습니다.
  • 프레임 구조체에서 해당 프레임이 매핑된 페이지를 쉽게 찾을 수 있습니다.

요약

'프레임에 대한 백 레퍼런스'는 페이지 구조체에서 해당 페이지가 매핑된 물리 메모리 프레임을 가리키는 포인터를 의미합니다. 이를 통해 페이지와 프레임 간의 양방향 참조가 가능해져, 페이지에서 프레임을, 프레임에서 페이지를 쉽게 접근할 수 있게 됩니다.