Guillermo Austin Kim
Posts
998 posts[리눅스커널] 메모리 관리: kmalloc 캐시 슬럽 오브젝트 할당 커널 함수 분석하기
우리는 'kmalloc() 함수를 호출하면 동적 메모리를 할당할 수 있다.'란 사실을 알고 있습니다. 하지만 kmalloc() 함수에서 호출하는 커널 내부 함수는 거의 분석하지는 않는 듯 합니다. 이번 시간에는 kmalloc() 함수와 이 함수에서 호출하는 다음 함수를 분석합니다.kmalloc_index()kmem_cache_alloc_trace()slab_alloc()slab_alloc_node() kmalloc() 함수 분석하기 우리가 드라이버 드라이버에서 동적 메모리를 할당할 때 주로 사용하는 함수는 kmalloc()입니다. 그런데 kmalloc() 함수는 생각보다 분석하기 어렵습니다. 슬랩 캐시와 슬럽 오브젝트의 개념을 알고 있어야 분석이 가능하기 때문입니다. 이어서
리눅스 커널 기여(Contribution) 및 참여하기 - 1.설정
Overview 리눅스 커널을 익히기 위한 방법은 여러 가지가 있습니다. 예를 들면 다음과 같습니다. 리눅스 커널 스터디 모임에 참석한다. 리눅스 커널을 디버깅해본다. 리눅스 커널 소스를 직접 분석해본다. 이렇게 다양한 방식으로 리눅스 커널을 접할 수 있습니다. 그런데 리눅스 커널을 익히고 접하는 좋은 방법은... 리눅스 커널 오픈 소스 프로젝트에 직접 참여하는 것입니다. 리눅스 커널은 가장 유명한 오픈 소스 프로젝트로 어느 누구나 리눅스 커널 프로젝트에 참여할 수 있습니다.우리가 작성한 커널 코드가 전 세계 리눅스 시스템에 적용이 될 수 있는 것입니다. "여러분이 작성한 리눅스 커널 소스를 전 세계 리눅스 개발자들이 쓴다." 참 뿌듯하고 가슴 떨리는 일이 아닐 수
[리눅스커널] 메모리관리: kmalloc 슬랩 캐시 자료구조 알아보기
이번 시간에는 kmalloc 슬랩 캐시를 이루는 주요 자료구조를 배워봅시다. kmalloc_caches 배열 kmalloc 슬랩 캐시를 관리하는 자료구조는 kmalloc_caches 배열 타입 전역 변수이며다음 코드에 정의돼 있습니다. [https://github.com/raspberrypi/linux/blob/rpi-4.19.y/mm/slab_common.c]struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1] __ro_after_init;EXPORT_SYMBOL(kmalloc_caches); kmalloc_caches 전역 변수의 세부 필드는 다음과 같습니다. (static struct kmem_cache * [14]) kmalloc_caches
[리눅스커널] 메모리관리: kmalloc 슬랩 캐시 알아보기
슬랩 캐시에 대해서 알아봤으나 대부분 디바이스 드라이버에서는 kmalloc 슬랩 캐시를 사용해 동적 메모리를 할당합니다. kmalloc 슬랩 캐시가 무엇일까? 디바이스 드라이버에서 kmalloc() 함수를 써서 동적 메모리를 할당합니다. kmalloc() 함수를 호출하면 커널 내부에서는 kmalloc 슬랩 캐시를 사용합니다. kmalloc 슬랩 캐시 소개하기지금까지 슬랩과 슬럽 할당자에 대해 설명을 드렸는데 사실 리눅스 디바이스 드라이버에서 사용하는 슬랩 캐시는 어느 정도 정해져 있습니다. 그것은 바로 kmalloc 슬랩 캐시입니다. 'kmalloc 슬랩 캐시'를 설명드리기 전에 먼저 리눅스 세미나 시간에 논의됐던 질문을 대화 형식으로 설명을 드리겠습니다. 임베디드
[리눅스커널] 메모리관리: kmalloc() 함수 소개
리눅스 시스템 프로그래밍으로 유저 공간에서 동적 메모리를 할당받으려면 malloc() 함수를 호출해야 하듯이, 커널에서 동적 메모리를 할당하려면 kmalloc() 함수를 호출해야 합니다. 먼저 kmalloc() 함수 선언부를 볼까요?void *kmalloc(size_t size, gfp_t flags); 함수에 전달하는 인자를 살펴보겠습니다. size_t size;정수형 타입으로 할당하고 싶은 메모리 크기를 지정합니다. 단위는 바이트입니다. gfp_t flags;메모리 할당 세부 옵션 플래그입니다. 커널에서는 이 플래그를 보고 세부 메모리 할당 처리 방식을 결정합니다. flags는 다음 해더 파일에 선언된 매크로 플래그를 저장하는데 보통 커널 드라이버에선 GFP_KERNEL 플래그를 지정합니다.[



