- 博客(102)
- 资源 (8)
- 收藏
- 关注
原创 4.1 VFS 虚拟文件系统
VFS (Virtual File System) 是 Linux 内核的文件系统抽象层,它为用户空间提供统一的文件系统接口,同时支持多种不同的文件系统。统一接口- 为所有文件系统提供相同 API核心数据结构路径解析- 高效的目录项缓存文件操作- open, read, write, close 等理解 VFS 是深入学习文件系统的基础。下一节:通用块设备层。
2026-04-01 14:50:36
420
原创 4 文件系统概述
文件系统是操作系统管理存储设备上数据的方式,提供数据的存储、检索、更新和保护等基本功能。Linux 的文件系统架构是其最强大的特性之一。
2026-04-01 14:46:59
316
原创 3.3 Slab 分配器
Slab 分配器是 Linux 内核的对象级内存分配器,专门用于分配小对象(如 task_struct、inode 等)。它基于 Buddy 系统构建,但针对小对象进行了优化。kmalloc// 分配内存// 释放内存内存分配层次:│ 用户空间 malloc() ││▼│ (Slab/Slub 分配器) ││▼│ (Buddy 系统) ││▼│ 物理内存 │对象缓存- 缓存常用对象,避免重复初始化着色- 减少缓存冲突Per-CPU- 减少锁竞争 (Slub)碎片少。
2026-03-31 15:18:20
227
原创 3.2 虚拟内存管理
虚拟内存为每个进程提供独立的、连续的地址空间,隐藏了物理内存的复杂性。通过页表机制实现虚拟地址到物理地址的转换。页表- 虚拟地址到物理地址的映射VMA- 虚拟内存区域管理缺页异常- 按需分配物理页面mmap- 文件/内存映射vmalloc- 非连续内存分配理解虚拟内存是理解 Linux 内存管理进阶内容的基础。下一节:Slab 分配器。
2026-03-31 15:17:49
345
原创 3.1 物理内存管理 - Buddy 系统
Buddy 系统是 Linux 内核的页面级内存分配器,负责分配和回收物理页面。它将物理内存划分为不同大小的块,每个块的大小是 2 的幂次方页。简单高效- O(log n) 分配/释放复杂度外部碎片少- 伙伴合并机制按需分配- 按 2^k 页分配区域感知- 支持不同内存区域Buddy 系统是 Linux 内存管理的基石,理解其原理对深入学习内存管理至关重要。下一节:虚拟内存管理。
2026-03-31 15:17:07
425
原创 2.4 进程间通信 (IPC)
进程间通信 (Inter-Process Communication, IPC) 是操作系统提供的重要功能,允许不同进程之间交换数据和同步操作。简单通信- 管道/FIFO消息传递- 消息队列同步- 信号量大数据共享- 共享内存/mmap异步通知- 信号网络通信- Socket理解这些 IPC 机制是编写可靠并发程序的基础。进程管理章节完成!下一章:内存管理。
2026-03-31 14:40:54
439
原创 2.3 CFS 完全公平调度器
调度器是操作系统内核的核心组件,负责决定在任意时刻哪个进程应该获得 CPU 时间。公平性- 确保所有进程获得合理的 CPU 时间效率- 最大化系统吞吐量响应性- 最小化响应时间实时性- 保证实时进程的截止时间完全公平- 通过 vruntime 实现红黑树管理- 高效的进程排序O(log n)- 调度复杂度权重支持- nice 值控制优先级可抢占- 支持实时进程CFS 是 Linux 最核心的调度器,理解其原理对于掌握进程管理至关重要。下一节:进程间通信。
2026-03-25 00:52:35
204
原创 2.2 进程创建与销毁
本文介绍了Linux系统中进程创建的三种主要方式:fork()、vfork()和clone()。fork()是最常用的方法,通过复制父进程创建子进程,并采用写时复制(COW)技术优化性能。vfork()已废弃,它创建的子进程共享父进程地址空间。clone()是最灵活的系统调用,可通过标志位控制资源共享程度,常用于创建线程。文章详细剖析了fork()的实现原理,包括进程描述符分配、资源复制和调度机制,并说明了进程终止时的资源释放流程。现代Linux系统中,所有进程创建最终都通过clone()系统调用实现。
2026-03-25 00:51:53
228
原创 2.1 task_struct 进程描述符详解
Linux进程管理核心结构task_struct详解 摘要:Linux内核通过task_struct结构体管理进程,包含以下关键信息: 进程状态(运行、睡眠、僵尸等)及状态转换机制 进程标识(PID/TGID)和用户/组权限信息 调度实体(vruntime、优先级等)和调度策略(CFS、实时等) 内存管理结构(mm_struct)描述虚拟内存布局 文件系统信息(打开文件表、工作目录等) 信号处理机制(待处理信号队列) 该结构体完整记录了进程执行环境,是Linux进程管理的核心数据结构。
2026-03-16 01:40:02
270
原创 2 进程管理概述
本文介绍了Linux操作系统中进程的核心概念。进程是正在执行的程序实例,包含代码、执行上下文、内存空间等资源。Linux将线程视为特殊进程,通过clone()系统调用创建。进程管理是操作系统核心功能,涉及创建销毁、调度、同步通信等。重点讲解了进程描述符task_struct的结构,包含状态、标识、关系、调度等关键信息,并列出相关源码位置。学习目标是理解进程创建、终止流程,掌握调度器和进程通信机制原理。
2026-03-16 01:39:04
266
原创 1.2 Linux 内核整体架构
分层架构:清晰的分层使各模块职责明确面向对象:使用 C 语言实现面向对象设计模式高度可配置:支持从嵌入式到超级计算机持续演进:不断吸收新技术保持活力理解内核架构是深入学习的第一步,接下来我们将逐个深入各个核心子系统。下一节:进程管理 - 深入理解 task_struct 与调度器。
2026-03-12 18:52:55
442
原创 1.1 Linux 内核源码通读 - 课程概述
Linux 内核是 Linux 操作系统的核心组件,负责管理系统资源、提供硬件抽象层、实现核心系统功能。它是开源世界最成功的项目之一,由 Linus Torvalds 于 1991 年首次发布,至今已发展成为支持多架构、多设备的成熟操作系统内核。
2026-03-12 18:33:09
660
原创 xiaozhi-esp32 仓库分析文档
xiaozhi-esp32项目分析摘要 xiaozhi-esp32是基于ESP-IDF框架开发的ESP32物联网项目,主要实现设备基础功能和网络通信。项目结构包含main应用代码、components自定义模块等目录,采用CMake构建系统。核心功能依赖ESP-IDF多个组件:esp_system提供芯片基础功能,esp_wifi管理无线网络,esp_event处理事件循环,nvs_flash存储配置数据,freertos实现任务调度。典型启动流程包括系统初始化、NVS设置、WiFi配置、事件循环启动和应用
2025-08-14 22:51:40
988
原创 ESP-IDF 编译系统说明
本文介绍了ESP-IDF开发框架的关键配置与管理方法。1) Kconfig配置系统通过各级Kconfig文件生成sdkconfig,影响编译选项;2) 新项目创建需遵循标准目录结构,包含CMakeLists.txt和Kconfig文件;3) 板卡支持需在boards目录添加引脚定义等文件;4) 组件开发需包含CMakeLists.txt和Kconfig配置,并通过递归方式集成到项目;5) 编译流程从顶层CMakeLists.txt开始,递归处理组件依赖关系。最后展示了hello_world示例项目的核心代码
2025-08-13 23:15:14
683
转载 $<...> $<>
当运行CMake时,开发人员倾向于认为它是一个简单的步骤,需要读取项目的CMakeLists.txt文件,并生成相关的特定于生成器的项目文件集(例如Visual Studio解决方案和项目文件,Xcode项目,Unix Makefiles或Ninja输入文件)。随着时间的推移,支持生成器表达式的属性集已经扩展,一些CMake版本也扩展了支持的表达式集。因为AND、OR和NOT要求它们的表达式的值只能为0或1,所以考虑将这些表达式封装在$中,以强制对被认为是true或false的表达式进行更宽容的逻辑处理。
2024-01-19 20:09:07
354
1
原创 arm汇编LDR
LDR指令的格式: LDR{条件} 目的寄存器 <存储器地址>作用:将 存储器地址 所指地址处连续的4个字节(1个字)的数据传送到目的寄存器中。LDR R0,[R1] ;将存储器地址为R1的字数据读入寄存器R0。LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R0。LDR R0,[R1,#8] ;将存储器地址为R1+8的字数据读入寄存器R0。LDR R0,[R1],R2 ;将存储器地址为R1的字数据读入..
2021-12-23 18:57:44
3613
转载 2021-06-01
Linux:通过echo写二进制文件(16进制)1.简单用法[推荐]echo 001122334455 | xxd -r -ps > test // 6 个字节xxd // xxd 命令用于用二进制或十六进制显示文件的内容-r // 把xxd的十六进制输出内容转换回原文件的二进制内容-ps // 以 postscript的连续十六进制转储输出,这也叫做纯十六进制转储2.朴素用法echo -e -n "\x11\x22" > test
2021-06-01 17:40:54
311
转载 Git 远程仓库默认权限问题的解决
多人共同开发维护一个项目时,对整个项目文件互有拉取、推送等行为。为防止操作时文件权限出现冲突,可有以下2种方法解决:1. 本地git的远端设置中,连接远程仓库时多人使用同一个用户名,该用户名为git远程仓库的拥有者2. 不同开发者需使用不同的用户名连接时,会出现文件权限冲突,这是因为 git 仓库使用的是对象存储,每次改动会新增若干对象文件(具体对象文件在 /.git/objects 下),而新增的对象文件权限属性由系统控制,默认为755,即非文件拥有着无法进行写入(推送)。这里需要将 git 仓库
2020-11-11 14:15:10
1774
原创 算法学习(一)----求解数列中,和最大的连续子数列
学习算法,看到一个有意思的题目,最大的子序列和问题: 给定整数A1,A2, …,An(可能有负数),求 的最大值(为方便起见,如果所有整数均为负数,则最大子序列和为0)。有四种方法,运行时间分别是,,O(NlogN), ,现在写出最好的算法。int MaxSubsequenceSum( const int A[ ], int N) { int ThisSum, MaxSum...
2018-08-24 00:18:47
1571
2
转载 markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I...
2018-08-23 23:02:53
222
原创 想做的事情
想做的事情时间标记:2017/06/09最近开始,想做一点不一样的事情。跟以前我做的事情不一样的事情。1. 写作; 2. 看英文代码书,把它们翻译成中文; 3. 学习Java; 4. 学习Android APK, using Kotlin; 5. 学习Python; 6. 学习HTML; 7. 学习C++; 8. 学习Nordic板子的应用; 9. 学习蓝牙; 10. 学习经济学/
2017-12-14 15:25:36
412
1
转载 putty ssh登录,vim乱码问题解决
解决方案1:首先要保证运行secure CRT的windows机器的默认代码页为CP936,这一点中文windows已经是默认设置了。其他的与上面方案1相同,只是要增加一步,:set termencoding=cp936解决方案2:与上面方案2类似,不过最后一步修改termencoding省略即可,在此情况下需要的修改最少,只要以 locale为zh_CN开 启vim,则encodin
2015-05-26 14:59:47
897
转载 cscope file does not exist 错误解决方法
转自:http://blog.youkuaiyun.com/david_xtd/article/details/7737653[plain] view plaincopyprint?find `pwd` -name "*.[ch]" -o -name "*.cpp" > cscope.files cscope -bR -i cscope.fil
2015-05-24 23:26:42
6066
转载 浅析arm汇编中^、!、cxsf符号和movs等指令使用学习-之1
from:http://blog.chinaunix.net/uid-20564848-id-72822.html文章来源:http://gliethttp.cublog.cn.macro restore_user_regs ldr r1,[sp, #S_PSR] ldr lr,[sp, #S_PC]! @!用来控制基址变址寻址的最终新地址是否进行回写操作,
2015-01-19 15:14:07
1019
转载 ubuntu官方源列表网站
http://wiki.ubuntu.org.cn/%E6%BA%90%E5%88%97%E8%A1%A8wiki.ubuntu.org.cn/源列表
2015-01-08 10:34:53
3761
转载 ubuntu GPG签名验证错误 NO_PUBKEY问题
正在读取软件包列表... 完成W: GPG签名验证错误: http://deb.opera.com unstable Release:由于没有公钥,下列签名无法进行验证: NO_PUBKEY 033431536A423791W: 您可能需要运行 apt-get update 来解决这些问题需要把上面两行命令中的“4F6C1E86”替换成“NO_PUBKEY”后面的字串的最后8位,也
2015-01-08 09:54:09
1073
转载 Kernel启动概要
前言最近几个月将Linux Kernel的大概研究了一下,下面需要进行深入详细的分析。主要将以S3C2440的一块开发板为硬件实体。大概包括如下内容:1 bootloader分析,以uboot为主,结合具体开发板的情况。我的目标是解释清楚uboot的工作原理(说实话,分析过程中不太想被硬件绑架,但是需要以一个实际的例子来做分析)2 kernel部分,这就很多内容了。打算从k
2014-07-22 15:52:14
544
转载 linux启动流程----摘至鸟哥的linux私房菜
zhuan[摘至鸟哥的linux私房菜] 今天看了linux启动相关的内容,把主要的部分记录如下。linux的基础启动流程1. 加载BIOS的硬件信息,并获取第一个启动设备的代号。2. 读取第一个启动设备的MBR的引导加载程序(即lilo、grub、spfdisk等)的启动信息。3. 加载操作系统的核心信息,核心开始解压,并尝试驱动所有的硬件设备。4. 核心执行init
2014-07-22 10:41:51
1017
转载 Linux 的启动流程
作者: 阮一峰半年前,我写了《计算机是如何启动的?》,探讨BIOS和主引导记录的作用。那篇文章不涉及操作系统,只与主板的板载程序有关。今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程。这个部分比较有意思。因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多;但是,一旦进入操作系统,程序员几乎可以定制所有方
2014-07-22 10:38:44
598
转载 ubuntu vmtool not valid path
$ ln -s /usr/src/linux-headers-$(uname -r)/include/generated/uapi/linux/version.h /usr/src/linux-headers-$(uname -r)/include/linux/version.h
2014-04-21 16:43:10
680
转载 BAT 批处理脚本 教程
第一章 批处理基础第一节 常用批处理内部命令简介批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。这些命令统称批处理命令。小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程。了解了大概意思后,我们正式开始学习.先看一个简单的例子!@echo offecho "欢迎来到非常BAT!"
2014-04-16 14:54:03
1002
转载 BAT脚本编写要点(1)_特殊字符
1. 点 与echo连用,作用是换行 示例1 [输出空行] echo. 2 > 定向符[输出] 将命令的输出进行重定向 [一般用于将结果写入文件] 注意 nul 为空设备 >nul 则用于屏蔽输出内容 [如 pause>nul] 示例2 [向1.txt中写入字符串 wind]
2014-04-16 14:51:11
1790
转载 安装lzop
lzop是开源的压缩算法框架。具体的介绍这里不再赘述,请去网上搜索。本文书写如何在ubuntu上安装lzop. 所需软件:gcc、g++,Apache ant,lzop,lzo,hadoop-lzo.gcc和g++ ubuntun上已经集成的有。 安装lzo: hadoop@ubuntu:~$wget http://www.oberhumer.com/opensource
2014-03-19 09:39:44
9555
转载 ubnutu :could not initialize the package inform...解决
ubnutu :could not initialize the package inform...解决 1、前几天,在ubuntu下使用apt-get 安装程序时,发现错误,无法初始化包的信息,具体错误如下图: 解决方法:1sudo rm -rv /var/lib/apt/lists/2sudo apt-get update2、另外还有一个问题,有时候
2014-03-19 08:39:18
896
转载 [GUIDE] How to make a nandroid backup directly to your computer without using sdcard
from:http://forum.xda-developers.com/showthread.php?p=29862574INFORMATIONThis guide is intended to make a full backup of your android phone (the entire memory block with all partitions) or a s
2014-03-06 09:03:29
2864
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅