
Linux内核知识
文章平均质量分 96
不断学习和积累Linux内核知识
Once-Day
长路漫漫,一人太孤单,无人理解,独自前行,给世界留下一点微不足道的痕迹,稍微弥补曾经的遗憾。
展开
-
Linux之kernel(1)系统基础理论(6)
Author: Once Day Date: 2025年3月10日一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…漫漫长路,有人对你微笑过嘛…原创 2025-03-10 23:15:36 · 1616 阅读 · 37 评论 -
Linux之kernel(1)系统基础理论(5)
内存管理是操作系统的核心功能之一,其主要目标是支持多个应用程序同时运行,并提供内存保护和重定位机制。内存保护确保各个应用程序之间相互隔离,防止非法访问;而重定位使得程序可以在内存中自由移动,而无需修改代码。操作系统引入了地址空间的抽象概念。每个进程都拥有独立的虚拟地址空间,其中包含了代码、数据、堆栈等区域。这种抽象屏蔽了物理内存的细节,简化了程序的编写和内存管理。程序可以在自己的地址空间内自由访问,而不必关心具体的物理内存分配。为了实现地址空间的映射和转换,硬件芯片提供了基址寄存器和变址寄存器。原创 2025-03-05 00:04:03 · 896 阅读 · 12 评论 -
Linux之kernel(1)系统基础理论(4)
进程和线程是操作系统中两个基本的执行单位。进程是资源分配的基本单位,而线程是CPU调度的基本单位。每个进程都有自己独立的地址空间、文件资源、内存资源等,而一个进程中可以包含多个线程,这些线程共享进程的资源,但每个线程有自己独立的运行栈和程序计数器。为了让系统中多个进程和线程能够有序地执行,操作系统需要对它们进行调度。调度的目的是为了提高系统的效率,合理利用系统资源,让各个进程和线程都能够获得执行的机会。先来先服务(FCFS):按照进程到达就绪队列的先后顺序来调度,先来的进程先执行。原创 2025-02-19 20:21:55 · 1080 阅读 · 1 评论 -
Linux之kernel(1)系统基础理论(3)
介绍内核线程以及相关的互斥、同步、通信等知识原创 2025-02-16 10:30:32 · 1057 阅读 · 10 评论 -
Linux之kernel(1)系统基础理论(2)
进程是操作系统中一个非常重要的概念。简单来说,进程就是一个正在运行的程序实例。当我们在计算机上启动一个程序时,操作系统就会创建一个进程,分配必要的系统资源,如CPU时间、内存空间等,来支持该程序的运行。每个进程都有自己独立的地址空间,包含程序代码、数据、堆栈等。从操作系统的角度来看,进程是资源分配和调度的基本单位。操作系统通过对进程的管理和调度,合理有效地分配和利用系统资源,使多个程序可以并发执行,从而提高系统的整体性能。不同进程之间一般是相互独立的,互不干扰。原创 2025-02-12 20:45:22 · 2716 阅读 · 29 评论 -
Linux之kernel(3)内核模块编译
Author: Once Day Date: 2025年2月7日一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…漫漫长路,有人对你微笑过嘛…原创 2025-02-12 20:37:26 · 1265 阅读 · 2 评论 -
Linux之kernel(4)netlink通信
这一段话来自The Linux Kernel Documentation的Introduction to Netlink,它描述了一个事实:netlink缺乏系统的文档描述。这也是本文撰写的动机所在,如果不能了解netlink的”历史用途“,那么很容易陷入片面的观点中,从而导致各种意外发生。Netlink是一种基于网络的机制,允许在内核内部以及内核与用户层之间进行通信。最早在内核2.2引入,旨在替代笨拙的IOCTL,IOCTL不能从内核向用户空间发送异步消息,而且必须定义IOCTL号。原创 2025-02-09 23:27:00 · 1893 阅读 · 17 评论 -
Linux之kernel(2)获取内核代码
linux内核的基本架构如下:运行于用户空间,执行用户进程。运行于内核空间,处于进程上下文,代表某个特定的进程执行。运行于内核空间,处于中断上下文,于任何进程无关,处理某个特定的中断。内核设计一般有两种,宏内核(单个大内核)和微内核。Linux基于宏内核设计,但同时吸收了微内核设计的模块化思想。Linux内核运行在单独的内核地址空间上 ,同时支持抢占式内核、支持内核线程、动态装载内核模块的能力。Linux内核支持对称多处理机制(SMP),对待线程和进程一视同仁,线程就像一些能够共享资源的进程。原创 2025-02-08 21:59:15 · 1353 阅读 · 5 评论 -
Linux之kernel(1)系统基础理论(1)
操作系统首先是软件程序操作系统是计算机系统中最基础、最核心的软件程序。它是计算机硬件与用户之间的桥梁,为用户提供一个方便、高效、安全的工作环境。操作系统管理和控制着计算机系统中的各种硬件资源,如CPU、内存、存储设备、输入输出设备等,合理地组织、调度和分配这些资源,使它们能够协调工作,发挥最大效能。(2)计算机系统的核心和基石操作系统也是其他应用软件运行的基础。它为应用程序提供了统一的编程接口和运行环境,屏蔽了硬件细节,使得应用程序开发者无需关注底层硬件,专注于应用功能的实现。原创 2025-02-08 21:53:43 · 12033 阅读 · 27 评论 -
Linux之kernel(7)系统调用源码分析
系统调用是指内核提供给用户线程,用于和内核自身进行交互的一组接口。这些接口可以让应用程序受限的访问硬件设备,创建新线程并于已有进程进行通信的机制,以及申请操作系统其他资源的能力。为用户空间提供一种硬件的抽象接口。系统调用保证了系统的稳定和安全。进程运行在虚拟的系统中,由系统提供访问内核的手段。系统调用是除了异常和陷入外,内核唯一的合法入口。Linux的系统调用比大部分操作系统都少得多,重点强调Linux系统调用的规则和实现方法。原创 2025-02-07 00:58:15 · 1019 阅读 · 4 评论 -
Linux之kernel(6)Kconfig语法详解
Kconfig是用于内核编译的,其是makefile的帮手,用于定制编译的组件。在c源码的编译过程中,makefile指定c编译的环境变量,头文件,库文件,编译参数等。但是并不是每一个C源码文件都是必须的。因此,Kconfig就会指定当前文件夹内的内核(组件)配置情况。在整个工程内,每个源码目录内都用makefile和kconfig,许多层次的makefile+Kconfig组成了分布式数据库,控制了整个大工程的编译情况。原创 2025-02-07 00:53:01 · 1102 阅读 · 1 评论 -
GCC之编译(7)Linker链接脚本
每个链接都由链接器脚本控制。此脚本以链接器命令语言编写。链接器脚本的主要目的是描述输入文件中的部分应如何映射到输出文件中,并控制输出文件的内存布局。大多数链接器脚本仅此而已。但是,必要时,链接器脚本还可以使用下面描述的命令指示链接器执行许多其他操作。链接器始终使用链接器脚本。如果自己不提供链接器脚本,链接器将使用编译到链接器可执行文件中的默认脚本。可以使用命令行选项显示默认链接器脚本。某些命令行选项(例如-r或-N)会影响默认链接器脚本。可以使用-T命令行选项提供自己的链接器脚本。原创 2024-10-28 22:30:56 · 1828 阅读 · 13 评论 -
Linux之ebpf(3)uprobe与ebpf
Linux 内核从 3.5 版本开始引入了 uprobe 功能,它是一种用户态的动态追踪技术。Uprobe 允许在用户空间的应用程序中插入探测点,以便实时监控和跟踪程序的运行状态和行为,而无需修改或重新编译应用程序的源代码。Uprobe 的工作原理如下:在目标应用程序的特定指令位置设置探测点。当程序执行到该指令时,会触发探测点。探测点被触发后,程序执行流程会被中断,并将控制权转移给预先注册的探测处理程序。探测处理程序可以访问寄存器、内存等程序运行时的上下文信息,以此来分析和记录程序的状态。原创 2024-09-07 16:45:22 · 3353 阅读 · 63 评论 -
DPDK实践之(1)dpdk基础使用
DPDK(Data Plane Development Kit)是一个由 Intel 开发并开源的软件库和驱动集合,用于在 commodity hardware(通用硬件)上进行快速封包处理。DPDK 可以极大提高数据包处理速度和吞吐量,使得网络应用能够高效地在 CPU 上运行,而无需依赖昂贵的专有硬件或专门的网络处理设备。:提供了一组用于处理数据包的核心库,包括内存、队列、缓冲池、端口和流量管理等功能。:这些是为各种网络接口卡(NICs)编写的轮询模式驱动程序,可以绕过内核,直接在用户空间处理数据包。原创 2024-05-21 21:27:59 · 1816 阅读 · 216 评论 -
Linux之ebpf(1)基础使用
eBPF (extended Berkeley Packet Filter) 是一种先进的技术,允许在无需更改内核源代码或加载内核模块的情况下,以安全的方式动态地在内核中执行预编译和沙箱化的程序。它最初是为了能够在内核层面高效地过滤网络包而设计的,但现在它的用途已经大大扩展,可以用于各种系统级编程任务。eBPF 是 Berkeley Packet Filter (BPF) 的扩展,BPF 最初是在 1992 年为了提高网络包过滤的效率而引入的。原创 2024-04-22 21:59:05 · 4004 阅读 · 118 评论 -
Linux之bpfjit(2)使用分析和mini-tcpdump实现
BPF(Berkeley Packet Filter)最初设计用于数据包过滤,即网络封包的捕获与筛选。随着时间的发展,BPF已经演变成为一个更加通用、功能强大的技术,尤其是在Linux内核中,它已经被扩展为eBPF(extended Berkeley Packet Filter)。BPF:最初的设计目的是提高网络封包处理的效率,通过在用户空间与内核空间之间提供一个灵活的数据包过滤机制。eBPF:是BPF的扩展版本,不仅能够进行数据包过滤,还能进行性能监控、网络监控、安全审计等多种功能。原创 2024-04-13 18:42:55 · 4602 阅读 · 143 评论