自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux多线程编程(二):互斥锁与条件变量,手写生产者消费者模型

本文摘要:文章首先通过多线程抢票程序演示了并发环境下的数据竞争问题,导致票数出现负数。分析原因包括非原子性操作和线程切换导致的数据不一致。随后介绍了互斥锁的解决方案,详细讲解了pthread_mutex_t的初始化、加锁解锁等接口使用,并通过伪代码解释了锁的底层实现原理(基于原子交换指令)。最后展示了C++封装互斥锁的RAII实现,确保异常安全。关键点包括:临界区保护的必要性、锁粒度的控制,以及互斥锁作为共享资源其自身安全性的保障机制。

2026-05-25 20:35:33 143

原创 Linux多线程编程(一):pthread库从入门到封装

本文摘要: 内存管理:操作系统将物理内存划分为4KB页框,通过页表实现虚拟地址到物理地址的转换。页表结构包括页目录和页表项,MMU硬件负责地址转换。缺页中断和写时拷贝机制优化了内存使用效率。 线程概念:线程是进程的执行分支,共享进程资源但拥有独立栈和上下文。Linux通过轻量级进程模拟线程,复用PCB结构。线程切换代价低,适合IO密集型任务,但可能降低程序健壮性。 pthread库:提供了线程创建、等待、取消、分离等API。线程库在共享区维护线程控制结构,支持线程局部存储解决全局变量冲突问题。文中还展示了基

2026-05-18 17:22:23 402 4

原创 Linux 0.11 中断机制——操作系统的脉搏

本文基于Linux 0.11源码分析了中断机制。硬件中断通过中断控制器通知CPU,取代低效轮询;时钟中断通过递减计数器触发进程调度。软中断通过int 0x80指令主动陷入内核,实现系统调用。CPU异常(如缺页、段错误)也会触发中断处理。三种中断来源不同,但都通过IDT统一处理:保存现场→执行处理函数→恢复现场。中断嵌套是否允许取决于标志位设置。中断机制是操作系统响应外部事件、实现进程调度和系统调用的核心基础。

2026-05-13 15:33:59 408 3

原创 Linux信号深度解剖:5种产生、3张表、4次切换

本文介绍了Linux信号机制的基本概念和处理方式。信号是异步事件通知机制,本质是PCB中的位图操作。文章详细讲解了信号的产生方式(shell命令、键盘、硬件异常、系统调用、软件条件)、内核中的三张表(pending、block、handler)以及信号集操作函数。通过示例代码演示了信号捕捉、硬件异常处理等场景,并汇总了常用信号及其默认行为。最后介绍了信号保存相关的概念和系统调用,包括信号递达、未决状态和阻塞机制。

2026-05-11 17:04:45 469 2

原创 System V 进程间通信:共享内存、消息队列与信号量

本文介绍了System V标准的共享内存进程间通信机制。共享内存通过让不同进程的虚拟地址映射到同一物理内存实现高效通信,其生命周期随操作系统。文章详细讲解了共享内存的5个关键步骤(创建、映射、使用、解除挂接、删除)及相关API函数(shmget、shmat、shmdt、shmctl),并提供了一个完整的C++实现示例,包含服务端和客户端代码。此外,文章简要提及了消息队列的原理(内核链表)和API,指出这两种通信方式正逐渐被淘汰。共享内存相比其他IPC方式具有更高效率,但需要开发者自行处理同步问题。

2026-05-06 21:36:17 401 3

原创 管道通信深度剖析:从匿名管道到命名管道,手写进程池

进程间通信(IPC)是不同进程间数据交换的必要手段,本文重点介绍了匿名管道和命名管道两种通信方式。匿名管道通过共享内核缓冲区实现单向通信,适用于具有亲缘关系的进程(如父子进程),其生命周期随进程结束而终止。文章详细讲解了匿名管道的原理、使用方法、特征以及实际应用(如进程池实现),并提供了相关代码示例。后续将介绍其他IPC方式,如System V和POSIX标准的通信机制。理解文件系统有助于快速掌握管道通信的核心概念。

2026-05-01 08:00:00 463 4

原创 ELF文件深度解析:从结构到动/静态链接的底层原理

本文主要介绍了ELF文件格式及其加载过程。首先阐述了ELF文件的四种类型及其结构组成,包括ELF头、节头表、程序头表和各个节区。重点分析了程序加载到虚拟地址空间的过程,解释了逻辑地址与物理地址的转换机制。通过实例展示了静态链接过程中节区合并和地址重定位的实现原理,说明了操作系统如何通过页表建立虚拟地址与物理内存的映射关系。最后指出CPU通过MMU单元将虚拟地址转换为物理地址进行实际操作。全文系统性地解析了ELF文件格式与程序加载机制,为理解Linux系统下的程序运行原理提供了理论基础。

2026-04-27 08:00:00 424 1

原创 静态库与动态库详解:原理、制作与实际应用

本文介绍了Linux下静态库和动态库的制作与使用。文章首先通过多文件示例演示了库的本质是多个.o文件的集合,然后详细讲解了静态库(使用ar工具制作)和动态库(使用gcc的-fPIC和-shared选项)的制作过程。重点说明了动态库的路径查找问题及四种解决方法,包括环境变量设置和配置文件修改。最后以ncurses库为例展示了第三方库的安装和使用流程。文章总结了库作为代码复用封装的特点,比较了编译与链接阶段的差异,并归纳了静态库和动态库的关键区别在于链接方式和路径指定要求。

2026-04-25 11:42:26 349 1

原创 从inode到block:一文搞懂Linux文件系统的本质

本文介绍了ext2文件系统的核心结构与工作原理。首先解析磁盘物理结构,包括磁头、磁道、柱面等基本概念,并对比CHS和LBA两种寻址方式。然后详细说明文件系统的组织方式,包括块管理、分组分区机制,以及inode、bitmap等关键数据结构的作用。文章还深入探讨了目录与inode的关系、dentry缓存机制,以及文件打开的具体流程。最后分析了大文件存储方案,解释多级指针如何支持TB级文件存储,并通过实验演示了磁盘格式化与挂载过程。整体系统地呈现了从物理磁盘到文件系统的完整映射关系与管理机制。

2026-04-24 08:00:00 430

原创 使用系统调用封装stdio常用函数(个人学习使用)

本文实现了一个简单的标准I/O库封装,包含文件打开、写入、刷新和关闭功能。通过定义myFILE结构体和缓冲区管理机制,模拟了标准库的缓冲策略(无缓冲、行缓冲、全缓冲)。核心函数包括:myfopen()用于打开文件并初始化缓冲区,myfwrite()实现缓冲写入,myfflush()处理缓冲刷新逻辑,myfclose()确保数据同步并释放资源。测试程序验证了缓冲写入功能,成功将数据写入文件。该项目主要帮助理解文件I/O封装原理和缓冲区管理概念,完整代码已开源。

2026-04-22 08:00:00 221

原创 彻底理解 Linux 文件描述符:从 open/close 到重定向与缓冲区

本文系统讲解Linux文件描述符机制及其应用。首先剖析文件描述符本质是内核fd_array数组的下标,默认0/1/2分别对应标准输入/输出/错误。通过open/close系统调用建立或释放文件关联,新文件描述符按最小未占用原则分配。其次深入重定向原理,演示如何通过close和dup2修改文件关联实现输入/输出/追加重定向。然后阐述Linux"一切皆文件"设计思想,通过file_operations结构体实现统一设备访问接口。最后解析语言级缓冲区机制,包括三种缓冲类型及fork导致prin

2026-04-20 20:00:00 115

原创 程序眼中的世界:一个由虚拟地址空间构建的幻觉

本文通过分析fork()函数的返回值现象,深入探讨了虚拟地址空间的本质。文章首先观察到fork()返回的id变量在父子进程中值不同但地址相同,指出这是由于父子进程拥有独立的虚拟地址空间。随后解释了虚拟地址空间的概念,将其比作操作系统为进程绘制的"大饼",实际物理内存通过页表映射实现共享与隔离。文章进一步剖析了Linux内核中mm_struct和vm_area_struct等数据结构如何管理虚拟地址空间,最后总结了虚拟地址空间的三大优势:保障进程间安全性、实现内存管理解耦,以及将物理内存的

2026-04-14 00:30:00 354 1

原创 Linux中O(1)进程调度相关数据结构

本文分析了Linux 2.26.18内核中进程调度的数据结构与算法实现。重点介绍了: 内嵌链表技术:通过offsetof宏获取结构体成员偏移量,实现task_struct同时链入多个队列; 运行队列(rq)结构:包含active和expired两个优先级数组,通过位图快速定位非空队列; O(1)调度算法:采用140级优先级队列,配合位图优化查找,通过交换指针实现高效调度。 该设计通过内嵌链表、优先级队列和位图优化,实现了Linux内核高效的O(1)进程调度机制。

2026-04-11 07:30:00 373

空空如也

空空如也

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

TA关注的人

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