리눅스 커널 워크큐 (Workqueue): 바운드(bound) vs. 언바운드(unbound)
리눅스 커널은 다양한 비동기 작업을 효율적으로 처리하고 관리하기 위한 메커니즘을 제공하는데 그 중 하나가 워크큐(Workqueue)이다. 워크큐는 바운드(bound) 워크큐와 언바운드(unbound) 워크큐 두 가지 주요 유형으로 구분된다. 각각의 워크큐 유형은 특정 상황과…
Linux Kernel
리눅스 커널은 다양한 비동기 작업을 효율적으로 처리하고 관리하기 위한 메커니즘을 제공하는데 그 중 하나가 워크큐(Workqueue)이다. 워크큐는 바운드(bound) 워크큐와 언바운드(unbound) 워크큐 두 가지 주요 유형으로 구분된다. 각각의 워크큐 유형은 특정 상황과…
리눅스 시스템에서 read() 또는 write()를 호출했을 때, 이 요청은 어떻게 실제 eMMC 디바이스까지 도달할까? 이번 글에서는 사용자의 File I/O 요청이 커널 eMMC 디바이스로 연결되는 전체 흐름을 커널 내부 경로를 따라…
Btrfs(B-tree file system, "better FS" 또는 "butter FS"로도 읽는다)는 Oracle의 Chris Mason이 2007년 시작해 2009년 Linux 2.6.29부터 메인라인에 포함된 파일시스템이다. ext4의 뒤를 이을 차세대 범용 파일시스템을 목표로, ZFS에 견줄만한 copy-on-write(CoW)…
F2FS(Flash-Friendly File System)는 삼성전자가 NAND flash 기반 저장 장치를 위해 설계해 2012년 공개하고 Linux 3.8부터 메인라인에 포함된 파일시스템이다. eMMC, SD 카드, SSD처럼 FTL(Flash Translation Layer)을 내장한 flash 장치의 물리적 특성을…
Linux 커널을 소스에서 빌드하다 보면 tools/objtool을 컴파일하는 단계에서 gelf.h 헤더를 찾지 못해 빌드가 중단되는 경우가 있다. objtool은 커널 빌드 시 오브젝트 파일의 제어 흐름을 분석해 ORC unwinder 테이블 생성, retpoline/livepatch…
커널 코드에 printk를 넣고 재빌드/재부팅하는 것은 확인할 지점이 늘어날수록 비용이 커진다. tracepoint와 kprobe는 커널을 재빌드하지 않고도 특정 함수의 호출, 인자, 리턴값을 실시간으로 들여다볼 수 있게 해주는 두 가지 트레이싱 메커니즘이다.…
KSM(Kernel Samepage Merging)은 리눅스 커널에서 메모리 중복을 줄이기 위해 사용되는 기술이다. KSM은 동일한 메모리 페이지를 가진 프로세스들을 결합하여 메모리 사용량을 최적화할 수 있다. 이 글에서는 KSM의 동작 원리, 설정 방법,…
커널을 디버깅할 때 미리 켜두면 좋은 Kconfig 옵션들을 목적별로 정리한다. 대부분 CONFIG_DEBUG_KERNEL=y가 함께 켜져 있어야 메뉴에 노출되는 옵션들이다. KASAN KASAN(Kernel Address SANitizer)은 커널 메모리의 out-of-bounds 접근이나 use-after-free를 런타임에 탐지한다. CONFIG_KASAN=y…
스택 기반 버퍼 오버플로우는 지역 변수에 정해진 크기보다 많은 데이터를 써서 스택에 저장된 return address까지 덮어쓰고, 함수가 리턴할 때 공격자가 원하는 코드로 실행 흐름을 옮기는 전형적인 취약점 패턴이다. 커널은 컴파일러가…
커널에서 use-after-free나 buffer overflow 같은 힙 메모리 손상은 재현이 어렵고, 실제 원인이 된 코드와 증상이 나타나는 시점이 멀리 떨어져 있어 디버깅하기 까다롭다. SLUB 할당자는 이런 손상을 조기에 잡아내기 위한 디버그…