Linux Memory Management

물리 메모리 영역을 설정하는 3가지 방법

  • ATAG

  • fixup 함수

좋은 방법이 아니다~

  • bootloader parameter

CONFIG_CMDLINE=“root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC1,115200 init=/linuxrc mem=128M@0x40000000 mem=128M@0x48000000 mem=256M@0x50000000”

Node

접근 속도가 같은 메모리의 집합을 Bank라고 한다.

리눅스에서 뱅크를 표현하는 구조가 Node이다.

Node는 pgdatat 로 표현된다.

  • 해당 노드에 속해있는 물리메리오의 실제량(nodepresentpages)

  • 해당 물리 메모리가 메모리 맵의 몇번지에 위치하는지 알아내는 변수(nodestartpfn)

  • Zone을 담기위한 배결(node_zones)

Zone

노드 안에 있는 메모리를 관리

DMAZONE, NORMALZONE, HIGHMEM_ZONE

  • 물리 메모리 시작 주소와 크기

  • 버디 할당자가 사용할 구조체

Page Frame

zone에 속해 있는 물리메모리를 관리하는 최소 단위. page 구조체로 관리

mem_map 전역 배열이 가리키고 있음

Boddy Alloc

가장 저수준의 함수 : alloc_pages() , free_pages()

Slab Alloc

저수준 함수 : kmemcachealloc(), kmemcachefree()

슬랩이 버디로 부터 페이지 프레임을 더 할당받으려면 kmemcachegrow()

kmalloc은 slab으로 부터 받아오기 때문에 최대 128kb만 가능

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

w

%s에 연결하는 중