自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (2)
  • 收藏
  • 关注

原创 shell脚本基础语法和使用场景详解

Shell是Linux/Unix系统中连接用户与内核的桥梁,既可作为命令解释器,也可用于编写脚本程序。本文从四个维度介绍Shell:一、核心概念,区分Shell、终端和Bash,解释脚本和Shebang的作用;二、基本语法,包括变量定义、字符串处理、参数传递、条件判断、流程控制和函数编写;三、常用命令,涵盖文件操作、文本处理、进程管理等实用工具;四、典型应用场景,如自动化运维、CI/CD流程和开发辅助等。掌握Shell脚本能有效提升系统管理和开发效率,实现任务自动化。

2025-09-17 23:08:03 724

原创 Linux内核崩溃时为什么会打印call trace---猝死前的死亡讯息

摘要: Linux内核通过Oops和Kernel Panic机制在网卡固件或驱动崩溃时自动生成Call Trace。该功能依赖编译时嵌入的栈展开技术(帧指针或ORC数据),实时打印错误现场的函数调用链。与kdump协作时,Call Trace提供即时文本日志,而kdump转储内存镜像供离线分析。Call Trace需从下往上解读,顶部函数通常是问题根源。此机制是内核级诊断的核心工具,无需外部程序介入。(150字)

2025-09-10 23:54:15 1071

原创 kdump使用方法和场景介绍

摘要: kdump是Linux内核的崩溃转储机制,通过kexec热启动到预加载的捕获内核,保存主内核崩溃时的内存镜像(vmcore)用于分析。配置需预留内存(crashkernel参数)、安装kexec-tools、修改/etc/kdump.conf指定存储路径。触发崩溃后,捕获内核将vmcore保存到本地/NFS等位置,系统自动重启。使用crash工具分析vmcore需匹配内核调试符号。kdump能有效诊断内核panic、死锁等问题,是生产环境故障排查的关键工具,但需注意预留内存大小和配置权限问题。(14

2025-09-10 23:50:14 1168

原创 KGDB(Kernel GNU Debugger)工具使用方法详解

KGDB是Linux内核源代码级调试器,支持断点设置、单步执行等调试功能,用于诊断内核漏洞和崩溃。工作原理基于双机调试模型,目标机通过串口或以太网与开发机通信。配置需编译含KGDB功能的内核并修改启动参数,通过GDB连接进行调试。调试时可设置断点、查看变量和调用栈,使用lx-symbols加载模块符号。常见问题包括内核文件不匹配和串口连接问题。KGDB虽影响性能,但对内核开发者至关重要,是理解内核机制和定位Bug的重要工具。

2025-09-08 23:53:32 898

原创 文件系统深度解析:从核心概念到代码实践

本文深入解析了文件系统的核心架构与工作原理。文件系统作为存储设备的逻辑抽象层,通过分层设计(VFS、具体FS、块设备驱动)实现数据持久化、高效存取和安全共享。文章详细拆解了文件读写流程,包括元数据管理、页缓存和日志机制等关键技术,并对比了ext4、XFS等不同文件系统的适用场景。理解这些原理有助于开发人员优化IO性能,构建可靠的存储应用。

2025-08-31 11:33:23 1179

原创 Linux 内核进程管理解析

摘要: Linux内核进程管理围绕task_struct描述符构建,通过系统调用(fork、execve、exit)实现进程生命周期控制。核心机制包括:写时复制(COW)优化进程创建,CFS调度器基于虚拟运行时间(vruntime)公平分配CPU资源,状态机(就绪/运行/睡眠/僵尸态)管理进程流转,以及IPC机制(信号/管道/共享内存等)实现进程协作。进程终止后保留僵尸态供父进程回收,避免资源泄漏。整体设计通过统一抽象(task_struct)、状态驱动和调度算法平衡效率与公平性。

2025-08-24 13:24:46 601

原创 Linux内存管理系统性总结

本文系统总结了Linux内存管理的核心机制。主要包括:1)页表机制实现虚拟地址到物理地址的转换,支持多级页表和大页映射;2)伙伴系统管理物理内存分配,解决外部碎片问题;3)SLAB分配器高效管理内核小对象;4)VMA机制管理进程虚拟地址空间布局;5)内存回收机制包括kswapd守护进程和LRU算法等。这些组件协同工作,通过页表转换、物理内存分配、虚拟内存管理等机制,构建了Linux高效的内存管理体系。

2025-08-18 23:20:13 1099

原创 计算机存储器分类和层次结构详解

存储器层次结构解析:计算机存储系统采用多级层次化设计,从寄存器、高速缓存到主存和辅助存储器,形成速度递减、容量递增的金字塔结构。寄存器(0.3ns)和高速缓存(SRAM实现,1-20ns)为CPU提供快速数据访问;主存(DRAM,50-100ns)作为工作数据区;SSD/HDD(μs-ms级)提供大容量持久存储。核心指标包括访问延迟(寄存器0.3ns vs HDD 10ms)、带宽(寄存器>500GB/s vs HDD 0.2GB/s)和成本($/GB从寄存器$100+到HDD$0.02)。

2025-08-16 23:13:17 1563

原创 Linux网络性能调优终极指南:深度解析与实践

本文深入解析Linux网络性能调优的核心原理与实践方法。首先剖析数据包生命周期中的关键瓶颈点(DMA延迟、中断风暴等)及对应解决方案(如DDIO、NAPI、XDP等)。其次详细分析现代CPU架构特性(NUMA、SIMD等)对性能的影响机制。文章提供了基础调优方法的具体实现,包括CPU隔离与中断绑核技术、RSS流量均衡算法(Toeplitz/XOR/CRC32),以及大页内存的TLB优化原理。在协议栈优化方面,重点介绍了零拷贝技术(sendfile/splice)的实现细节与性能优势。

2025-08-13 23:20:36 950

原创 程序员高效Prompt设计终极指南

程序员高效Prompt设计指南摘要 本文系统介绍了程序员设计高效Prompt的核心原则和12大专业场景模板。核心原则包括:1)精准指令三要素(技术身份、结构化、关键约束)2)思维链黄金四步(问题诊断-方案对比-代码实现-测试验证)3)执行框架公式4)质量保障双保险。提供了12个专业场景的Prompt模板,覆盖代码生成、文档提炼、Bug修复、架构设计、SQL优化、算法设计、协议解析、安全审计、云架构、硬件交互、金融系统和游戏开发等领域。

2025-08-11 23:25:35 1042

原创 Virtio 驱动初始化&数据收发流程详解

本文详细解析了Virtio驱动的核心流程,主要包括:1) 整体架构概览,展示前后端通过virtqueue的交互方式;2) 初始化流程,包括设备发现、特性协商和virtqueues配置;3) 数据收发流程,涵盖TX发送和RX接收的完整处理链;4) 关键数据结构如virtio_device、virtqueue和vring的实现;5) 性能优化机制,包括批处理、NAPI和零拷贝技术;6) 错误处理如队列满时的流量控制。该驱动通过虚拟队列实现高效的前后端通信,结合多项优化技术提升I/O性能。

2025-08-10 23:18:38 918

原创 `sk_buff` 结构体详解(包含全生命周期解析)

Linux网络数据包核心结构sk_buff解析与生命周期管理 sk_buff是Linux网络协议栈处理数据包的核心数据结构,包含数据缓冲区、协议信息和设备信息等关键成员。其生命周期分为接收和发送两条路径:接收路径从网卡驱动创建sk_buff开始,经协议栈处理后交付应用层;发送路径则由应用层发起,经协议栈封装后由网卡驱动发送。文中详细解析了sk_buff的内存布局、关键操作函数(如分配/释放、数据操作、分片管理等)以及特殊场景处理(如零拷贝)。最后提供了内存预分配、DMA优化等性能优化技巧。

2025-08-10 23:05:15 1229

原创 Virtio 驱动关键结构体与函数详解

本文介绍了Linux virtio-net驱动中的关键结构体和函数实现。核心结构体包括代表设备实例的virtio_device、实现通信队列的virtqueue、驱动上下文结构virtnet_info,以及管理发送/接收队列的专用结构。重点分析了驱动初始化流程,包括设备探测、队列设置和网络设备注册;详细说明了数据发送路径的skb处理、sg列表填充和virtqueue操作;并概述了接收队列的初始化过程。这些组件共同实现了virtio设备的高效数据传输机制。

2025-08-10 22:54:52 622

原创 platform总线简介和使用场景说明

摘要: platform总线是Linux内核中一种虚拟总线,用于管理不直接挂载在传统物理总线(如PCI、USB)上的设备,尤其是SoC集成外设(如GPIO、定时器)和内存映射外设。其核心通过platform_device(描述设备资源)和platform_driver(实现驱动逻辑)分离,支持三种匹配机制: 设备树/ACPI(优先通过.compatible字符串匹配); ID表(基于名称匹配); 直接名称匹配。 该总线提供统一框架管理硬件资源(如内存、中断),支持动态绑定,并集成设备树/ACPI,是嵌入式系

2025-08-07 23:20:22 746

原创 Linux总线,设备和驱动关系以及匹配机制解析

Linux内核设备模型的核心是总线、设备和驱动的分离与匹配机制。总线作为媒介管理者,维护设备和驱动链表,实现匹配逻辑;设备代表硬件实体,提供标识符和资源信息;驱动包含控制代码,通过ID表或兼容字符串声明支持范围。匹配机制基于总线类型:PCI/USB等采用精确ID匹配,设备树/ACPI采用兼容字符串匹配,简单平台设备则使用名称匹配。当设备或驱动注册时,总线执行匹配流程并调用驱动的probe()函数完成绑定,实现硬件抽象与自动加载。

2025-08-07 23:16:30 1325

原创 Linux内核C语言代码规范

本文总结了Linux内核C语言代码规范要点,重点包括:1)命名规范(snake_case命名、模块前缀、避免缩写);2)格式规范(8字符Tab缩进、指针声明风格、大括号规则);3)文件组织(头文件保护宏、源文件结构);4)内核特有要求(错误处理模式、并发控制、内存管理);5)注释规范(函数与数据结构注释格式)。通过对比正确/错误示例,强调遵循规范对内核代码可维护性的重要性。

2025-08-05 23:36:38 755

原创 ethtool,lspci,iperf工具常用命令总结

本文介绍了Linux系统中三个核心网络工具的使用方法及功能:ethtool, lspci,iperf/iperf3.

2025-08-04 00:00:57 1195

原创 Linux常用命令分类总结

本文介绍了Linux常用命令,包括文件与目录操作、权限管理,文本处理,进程管理等。

2025-08-03 11:58:00 1488

原创 VS Code高效开发指南:快捷键与配置优化详解

《VS Code高效开发指南》总结了提升编码效率的关键技巧:1)掌握核心快捷键,如Ctrl+P搜索文件、F12跳转定义、F2全局重命名;2)使用多光标编辑、列块编辑等高级功能;3)优化配置(自动保存、格式化、禁用缩略图);4)安装Prettier、GitLens等效率插件;5)结合Emmet快速生成HTML。建议分阶段学习,每周掌握2-3个快捷键,逐步提升50%+的开发效率。

2025-08-02 10:59:09 1255

原创 Git 从入门到精通

Git 从入门到精通摘要 Git是分布式版本控制系统,核心概念包括版本控制、快照记录和三个工作区域(工作目录、暂存区、本地仓库)。基本工作流程涉及修改、暂存和提交文件。分支管理允许并行开发,通过merge或rebase合并代码。远程仓库(如GitHub)支持团队协作,常用协作模式包括功能分支工作流和Gitflow。高级技巧包括撤销更改、储藏临时修改和版本标签管理。关键原则:不要重写已共享的提交历史。

2025-07-29 23:48:22 903

原创 CMake 完全实战指南:从入门到精通

《CMake 完全实战指南》摘要:CMake 是现代 C/C++ 项目的跨平台构建系统生成器,支持生成 Makefile、VS 项目等多种构建文件。文章从核心概念入手,介绍了基本的 CMakeLists.txt 配置、可执行文件和库的创建与管理方法,以及头文件包含和库链接的语法。实战部分详细讲解了 Makefile 生成、构建与安装命令,推荐了模块化项目结构最佳实践。高级技巧包括条件编译选项、第三方库集成(find_package 和 FetchContent)以及自定义构建命令。指南适合初学者快速上手.

2025-07-29 23:41:05 931

原创 Makefile 与 CMake 关系指南

Makefile与CMake是C/C++项目构建中的核心工具,二者协同工作形成完整构建链:CMake作为构建生成器,根据CMakeLists.txt生成平台特定的Makefile,再由Makefile指导实际编译过程。Makefile适合小型单一平台项目,语法直接但跨平台性弱;CMake支持跨平台开发,能自动管理依赖并集成测试,适合中大型项目。现代开发推荐组合使用:CMake生成Makefile,再通过make命令编译。

2025-07-29 23:28:56 1190

原创 Makefile 快速入门指南

Makefile简明指南 Makefile是自动化构建工具,通过定义规则管理代码编译过程。核心结构为"目标:依赖→命令",使用Tab缩进命令。典型用法包括: 定义变量(CC/CFLAGS)和通配规则(%.o:%.c) 使用自动化变量($@目标名,$^所有依赖) 声明伪目标(.PHONY clean) 支持多目录项目(wildcard/patsubst) 常见错误:Tab误用空格、依赖文件缺失。建议从简单C项目模板入手,逐步掌握变量替换和模式规则。关键优势是增量编译,仅重新构建修改过的文件

2025-07-29 23:21:58 1294

原创 Linux内核中断处理机制深度解析

中断处理核心技术解析 本文系统梳理了Linux中断处理机制的关键技术点,主要内容包括: 中断分类体系:详细对比硬件中断、软件中断、异常和NMI四种类型,说明其触发源和使用场景差异,并给出标准中断和线程化中断的注册代码示例。 处理全流程:通过流程图展示从触发到下半部执行的完整路径,重点解析中断源识别、标志清除(含不同硬件清除方式)、临界区保护和下半部机制选择等核心步骤。 故障解决方案:针对中断丢失、中断风暴、共享冲突和上下文错误等典型问题,提供具体代码级解决方案,包括中断标志处理、限流机制和共享中断验证等。

2025-07-29 00:09:35 1058

原创 C语言指针深度解析:多级指针、函数指针与内存模型

本文系统讲解了C语言中指针的高级应用,主要内容包括:1)多级指针的原理与使用,通过指针链实现动态多维数组和参数传递;2)函数指针的声明与使用,包括回调函数、函数指针数组和面向对象模拟;3)不同内存区域(代码区、栈、堆、静态区)的指针特性;4)复杂指针的解析技巧(右左法则)。文章通过丰富代码示例,深入剖析了指针在内存管理、函数调用和多线程环境中的应用与潜在风险,为理解C语言底层机制提供了实用指导。

2025-07-27 11:46:24 529

原创 C程序内存布局详解

本文详细解析了C程序的内存布局结构,包括代码段、只读数据段、初始化数据段、未初始化数据段、堆和栈等关键区域。文章从存储内容、特点、生命周期和典型示例等方面对每个内存区域进行了深入说明,并配以内存布局示意图。同时指出了静态局部变量的特殊存储位置、指针变量的存储规则,以及常见的栈溢出、内存泄漏和野指针等错误类型。最后通过一个验证程序示例,展示了如何实际观察各变量的内存地址分布。理解这些内存管理知识对于编写高效、安全的C程序至关重要。

2025-07-26 23:28:40 1504 1

原创 Linux内核锁机制详解与C语言实践指南

本文详细介绍了Linux内核中的各种锁机制及其C语言实现。主要内容包括:1) 7种内核锁类型的原理与使用场景(自旋锁、互斥锁、信号量、读写锁、RCU、顺序锁和原子操作);2) C语言中锁的正确使用模式,包括基本用法、嵌套处理、中断上下文处理等实践;3) 常见并发编程错误的识别与解决方法,如死锁、优先级反转等典型问题。文章通过大量代码示例展示了各种锁的具体实现方式,并提供了最佳实践建议,特别强调了在不同场景下选择合适锁类型的重要性,以及避免常见并发陷阱的方法。

2025-07-24 23:52:38 790

原创 Linux内核中动态内存分配函数解析

本文详细介绍了Linux内核中的动态内存分配函数及其区别。主要包括kmalloc(物理连续小内存)、vmalloc(虚拟连续大内存)、kcalloc(数组分配)、alloc_pages(页级分配)和kmem_cache_alloc(slab缓存分配)等函数,对比了它们在物理连续性、大小限制和适用场景等方面的差异。文章还说明了分配标志(如GFP_KERNEL、GFP_ATOMIC)的选择原则,并强调了内存释放和性能优化的注意事项。最后提供了典型使用示例,帮助开发者根据需求选择合适的内存分配方式。

2025-07-24 23:14:41 992

原创 程序是如何生成的-以c语言为例

这篇文章详细介绍了从源代码到可执行程序的完整编译过程。主要包括七个步骤:编写源代码、预处理(处理宏和头文件)、编译(转为汇编语言)、汇编(转为机器码)、链接(合并目标文件和库)、生成可执行文件、加载运行。文章对比了编译型语言(如C/C++)和解释型语言(如Python)的区别,前者执行快但需预编译,后者跨平台但运行较慢。整个过程通过"Hello World"实例说明,展示了程序从代码编写到实际运行的完整转换流程。

2025-07-22 23:15:59 856

原创 python排序算法之基数排序

#代码如下:'''基数排序:1.把数据分为10个桶,以为数字有0-9这10个2.依次把数据的个位,十位,百位等等各个位数的数据进行分桶,放在这10个桶中3.最大的数有k位,则循环k次4.时间复杂度O(kn),空间复杂度O(k+n),其中k=log10(n)+1''''''基数排序:1.把数据分为10个桶,以为数字有0-9这10个2.依次把数据的个位,十位,百位等等各个位数的数据进行分桶排序,放在这10个桶中3.最大的数有k位,则循环k次4.时间复杂度O(kn),空间复杂度O(k+n

2021-09-16 22:45:55 487 2

原创 python排序算法之桶排序

桶排序主要适用于全是数字的列表排序代码如下:def buckrt_sort(li, n=100, max_num=10000): bucket = [[] for _ in range(n)] #创建桶 for var in li : i = min(var//(max_num//n), n-1)#第i个桶 bucket[i].append(var)#在每个桶中加入相对应的数 for j in range(len(bucket[i])-

2021-09-16 21:47:37 528

原创 python实现希尔排序

希尔排序代码如下:'''希尔排序:排序的时间复杂度由gap决定,一般比low b三人组要快,比NB三人组要慢基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。'''def insert_sort_gap(li,gap): for i in range(gap, len(li)): temp = li[i] j = i - gap whil

2021-09-16 18:21:41 221

原创 python实现排序算法NB三人组之堆排序,以及topK问题实现

堆排序代码如下:'''堆排序:时间复杂度:O(n*logn)实现较大数据n的topk问题'''def sift(li, low, high): ''' :param li: 列表 :param low: 根节点 :param high: 最后一个节点 :return: ''' i = low j = 2*i+1 #j是i的左孩子 temp = li[low] #把堆顶存起来 while j<=high:

2021-09-16 18:10:36 213

原创 python实现排序算法NB三人组之归并排序

归并排序思想:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。代码如下:# 从两个有顺序的列表里边依次取数据比较,把li[low,mid]和li[mid,right]看做是两个列表,# 每次我们分别拿出两个列表中最小的数比较,把较小的放入tempdef merge(li, low

2021-09-16 16:14:48 239

原创 python实现排序算法NB三人组之快速排序

快速排序思想:先使得数列中第一个数排在数列中正确的顺序,左边的数都不大于该数,右边的数都不小于该数再用递归使得整个数列排序成功代码如下:#使得数列中第一个数排在数列中正确的顺序,左边的数都不大于该数,右边的数都不小于该数def partition(li,left,right): temp = li[left] while left<right: while left < right and li[right]>=temp:#从右边找比temp小的数

2021-09-16 10:18:00 222

原创 python实现排序算法lowb三人组之插入排序

插入排序思想:将一个列表看成一个有序列表和无序列表,从无序列表中的第一个数据插入到已经排好序的列表中,从而得到一个新的有序的数据数+1的列表实现:总共两个循环,外循坏是表示要插入的元素,共需插入n-1趟,内循环是对当前有序数列进行插入位置查找,并把数据插入到该位置中代码实现def insert_sort(li): for i in range(1,len(li)): #表示要插入的数据的下标 temp = li[i] j = i-1 whil

2021-09-16 09:48:28 227

原创 python实现排序算法lowb三人组之选择排序

选择排序思想:找到列表中第i小的数据,与列表中第i个数据交换位置,即每趟排好一个数的序,共排n-1趟完成排序(从小到大排序)代码如下:def select_sort(li): for i in range(len(li)-1): #i是第几趟,总共n-1趟 min_loc = i #最开始假设最小值为无序区第一个数的下标, for j in range(i+1,len(li)):#在无序区中找到最小值的下标 if

2021-09-14 08:01:15 224

原创 python实现排序算法lowb三人组之冒泡排序

冒泡排序:1.从头开始两两数据相比,如果左边数比右边数大则交换两个数的位置2.每一趟排序,有序区多一个数,无序区少一个数,总共需要排n-1趟3.改进的冒泡排序需要加个标志位判断是否需要继续排序,如果是已经排好序的列表改进的冒泡只需要排序一趟,而没有改进的需要排序n-1趟4.python代码如下:#从大到小排序def bubble_sort(li): for i in range(len(li)-1): # 排序n-1趟 for j in range(len(li)-i-1

2021-09-13 11:28:11 248

原创 python实现简单爬虫和数据可视化-爬取豆瓣top250电影信息

此内容全程跟着成都工业大学的李巍老师爬虫入门视频敲的代码,如有侵权删观看的视频链接如下:李巍老师爬虫入门视频整个爬虫可分为三个部分:1. 爬取网页-“https://movie.douban.com/top250?start=0”2.解析数据,打开自己要爬取的网站,进入开发者工具3. 保存自己想要的数据到excel4.具体代码如下,当出现403时,可以换一个"User-Agent"#coding = utf-8#version:python 3.6.0#Tools:Pycharm 2018

2021-09-03 16:51:26 2557

原创 深入浅出的分析python 中if __name__ == __main__的用处和原理!!!

1.先说作用控制某些代码在本py文件中执行,而防止被import其它py文件时被执行,也就是说当咱们希望有些代码只在本文件中执行,而不想被import到其它文件中执行的时候咱们就需要使用到"if_name_ == ‘_main_’ "了。2.下面我用test01 和import_test01两个py文件来说明,代码如下所示:3.原理解释从test01和import_test01运行结果可以看出,print(two)没有在import_test01中执行,即two没有在import_test01打

2021-08-22 21:38:02 275

linux(imx6ull)开发文档

linux(imx6ull)开发文档

2023-04-08

多态职工管理系统.rar

对理解多态有一定得帮助!

2021-10-29

Python有限元数值分析.zip

研究生上有限元数值分析课时,老师布置的相关作业,此时刚接触Python,也没有多少编程经验,编程过程对我来说并不简单,抄抄改改,还好总算能够运行,达到自己的目标值。内容包含:LU分解解线性方程组,Jacobi迭代,implicit,explicit,总刚度矩阵的组装,以及简单的4单元9节点有限元分析(得到各个节点的位移和力)。

2020-07-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除