일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- BLOCK
- slowpath
- Linux
- devicedriver
- kmalloc
- Network
- memory
- 카프카
- allocator
- mm_struct
- blk-mq
- proc
- strex
- vmalloc
- Kernel
- kafka
- Android
- lruvec
- page
- fastpath
- NDK
- spinlock
- slub
- multiqueue
- commit
- vm_area_struct
- Apache
- buddy_system
- pmap
- slab
- Today
- Total
목록IT (43)
Art of Pr0gr4m
이번 포스트에서는 커널의 memory allocator 에 대해 알아본다. 1. Page Allocator 다음은 page allocator를 이용하여 페이지 단위로 메모리를 할당하는 API들이다. static inline void *page_address(const struct page *page); static inline void set_page_address(struct page *page, void *address); static inline struct page * alloc_pages(gfp_t gfp_mask, unsigned int order); #define alloc_page(gfp_mask) alloc_pages(gfp_mask, 0) unsigned long __get_free_p..
이번 포스트에서는 메모리 할당 정책의 기반이 되는 메모리 존에 대해서 알아본다. 1. Memory Zone 리눅스 커널은 물리 메모리의 주소 영역을 나눠 Zone으로 관리한다. Zone 타입은 다음과 같다. enum zone_type { /* * ZONE_DMA and ZONE_DMA32 are used when there are peripherals not able * to DMA to all of the addressable memory (ZONE_NORMAL). * On architectures where this area covers the whole 32 bit address * space ZONE_DMA32 is used. ZONE_DMA is left for the ones with smal..
이번 포스트부터는 리눅스의 메모리 모델과 관리 정책들에 대해서 알아본다. 가장 먼저 가상 메모리와 페이징에 대해서 알아볼 것이다. 참고로 세그먼테이션은 추후에 부팅과정에 대해 다룰 때 운영 모드와 함께 다룰 예정이며, 메모리 관리 정책에서는 넘어갈 것이다. 또한, 해당 포스트는 가상 메모리와 페이징의 일반적인 개념을 공부하는 포스트는 아니므로 컨셉에 대한 공부가 필요하다면 아래 링크를 참고하도록 한다. https://en.wikipedia.org/wiki/Virtual_memory flags bits: * * PG_reserved is set for special pages. The "struct page" of such a page * should in general not be touched (e.g..
리눅스 커널은 다양한 자료구조들을 일반적으로 사용할 수 있도록 제공한다. 연결 리스트, 큐, RB 트리, B+ 트리 등을 템플릿이나 제너릭 타입이 아닌 무려 포인터를 이용하여 일반화한다. 이번 포스트에서는 어떻게 포인터로 일반적인 자료구조를 구현하는지와 커널에서 제공하는 연결 리스트를 알아본다. 1. 매직 매크로 커널에서는 다양한 마법같은 매크로들을 제공한다. 이들을 통칭하여 매직 매크로라고 부르지는 않는다. 그냥 되게 유용하고 신기한 매크로들을 소개하려는데 마땅한 부제가 생각나지 않아서 매직 매크로라고 칭했다. 그 중 자료 구조들을 구현하는데 있어 중요한 두 매크로를 먼저 알아보도록 한다. #ifdef __compiler_offsetof #define offsetof(TYPE, MEMBER)__comp..