Q&A 게시판

리눅스 커널에 대한 Q&A 게시판 입니다. (비밀글 체크는 꼭 필요한 경우에만)

안녕하세요? 메모리 관련하여 질문이 있습니다.

작성자
송대영
작성일
2019-03-28 15:35
조회
474
안녕하세요? ARM Linux 메모리 쪽과 TLB를 공부하려는 학생입니다.

ARM 리눅스가 너무 잘 정리되어서 큰 도움을 얻고 있어서 너무 감사드립니다.

ARM HW와 리눅스 Page Table의 주소 관계를 직접 출력하고 그 매커니즘을 확인해보고 싶습니다.

블로그 'http://jake.dothome.co.kr/pt/' 페이지를 공부하던 도중 궁금한 점이 있어서 질문을 올려봅니다.

1. 리눅스의 프로세스는 1개의 페이지 테이블을 가진다고 알고 있습니다.
그러면 프로세스의 페이지 테이블과 커널 영역의 pgd, pmd, pte와 같은 페이지 테이블은 별도의 영역인가요?
프로세스 테이블과 커널 영역의 페이지 테이블이 어떤식으로 동작하는지 잘 모르겠습니다.

2. 유저 영역의 프로세스가 몇 개의 페이지를 가지며 해당 페이지의 주소를 확인하고 싶습니다.
프로세스가 메모리 할당하는 task_struct의 mm_struct 구조체와 mm_alloc_pgd 함수를 확인해보는게 맞는지 궁금합니다.
아니면 조언해주시면 감사드리겠습니다.

질문이 너무 많고 기초적인 것이 있는 것 같아서 죄송합니다.
잘 부탁드리겠습니다.
전체 1
  • 2019-03-29 17:01
    안녕하세요? 문c 블로그의 문영일입니다.

    페이지 테이블에 대해서 제가 알고 있는 한 답변 드리겠습니다. 답변이 상당히 어려운 질문이라서 제 블로그 'http://jake.dothome.co.kr/pt/' 에서 그림 두 장과 간단한 설명을 추가하였습니다. 먼저 읽어보시고 제 글의 답변으로 해결 안되시면 다시 질문해주길 바랍니다.

    1번)
    ARM32에서는 1개의 pgd 페이지 테이블에서 커널과 유저 영역이 같이 사용됩니다. 그러나 ARM64는 별도로 사용합니다.

    2번)
    하나의 태스크가 생성(fork)될 때마다 mm_alloc_pgd() 함수가 호출되어 pgd 테이블이 한 개 생성됩니다. 태스크와 pgd 테이블은 1:1이라 생각하면됩니다. 다음 2 단계의 페이지 테이블은 해당 영역이 확장되어 사용될 때마다 할당하여 사용합니다.

    문영일 드림.