<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[congchp的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/congchp</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; congchp]]></copyright><item><title><![CDATA[git原理及使用]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/153809658</link><guid>https://blog.youkuaiyun.com/congchp/article/details/153809658</guid><author>congchp</author><pubDate>Fri, 24 Oct 2025 05:40:41 +0800</pubDate><description><![CDATA[不过，到了2002年，Linux系统已经发展了十年了，代码库之大让Linus很难继续通过手工方式管理了，社区的弟兄们也对这种方式表达了强烈不满，于是Linus选择了一个商业的版本控制系统BitKeeper，BitKeeper的东家BitMover公司出于人道主义精神，授权Linux社区免费使用这个版本控制系统。用于修改或更新上一次提交的命令。Linus虽然创建了Linux，但Linux的壮大是靠全世界热心的志愿者参与的，这么多人在世界各地为Linux编写代码，那Linux的代码是如何管理的呢？]]></description><category></category></item><item><title><![CDATA[页交换原理]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/153384694</link><guid>https://blog.youkuaiyun.com/congchp/article/details/153384694</guid><author>congchp</author><pubDate>Thu, 16 Oct 2025 06:31:08 +0800</pubDate><description><![CDATA[概念大小作用管理结构Slot4KB存储一个页面swap_map[]Cluster连续slot组，优化分配Slot是物理存储单元Cluster是逻辑管理单元通过cluster提高局部性、减少碎片、支持并发类似文件系统中的"块"和"簇"的关系特性位置磁盘/文件第一页内核内存数量每个swap设备一个每个活动swap一个生命周期持久化swapon到swapoff作用设备标识和配置运行时管理关系源数据从header初始化。]]></description><category></category></item><item><title><![CDATA[内存映射补充]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/151849691</link><guid>https://blog.youkuaiyun.com/congchp/article/details/151849691</guid><author>congchp</author><pubDate>Fri, 19 Sep 2025 05:45:58 +0800</pubDate><description><![CDATA[文件页缓存是 Linux 内核用内存缓存磁盘文件数据的一种机制，用来加快文件读写，减少磁盘 I/O。它是进程文件访问和底层块设备之间的重要中间层。操作文件页缓存用户空间是否 copymmap+ 缺页访问直接映射同一物理页页表指向页缓存无拷贝（零拷贝）read页缓存中取数据复制到用户buf有拷贝write从用户buf拷贝到页缓存页缓存标记脏页有拷贝。]]></description><category></category></item><item><title><![CDATA[巨型页实战]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/151777219</link><guid>https://blog.youkuaiyun.com/congchp/article/details/151777219</guid><author>congchp</author><pubDate>Wed, 17 Sep 2025 05:33:27 +0800</pubDate><description><![CDATA[匿名 HugeTLB 映射直接用。不需要文件系统（hugetlbfs但依赖预留的池子。基于 hugetlbfs 的映射通过。更灵活，适合文件共享场景。普通页 (4KB)：延迟分配，缺页异常时才分配。显式巨型页 (HugeTLB)mmap阶段立即分配，且必须一次性分配整个大页。透明巨型页 (THP)：最初按 4KB 分配，后台尝试合并成大页。应用程序调用 mmap()│├── 普通页 (4KB)│ mmap: 只建立 VMA（不分配物理页）│ ↓。]]></description><category></category></item><item><title><![CDATA[不连续页分配器补充]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/151307754</link><guid>https://blog.youkuaiyun.com/congchp/article/details/151307754</guid><author>congchp</author><pubDate>Mon, 08 Sep 2025 06:49:43 +0800</pubDate><description><![CDATA[用户态用malloc()（底层 brk/mmap），本质是修改虚拟内存布局，缺页时通过 **伙伴系统 **分配物理页；内核态直接用kmalloc()（小块）、vmalloc()（大块，物理不连续）。内核线程没有独立的页表，它们不会切换到某个“内核专用页表”。调度到内核线程时，Linux 内核会让它们 借用上一个进程的页表（通过active_mm），只使用其中的内核地址映射部分。由于所有进程的内核区页表一致，内核线程就能安全运行。]]></description><category></category></item><item><title><![CDATA[slab分配器补充]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/151307728</link><guid>https://blog.youkuaiyun.com/congchp/article/details/151307728</guid><author>congchp</author><pubDate>Mon, 08 Sep 2025 06:48:40 +0800</pubDate><description><![CDATA[字段解释
第一部分：对象统计

name
slab 缓存的名字（例如 , ,  等）。
active_objs
当前正在使用（已分配）的对象数量。
num_objs
当前 cache 中的对象总数（包括已分配和未分配的）。
objsize
每个对象的大小（字节数）。
objperslab
每个 slab 中能容纳的对象数量。
（slab = 若干页的内存块，里面被切分成  个对象）。
pagesperslab
每个 slab 占用的物理页数。


第二部分：tunables（可调参数）
这些字段和 （CPU]]></description><category></category></item><item><title><![CDATA[伙伴分配器补充]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/151060565</link><guid>https://blog.youkuaiyun.com/congchp/article/details/151060565</guid><author>congchp</author><pubDate>Mon, 01 Sep 2025 09:06:04 +0800</pubDate><description><![CDATA[可移动页 (MIGRATE_MOVABLE)用户进程的匿名页 (匿名内存)、文件缓存页（page cache）等。它们被 swap-out 或从文件重新读入后，可以放到别的物理页。所以这些页是“可移动的”。不可移动页 (MIGRATE_UNMOVABLE)内核数据结构、页表、一些 slab 分配的对象。这些数据与内核内部指针直接绑定，没法整体迁移到其他物理页。可回收页 (MIGRATE_RECLAIMABLE)比如 slab 中的 dentry cache、inode cache。]]></description><category></category></item><item><title><![CDATA[物理内存组织结构]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/150573524</link><guid>https://blog.youkuaiyun.com/congchp/article/details/150573524</guid><author>congchp</author><pubDate>Thu, 21 Aug 2025 09:03:45 +0800</pubDate><description><![CDATA[目前多处理器系统主要有两种体系结构。（1））：指内存被划分成多个内存节点的多处理器系统，访问一个内存节点花费的时间取决于处理器和内存节点的距离。每个处理器有一个本地内存节点，处理器访问本地内存节点的速度比访问其他内存节点的速度快。（2））：即一致内存访问（Uniform Memory Access，），所有处理器访问内存花费的时间是相同的。每个处理器的地位是平等的，仅在内核初始化的时候不平等：“0号处理器作为引导处理器负责初始化内核，其他处理器等待内核初始化完成。]]></description><category></category></item><item><title><![CDATA[内存映射原理（mmap）]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/150487859</link><guid>https://blog.youkuaiyun.com/congchp/article/details/150487859</guid><author>congchp</author><pubDate>Mon, 18 Aug 2025 11:40:55 +0800</pubDate><description><![CDATA[VMA 是抽象描述，页表才是真正的映射。延迟分配物理内存：按需分配，访问才分配（缺页中断）。文件映射与页缓存绑定：多个进程可共享缓存。COW 保证 MAP_PRIVATE 的写时隔离。设备映射需要特殊处理（页不在页缓存）。mmap和DMA结合使用（后续补充）]]></description><category></category></item><item><title><![CDATA[内核地址空间布局]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/150219620</link><guid>https://blog.youkuaiyun.com/congchp/article/details/150219620</guid><author>congchp</author><pubDate>Mon, 11 Aug 2025 16:49:13 +0800</pubDate><description><![CDATA[参考资料用户进程的虚拟地址空间由mm_struct描述。但内核虚拟地址空间的管理方式则完全不同——它没有一个统一的结构体像mm_struct那样去描述整个内核空间。以下是Linux在ARM64处理器架构下的UL<<UL<<1UL1<<UL??PAGE_ALIGN4UL1<<30structpageUL1<<1PCI_IO_END<<内核镜像。]]></description><category></category></item><item><title><![CDATA[用户虚拟地址空间布局]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/150219591</link><guid>https://blog.youkuaiyun.com/congchp/article/details/150219591</guid><author>congchp</author><pubDate>Mon, 11 Aug 2025 16:48:28 +0800</pubDate><description><![CDATA[因为目前应用程序没有那么大的内存需求，所以ARM64处理器完全的64位虚拟地址。虚拟地址的最大宽度一般是48位（ARMv8.2+支持52位ARM64架构内核/用户虚拟地址空间划分如下图（假设虚拟地址的宽度是48位）：在编译ARM64架构的Linux内核时，可以虚拟地址（1）如果选择页长度4KB，默认的虚拟地址宽度是39位。（2）如果选择页长度16KB，默认的虚拟地址宽度是47位。（3）如果选择页长度64KB，默认的虚拟地址宽度是42位。（4）可以选择48位虚拟地址。通过或者查询页大小。]]></description><category></category></item><item><title><![CDATA[SMP调度机制]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/150219534</link><guid>https://blog.youkuaiyun.com/congchp/article/details/150219534</guid><author>congchp</author><pubDate>Mon, 11 Aug 2025 16:47:14 +0800</pubDate><description><![CDATA[目前多处理器系统有三种体系结构。（1））：指内存被划分成多个内存节点的多处理器系统，访问一个内存节点花费的时间取决于处理器和内存节点的距离。每个处理器有一个本地内存节点，处理器访问本地内存节点的速度比访问其他内存节点的速度快。（2））：即一致内存访问（Uniform Memory Access，），所有处理器访问内存花费的时间是相同的。每个处理器的地位是平等的，仅在内核初始化的时候不平等：“0号处理器作为引导处理器负责初始化内核，其他处理器等待内核初始化完成。]]></description><category></category></item><item><title><![CDATA[进程间通信组件实现]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/149495023</link><guid>https://blog.youkuaiyun.com/congchp/article/details/149495023</guid><author>congchp</author><pubDate>Mon, 21 Jul 2025 05:27:24 +0800</pubDate><description><![CDATA[AIO（Asynchronous I/O）和NIO（Non-blocking I/O）是两种高性能I/O模型，主要用于解决高并发场景下的I/O效率问题。数据流通道，允许相关进程（通常有父子关系）进行通信。在 Linux 内核中，设备模块是驱动硬件的核心组件，它们通过标准化的接口与内核交互。管道（Pipe）是 Linux 中最经典的进程间通信（IPC）机制之一，它提供了一种。因为大量网络IO，使用AIO的话会有大量的内核->用户空间的调用，命名管道，可用于任意进程间通信。，实现一个进程间通信组件。]]></description><category></category></item><item><title><![CDATA[调度器调度原理]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/149495020</link><guid>https://blog.youkuaiyun.com/congchp/article/details/149495020</guid><author>congchp</author><pubDate>Mon, 21 Jul 2025 05:25:34 +0800</pubDate><description><![CDATA[linux调度器的实现基于两个函数：周期性调度器函数和主调度器函数。这些函数根据现有进程的优先级分配CPU时间。]]></description><category></category></item><item><title><![CDATA[用户态文件系统fuse]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/149086525</link><guid>https://blog.youkuaiyun.com/congchp/article/details/149086525</guid><author>congchp</author><pubDate>Thu, 03 Jul 2025 09:07:31 +0800</pubDate><description><![CDATA[FUSE（Filesystem in Userspace）是一种让非特权用户在用户空间实现文件系统的机制。文件系统的逻辑实现不在内核态运行，而是在用户态运行，通过与内核中的 FUSE 模块通信实现文件操作的响应。]]></description><category></category></item><item><title><![CDATA[调度器之任务分组]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/149086495</link><guid>https://blog.youkuaiyun.com/congchp/article/details/149086495</guid><author>congchp</author><pubDate>Thu, 03 Jul 2025 09:06:22 +0800</pubDate><description><![CDATA[我们先看以下两种场景。（1）执行（选项表示同时执行 10 条命令），编译 Linux 内核，同时运行视频播放器，如果给每个进程平均分配 CPU 时间，会导致视频播放很卡。（2）用户 1 启动 100 个进程，用户 2 启动 1 个进程，如果给每个进程平均分配 CPU 时 间，用户 2 的进程只能得到不到 1%的 CPU 时间，用户 2 的体验很差。怎么解决呢？把进程分组。]]></description><category></category></item><item><title><![CDATA[调度器之调度类、运行队列]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/149086473</link><guid>https://blog.youkuaiyun.com/congchp/article/details/149086473</guid><author>congchp</author><pubDate>Thu, 03 Jul 2025 09:05:47 +0800</pubDate><description><![CDATA[就是按照某种调度的算法设计，从进程的就绪队列当中选取进程分配CPU，主要是协调对CPU等相关资源的使用。。]]></description><category></category></item><item><title><![CDATA[进程调度策略和进程优先级]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/148331153</link><guid>https://blog.youkuaiyun.com/congchp/article/details/148331153</guid><author>congchp</author><pubDate>Fri, 30 May 2025 09:44:12 +0800</pubDate><description><![CDATA[Linux 的和是操作系统为保证系统响应性、公平性和高性能所设计的关键机制。]]></description><category></category></item><item><title><![CDATA[进程生命周期]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/148331043</link><guid>https://blog.youkuaiyun.com/congchp/article/details/148331043</guid><author>congchp</author><pubDate>Fri, 30 May 2025 09:43:14 +0800</pubDate><description><![CDATA[Linux是多任务操作系统，系统中的每个进程能够分时复用CPU时间片，通过有效的进程调度策略实现多任务并行执行。进程在被CPU调度运行，等待CPU资源分配以及等待外部事件时会处于不同的状态。]]></description><category></category></item><item><title><![CDATA[内核进程基础]]></title><link>https://blog.youkuaiyun.com/congchp/article/details/148330976</link><guid>https://blog.youkuaiyun.com/congchp/article/details/148330976</guid><author>congchp</author><pubDate>Fri, 30 May 2025 09:42:30 +0800</pubDate><description><![CDATA[操作系统作为硬件的使用层，提供使用硬件资源的能力；进程作为操作系统的使用层，提供使用操作系统抽象出的资源层的能力。进程：是指计算机中已运行的程序。进程本身不是基本的运行单位，而是线程的容器。程序是指令、数据及其组织形式的描述，进程才是程序(指令和数据)的真正运行实例。Linux内核把进程叫做（任务），进程的虚拟地址空间可分为和，所有进程内核虚拟地址空间(内核页表全局唯一)，每个进程有的用户虚拟地址空间。进程有两种特殊的形式：没有用户虚拟地址空间的进程叫；共享用户虚拟地址空间的进程叫。]]></description><category></category></item></channel></rss>