自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(176)
  • 收藏
  • 关注

原创 Linux内存分页机制:解锁高效内存管理方式

分页机制是 80x86 内存管理机制的第二部分。它在分段机制的基础上完成虚拟地址到物理地址的转换过程。分段机制把逻辑地址转换成线性地址,而分页机制则把线性地址转换成物理地址。分页机制可用于任何一种分段模型。处理器分页机制会把线性地址空间划分成页面,然后这些线性地址空间页面被映射到物理地址空间的页面上。分页机制的几种页面级保护措施,可和分段机制保护措施或用或替代分段机制的保护措施。(1)pgd_t、pmd_t、pud_t和pte_t。

2025-05-03 09:15:00 654

原创 Linux操作系统系统编程:x86-64架构下的系统调用

read()系统调用是一个很好的初始示例,可以用来探索内核的系统调用机制。它在fs/read_write.c中作为一个简短的函数实现,大部分工作由vfs_read()函数处理。从调用的角度来看,这段代码最有趣的地方是函数是如何使用SYSCALL_DEFINE3()宏来定义的。实际上,从代码中,甚至并不立即清楚该函数被称为什么。fdput(f);return ret;这些SYSCALL_DEFINEn()宏是内核代码定义系统调用的标准方式,其中n后缀表示参数计数。

2025-05-02 17:15:00 1803

原创 Linux Netlink机制:现代网络通信的核心

Netlink 套接字是实现用户进程与内核进程通信的一种特殊的进程间通信(IPC)方式,也是网络应用程序与内核通信的最常用接口。它是 Linux 所特有的一种特殊 socket,类似于 BSD 中的 AF_ROUTE,但功能远比其强大。在最新的 Linux 内核(2.6.14 及以后版本)中,有众多应用借助 netlink 实现应用与内核的通信。从本质上讲,Netlink 是一种在内核与用户应用间进行双向数据传输的机制。

2025-05-02 09:15:00 699

原创 透视Linux内核:深度剖析Socket机制的本质

在网络编程的广袤世界里,Socket(套接字)是一个极为重要的概念。简单来说,Socket 是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。从本质上讲,它是应用层与 TCP/IP 协议族通信的中间软件抽象层,是一组接口,把复杂的 TCP/IP 协议族隐藏在 Socket 接口后面,让开发者只需面对一组简单的接口,就能实现网络通信。就如同我们日常使用电话,无需了解电话线路复杂的电路原理和信号传输机制,只要拿起听筒拨号,就能与远方的人通话,Socket 就是这样一个方便我们进行网络通信的 “听筒”

2025-05-01 17:00:00 783

原创 腾讯二面追问epoll,它凭啥性能一骑绝尘?

在深入了解 epoll 之前,我们先来理解一下 IO 多路复用的概念。在网络编程中,我们常常会遇到这样的场景:一个服务器需要处理多个客户端的连接和数据传输。如果采用传统的方式,为每个客户端连接创建一个单独的线程或进程来处理,那么当客户端数量增多时,系统资源会被大量消耗,性能也会急剧下降。IO 多路复用就像是一个 “万能助手”,它可以让一个线程来处理多个 I/O 流。打个比方,你开了一家餐厅,来了很多桌客人。如果每个客人都安排一个服务员专门服务,那成本可太高了。

2025-05-01 12:15:00 679

原创 告别内存碎片化,C++内存池让程序飞起来

内存池是一种内存分配方式,又被称为固定大小区块规划(fixed-size-blocks allocation)。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。在内核中有不少地方内存分配不允许失败,作为一个在这些情况下确保分配的方式,内核开发者创建了一个已知为内存池(或者是 "mempool" )的抽象, 一个内存池真实地只是一类后备缓存,它尽力一直保持一个空闲内存列表给紧急时使用。

2025-05-01 10:15:00 971

原创 解锁Windows异步黑科技:IOCP从入门到精通

在当今快节奏的数字化时代,软件应用对性能的追求可谓永无止境。无论是高并发的网络服务器,还是需要快速处理大量文件的桌面应用,都面临着一个共同的挑战:如何在有限的系统资源下,实现高效的数据输入输出(I/O)操作。在 Windows 操作系统的广袤世界里,有一种神秘而强大的异步机制 ——IOCP(Input/Output Completion Port,输入输出完成端口),如同隐藏在幕后的超级英雄,默默为无数高性能应用提供着强大的支持。

2025-04-30 14:45:00 1246

原创 一文搞懂POSIX多线程:解锁高性能编程的密码

线程,作为进程内的执行单元,可以理解为进程这个大舞台上的一个个小舞者,各自有着独立的舞步(执行路径),却又共享着舞台的资源(进程资源)。与进程相比,线程更加轻量级。进程是系统进行资源分配和调度的基本单位,拥有独立的地址空间、内存、文件描述符等资源 ,进程间的切换开销较大。而线程则是共享所属进程的资源,它们之间的切换开销相对较小,就像在同一个舞台上不同舞者之间的快速换位,无需重新搭建整个舞台。线程的这些特点,使得多线程编程在提升程序执行效率上有着独特的优势。

2025-04-30 11:30:00 661

原创 扒开TCP的“神秘外衣”,一文吃透它的本质!

TCP(传输控制协议)是一种常用的网络通信协议,它位于OSI模型的传输层。TCP提供可靠的、面向连接的数据传输服务。它通过使用序列号、确认应答和重传机制,保证数据在网络中的可靠传输。TCP还具有流量控制和拥塞控制功能,以确保发送方不会压倒接收方和网络。TCP协议是基于IP(Internet Protocol)协议之上构建的,它负责将应用程序分割成小块(称为报文段),并对这些报文段进行排序、重组和传输。

2025-04-30 07:15:00 708

原创 一文搞懂高效并发编程:无锁编程的秘密与实战

无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization),实现非阻塞同步的方案称为“无锁编程算法”。为什么要非阻塞同步,使用lock实现线程同步有非常多缺点:产生竞争时,线程被阻塞等待,无法做到线程实时响应dead locklive lock优先级反转使用不当,造成性能下降假设在不使用 lock 的情况下,实现变量同步,那就会避免非常多问题。

2025-04-29 10:15:00 634

原创 解锁Linux共享内存:进程间通信的超高速通道

在Linux系统的进程间通信 “江湖” 中,众多通信方式各显神通。管道,如同隐秘的地下通道,让有亲缘关系的进程能够悄然传递信息;消息队列则似邮局,进程可投递和接收格式化的消息包裹。然而,有一种通信方式却以其独特的 “高速” 特性脱颖而出,它就是共享内存。想象一下,进程们原本各自生活在独立的 “小天地” 里,有着自己专属的虚拟地址空间。但共享内存却如同神奇的 “任意门”,打破了进程间的隔阂,让多个进程能够直接访问同一块内存区域。

2025-04-29 09:00:00 998

原创 解锁C++序列化黑魔法:数据处理的高效秘籍

在 C++ 的数据处理领域,序列化是一个极为关键的概念,起着数据存储与传输的桥梁作用。简单来说,序列化就像是把现实世界中的物品打包成一个个便于运输和存放的包裹,而反序列化则是打开包裹,还原物品本来的样子。在程序的世界里,它是将对象状态转换为可存储或传输格式(通常是字节序列)的过程,而反序列化则是将这些字节序列重新恢复成对象的操作。列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。

2025-04-29 06:30:00 1079

原创 案例篇:如何用tcpdump和Wireshark识别潜在威胁

启动 Wireshark 后,你会看到一个直观且功能丰富的界面。界面主要分为以下几个区域:菜单栏:包含了各种操作选项,如文件的打开、保存,捕获的开始、停止,以及各种分析工具和设置选项等。通过菜单栏,我们可以完成大部分的操作,比如打开一个已有的数据包文件进行分析,或者设置捕获过滤器等。工具栏:提供了常用功能的快捷图标,方便我们快速进行操作。例如,点击绿色的鲨鱼鳍图标可以开始捕获数据包,点击红色的正方形图标可以停止捕获,还有放大镜图标用于查找数据包等。

2025-04-28 18:00:00 1065 1

原创 实战篇:在QEMU中编写和调试VHost/Virtio驱动

在云计算环境中,当多个虚拟机同时进行大规模数据传输时,这种通信瓶颈就会变得尤为明显,严重影响了云服务的性能和用户体验。同样,在大数据分析场景下,虚拟机需要频繁地读写存储设备,如果虚拟设备通信效率低下,就会导致数据分析的速度大幅下降,无法满足实时性的要求。那么,有没有一种方法能够打破这种通信困境,让虚拟设备之间的通信更加高效、流畅呢?答案就是 vhost/virtio 技术。它就像是虚拟世界中的通信加速器,为解决虚拟设备通信难题带来了新的曙光。接下来,就让我们深入了解 vhost/virtio 技术的奥秘。

2025-04-28 13:56:53 951

原创 快速上手QEMU:创建你的第一个虚拟机实例

Qemu 是一款开源的硬件模拟器和虚拟机监控器,其全称为 Quick Emulator,即快速模拟器。它允许用户在一台物理计算机上创建和运行多个虚拟机,每个虚拟机都可以运行不同的操作系统,就像它们在独立的物理计算机上运行一样。Qemu 的特别之处在于,它不仅能够模拟常见的 x86 架构,还对 ARM、PowerPC、MIPS、RISC-V 等多种硬件架构提供了出色的支持。这使得开发者可以在 x86 架构的主机上,轻松模拟运行 ARM 架构的操作系统和应用程序,为跨平台开发和测试提供了极大的便利。

2025-04-28 13:55:21 973

原创 Linux服务器时不时丢包,它凭啥能精准解决?

对于 Linux 系统的使用者来说,网络性能的优劣直接关系到系统的整体表现。而在网络性能问题中,网络丢包堪称最为棘手的难题之一,它就像隐藏在暗处的杀手,悄无声息地侵蚀着系统的性能。想象一下,当你在服务器上部署了一个关键的应用服务,满怀期待地等待用户的访问和使用。然而,用户却频繁反馈访问速度极慢,甚至出现连接中断的情况。经过一番排查,你发现罪魁祸首竟然是网络丢包。这时候,你就会深刻地意识到,网络丢包问题绝不是一个可以忽视的小麻烦。从专业角度来看,网络丢包会带来一系列严重的后果。

2025-04-28 13:53:15 1660

原创 Linux内核反向映射RMAP:加速数据访问的关键技术

在Linux内核的复杂世界里,数据访问效率宛如一场决定系统性能成败的关键战役。想象一下,你的电脑在处理多任务时,程序需要频繁地与内存中的数据打交道,每一次数据访问的延迟,都可能像路上的减速带,拖慢整个系统的运行速度。而反向映射机制是为了更新进程页表项,使得更加有效地回收1个共享页面,反向映射技术的实现主要是基于页表项链表。

2025-04-25 13:44:49 624

原创 内存加速的秘密武器:TLB缓存原理和应用全解析

(1)让每个程序都有独立的地址空间。(2)引入虚拟地址到物理地址的映射,为物理内存的管理带来了方便,可以更灵活地对其进行分配和释放,在虚拟存储器上连续的地址空间可以映射到物理内存上不连续的空间。(3)在处理中如果存在多个进程,为这些进程分配的物理内存之和可能大于实际可用的物理内存,虚拟存储器的管理使得这种情况下各个进程仍能够正常运行,此时为各个进程分配的只是虚拟存储器的页,这些页可能存在物理内存中,也可能临时存在于更下一级的硬盘中,在硬盘中这部分空间被称为swap空间。

2025-04-25 13:40:16 844

原创 一文读懂电脑内存:从基础原理到性能

在计算机的硬件世界里,内存就像是一个极为重要的 “临时仓库”。当我们打开电脑,运行各种程序,比如办公软件、浏览器、游戏等等,这些程序和它们运行时产生的数据并不会直接放在硬盘里供 CPU 处理,而是先被调入内存。简单来说,内存是计算机中用于暂时存放 CPU 中的运算数据,以及与硬盘等外部存储器交换的数据的部件,它是 CPU 能够直接访问的存储空间。内存的存在,主要是为了缓和 CPU 和硬盘之间巨大的速度矛盾。我们知道,CPU 的运算速度极快,如今的高端 CPU 每秒可以执行数十亿次甚至更多的指令。

2025-04-04 11:45:00 878

原创 深入探索bpftrace:Linux性能分析的新利器

在运维或开发工作中,你是否遇到过这样的场景:Linux 服务器突然变得异常卡顿,响应迟缓,严重影响业务正常运行。当你匆忙登录服务器,使用常用的 top、htop 等命令查看系统资源使用情况时,却发现 CPU、内存使用率看似正常,没有明显的异常进程。磁盘 I/O 和网络带宽也都在合理范围内,但系统性能却实实在在地下降了,这让你陷入困惑,不知从何下手去定位问题。其实,这种情况在复杂的生产环境中并不少见,传统的性能分析工具往往只能提供一些表面的信息,对于深层次的系统行为和潜在的性能瓶颈难以洞察。

2025-04-04 09:30:00 1096

原创 内存加速的秘密武器:TLB缓存原理和应用全解析

(1)让每个程序都有独立的地址空间。(2)引入虚拟地址到物理地址的映射,为物理内存的管理带来了方便,可以更灵活地对其进行分配和释放,在虚拟存储器上连续的地址空间可以映射到物理内存上不连续的空间。(3)在处理中如果存在多个进程,为这些进程分配的物理内存之和可能大于实际可用的物理内存,虚拟存储器的管理使得这种情况下各个进程仍能够正常运行,此时为各个进程分配的只是虚拟存储器的页,这些页可能存在物理内存中,也可能临时存在于更下一级的硬盘中,在硬盘中这部分空间被称为swap空间。

2025-04-03 22:28:40 1014

原创 Linux内核追踪神器:perf实现原理剖析

在 Linux 性能分析的广袤领域中,Perf 犹如一颗璀璨的明星,散发着独特的光芒。Perf,即 Performance 的缩写,是一款集成于 Linux 内核的性能分析工具,如同一位技艺精湛的诊断大师,能深入系统的各个角落,精准地剖析系统性能。它以事件驱动为核心机制,如同精密的仪器,能够捕捉到硬件、软件以及内核层面的各种性能事件。随着 Linux 内核的不断演进,Perf 也在持续发展壮大。从最初简单的性能监测,到如今具备丰富多样的功能,Perf 已经成为 Linux 性能分析不可或缺的工具。

2025-04-03 22:22:47 990

原创 Linux内核追踪神器:Ftrace实现原理剖析

在 Linux 内核这片深邃而神秘的技术海洋里,每一个系统进程的运行、每一次资源的调度,都像是在黑暗中上演的复杂剧目。内核开发者们时常面临着棘手难题:系统莫名卡顿,究竟是哪个内核函数在作祟?进程调度出现异常,问题根源又在何处?在漫长的探索历程中,开发者们急需一款强大的工具,能够像聚光灯一样,穿透重重迷雾,照亮内核运行的每一个角落。而 Ftrace,正是这样一款应运而生的 “内核追踪神器”。它从最初简单的函数跟踪器,逐步成长为功能丰富的跟踪框架,犹如一把万能钥匙,为开发者打开了深入探究内核奥秘的大门。

2025-04-03 22:21:06 1022

原创 Linux内核同步机制:解锁并发编程的奥秘

在当今的数字时代,多核处理器早已成为计算机系统的标配,从我们日常办公的电脑,到数据中心里庞大的服务器集群,它们无处不在。这一硬件层面的发展,使得计算机系统能够同时处理多个任务,极大地提升了计算效率。就如同繁忙的交通枢纽,多车道并行,车辆往来穿梭,看似混乱却又有序运然而,在 Linux 内核这个 “交通指挥中心” 里,当多个进程或线程如同川流不息的车辆,试图同时访问共享资源时,问题就出现了。想象一下,两条道路上的车辆都想同时通过一个狭窄的路口,如果没有合理的交通规则,必然会导致拥堵甚至碰撞。

2025-03-29 21:49:29 945

原创 深入了解Linux内核:task_struct结构详解

在 Linux 内核中,无论是进程还是线程,到了内核里面,都叫做任务(Task),由统一的数据结构 task_struct 进行管理。task_struct 是 Linux 中的进程描述符,是感知进程存在的唯一实体。Linux 内核中通过一个双向循环链表将所有的 task_struct 串了起来,不同的操作系统中,PCB 所包含的内容也会不同。在 Linux 内核的代码世界里,task_struct被精心定义为一个结构体,其内部成员众多,宛如一个庞大而有序的信息仓库。/* 进程状态 */

2025-03-29 21:48:02 1007

原创 告别代码Bug,GDB调试工具详解

GDB,全称 GNU Debugger,是 GNU 开源组织发布的一款功能强大的程序调试工具。自 1986 年由理查德・斯托曼(Richard Stallman)编写以来,它不断发展和完善,如今已成为 Linux 系统下调试程序的首选工具 ,在整个 Linux 生态系统中占据着举足轻重的地位。它就像是一位经验丰富的侦探,深入程序的 “案发现场”,帮助开发者们找到隐藏在代码中的 “罪犯”——Bug。

2025-03-27 20:37:33 1240

原创 解锁Linux内核黑科技:VFS虚拟文件系统详解

i_no:便是inode的唯一性编号i_count:访问该inode结构体对象的进程数i_nlink:硬链接计数,等于0时将文件从磁盘移除。i_hash:指向哈希链表指针,用于查询,已经inode号码和对应超级块的时候,通过哈希表来快速查询地址。具体看下边管理inode节点。也是list_head类型对象,这种对象就对应了一个双向循环链表。i_dentry:指向目录项链表指针,因为一个inode可以对象多个dentry,因此用一个链表将于本inode关联的目录项都连在一起。

2025-03-27 20:35:14 870

原创 解锁Linux内存屏障:让程序运行更有序

内存屏障,也叫内存栅栏(Memory Fence) ,是一种在多处理器系统中,用于控制内存操作顺序的同步机制。它就像是一个 “关卡”,确保在它之前的内存读写操作,一定在它之后的内存读写操作之前完成。在单核单线程的程序里,我们通常不用担心指令执行顺序的问题,因为 CPU 会按照代码编写的顺序依次执行。但在多处理器或者多线程的环境下,情况就变得复杂起来。现代处理器为了提高性能,会采用诸如指令乱序执行、缓存等技术。

2025-03-26 15:19:13 584

原创 高效内存管理:x86-64架构中的分页机制

在 4 级分页下,每个页结构由 512 (2^9)项组成,每次转换使用 48 位线性地址中的 9 位。位 47:39 标识了第一个页结构项,位 38:30 标识了第二个;位 29:21 标识了第三个;位 20:12 标识了第四个。注意,最后一个页结构项标识了页帧。5 级分页跟 4 级类似,只不过 5 级分页的线性地址是 57 位的。位 56:48 标识了第一个页结构项,剩余位用于 4 级分页。上述示例中,最后一个页结构项映射了一个 4KB 的页,线性地址的低 12 位作为页内偏移。

2025-03-26 15:18:05 1232

原创 Linux内核的页面错误:原因与解决方案

当程序访问虚拟内存中的一个页面时,如果该页面当前不在物理内存中,就会触发一个称为"page fault"(页异常)的异常。操作系统需要处理这个异常,并将所需页面从磁盘加载到内存中。实现虚存管理的一个关键是page fault异常处理,其过程中主要涉及到函数 — do_pgfault的具体实现。

2025-03-24 22:28:58 1007

原创 动态内存管理:Linux下的高效内存回收方法

在 Linux 系统中,内存回收机制就像是一位默默守护系统的 “内存管家”,肩负着至关重要的职责。它的主要任务是在系统运行过程中,对内存资源进行有效的管理和回收,确保内存的合理利用,维持系统的稳定运行。当系统中的内存资源变得紧张时,内存回收机制就会迅速启动,开始筛选那些暂时不用或者可以被释放的内存空间。比如,有些进程可能已经完成了当前的任务,处于闲置状态,但它们占用的内存却没有被及时释放。

2025-03-24 22:27:32 1064

原创 从青铜到王者:带你吃透IO模型

在计算机世界里,IO(Input/Output)即输入 / 输出,堪称计算机与外部世界沟通的桥梁,是数据在计算机内部与外部设备(如磁盘、网络、键盘、显示器等)之间的流动过程 ,就像人体的血脉,源源不断地输送着养分(数据)。从本质上讲,IO 实现了数据在不同存储介质或设备之间的迁移,让计算机能够获取外部信息并输出处理结果。以磁盘 IO 为例,当我们运行一个程序时,如果程序所需的数据不在内存中,就会触发磁盘 IO 操作,将数据从磁盘读取到内存中。

2025-03-22 16:55:30 1182

原创 破解内存瓶颈:如何通过内存池优化资源利用

池是在计算技术中经常使用的一种设计模式,其内涵在于:将程序中需要经常使用的核心资源先申请出来,放到一个池内,由程序自管理,这样可以提高资源的利用率,也可以保证本程序占有的资源数量,经常使用的池化技术包括内存池,线程池,和连接池等,其中尤以内存池和线程池使用最多。

2025-03-22 16:54:19 1176

原创 从0到1学CMake:开启高效跨平台构建之旅

CMake是个一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不相依于某特定编译器;并可支持多层目录、多个应用程序与多个库。它用配置文件控制建构过程(build process)的方式和Unix的make相似,只是CMake的配置文件取名为CMakeLists.txt。CMake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或Windows Visual C++的projects/workspaces),然后再依一般的建构方式使用。

2025-03-20 19:55:57 1111

原创 高并发下连接池:性能飞升的魔法秘籍

经过一系列的优化措施实施后,该电商平台的系统性能得到了显著提升。在后续的 “双 11” 活动中,系统的平均响应时间从优化前的几百毫秒缩短到了 50 毫秒以内,吞吐量增加了 3 倍以上,能够轻松应对每秒数百万次的并发请求。用户在页面上的操作响应迅速,订单提交成功率大幅提高,极大地提升了用户体验。从这个案例中,我们可以总结出许多宝贵的经验。深入了解业务需求和系统性能瓶颈是优化的基础,只有准确把握问题所在,才能制定出针对性的优化方案。

2025-03-20 19:54:45 826

原创 Linux多核调度:解锁CPU潜能的密码

多核处理器,简单来说,就是在一个芯片上集成多个独立的计算核心,每个核心都能独立执行任务。这就好比一支拥有多个成员的团队,每个成员都能各司其职,同时处理不同的事务,大大提高了整体的工作效率。与传统单核处理器相比,多核处理器在处理多任务时优势明显。当我们在电脑上同时打开多个应用程序,如浏览器、文档编辑软件、音乐播放器等,多核处理器可以让每个应用程序分配到一个或多个核心,实现真正意义上的并行处理,避免了单核处理器时代的任务 “排队等待” 现象,使得系统响应更加迅速,用户体验得到极大提升。

2025-03-19 14:12:35 704

原创 更好的内存管理:透视Linux内核中的伙伴系统

伙伴算法,简单来说,是一种在操作系统内存管理中广泛应用的动态存储管理算法。它如同一位精打细算的管家,对内存资源进行着巧妙的分配与回收。在 Linux 系统中,内存被划分成一个个大小固定的页框,而伙伴算法就围绕着这些页框展开工作。它将所有的空闲页框分组为 11 个块链表,每块链表分别包含大小为 1、2、4、8、16、32、64、128、256、512 和 1024 个连续页框的页框块。这些不同大小的块链表,就像是一个个不同规格的 “资源仓库”,等待着被合理调配。

2025-03-19 14:01:26 956

原创 解锁Linux内核Oops调试:从错误到解决方案

常在河边走,哪能不湿鞋。用Linux,总有死机的时候,如果运气好,会看到一些所谓”Oops”信息(在屏幕上或系统日志中),Oops这个英文单词的意思是“哎呀”,当内核出错时(比如访问非法地址),输出的信息就成为Oops信息,Oops可以看成是内核级的Segmentation Fault。内核开发比用户空间开发更难的一个因素就是内核调试艰难。内核错误往往会导致系统宕机,很难保留出错时的现场,调试内核的关键在于你的对内核的深刻理解。

2025-03-19 13:56:26 1067

原创 深入探索Linux内核:揭秘伙伴算法的奥秘

在Linux系统中,内存的分配与回收速率直接影响系统的存取效率。当内核频繁请求和释放不同大小的一组连续页框时,会导致许多外部空闲碎片,造成空间的浪费。使用伙伴算法可以有效地缓解该问题。伙伴关系机制是操作系统中的一种动态存储管理算法。在进行内存分配时,该算法通过不断平分较大的空闲内存块来获得较小的空闲内存块,直到获得所需要的内存块;在进行内存回收时,该算法尽可能地合并空闲块。内存管理是应用程序通过硬件和软件协作访问内存的一种方法,当进程请求内存使用时,它给进程分配可用的内存;

2025-03-15 22:27:49 835

原创 一文搞懂Linux内核Oops调试方法

常在河边走,哪能不湿鞋。用Linux,总有死机的时候,如果运气好,会看到一些所谓”Oops”信息(在屏幕上或系统日志中),Oops这个英文单词的意思是“哎呀”,当内核出错时(比如访问非法地址),输出的信息就成为Oops信息,Oops可以看成是内核级的Segmentation Fault。内核开发比用户空间开发更难的一个因素就是内核调试艰难。内核错误往往会导致系统宕机,很难保留出错时的现场,调试内核的关键在于你的对内核的深刻理解。

2025-03-15 17:28:33 1319

空空如也

空空如也

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

TA关注的人

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