- 博客(117)
- 收藏
- 关注
原创 时光的织机:生产者与消费者模型,线程之间的供需谐舞
生产者-消费者模型摘要 生产者-消费者模型是一种通过共享缓冲区(容器)解耦生产者和消费者的并发编程模式。生产者将数据放入缓冲区,消费者从中取出数据,两者无需直接通信。该模型具有三大特点: 三种关系:生产者间互斥、消费者间互斥、生产者与消费者间同步互斥 两种角色:生产者和消费者 一个交易场所:共享缓冲区(如阻塞队列) 模型优点在于: 解耦生产消费过程 平衡供需关系 提高系统吞吐量 支持异步处理 实现时需使用互斥锁保证共享资源安全访问,通过条件变量实现线程同步。基于阻塞队列的实现中,队列满时生产者阻塞,空时消费
2025-06-12 23:09:36
707
5
原创 并行之舞:Linux 多线程互斥与同步,在风中起舞的线程与锁
摘要:Linux多线程中的互斥与同步问题 本文探讨了Linux多线程编程中的资源共享问题及其解决方案。通过多线程抢票案例,揭示了并发访问临界资源时可能出现的数据不一致问题(如剩余票数为负值)。文章重点分析了: 临界资源与临界区:共享资源(如全局变量)及其操作代码区域的定义 互斥锁机制:通过加锁确保临界区代码的原子性执行,防止线程切换导致的数据冲突 实际案例:展示了不加锁时5个线程并发抢票导致票数异常的现象 研究结果表明,合理使用互斥锁可以解决多线程并发访问的安全问题,但需注意锁粒度对性能的影响。本文为Lin
2025-06-12 23:06:29
979
1
原创 丝路幽径:穿梭于Linux多线程控制的秘境
线程控制与线程共享资源解析 摘要:本文深入探讨了Linux线程的基本概念和控制方法。首先介绍了线程的私有资源(如线程ID、寄存器组、独立栈)和共享资源(如文件描述符表、共享内存区域),解释了多线程环境下资源的访问机制。然后详细分析了原生线程库(pthread)的作用,它是操作系统轻量级进程接口的封装层。文章还通过代码示例展示了线程创建(pthread_create)的实际应用,包括单线程和批量线程的创建,并指出了共享变量引发的问题及解决方案(使用堆内存分配)。最后,文章解答了关于线程ID与LWP不一致等常见
2025-06-10 23:56:46
1077
10
原创 风中低语:Linux 信号处理的艺术与实践
Linux信号处理机制解析 信号处理时机 Linux信号处理分为普通情况(信号未被阻塞)和特殊情况(信号被阻塞后解除)。信号产生后不会立即处理,而是等待进程从内核态返回用户态时检测并处理,确保不影响重要任务执行。 用户态与内核态 用户态执行用户代码,内核态执行OS代码(如系统调用)。 通过CR3寄存器状态切换(3为用户态,0为内核态)。 进程地址空间中,内核空间(1GB)共享OS代码,用户空间独立。 信号处理流程 默认动作:直接终止进程并返回用户态。 忽略动作:不处理直接返回。 自定义动作:需切换回用户态执
2025-06-10 23:55:58
1038
5
原创 信号之诗:信号保存,Linux进程间的无声呼唤
以上就是本次关于 Linux进程信号【信号保存】的全部内容了,在本文中,我们首先再一次对信号有了较深的理解,知道了在内核中存在三张表记录信号的处理流程,然后我们学习了信号集的操作函数,模拟实现了阻塞信号 - 产生信号 - 未决信号 - 解除阻塞 - 递达信号的全过程,最终证明信号在产生之后是保存在 未决表中的本篇关于信号保存的介绍就暂告段落啦,希望能对大家的学习产生帮助,欢迎各位佬前来支持斧正!!!
2025-06-09 22:47:30
996
2
原创 信号的诞生:Linux进程信号的启示与奥秘
在浩瀚无垠的计算机世界中,进程如同星辰般闪烁,它们的诞生、运动和消亡为这个宇宙增添了无数色彩。而其中的信号,仿佛是来自深空的神秘讯息,穿越时间与空间,影响着每一个进程的命运。今天,我们将一起探寻Linux操作系统中进程信号的起源和它们的伟大使命——它们是如何产生的,又是如何影响着整个系统的脉搏与节奏。信号 是信息传递的承载方式,一种信号往往代表着一种执行动作,比如:鸡叫 => 天快亮了闹钟 => 起床、完成任务红绿灯 => 红灯停,绿灯行……
2025-06-09 22:46:50
1149
2
原创 穿越时光列车——初识Linux线程
将一份代码成功编译后,可以得到一个可执行程序,程序运行后,相关代码和数据被load到内存中,并且操作系统会生成对应数据结构(比如 PCB)对其进行管理及分配资源,准备工作做完之后,我们就可以得到一个运行中的程序,简称为进程,对于操作系统来说,光有进程的概念是无法满足高效运行的需求的,因此需要一种执行粒度更细、调度成本更低的执行流,而这就是线程Windows 中的线程教材观点线程就是一个执行分支、执行粒度比进程更细、调度成本更低线程就是进程内部的一个执行流内核观点。
2025-06-07 20:28:06
1105
56
原创 穿越内核的迷雾:进程间通信,探索Linux消息队列与信号量的协奏曲
摘要 本文探讨了Linux系统中两种进程间通信(IPC)机制:消息队列和信号量。消息队列是一种基于数据块的特殊通信方式,允许进程通过添加/获取队列节点进行数据交换。文章详细介绍了消息队列的数据结构(msqid_ds)、基本操作接口(msgget创建、msgctl释放、msgsnd发送、msgrcv接收)及实现原理,并指出其生命周期独立于进程,需要手动释放。信号量部分主要关注其同步机制及接口使用。通过代码示例展示了消息队列的具体应用,并强调其与共享内存等System V标准IPC在接口设计上的一致性。
2025-06-07 20:27:24
1392
32
原创 信息的高效桥梁:Linux进程间通信——共享内存
共享内存通信:高效进程间通信方案 摘要 本文详细介绍了System V标准中的共享内存通信机制,这是进程间通信(IPC)中最快速的一种方案。共享内存通过在物理内存中开辟公共区域,让不同进程的虚拟地址映射到同一空间,实现直接读写通信,无需内核函数参与。 文章主要包含以下内容: 共享内存的基本概念和工作原理 共享内存的数据结构和管理方式 共享内存创建的关键函数shmget和key值生成函数ftok 实践代码示例展示了如何创建和使用共享内存 共享内存的生命周期不随进程终止,而是由操作系统管理,直到被主动删除。文中
2025-06-04 23:32:16
1171
35
原创 在虚拟宇宙中低语——进程间通信,Linux命名管道的前世今生
🌟 命名管道:进程间的星际信使 命名管道(FIFO)是Linux系统中实现进程间通信(IPC)的一种优雅方式。与匿名管道不同,它通过文件系统中的挂名路径(无需磁盘存储)让无亲缘关系的进程也能通信。 核心特性: 使用mkfifo创建0字节的特殊管道文件 遵循"先入先出"原则和四种阻塞场景 服务端与客户端通过共享路径名建立连接 实现示例: 服务端创建管道并写入数据 客户端读取数据后删除管道文件 通信过程完全在内存中完成 命名管道就像星际信使,通过文件系统这个"宇宙坐标"
2025-06-04 23:31:23
1509
12
原创 烟雨之间:进程间通信,在匿名管道中流淌的进程低语
在计算机的世界里,每一个进程就像一座孤岛,独立运行,彼此隔绝。然而,有时这些孤岛之间需要交换讯息,仿佛远古的烽火台,在寂静中传递着意图与数据。而在这诸多桥梁之中,匿名管道(Anonymous> Pipe),恰似烟雨朦胧中的一条小舟,轻盈却有效,将数据静静地送往彼岸。本文将带你穿越这条隐秘的通道,探寻其创建、使用与局限,感受进程之间无声却有力的对话。
2025-06-03 16:27:36
1121
37
原创 穿越文件之海:Linux链接与库的奇幻旅程,软硬连接与动静态库
在计算机的无形世界中,数据如河流般流淌,而文件系统则是河道的设计者。Linux,这位古老而睿智的守护者,为我们铺设了一条通往数字王国深处的道路。今天,让我们踏上一段奇妙的旅程,探索Linux基础I/O中那些看似平凡却蕴含无限智慧的链接与库。
2025-06-03 16:26:34
1700
59
原创 苍茫命令行:linux模拟实现,书写微型bash
Linux 系统主要分为内核(kernel)和 外壳(shell),普通用户是无法接触到内核的,因此实际在进行操作时是在和外壳程序打交道,在 shell 外壳之上存在命令行解释器(bash),负责接收并执行用户输入的指令,本文模拟实现的就是一个简易版命令行解释器🏙️正文1、bash本质在模拟实现前,先得了解 bash 的本质bash 也是一个进程,并且是不断运行中的进程证明:常显示的命令输入提示符就是 bash 不断打印输出的结果输入指令后,bash 会创建子进程,并进行程序替换。
2025-05-28 20:34:15
1909
41
原创 流光溢彩的数字长河:Linux基础IO,文件系统的诗意漫游
本文摘要: 本文系统介绍了磁盘文件系统的基本原理与工作机制。主要内容包括:1)磁盘文件通过inode进行唯一标识和管理,类似快递取件码机制;2)详细剖析机械硬盘的物理结构(盘片、磁头等)和数据存储原理(CHS寻址与LBA逻辑块寻址);3)阐述分区管理的必要性及块组(Block Group)的组织结构;4)解析文件操作流程:创建时分配inode和数据块,访问时通过inode映射定位数据,删除时释放资源并更新位图。文章以EXT文件系统为例,揭示了操作系统高效管理磁盘文件的核心机制,展现了"先描述再组织
2025-05-28 20:33:26
1057
62
原创 流水潺潺:探寻Linux下C语言文件流的诗意实现
文章摘要 本文探讨了Linux系统中模拟实现C语言文件流的核心原理。通过设计自定义的MY_FILE结构体,包含缓冲区、刷新策略和文件描述符等关键元素,作者展示了如何构建基础文件操作功能。重点实现了fopen、fclose等函数,详细解析了缓冲区管理机制,如行缓冲的实现和手动刷新(fflush)的重要性。代码示例演示了文件读写时缓冲区的处理逻辑,强调数据及时刷新的必要性以避免丢失。这种模拟实现揭示了C标准库文件操作背后的系统调用和缓冲机制,为理解底层文件处理提供了实践视角。
2025-05-26 07:23:41
1014
14
原创 峰回百转:Linux基础IO,重定向与缓冲区的诗意探索
Linux基础IO:重定向与缓冲区原理 本文深入探讨Linux系统中的基础IO操作,重点解析文件描述符与重定向机制。文件描述符(fd)作为系统级标识符,通过数组fd_array[]管理所有打开的文件流,标准输入、输出、错误分别对应0、1、2。文章揭示了"先描述再组织"的设计原则,解释了files_struct结构体如何维护文件属性。通过实验验证了fd分配遵循"最小可用"规则,并展示了重定向的本质是替换标准流指向的文件对象。文中还介绍了命令行重定向指令(>, &g
2025-05-26 07:22:54
1574
3
原创 纸上流年:Linux基础IO的文件理解与操作
本文深入探讨了Linux操作系统中的基础IO机制,重点介绍了文件操作的本质及其在系统层面的实现。文章首先回顾了C语言中的文件操作,包括文件的打开、关闭、写入和读取,并详细解释了相关函数的使用方法。随后,文章转向系统级文件操作,介绍了如何通过open函数直接调用系统接口来打开文件,并解释了文件描述符的概念。通过位图的方式,文章展示了如何灵活传递多个选项参数。最后,文章强调了文件操作在系统学习中的重要性,指出真正的文件操作是进程与操作系统之间的交互。本文为读者提供了从语言层面到系统层面的全面理解,帮助深入掌握L
2025-05-19 23:05:24
1086
34
原创 灵魂转生:Linux进程程序替换的艺术与哲思
本文探讨了Linux操作系统中的进程程序替换机制,类比为“灵魂转生”,揭示了其背后的原理与实现。文章首先解释了程序替换的必要性,指出其目的是让子进程执行特定任务,类似于根据不同场景更换汽车轮胎。随后,通过图解和代码示例,详细介绍了七大替换函数(如execl、execv、execlp等),并强调了它们在程序替换中的作用与使用方式。这些函数通过不同的参数传递方式(如链式、表形式)实现程序替换,且只有在替换失败时才会返回-1。文章还指出,execve是真正的系统级接口,其他函数均基于它实现。通过本文,读者可以深入
2025-05-19 23:04:48
2591
35
原创 生命之舞:创建,终止与等待,Linux进程控制的交响乐章
在操作系统的广袤宇宙中,进程如繁星般闪烁。它们诞生、闪耀、相互交织,最终化为虚无,将自己的成果留给这个数字世界。Linux系统,作为这片宇宙中最为璀璨的星系之一,以其独特的机制编排着这场生命的交响乐。本文,我们将探索Linux进程控制的三重奏:`创建`、`终止`与`等待`,深入理解这场生命之舞的优雅节奏与内在规律
2025-05-14 20:05:06
1011
6
原创 BFS算法篇——打开智慧之门,BFS算法在拓扑排序中的诗意探索(下)
上篇我们介绍了BFS解决拓扑排序的背景知识,本篇我们将结合具体题目分析,进一步深化对于该算法的理解运用。
2025-05-13 09:48:09
941
15
原创 BFS算法篇——打开智慧之门,BFS算法在拓扑排序中的诗意探索(上)
本文介绍了如何使用广度优先搜索(BFS)算法实现拓扑排序。拓扑排序是针对有向无环图(DAG)的一种排序方法,要求每个节点在其依赖节点之前被处理。BFS通过Kahn算法实现拓扑排序,核心步骤包括初始化入度为0的节点、遍历队列中的节点并更新其邻接节点的入度,直到所有节点被处理。文章还提供了C语言代码示例,展示了如何通过邻接矩阵表示图,并使用队列实现BFS拓扑排序。此外,文章强调了拓扑排序在任务调度、课程安排和项目管理等领域的应用,并指出如果图中存在环,则无法完成拓扑排序。通过BFS算法,拓扑排序能够有效处理复杂
2025-05-13 09:47:20
895
18
原创 BFS算法篇——从晨曦到星辰,BFS算法在多源最短路径问题中的诗意航行(下)
上篇我们介绍了多源BFS的相关背景知识,本篇我们将结合具体题目分析,进一步深化对于BFS算法的理解运用。
2025-05-13 09:46:40
900
33
原创 BFS算法篇——从晨曦到星辰,BFS算法在多源最短路径问题中的诗意航行(上)
多源广度优先搜索(Multi-Source BFS)是一种从多个起点同时进行搜索的算法,适用于需要从多个源点找到最短路径的场景。与传统的单源BFS不同,多源BFS在初始化时将多个源点加入队列,并同时展开探索,提高了搜索效率。该算法广泛应用于地图导航、信息传播和社交网络分析等领域。通过C语言实现的代码示例展示了如何在迷宫中求解多个起点到目标节点的最短路径。多源BFS通过并行探索,显著提升了算法的运行效率,为复杂问题提供了高效的解决方案。
2025-05-13 09:46:16
970
34
原创 BFS算法篇——穿越迷雾森林,探幽最短路径之谜(下)
上篇我们介绍了bfs算法求取最短路径的应用场景和代码实现,本篇将结合具体题目,进一步深化对其的理解运用
2025-05-08 16:26:56
718
35
原创 BFS算法篇——穿越迷雾森林,探幽最短路径之谜(上)
BFS 算法以其简单而高效的特点,成为了解决图中最短路径问题的常见方法。它通过层层推进的方式,保证了我们能够最早触及终点的那条路径。
2025-05-08 16:26:23
663
6
原创 贪心算法篇——万千抉择中的唯一考量,最优解追寻的跬步累积(8)
初篇我们介绍了贪心算法的相关背景知识,本篇我们将结合具体题目,进一步深化大家对于贪心算法的理解和运用。
2025-04-24 13:43:03
873
2
原创 贪心算法篇——万千抉择中的唯一考量,最优解追寻的跬步累积(7)
初篇我们介绍了贪心算法的相关背景知识,本篇我们将结合具体题目,进一步深化大家对于贪心算法的理解和运用。
2025-04-24 13:42:38
763
原创 贪心算法篇——万千抉择中的唯一考量,最优解追寻的跬步累积(6)
初篇我们介绍了贪心算法的相关背景知识,本篇我们将结合具体题目,进一步深化大家对于贪心算法的理解和运用。
2025-04-23 15:54:42
833
原创 贪心算法篇——万千抉择中的唯一考量,最优解追寻的跬步累积(5)
初篇我们介绍了贪心算法的相关背景知识,本篇我们将结合具体题目,进一步深化大家对于贪心算法的理解和运用。
2025-04-23 15:54:02
1032
原创 贪心算法篇——万千抉择中的唯一考量,最优解追寻的跬步累积(4)
初篇我们介绍了贪心算法的相关背景知识,本篇我们将结合具体题目,进一步深化大家对于贪心算法的理解和运用。
2025-04-08 23:31:48
859
3
原创 贪心算法篇——万千抉择中的唯一考量,最优解追寻的跬步累积(3)
初篇我们介绍了贪心算法的相关背景知识,本篇我们将结合具体题目,进一步深化大家对于贪心算法的理解和运用。
2025-04-08 23:30:26
723
原创 贪心算法篇——万千抉择中的唯一考量,最优解追寻的跬步累积(2)
初篇我们介绍了贪心算法的相关背景知识,本篇我们将结合具体题目,进一步深化大家对于贪心算法的理解和运用。
2025-04-07 23:01:08
972
38
原创 贪心算法篇——万千抉择中的唯一考量,最优解追寻的跬步累积(1)
贪心算法,作为计算机科学中最具“智慧”的算法之一,它通过简洁直接的策略解决了许多看似复杂的问题。它的每一次选择,都是对局部最优的追求,而这一追求,最终汇聚成了全局最优的结果。在面对问题时,贪心算法教给我们一个深刻的道理——在合适的时刻,做出最好的选择,最终的道路会更加宽广和光明。然而,正如人生中的许多选择并非总是简单易得,贪心算法并不是每一个问题的灵丹妙药。它适用于那些满足特定条件的问题,而对于其他问题,我们需要更加复杂和精密的算法。
2025-04-07 23:00:11
1718
83
原创 虚拟的轨迹:在无形中改变进程的命运,深入解析操作系统中的进程环境变量
环境变量是键值对形式的全局变量,定义了系统和进程的运行环境。它们用于存储系统配置、用户信息以及运行时参数,供操作系统和应用程序读取和使用。本篇我们将全面介绍进程环境变量的`概念`、`常见环境变量`、`操作指令`,以及如何通过C语言中的getenv和setenv函数对环境变量进行操作,配以代码示例和表格,帮助你深入理解这一重要知识点。
2025-04-01 23:02:49
898
19
原创 进程地址空间:操作系统中的虚拟世界与心灵映射,深入解析进程地址空间
进程地址空间的概念,超越了技术的范畴,它涉及到操作系统如何管理和控制内存,如何为每个进程提供一个独立而安全的运行环境。在这个过程中,虚拟内存技术则如同魔法师一样,巧妙地将虚拟世界与现实世界结合在一起,为开发者创造出一个更加自由和高效的编程环境。在这个隐形的、却至关重要的空间中,进程的每一次启动、每一次执行、每一次销毁,都在演绎着一场关于资源管理、内存控制与程序执行的深刻哲学思考。正如人生的每一个阶段,进程地址空间也在默默地展示着操作系统的智慧与魅力,成为计算机科学中不可或缺的一部分。
2025-04-01 23:01:38
877
2
原创 优先于时间:在纷繁世界中觅得一席之地,揭开进程优先级的神秘面纱
进程优先级是操作系统用于表示进程重要性或紧急程度的一个指标。优先级高的进程通常会比优先级低的进程更早或更频繁地获得CPU资源。保证重要任务优先执行,提高系统响应速度。控制资源分配,避免某些低优先级任务长期占用CPU。优先级通常与进程调度算法结合使用,用于决定哪个进程将被调度运行。进程优先级的背后,是操作系统如何巧妙地调配有限资源的智慧。它让我们意识到,在纷繁复杂的计算世界中,如何让不同的任务得以顺利执行,如何让每个进程都能在合适的时刻发挥其应有的作用。
2025-03-28 20:47:52
1682
78
原创 进程状态:Linux的幕后指挥管理,穿越操作系统进程的静与动
操作系统中的进程状态是进程在生命周期中可能处于的不同状态。这些状态帮助操作系统识别进程的运行情况,并在不同状态间进行合理的资源分配。操作系统中的经典进程状态包括就绪运行阻塞和终止。Linux操作系统中的进程状态,不仅仅是抽象的计算机术语,它们是系统中每个进程生命周期的具体体现。正如一场精彩的舞蹈,每个进程都有自己的节奏和步伐,它们或快速跃动,或缓慢舞动,或瞬间消失,而每个转变都与操作系统对资源的调度和管理息息相关。
2025-03-28 20:47:04
2341
41
原创 跃动之舞:初识进程,进程的生命之歌与操作系统的智慧调度
进程是计算机中一个正在执行的程序实例。每当一个程序被加载到计算机内存中并开始运行时,它便成为了一个进程。进程不仅包含程序代码,还包括执行状态、程序计数器、寄存器内容以及内存等相关信息。可以说,进程是程序的一个动态表现,代表了程序在特定时刻的运行状态。**与程序的静态性不同,进程是动态的,它会经历从创建、运行、暂停到销毁的整个生命周期。**每一个进程都是操作系统资源管理的基本单元,操作系统通过对进程的管理来实现任务的调度与分配。
2025-03-27 20:06:01
867
31
原创 指引航船之舵:初识操作系统,冯诺依曼的智慧与操作系统的深邃探索
操作系统(Operating System, OS)是管理计算机硬件与软件资源的系统软件,它为用户和应用程序提供必要的服务与接口。从冯诺依曼体系结构的智慧到操作系统的日益发展,计算机的世界始终充满了无穷的探索与创造。操作系统作为计算机硬件与用户之间的桥梁,发挥着不可替代的作用。它不仅是计算机能够高效运作的核心所在,也是软件与硬件之间无声的协调者。随着Linux的崛起和开源精神的传承,操作系统正向着更加自由、开放与高效的方向前进。让我们在这片浩瀚的计算海洋中,继续乘风破浪,探索技术的无尽可能。
2025-03-24 19:15:06
1160
8
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人