Linux
文章平均质量分 96
从0-1的Linux
Yuzuriha Inori
美好的一天从不会写简单题开始.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Linux系统】线程安全与死锁问题
本文讨论了线程安全与死锁问题。线程安全指多线程访问共享资源时能正确执行,而重入指同一函数被多个执行流同时调用。不可重入函数通常涉及静态变量、全局链表或标准IO操作。STL容器默认线程不安全,而智能指针通过原子操作保证安全。死锁由互斥、请求保持、不剥夺和循环等待四个条件引发,破坏任一条件即可避免死锁。原创 2025-10-09 16:09:36 · 1152 阅读 · 63 评论 -
【Linux实战 】Linux 线程池的设计、实现与单例模式应用
本文介绍了线程池的实现方法,通过预创建可复用线程集合来优化系统性能。线程池采用互斥锁和条件变量保障线程安全,使用模板提高任务类型的通用性。核心设计包括:线程初始化时绑定任务处理函数HandlerTask(),任务队列管理机制,以及线程唤醒策略(WakeUpOne()和WakeUpAll())。此外,文章还展示了如何通过单例模式实现线程池,确保全局唯一实例。关键点在于同步机制、线程安全控制和任务处理流程,最后提供了完整的C++实现代码,包括线程启动、任务入队和线程退出等核心功能。原创 2025-10-06 23:03:44 · 1783 阅读 · 57 评论 -
【Linux 实战】从0到1手搓日志系统:附完整代码
本文介绍了一个基于策略模式的C++日志库实现方案。通过抽象基类LogStrategy定义日志刷新接口,并派生出ConsoleLogStrategy(屏幕输出)和FileLogStrategy(文件输出)两种具体策略。使用Logger类封装日志功能,内部通过LogMessage类构建标准格式的日志信息(包含时间戳、日志等级、进程ID、文件名和行号等)。实现中采用多线程安全的锁机制保证写操作原子性,支持可变参数和流式输出,并通过宏定义简化调用接口。该设计为后续线程池实现提供了日志支持,具有良好的扩展性和灵活性。原创 2025-09-27 11:16:00 · 2292 阅读 · 68 评论 -
【Linux系统】深入理解线程同步,实现生产消费模型
本文深入探讨了Linux系统中的线程同步机制,重点介绍了条件变量和POSIX信号量两种实现方式。在互斥锁基础上,线程同步通过排队机制解决了线程饥饿问题,确保线程有序访问临界资源。文章详细解析了条件变量的接口和使用场景,并通过票务系统示例演示其实现效果。随后引入生产者-消费者模型,阐述其"三二一"设计原则(三种关系、两种角色、一个场所),并给出基于阻塞队列的具体实现。针对资源分块场景,文章提出使用POSIX信号量方案,并实现基于环形队列的生产者消费者模型,通过信号量计数器管理资源分配。两种原创 2025-09-23 16:16:37 · 1354 阅读 · 76 评论 -
【Linux系统】深入理解线程,互斥及其原理
本文主要探讨Linux系统中线程的互斥与同步问题。当多个线程共享资源时会出现数据不一致(如抢票案例中票数为负数),这是由于非原子操作(如ticket--)在多线程环境下被中断导致。解决方案是使用互斥锁,通过pthread_mutex_lock/unlock保护临界区,确保同一时间只有一个线程访问共享资源。文章详细解析了锁的实现原理(交换指令xchgb保证原子性)和工作机制(锁值为1可获取,0则挂起等待),并强调所有线程必须遵守锁规则。锁将并行转为串行执行,有效解决线程安全问题,保证数据一致性。原创 2025-09-16 19:41:11 · 926 阅读 · 60 评论 -
【Linux系统】初见线程,概念与控制
本文深入解析了Linux线程的概念、实现原理及控制方法。主要内容包括:1. 线程是进程内部的执行分支,在Linux中通过轻量级进程(LWP)实现,使用PCB结构体描述;2. 线程共享进程资源,但拥有独立的执行流和栈空间;3. 通过pthread库提供的接口(如pthread_create、pthread_join等)实现线程创建、终止、等待和分离;4. 详细分析了线程ID的本质、地址空间布局以及线程局部存储特性;5. 比较了线程与进程在资源管理、切换开销等方面的差异。文章还探讨了页表机制、物理内存管理、TL原创 2025-09-10 15:29:47 · 1307 阅读 · 61 评论 -
【Linux系统】万字解析,进程间的信号
本文系统介绍了Linux进程信号机制,主要内容包括:1. 信号概念:信号是OS发送给进程的异步通知机制,具有延迟处理特性,进程内置了信号识别和处理方式;2. 信号产生方式:键盘输入(如Ctrl+C)、系统调用(kill/abort/alarm)、命令操作(killall)及程序异常(除零错误等);3. 信号处理流程:涉及信号保存(pending/block位图)、内核态与用户态切换,以及默认/自定义/忽略三种处理方式;4. 关键系统调用:详细解析了sigprocmask、sigpending、sigacti原创 2025-09-02 17:25:34 · 698 阅读 · 63 评论 -
【Linux系统】命名管道与共享内存
本文介绍了Linux系统中两种重要的进程间通信(IPC)机制:命名管道和共享内存。命名管道克服了匿名管道只能用于父子进程通信的限制,通过文件路径实现任意进程间的通信,并详细阐述了其创建、使用和删除的接口方法。共享内存则是通过将同一物理内存映射到不同进程的地址空间来实现通信,具有高效但无同步机制的特点。文章通过代码示例展示了如何利用这两种机制实现进程间通信,并比较了它们的特性和适用场景。两种方式各有利弊,命名管道提供同步机制但速度较慢,共享内存速度快但缺乏数据保护。原创 2025-08-23 18:32:59 · 7332 阅读 · 64 评论 -
【Linux系统】匿名管道以及进程池的简单实现
本文介绍了Linux进程间通信(IPC)中的匿名管道机制。主要内容包括:1.进程通信目的(数据传输、资源共享等)和本质(让不同进程看到同一份资源);2.匿名管道的使用方法(pipe()系统调用)和原理(基于文件的内存级通信);3.匿名管道的5个特性(本机通信、血缘关系、同步机制、字节流、单向通信)和4种通信情况;4.通过C++代码实现父子进程间管道通信;5.基于匿名管道构建进程池,包括进程池的设计思路、实现代码及bug修复(正确关闭文件描述符)。文章详细讲解了匿名管道的技术原理和实际应用。原创 2025-08-20 12:35:18 · 1269 阅读 · 61 评论 -
【Linux系统】动静态库的制作
本文介绍了Linux系统中动静态库的制作与使用。静态库通过ar工具将.o文件打包成.a文件,使用-L指定库路径,-l指定库名进行链接。动态库使用gcc的-fPIC和-shared选项生成.so文件,运行时需配置系统查找路径(软连接、环境变量或ldconfig)。静态库在编译时链接,而动态库在运行时加载。文章还说明了头文件和库文件的默认系统路径,以及如何将自定义库安装到系统中以便简化调用。原创 2025-08-17 14:51:25 · 1172 阅读 · 55 评论 -
【Linux系统】详解Ext2,文件系统
深入解析了Linux文件系统管理机制。首先介绍了机械磁盘的物理结构(磁头、磁道、扇区、柱面)和逻辑寻址方式(CHS与LBA转换)。其次,详细讲解了Ext2文件系统的核心组件:超级块记录文件系统元信息,块组描述符表管理块组属性,块位图和inode位图跟踪资源使用情况,inode表存储文件属性,数据块存放文件内容。文件通过inode号唯一标识,目录则存储文件名与inode的映射关系。最后比较了软硬链接的区别:软链接是独立文件保存目标路径,硬链接则是同一inode的新文件名映射。文章完整呈现了从物理磁盘到文件原创 2025-08-12 18:25:35 · 1168 阅读 · 54 评论 -
【Linux系统】万字解析,文件IO
本文介绍了Linux系统中的文件IO操作,包括C语言文件接口和系统调用。首先讲解了文件的基本概念(内容+属性)和操作本质(进程通过系统调用访问磁盘)。然后详细对比了C标准库函数(fopen/fclose/fwrite/fread)和系统调用(open/close/write/read)的使用方法,重点分析了文件描述符fd的本质是进程PCB中的数组下标。文章还深入探讨了重定向的实现原理(通过dup2系统调用)和缓冲区的两种类型:用户级缓冲区(C库维护)和内核级缓冲区(OS管理),并通过实验验证了缓冲区刷新规则原创 2025-08-08 15:05:29 · 2157 阅读 · 58 评论 -
【Linux系统】详解,进程控制
本文介绍了Linux系统中进程控制的相关知识。重点讲解了fork函数创建子进程的机制、进程退出的三种场景及退出方法(main返回、exit、_exit),并详细说明了退出码的含义。文章还阐述了进程等待的必要性,介绍了wait和waitpid函数的使用方法及参数含义。最后讲解了程序替换的原理,列举了exec函数族(execl、execlp、execv等)的使用方式及其区别。这些内容是理解Linux进程管理的基础知识,对系统编程和进程控制具有重要指导意义。原创 2025-08-03 00:02:35 · 1024 阅读 · 61 评论 -
【Linux】虚拟地址空间
本文介绍了Linux虚拟地址空间的概念及其工作原理。通过代码示例展示了虚拟地址空间分布,验证了父子进程共享相同虚拟地址但实际物理地址不同的现象。文章解释了写时拷贝机制的作用:1)减少进程创建时间;2)避免内存浪费。深入剖析了虚拟地址空间的本质是mm_struct结构体,以及操作系统通过vm_area_struct管理不同内存区域的机制。最后阐述了虚拟地址空间的三大优势:1)将无序物理地址有序化;2)提供内存保护机制;3)解耦进程与内存管理。文章还补充说明了挂起状态时内存的处理方式。原创 2025-07-31 15:32:07 · 1609 阅读 · 51 评论 -
【Linux】环境变量
本文介绍了Linux中的环境变量概念及其应用。环境变量是操作系统运行环境的重要参数,具有全局特性,可帮助系统查找程序路径。文章详细讲解了命令行参数表argv的实现原理,并通过代码示例展示了如何利用main函数参数实现指令选项功能。同时介绍了PATH、HOME、SHELL等常见环境变量的作用,以及使用env、echo、export等命令查看和操作环境变量的方法。最后阐述了环境变量的全局性和继承特性,以及本地变量与全局变量的区别。文章还说明了通过代码调用getenv系统调用获取环境变量的方式。原创 2025-07-31 00:02:38 · 2331 阅读 · 62 评论 -
【Linux】进程切换与优先级
本文介绍了Linux进程优先级和进程切换的核心概念。进程优先级决定了CPU资源分配的先后顺序,保存在PCB中,其中PRI表示优先级,NI为修正值,两者相加决定最终优先级。优先级范围设定为60-99,避免进程饥饿问题。进程切换涉及时间片机制和上下文保存,使用TSS记录执行状态。Linux采用O(1)调度算法,通过活跃队列和过期队列实现高效调度,新进程优先放入活跃队列。文章还解释了进程的竞争性、独立性、并行和并发等特性。原创 2025-07-25 23:13:35 · 1903 阅读 · 50 评论 -
【Linux】进程状态
本文介绍了操作系统中的进程状态概念,重点解析了Linux系统的七种进程状态。主要内容包括:1) 进程的三种基本状态:运行、阻塞、挂起;2) Linux内核中进程状态的具体实现,包括R(运行)、S(可中断休眠)、D(不可中断休眠)、T(停止)、Z(僵尸)等状态;3) 僵尸进程和孤儿进程的产生原理及其影响;4) Linux内核中进程管理的数据结构实现原理,包括如何通过偏移量访问结构体成员。文章还解释了PCB复用机制,说明了操作系统如何高效管理进程资源。这些概念对于理解操作系统进程管理机制具有重要意义。原创 2025-07-25 10:26:08 · 1303 阅读 · 34 评论 -
【Linux】初见,进程概念
计算机系统底层原理为核心,从冯诺依曼体系结构讲起,解析CPU、内存、输入输出设备的协同工作模式,点明内存协调CPU与外设速度差异的关键作用。进而阐述操作系统作为“软硬件管家”,通过系统调用接口和数据结构管理资源的机制。重点聚焦进程概念,详细说明进程是“PCB结构体+代码数据”的组合,深入解读Linux中task_struct结构体的构成,以及进程间父子关系。最后以fork()函数为突破口,结合代码与Linux指令实操,深入剖析子进程创建时PCB拷贝、写时拷贝机制,以及fork返回双值的特殊设计原创 2025-06-14 19:02:04 · 2276 阅读 · 78 评论 -
【Linux】LInux下第一个程序:进度条
本文介绍了在Linux环境下编写第一个程序——进度条的实现过程。首先讲解了回车换行符的区别及缓冲区原理,通过示例代码展示了缓冲区刷新问题。随后详细讲解了进度条的实现步骤:使用字符数组表示进度,通过fflush刷新缓冲区,添加百分比和旋转光标效果。最后模拟真实下载环境,实现动态更新的进度条功能。文章还提供了完整的代码实现,包括makefile文件,帮助读者在Linux系统上快速构建和运行进度条程序。原创 2025-06-07 22:44:26 · 3219 阅读 · 69 评论 -
【Linux】自动化构建-Make/Makefile
本文介绍了Linux中make/makefile工具的使用。makefile通过定义依赖关系和依赖方法实现自动化编译,提高开发效率。文章讲解了基本用法,包括一键编译和清理操作,解释了.PHONY伪目标的作用以及make的时间判断机制。还深入探讨了make的推导规则、变量使用、多文件编译处理等高级特性,并展示了makefile的优化路径,最终提供了针对大型项目的终极解决方案。通过示例演示了从简单到复杂的makefile编写过程,帮助读者掌握这一重要的工程管理工具。原创 2025-06-04 22:17:33 · 2365 阅读 · 51 评论 -
【Linux】编译器gcc/g++及其库的详细介绍
本文介绍了Linux中的C/C++编译器gcc/g++的使用方法和编译过程。主要内容包括:1) gcc基本语法格式和编译选项;2) 详细解析编译的四个阶段:预处理(-E生成.i文件)、编译(-S生成.s文件)、汇编(-c生成.o文件)、链接(生成可执行文件);3) 条件编译的实现原理;4) 动态库和静态库的概念、命名规则及区别对比。文章通过具体命令和文件示例,系统讲解了从源代码到可执行文件的完整编译流程,并解释了编译器自举的历史背景。原创 2025-06-04 22:15:13 · 2070 阅读 · 54 评论 -
【Linux】vim编辑器
Vim是Linux中功能强大但上手较难的文本编辑器,是vi的升级版。它主要有三种基本模式:普通模式(命令操作)、插入模式(文本编辑)和底行模式(文件操作)。常用操作包括:i进入插入模式,Esc返回普通模式,:wq保存退出。普通模式下可使用yy复制、dd删除、u撤销等命令;底行模式支持查找替换、分屏等功能。此外,Ctrl+v进入视图模式可实现批量注释等操作。掌握Vim能显著提升Linux环境下的文本编辑效率。原创 2025-05-30 13:03:27 · 2037 阅读 · 45 评论 -
【Linux】权限相关指令
本文介绍了Linux中的权限管理与相关指令。首先讲解了shell作为命令解释器的作用,接着详细说明账号切换命令su和su-的区别,以及sudo指令提权的使用方法。重点阐述了Linux权限机制,包括文件属性(rwx)和角色分类(拥有者/所属组/其他),并通过chmod命令演示权限修改操作。文章还探讨了目录权限的重要性、多用户隔离机制、缺省权限与umask的关系,以及粘滞位对共享目录的保护作用。最后解释了文件删除权限的判定规则,为Linux系统权限管理提供了全面指导。原创 2025-05-30 13:02:28 · 2706 阅读 · 70 评论 -
【Linux】初见,基础指令(续)
本文介绍了Linux系统中的多个常用指令及其功能。cat指令用于打印文件内容,支持行号编号和空行压缩;more和less指令用于分页显示文件内容,less功能更强大,支持搜索和行号显示;head和tail指令分别显示文件头部和尾部内容,支持指定行数;date指令用于显示和格式化时间,支持时间戳转换;cal指令查看日历;find指令用于查找文件;whereis指令查找命令位置;alias指令为命令取别名;grep指令在文件中搜索字符串;zip和unzip指令用于压缩和解压文件;rzsz指令用于Linux与Wi原创 2025-05-20 22:03:40 · 2703 阅读 · 58 评论 -
【Linux】初见,基础指令
本文介绍了Linux系统中一些常用的基础指令及其功能。首先讲解了pwd指令,用于显示当前所在路径;接着是ls指令,用于列出目录中的文件和子目录,常用选项-l可以显示详细信息。cd指令用于切换目录,支持绝对路径和相对路径。touch指令用于创建文件或修改文件时间戳,常用选项-a和-m分别用于修改访问时间和修改时间。mkdir指令用于创建目录,选项-p可以递归创建目录。rmdir和rm指令分别用于删除空目录和文件,rm的-r选项可以递归删除目录及其内容。man指令用于查询命令的使用方法,echo指令用于打印内容原创 2025-05-20 22:01:50 · 2939 阅读 · 57 评论
分享