일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- allocator
- buddy_system
- page
- slub
- Linux
- mm_struct
- devicedriver
- memory
- fastpath
- Network
- slab
- 카프카
- NDK
- kmalloc
- BLOCK
- Android
- proc
- vm_area_struct
- kafka
- pmap
- commit
- Apache
- lruvec
- Kernel
- blk-mq
- spinlock
- multiqueue
- vmalloc
- strex
- slowpath
- Today
- Total
목록IT/Linux Kernel (22)
Art of Pr0gr4m
리눅스 커널 네트워킹 스택에 대해 설명합니다. sk_buff, ICMP, IP, 라우팅 서브시스템, 이웃 서브시스템(ARP, NDISC), TCP, UDP, SCTP, netfilter 등에 대해 포스팅 중입니다. 블로그가 아닌 깃허브 페이지에 작성하였기 때문에 링크들을 첨부합니다. ※ 해당 포스트 내용들은 기본적으로 Linux Kernel Networking 서적을 레퍼런스로 하고 있습니다. 0-1. Linux Kernel Build Linux Kernel Build - Linux Kernel Analysis (pr0gr4m.github.io) Linux Kernel Build 해당 포스트는 Ubuntu 20.04 버전을 기준으로 리눅스 커널을 빌드하고 설치하는 방법을 설명합니다. pr0gr4m.git..
arm 리눅스 커널의 spin lock 구현부를 보면 다음과 같다. typedef struct { union { u32 slock; struct __raw_tickets { #ifdef __ARMEB__ u16 next; u16 owner; #else u16 owner; u16 next; #endif } tickets; }; } arch_spinlock_t; static inline void arch_spin_lock(arch_spinlock_t *lock) { unsigned long tmp; u32 newval; arch_spinlock_t lockval; prefetchw(&lock->slock); __asm__ __volatile__( "1:ldrex%0, [%3]\n" "add%1, %0, %4..
이번 포스트에서는 메모리 학습의 마무리로 메모리 뷰어 모듈 제작 실습을 진행한다. /proc//maps 을 읽으면 다음과 같이 프로세스의 메모리 매핑 정보를 볼 수 있다. 필드별로 할당 주소, 권한(모드), offset, 디바이스 ID, inode, 매핑 대상 or 타입을 보여준다. 이와 유사하게 인자로 전달받은 pid (인자가 없다면 1번 프로세스)의 메모리 사이즈 및 매핑 정보를 출력하는 예제를 작성한다. 1. 프로세스 메모리 뷰어 예제 소스 #include #include #include #include #include #include #include #include #ifndef find_task_by_pid #define find_task_by_pid(nr)pid_task(find_vpid(nr..
리눅스 커널은 메모리 부족시 reclaim에 LRU(Least Recently Used) 정책을 사용한다. 1. Basis 커널은 리스트를 이용하여 LRU를 구현한다. 커널 2.4엔 하나의 리스트를, 커널 2.6.28 이전엔 active_list와 inactive_list를, 그 이후엔 5개의 리스트를 사용했다. 또한, 커널 4.7까지는 리스트를 구조체 zone에서 관리했는데, 4.8부터는 구조체 pglist_data에서 관리한다. 5개의 리스트는 다음과 같다. pglist_data->__lruvec.lists[LRU_INACTIVE_ANON] pglist_data->__lruvec.lists[LRU_ACTIVE_ANON] pglist_data->__lruvec.lists[LRU_INACTIVE_FILE..