Linux v6.18.37 / v6.6 · 개념과 코드 읽기

커널 개념 설명 전체 목록

개념 설명과 코드 분석을 함께 읽습니다

각 주제에서 함수·매크로 또는 핵심 구간을 골라 원문의 각 줄을 풀이했습니다. 문서마다 읽는 범위를 표시했으며, 커널 소스 전체를 한 줄씩 설명한 자료는 아닙니다. 기존 분석과 함께 개념·자료구조 변화·각 연산이 필요한 이유를 읽으실 수 있습니다. 아래에서 커널 버전을 선택해 주세요.

Linux v6.18.37

주제읽는 함수설명 줄
C로 들어온 뒤 커널을 준비하는 순서start_kernel134
init·kthreadd와 부트 CPU의 역할을 나눕니다rest_init19
초기화용 메모리를 돌려주기 전의 준비kernel_init_freeable27
init 프로그램의 인자와 환경을 넘깁니다run_init_process11
새 태스크의 주소 공간을 공유하거나 복제합니다copy_mm24
태스크 객체를 만들기 위한 저장소와 한도를 준비합니다fork_init31
종료 태스크에서 주소 공간 연결을 해제합니다exit_mm22
시그널을 받는 쪽에서 보이는 신원을 맞춥니다send_signal_locked20
미뤄 둔 작업이 있는지 확인한 뒤 처리합니다do_softirq10
빠르게 얻지 못한 잠금은 대기 경로로 넘깁니다mutex_lock4
잠금 검사기의 한도와 메모리 사용량을 확인합니다lockdep_init32
독자가 빠져나왔는지 추적할 기반을 만듭니다rcu_init30
IRQ를 기록할 소프트웨어 객체부터 만듭니다early_irq_init17
ARM64의 IRQ 스택과 컨트롤러를 연결합니다init_IRQ7
부트 정보를 ARM64 커널의 주소와 장치 구조로 바꿉니다setup_arch45
시스템 호출 번호를 검증한 뒤 함수로 연결합니다invoke_syscall13
사용자 포인터를 공통 exec 경로로 넘깁니다do_execve6
파일 이름과 열린 파일을 관리할 저장소를 준비합니다vfs_caches_init10
참조 하나를 내려놓고 마지막 사용자인지 확인합니다__refcount_dec_and_test2
짧은 임계 구역의 진입을 직렬화합니다spin_lock2
memblock: 사용할 RAM과 남겨 둘 RAM을 구분하기__memblock_reserve6
paging_init: RAM에 접근할 가상 주소 마련하기paging_init5
mm_core_init: 부팅용 메모리 관리에서 일반 할당기로 넘어가기mm_core_init30
buddy allocator: 큰 빈 블록을 반씩 나누기expand14
SLUB: 빈 객체 안에 다음 빈 객체를 연결하기get_freepointer7
vmalloc과 vmap: 떨어진 페이지를 연속 주소로 보기vmap25
page fault: 주소 변환 실패가 항상 프로그램 오류는 아닙니다do_translation_fault8
reclaim: 버릴 수 있는 페이지와 먼저 써야 할 페이지 구분하기folio_check_dirty_writeback15
compaction: 연속 빈 공간을 만들되 실패를 무한 반복하지 않기compaction_deferred9
sched_init과 idle 준비: 실행할 일이 없을 때도 CPU 상태는 필요합니다init_idle28
공정 스케줄링: 실행한 시간으로 다음 가상 마감 시각 갱신하기update_deadline8
RT scheduler: 우선순위별 대기열에서 다음 대상을 고르기pick_next_rt_entity12
load balancing: 바쁜 CPU에서 옮길 수 있는 작업 찾기detach_one_task11
scheduler tick: 주기적으로 실행 시간을 계상하고 재선택을 요청하기sched_tick34
NOHZ: 쉬는 CPU에서 불필요한 주기 tick 줄이기tick_nohz_idle_enter9
hrtimer: 늦게 처리된 주기 타이머의 다음 기한 계산하기hrtimer_forward19
timekeeping: 갱신 중인 시계를 일관되게 읽기ktime_get12
GIC: 하드웨어 인터럽트 번호를 커널 처리기로 넘기기__gic_handle_irq7
bio: 저장장치 작업의 완료를 누가 받는가bio_endio21
요청 큐: 대기 중인 작업이 장치에서 진행 중인 작업이 될 때blk_mq_start_request17
I/O 스케줄러: 다음 요청을 어떤 기준으로 고르는가dd_dispatch_request21
파티션 검색: 디스크 구간을 장치로 등록하기까지blk_add_partitions34
eMMC와 UFS: 블록 요청을 장치 명령으로 바꾸는 경계ufshcd_queuecommand46
ext4: 읽기 요청이 캐시·직접 I/O·DAX로 나뉘는 이유ext4_file_read_iter13
F2FS: 읽기 방식 선택에도 쓰기 상태를 확인하는 이유f2fs_file_read_iter24
open·read·write: 파일 번호 다음에 커널이 확인하는 것vfs_read24
경로 탐색: 이름을 찾는 동안 다른 프로세스가 이름을 바꾸면lookup_fast30
페이지 캐시: 메모리 한 묶음이 파일의 일부가 되려면filemap_add_folio28
네트워크 네임스페이스: 새 네트워크 환경의 상태를 나누는 방법ops_init24
net_device: 등록한 인터페이스를 실제로 켜는 절차__dev_open30
수신 경로: 패킷을 IPv4·IPv6 처리 함수에 넘기는 순간__netif_receive_skb_one_core9
송신 경로: 드라이버가 패킷을 받지 못했을 때 목록을 지키는 방법dev_hard_start_xmit18
소켓 생성: 정수 핸들보다 먼저 필요한 프로토콜 객체__sock_create58
Device Tree: compatible 목록에서 드라이버가 고르는 정보__of_match_node14
드라이버 초기화: 코드를 등록하는 것과 장치를 찾는 것driver_register27
플랫폼 드라이버: 장치와 구현이 만나는 매칭 순서platform_match14
클록·리셋·레귤레이터: 일부만 켜졌을 때 되돌리는 이유regulator_bulk_enable22
Runtime PM: 장치를 쓰는 동안 잠들지 않게 하는 방법__pm_runtime_resume11
Address-space switch: TTBR, CR3/PCID와 SATP/ASIDcpu_do_switch_mm15
Atomic RMW와 spinlock: LSE/LL-SC, LOCK과 AMOATOMIC_FETCH_OP / ATOMIC_FETCH_OPS8
Boot firmware handoff: DTB, ACPI, EFI와 setup_archsetup_machine_fdt20
Cache coherency와 memory barrier: DMB/DSB, x86 ordering, FENCE일반 메모리 및 DMA barrier 정의6
Context switch: callee-saved register와 task statecpu_switch_to28
DMA, cache coherency와 IOMMU translationarch_sync_dma_for_cpu6
Exception entry: vector table, IDT와 trap entryel0_svc8
FPU, SIMD, SVE/SME, XSAVE와 RISC-V Vector stateswitch_fpu9
IPI와 SMP call: SGI, APIC ICR와 SBI/IMSICsend_ipi_mask / send_ipi_single4
IRQ controller: GICv3, local APIC/IOAPIC와 RISC-V INTCgic_eoi_irq6
KVM virtualization: EL2, VMX/SVM과 RISC-V H-extensionkvm_arch_vcpu_runnable7
Kernel module relocation과 instruction rangedo_reloc12
Page-table format: PTE bit, level과 huge mappingpte_wrprotect / pte_mkwrite_novma / pte_mkdirty6
PCIe MSI/MSI-X와 interrupt remappingirq_msi_update_msg4
CPU idle, suspend와 resume contextsuspend_save_csrs13
ptrace와 hardware debug registerriscv_gpr_get / riscv_gpr_set12
Signal frame과 user context 복원init_user_layout8
System call entry: SVC, SYSCALL과 ECALLinvoke_syscall13
Timer와 clocksource: architected timer, TSC와 RISC-V timeriscv_clock_next_event14
TLB shootdown: TLBI, INVLPG/INVPCID와 SFENCE.VMAflush_tlb_all5
Stack unwind, function tracing과 return address 보호kunwind_next_frame_record21
ARMv9 아키텍처 진화와 실행 모델cpu_set_feature / cpu_have_feature / cpu_get_elf_hwcap7
ARMv9 CPU 문서·Toolchain·Linux 실전cpu_set_feature / cpu_have_feature / cpu_get_elf_hwcap7
ARM64 Exception과 system call 소스 분석el0_svc8
ARM GICv3·vGIC·ITS interrupt 소스 분석gic_eoi_irq6
ARM64 KVM vCPU와 Stage-2 fault 소스 분석kvm_phys_addr_ioremap28
ARM64 MMU·page table·TLB 소스 분석flush_tlb_all5
ARM MTE와 Linux fault 처리 소스 분석mte_update_sctlr_user16
ARMv9 Realm과 CCA 구조realm_ioremap_hook6
ARM Realm·CCA와 Linux RSI 소스 분석arm64_rsi_init14
ARM SMMUv3·IOMMU·DMA 소스 분석arm_smmu_iotlb_sync8
ARM SVE·SME Linux 상태 관리 소스 분석fpsimd_flush_task_state7
ARMv9 Vector·AI와 메모리·제어 흐름 보안ptrauth_keys_init_user9
ARMv9 가상화·플랫폼·성능 관측cpu_psci_cpu_boot6
x86-64 커널의 32비트 진입과 long mode·가상 주소 전환reset_early_page_tables4
x86-64 IDT·syscall 진입과 secondary CPU 기동entry_SYSCALL_64의 프레임 구성 구간23
RISC-V 64 head.S의 hart·DTB 수신과 SATP 전환relocate_enable_mmu30
RISC-V trap frame과 SBI secondary hart 기동sbi_cpu_start11

Linux v6.6

주제읽는 함수설명 줄
C로 들어온 뒤 커널을 준비하는 순서start_kernel132
init·kthreadd와 부트 CPU의 역할을 나눕니다rest_init19
초기화용 메모리를 돌려주기 전의 준비kernel_init_freeable23
init 프로그램의 인자와 환경을 넘깁니다run_init_process11
새 태스크의 주소 공간을 공유하거나 복제합니다copy_mm24
태스크 객체를 만들기 위한 저장소와 한도를 준비합니다fork_init33
종료 태스크에서 주소 공간 연결을 해제합니다exit_mm22
시그널을 받는 쪽에서 보이는 신원을 맞춥니다send_signal_locked20
미뤄 둔 작업이 있는지 확인한 뒤 처리합니다do_softirq10
빠르게 얻지 못한 잠금은 대기 경로로 넘깁니다mutex_lock4
잠금 검사기의 한도와 메모리 사용량을 확인합니다lockdep_init32
독자가 빠져나왔는지 추적할 기반을 만듭니다rcu_init26
IRQ를 기록할 소프트웨어 객체부터 만듭니다early_irq_init17
ARM64의 IRQ 스택과 컨트롤러를 연결합니다init_IRQ7
부트 정보를 ARM64 커널의 주소와 장치 구조로 바꿉니다setup_arch46
시스템 호출 번호를 검증한 뒤 함수로 연결합니다invoke_syscall13
사용자 포인터를 공통 exec 경로로 넘깁니다do_execve6
파일 이름과 열린 파일을 관리할 저장소를 준비합니다vfs_caches_init10
참조 하나를 내려놓고 마지막 사용자인지 확인합니다__refcount_dec_and_test2
짧은 임계 구역의 진입을 직렬화합니다spin_lock2
memblock: 사용할 RAM과 남겨 둘 RAM을 구분하기memblock_reserve5
paging_init: RAM에 접근할 가상 주소 마련하기paging_init13
mm_core_init: 부팅용 메모리 관리에서 일반 할당기로 넘어가기mm_core_init24
buddy allocator: 큰 빈 블록을 반씩 나누기expand11
SLUB: 빈 객체 안에 다음 빈 객체를 연결하기get_freepointer7
vmalloc과 vmap: 떨어진 페이지를 연속 주소로 보기vmap25
page fault: 주소 변환 실패가 항상 프로그램 오류는 아닙니다do_translation_fault8
reclaim: 버릴 수 있는 페이지와 먼저 써야 할 페이지 구분하기folio_check_dirty_writeback15
compaction: 연속 빈 공간을 만들되 실패를 무한 반복하지 않기compaction_deferred9
sched_init과 idle 준비: 실행할 일이 없을 때도 CPU 상태는 필요합니다init_idle36
공정 스케줄링: 실행한 시간으로 다음 가상 마감 시각 갱신하기update_deadline8
RT scheduler: 우선순위별 대기열에서 다음 대상을 고르기pick_next_rt_entity12
load balancing: 바쁜 CPU에서 옮길 수 있는 작업 찾기detach_one_task11
scheduler tick: 주기적으로 실행 시간을 계상하고 재선택을 요청하기scheduler_tick30
NOHZ: 쉬는 CPU에서 불필요한 주기 tick 줄이기tick_nohz_idle_enter9
hrtimer: 늦게 처리된 주기 타이머의 다음 기한 계산하기hrtimer_forward19
timekeeping: 갱신 중인 시계를 일관되게 읽기ktime_get12
GIC: 하드웨어 인터럽트 번호를 커널 처리기로 넘기기__gic_handle_irq7
bio: 저장장치 작업의 완료를 누가 받는가bio_endio17
요청 큐: 대기 중인 작업이 장치에서 진행 중인 작업이 될 때blk_mq_start_request17
I/O 스케줄러: 다음 요청을 어떤 기준으로 고르는가dd_dispatch_request16
파티션 검색: 디스크 구간을 장치로 등록하기까지blk_add_partitions36
eMMC와 UFS: 블록 요청을 장치 명령으로 바꾸는 경계ufshcd_queuecommand53
ext4: 읽기 요청이 캐시·직접 I/O·DAX로 나뉘는 이유ext4_file_read_iter13
F2FS: 파일 조건에 맞는 직접 읽기와 캐시 읽기f2fs_file_read_iter19
open·read·write: 파일 번호 다음에 커널이 확인하는 것vfs_read24
경로 탐색: 이름을 찾는 동안 다른 프로세스가 이름을 바꾸면lookup_fast29
페이지 캐시: 메모리 한 묶음이 파일의 일부가 되려면filemap_add_folio14
네트워크 네임스페이스: 새 네트워크 환경의 상태를 나누는 방법ops_init24
net_device: 등록한 인터페이스를 실제로 켜는 절차__dev_open29
수신 경로: 패킷을 IPv4·IPv6 처리 함수에 넘기는 순간__netif_receive_skb_one_core9
송신 경로: 드라이버가 패킷을 받지 못했을 때 목록을 지키는 방법dev_hard_start_xmit18
소켓 생성: 정수 핸들보다 먼저 필요한 프로토콜 객체__sock_create55
Device Tree: compatible 목록에서 드라이버가 고르는 정보__of_match_node14
드라이버 초기화: 코드를 등록하는 것과 장치를 찾는 것driver_register27
플랫폼 드라이버: 장치와 구현이 만나는 매칭 순서platform_match12
클록·리셋·레귤레이터: 일부만 켜졌을 때 되돌리는 이유regulator_bulk_enable22
Runtime PM: 장치를 쓰는 동안 잠들지 않게 하는 방법__pm_runtime_resume11
맨 위로 ↑