- 博客(24)
- 收藏
- 关注
原创 【网络基础】网络协议栈与数据传输流程
协议”这个词听起来很抽象,通俗点说就是约定。比如打电话,大家约定好“喂”表示开始,“再见”表示结束。但在计算机世界里,光约定“频率”或“强弱”这种物理信号是不够的,如果一台机器讲中文,另一台讲葡萄牙语,还是没法通。从代码角度,协议就是通信双方都认识的“结构体” (Struct)。不管你的电脑是 Windows 还是 Linux,操作系统内部在实现网络功能时,都必须遵守标准。int a;int b;int c;主机 A 发送了一个。
2025-12-09 19:15:06
447
原创 Linux 权限基本理解
Linux系统权限管理主要包括用户模型和文件权限控制。Linux用户分为超级用户(root)和普通用户,通过su或sudo命令切换权限。文件权限通过三类角色(拥有者、所属组、其他人)和三种权限(读、写、执行)进行管理,使用chmod命令设置权限(符号或八进制模式),chown/chgrp修改归属。目录默认权限为755,文件为644,由umask值决定。特别的是,删除文件权限取决于所在目录的写权限,可通过设置粘滞位(t)限制删除权限,仅允许文件所有者、目录所有者或root删除文件。
2025-12-08 21:24:09
792
原创 Linux 基础指令详解(常用)
本文介绍了Linux系统中常用的操作指令,分为六大部分:1.目录与路径操作(ls、pwd、cd、mkdir、rmdir);2.文件基本操作(touch、rm、cp、mv);3.文本查看与处理(cat、more/less、head/tail);4.查找与搜索(find、grep、which/whereis);5.系统信息与帮助(man、date/cal、uname/top等);6.打包压缩与关机(zip/unzip、tar、shutdown)。
2025-12-08 19:38:13
616
原创 Linux 基础开发工具详解(Yum, Vim, GCC, Make, GDB, Git)
本文介绍了Linux开发中的常用工具链。主要内容包括:1. 软件包管理器(yum/apt)的使用方法,包括查找、安装、卸载软件以及配置国内镜像源;2. Vim编辑器的多模式操作和配置方法,详细说明了命令模式、插入模式和底行模式的操作指令;3. GCC/G++编译器的编译流程(预处理、编译、汇编、链接)和动静态库的区别;4. Make和Makefile的自动化构建原理及编写规则;5. Git版本控制的基本操作流程(克隆、添加、提交、推送);
2025-12-07 19:48:02
1020
原创 Linux 进程控制详解
本文详细介绍了Linux系统编程中的进程管理技术,主要包括四方面内容:进程创建、终止、等待和程序替换。首先阐述了fork函数的工作原理及其写时拷贝优化机制;其次分析了进程退出的三种场景和退出方法;然后讲解了进程等待的必要性及wait/waitpid的使用方式;最后详细介绍了exec函数簇的程序替换原理和6种变体函数的使用场景。全文通过代码示例和原理分析,系统性地讲解了Linux多进程编程的核心技术,重点突出了进程独立性、资源管理和父子进程交互等关键概念,为Linux系统编程提供了全面的进程管理指导。
2025-12-05 22:33:24
660
原创 C++ 中CAS原子操作详解
C++中的CAS(比较交换)操作通过std::atomic的compare_exchange_weak/strong实现,包含内存值、预期值和新值三个操作数。文章详细介绍了弱/强CAS的区别及适用场景,通过栈操作示例展示了典型CAS循环模式,并深入分析了ABA问题及其解决方案(如版本号机制)。最后对比了自旋锁(基于原子操作)与互斥锁的特性差异,指出自旋锁适用于短临界区场景。全文系统性地讲解了C++原子操作的核心概念和应用实践。
2025-12-05 14:56:40
855
原创 Linux 进程概念深度总结(三):进程地址空间
本文探讨了Linux系统中进程地址空间的虚拟内存机制。通过父子进程修改同一全局变量的实验,发现虽然虚拟地址相同但物理内存不同,揭示了操作系统通过虚拟地址管理物理内存的机制。文章详细分析了32位Linux下进程地址空间的4GB布局(3G用户空间+1G内核空间),并介绍了内核通过mm_struct和vm_area_struct结构管理虚拟内存区域的方法。重点阐述了页表和MMU在虚拟地址到物理地址转换中的作用,以及写时拷贝技术的工作原理。最后总结了虚拟内存的三个重要意义:安全性保障、内存管理解耦以及统一的内存分布
2025-12-04 21:04:58
1159
原创 Linux 进程概念深度总结(二):环境变量
本文介绍了Linux环境变量的基本概念与使用方法。环境变量是操作系统运行环境的重要参数,具有全局特性,用于解决系统配置问题。重点解析了PATH环境变量如何决定命令搜索路径,并演示了临时修改PATH的方法。文章还详细讲解了环境变量在内存中的组织方式,以及在C语言中获取环境变量的三种方法。最后阐述了环境变量的本质是具有全局属性的变量,可以被子进程继承,并总结了常用的环境变量操作指令。通过本文可以快速掌握Linux环境变量的核心知识。
2025-12-04 20:08:07
1262
原创 Linux 进程概念深度总结(一):从硬件体系到进程调度
本文从硬件基础到操作系统原理,系统性地阐述了计算机进程管理的核心机制。首先介绍了冯·诺依曼体系结构,指出内存作为CPU与外设间的缓冲枢纽的关键地位。然后剖析了操作系统"先描述再组织"的管理思想,通过PCB(task_struct)数据结构实现对进程的抽象管理。重点讲解了进程创建(fork)、状态转换、优先级调整等核心概念,并深入分析了Linux O(1)调度算法的精妙设计,包括运行队列、位图索引和双队列指针交换等实现机制。
2025-12-03 18:48:55
896
原创 Linux基础IO:从C标准库到内核本质的深度剖析
本文深入探讨了Linux系统中的文件操作机制,分为C标准库IO和系统调用IO两个层面。C标准库通过fopen、fwrite等函数封装了底层系统调用,提供用户级缓冲以提高效率。系统调用如open、write等直接与内核交互,使用文件描述符(整数索引)标识打开的文件。文章详细解析了文件描述符的分配规则、重定向原理(通过dup2系统调用)以及缓冲区机制(行缓冲、全缓冲的区别)。最后阐释Linux一切皆文件"的设计哲学。
2025-12-01 20:02:46
1300
原创 Linux中的软硬链接
本文详细讲解了Linux中ln命令创建的两种链接方式:硬链接和软链接。硬链接通过共享相同Inode实现文件"分身",会增加Inode的链接计数,删除时仅减少计数直至归零才释放空间,但不能用于目录且不能跨分区。软链接则是独立文件,存储目标路径字符串,可跨分区和链接目录,但目标删除后会失效。两者本质区别在于:硬链接是文件实体的别名,软链接是路径的快捷方式。
2025-11-30 23:20:47
519
原创 重学操作系统:手把手带你理解 Ext2 文件系统设计思想
本文深入解析了Linux Ext2文件系统的核心设计原理。首先从磁盘物理结构(CHS寻址)到逻辑抽象(LBA地址)的转换入手,阐述了操作系统如何将物理磁盘抽象为线性块数组。然后详细介绍了Ext2的分层管理策略:通过分区划分磁盘空间,再细分为块组进行管理。重点剖析了块组内部结构,包括超级块、组描述符表、位图、Inode表和数据区等核心组件。文章特别强调了Inode的多级索引机制,通过直接、一级、二级和三级间接寻址,实现从小文件到大文件的高效存储。最后解析了目录结构和路径查找过程,揭示了文件名与Inode的映射
2025-11-30 22:57:25
1170
原创 从 ELF 格式到动静态链接的底层原理
本文深入解析Linux中ELF文件格式与链接加载机制。首先介绍ELF文件结构,包括ELF头、程序头表、节头表和各类节区,阐述编译链接过程中目标文件的合并与重定位原理。静态链接通过地址修正将多个.o文件合并为可执行文件,而动态链接则利用GOT/PLT机制实现运行时加载和延迟绑定。文章还详细分析了进程地址空间的构建过程,说明虚拟地址到物理地址的映射原理。通过剖析静态/动态链接的核心差异,揭示了Linux程序从编译到运行的全过程技术实现。
2025-11-28 20:54:59
1359
原创 动静态库的基本理解
本文介绍了库的基本概念及其两种主要类型:静态库和动态库。库是预先编写好的可复用代码集合,用于避免重复开发。静态库(.a/.lib)在编译时链接到可执行文件中,程序运行时不再需要;动态库(.so/.dll)则在运行时加载,多个程序可共享。文章详细说明了两种库的生成方法(使用gcc和ar工具)和使用方式,包括编译选项(-L、-I、-l)和环境变量配置。最后对比了二者的关键差异:内存占用、更新方式、加载时机等,指出动态库更适合多进程共享场景,而静态库则提供更强的独立性。
2025-11-27 20:46:56
1021
原创 基于system V共享内存的进程间通信
摘要:本文介绍了SystemV共享内存这一高效的进程间通信(IPC)机制。共享内存允许不同进程直接访问同一物理内存,避免了内核数据拷贝,是速度最快的IPC形式。文章详细讲解了共享内存的关键操作:shmget创建/获取共享内存、shmat附加到进程地址空间、shmdt分离共享内存以及shmctl控制共享内存。通过示例代码展示了服务端创建共享内存、客户端获取并访问共享内存的完整通信流程。共享内存虽高效但缺乏同步机制,需要额外措施保证数据一致性。该机制特别适合需要高性能数据交换的场景。
2025-11-27 19:23:23
710
原创 为何父子进程管道通信通常“子写父读“:设计哲学与实用考量
Unix管道设计遵循"子写父读"模式,主要基于以下考量:1) 继承自Shell命令链的传统数据流模式;2) 便于父进程统一管理资源和收集结果;3) 有效避免死锁风险,当管道满时父进程不会被阻塞;4) 简化错误处理,子进程异常可被自动检测。这种设计使父进程成为协调者,子进程专注数据处理。反向模式(父写子读)适用于配置分发等特定场景,但核心原则是让数据流向符合程序逻辑。该模式体现了Unix简洁高效的设计哲学。
2025-11-26 21:38:56
330
原创 基于管道的进程间通信
摘要:本文介绍了进程间通信(IPC)中的管道机制。首先解释了进程间通信的必要性,即独立进程需要通过安全可控的机制交换数据。管道分为匿名管道和命名管道两种:匿名管道用于有亲缘关系的进程通信,通过pipe()系统调用创建,具有单向通信、生命周期随进程等特点;命名管道通过mkfifo()创建,允许无关进程通过文件路径通信。文章详细讲解了两种管道的创建方法、读写规则、特性差异,并通过代码示例演示了父子进程通信、文件拷贝和客户端-服务器通信等实际应用场景。
2025-11-26 21:27:56
915
原创 从“中断“角度理解Linux操作系统运行机制
摘要: Linux操作系统的核心机制是中断驱动,包括硬件中断(外设触发)、软件中断(系统调用)和异常(执行错误)。硬件中断由外设异步触发,通过中断控制器和IDT表处理;系统调用通过软中断同步进入内核态,根据调用号执行对应函数;异常转化为信号处理。时钟中断是调度关键,通过时间片轮转实现多任务切换。本质上,Linux是一个由中断事件驱动的响应式系统,没有中断就没有现代操作系统的动态运行。理解中断机制是掌握操作系统工作原理的核心。
2025-11-25 22:51:23
720
原创 深入理解Linux进程信号,你真的全懂了吗?
本文深入探讨了Linux系统中的信号机制。信号是进程间通信的基础方式,本质是一种异步软中断,用于通知进程响应外部事件。文章从信号概念、产生方式(终端按键、系统调用、硬件异常等)、保存机制(未决和阻塞状态)以及信号捕捉流程等多个维度进行详细分析。通过代码示例演示了信号的注册、发送和处理过程,并解释了内核如何管理信号。此外,还讨论了相关高级话题如可重入函数、volatile关键字和SIGCHLD信号处理。信号机制作为Linux系统的重要组成部分,为进程提供了灵活的事件响应能力,理解其工作原理对系统编程至关重要。
2025-11-24 22:46:30
1214
原创 深入理解内存管理与线程资源划分
本文探讨了C/C++内存管理、Linux写时拷贝、虚拟内存机制等底层原理。从内核视角看,malloc和new最终都通过系统调用申请虚拟内存,但new还负责对象构造;写时拷贝(COW)通过延迟复制优化fork性能;内存申请实质是虚拟地址分配,物理内存延迟到首次访问时才分配。文章还分析了缺页与越界的区分机制、越界访问不一定报错的原因,并指出虚拟地址空间是操作系统资源管理的核心,通过地址空间划分自然实现进程隔离和线程资源共享。理解这些机制的关键在于把握虚拟内存作为操作系统抽象基石的核心理念。
2025-11-22 23:04:29
557
1
原创 深入理解Linux线程概念及其控制
本文系统介绍了Linux线程的核心概念与实现机制。首先阐述了线程作为轻量级进程(LWP)的基本特性,包括资源共享与独立执行路径的特点。重点分析了Linux内核中线程的实现原理,详细解读了task_struct结构体关键字段及clone系统调用的工作机制。深入探讨了分页式存储管理机制,包括虚拟地址转换、页表结构及TLB优化原理。此外,文章全面介绍了POSIX线程库的编程接口,包括线程创建、终止、等待和分离等操作。最后对比了进程与线程在资源共享和独立性方面的区别,指出线程作为调度基本单位与进程作为资源分配基本单
2025-11-22 22:19:31
1155
原创 Linux:线程池设计及线程安全问题
本文介绍了线程池的设计与实现,重点探讨了线程安全相关技术。首先阐述了线程池的概念及其优势,包括资源复用、系统稳定性等。随后详细讲解了日志模块的设计,采用策略模式实现输出方式解耦。在单例模式部分,对比了饿汉和懒汉实现方式,并给出线程安全的双重检查锁定方案。线程池实现采用生产者-消费者模型,包含任务队列、工作线程和同步机制。最后分析了线程安全与可重入性的区别,介绍了死锁的四个必要条件及避免方法,包括锁排序算法和银行家算法。文章还讨论了STL容器和智能指针的线程安全性问题,为并发编程提供了实用指导。
2025-11-21 21:28:30
954
原创 Linux线程同步以及生产者消费者模型
本文介绍了Linux线程同步的核心概念与实现机制。首先阐述了同步与互斥的区别,重点讲解了条件变量的原理和使用方法,包括初始化、等待、唤醒等操作。通过生产者-消费者模型示例,详细分析了条件变量与互斥锁的配合使用,强调了原子操作的重要性。文章还探讨了POSIX信号量的应用,并比较了基于阻塞队列和环形队列的两种实现方案。最后总结了生产者-消费者模型的优势,包括松耦合、支持并发和忙闲不均等特性。正确使用这些同步机制能有效解决多线程环境下的数据竞争和协调问题。
2025-11-20 21:57:16
604
原创 Linux线程互斥:原理、实现与最佳实践
摘要:本文系统介绍了线程互斥机制在多线程编程中的应用,分析了竞态条件和临界区问题,并通过抢票系统和银行账户操作等典型案例展示了数据竞争的风险。详细阐述了互斥量的基本概念、实现原理(基于原子操作和内核调度)及不同类型互斥量的适用场景。提供了C/C++中互斥量的使用实例,包括基本加锁解锁、递归互斥量等实现方案,并推荐使用RAII技术管理锁资源。最后总结了互斥量使用的最佳实践和性能优化方法,如控制锁粒度、减少锁竞争、读写锁应用等,为开发线程安全程序提供全面指导。
2025-11-19 22:23:48
806
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅