logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

Linux多线程编程(三):手写环形队列、日志系统与线程池

本文介绍了POSIX信号量的基本概念和使用方法,重点讲解了基于环形队列的生产者消费者模型实现。主要内容包括: POSIX信号量 分为有名信号量和无名信号量,本文介绍无名信号量 信号量本质是计数器,通过P操作减一、V操作加一实现同步互斥 提供了信号量的初始化、销毁、P/V操作等接口及C++封装 环形队列生产者消费者模型 通过信号量分别管理数据资源和空格资源 消费者和生产者各自维护位置指针,通过取模实

文章图片
#linux#学习#c++
Linux多线程编程(二):互斥锁与条件变量,手写生产者消费者模型

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

文章图片
#linux#c++#学习
Linux多线程编程(一):pthread库从入门到封装

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

文章图片
#linux#学习#c++
Linux 0.11 中断机制——操作系统的脉搏

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

文章图片
#linux#学习
System V 进程间通信:共享内存、消息队列与信号量

本文介绍了System V标准的共享内存进程间通信机制。共享内存通过让不同进程的虚拟地址映射到同一物理内存实现高效通信,其生命周期随操作系统。文章详细讲解了共享内存的5个关键步骤(创建、映射、使用、解除挂接、删除)及相关API函数(shmget、shmat、shmdt、shmctl),并提供了一个完整的C++实现示例,包含服务端和客户端代码。此外,文章简要提及了消息队列的原理(内核链表)和API,

文章图片
#linux#学习
ELF文件深度解析:从结构到动/静态链接的底层原理

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

文章图片
#linux#学习
程序眼中的世界:一个由虚拟地址空间构建的幻觉

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

文章图片
#linux#数据结构
到底了