2024-11-20
Git入门图文教程
Git 是一款先进的分布式版本控制系统,支持代码版本控制、跨区域多人协作等功能。本文介绍了 Git 的基本概念、安装配置、使用入门、远程仓库、分支、标签管理、撤销变更等,并结合实际工作中的 Git 实践,如 Git flow、stash、cherry-pick 等进行了详细讲解。通过本文的学习,读者可以掌握 Git 的基本操作和高级功能,更好地进行团队协作和代码管理。
2024-11-20
linux源码解析07–缺页异常之架构相关部分(ARM64为例)分析
本文详细介绍了缺页异常的原理和实现过程,涵盖了从异常向量表到通用代码处理的各个环节,并对主要缺页异常类型进行了分类说明。缺页异常是操作系统虚拟内存管理的重要机制,对于进程来说时透明的。文章中还涉及了匿名映射、文件映射、swap 缺页异常、写时复制缺页异常等概念,为理解虚拟内存管理提供了基础。
2024-11-20
linux源码解析06–常用内存分配函数kmalloc、vmalloc、malloc和mmap实现原理
围绕内核中的 kmalloc、vmalloc 和用户态 malloc 三种内存分配方式,从实现路径和底层机制进行对比分析。kmalloc 基于 slab 分配器,从各类 slab 缓冲区中按 size 选择合适 cache,通过 kmem_cache_alloc_trace/slab_alloc 分配物理上连续的内存,适合小块、频繁分配的场景。 vmalloc 则在 vmalloc 区域临时申请 vm_struct,计算所需页数后为其分配 struct page* 数组,再通过 alloc_pages_node 逐页(或成组)分配物理页,最后用 vmap_pages_range 建立虚拟地址
2024-11-20
linux内核源码解析04–用户进程页表创建
科学边界发表的文章详细阐述了Linux内核中进程页表的创建、缺页异常处理以及进程切换时的内存管理机制。文章首先介绍了进程创建时页表的创建过程,包括fork时复制父进程的页表、分配pgd物理页面以及拷贝页表项。其次,描述了缺页异常导致的写时复制(COW)的处理流程,包括分配新页面、复制旧页面内容以及更新页表项。最后,文章解释了进程切换时如何通过更新ASID和页表基地址来实现地址空间的切换。这些内容对于理解Linux内存管理至关重要。
2024-11-20
linux内核源码解析03–启动代码分析之主内核页表创建
Linux内核初始化过程中,会依次建立多种页表映射,以支持不同的内存访问需求。这些映射包括恒等映射、粗粒度内核镜像映射、fixmap映射、细粒度内核镜像映射、线性映射以及用户空间页表映射。文章详细解析了细粒度内核镜像映射和线性映射的创建过程,以及内核主页表的建立。此外,还介绍了伙伴系统的初始化,包括bootmem分配器的初始化、sparse内存模型初始化、zone数据结构初始化等。通过这些初始化过程,Linux内核为后续的内存管理和进程调度等操作奠定了基础。
2024-11-20
linux内核源码解析02–启动代码分析之setup_arch详解
文章深入解析了 Linux 内核初始化过程中 fixmap 映射的原理与实现,阐述了为什么在内存管理子系统尚未建立时,必须通过固定虚拟地址访问如 dtb 和 IO 设备等关键资源。通过剖析 early_fixmap_init 函数及相关数据结构,揭示了页表分级、地址计算与内核早期资源访问的详细机制,