自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux】线程初步——线程概念以及接口认识

本文介绍了线程的核心概念及其在Linux系统中的实现。线程作为轻量级执行单元,与进程的主要区别在于:进程是资源分配单位,线程是调度执行单位。线程共享进程资源(如虚拟地址空间),但拥有独立执行上下文和栈空间,这使得线程切换开销远小于进程切换。文章详细分析了线程的优缺点,并提供了Linux线程编程接口(pthread_create、pthread_join等)的使用示例。特别指出Linux通过轻量级进程(LWP)实现线程,底层使用clone()系统调用控制资源共享。线程虽能提升并发性能,但也带来编程复杂度增加、

2026-02-12 23:54:29 1041 3

原创 【Linux】深入解剖页表——分页式存储

理解了的本质后,我们便能清晰认知到:每个进程都拥有一段独属于自身的连续地址空间。不同于实际存储数据的物理内存,这段连续的虚拟地址空间更像是一张划定好范围的 “大饼”—— 仅作为进程内存访问的统一地址框架,并不承担实际的数据存储功能。真正的存储还需要在物理内存实现,那么从虚拟内存到物理内存就需要进行映射——因此就产生了页表。

2026-02-08 23:24:15 821 2

原创 【Linux】进程信号(下半)

文章摘要:本文系统讲解了Linux信号机制,包括信号产生(硬件异常/操作触发、软件主动发送)、保存(未决/阻塞信号集位图结构)和递达处理(默认/忽略/自定义三种方式)。重点分析了硬件与软件触发的区别、信号位图存储特性、终止类型(Term与Core的区别),并介绍了sigprocmask、sigpending等关键系统调用的使用。通过实验演示了信号阻塞与解除过程,特别探讨了SIGCHLD信号在默认忽略与显式忽略时对僵尸进程处理的不同影响,为Linux进程间通信和异常处理提供了实践指导。

2026-02-07 22:00:53 771 1

原创 【Linux】中断 —— 操作系统的运行基石

操作系统通过中断机制实现高效资源管理:硬件中断(如键盘输入)由外设触发,通过中断控制器唤醒CPU处理任务;时钟中断由CPU内置时钟源定期触发,用于进程调度和时间管理。系统核心是一个死循环,无任务时CPU进入低功耗状态。软中断(如系统调用)允许用户态程序通过指令(int 0x80/syscall)主动陷入内核态。进程故障也会触发中断,内核在返回用户态前会检查并处理信号,形成"无穷符号"状的状态切换流程。这种中断驱动架构使操作系统能在能耗与性能间取得平衡。

2026-02-07 01:27:08 1329 2

原创 【Linux】进程信号(上半)

Linux信号机制解析:Ctrl+C如何终止进程 摘要: 本文深入解析了Linux信号机制,以Ctrl+C终止进程为例,阐述了信号的工作原理。信号是内核通知进程的一种异步通信方式,具有延迟性和可配置性。文章介绍了62种信号类型,重点分析了SIGINT(2)信号的特点及处理方式。通过signal()接口,进程可以自定义信号处理函数,但SIGKILL(9)和SIGSTOP(19)信号无法被捕获。

2026-02-05 22:39:22 980 2

原创 【力扣hot100】双指针从easy到hard

本文通过力扣hot100中的四道题目,展示了双指针算法的应用和优化思路。首先在"移动零"问题中,通过双指针将时间复杂度从O(N²)优化到O(N);其次在"盛水容器"问题中,利用双指针和贪心思想高效求解;接着在"三数之和"问题中,结合排序和双指针解决重复问题;最后在"接雨水"问题中,展示了前后缀数组和双指针两种优化方法。这些案例体现了双指针算法在降低时间复杂度和简化问题上的重要作用,适用于各类数组操作问题。

2026-02-04 01:08:59 983 2

原创 【Linux】动静态库原理及制作

文章摘要:本文系统讲解了编程中库的概念与使用原理。首先阐述了库的本质是经过验证的可复用代码集合,分析了从源代码到可执行文件的完整编译链接过程。重点对比了动静态库的核心区别:静态库在链接时合并到可执行文件中,而动态库在运行时加载。详细介绍了动静态库的制作方法,包括ar命令创建静态库、gcc的-fPIC选项生成位置无关码的动态库,以及解决库路径问题的多种方案。通过反汇编和ldd等工具验证了动静态库的不同链接机制,为开发者深入理解库的底层原理提供了实践指导。

2026-01-31 20:16:02 885 3

原创 【Linux】磁盘与Ext系列文件系统

即可精准找到目标存储位置。这就是磁盘经典的三维物理寻址方式 ——CHS 寻址,由柱面、磁头、扇区三个维度共同构成,层层缩小寻址范围,实现对磁盘任意扇区的精准定位。

2026-01-29 20:01:27 1521 2

原创 【Linux】进程间通信与进程池构建

在Unix/Linux系统编程中,fork()是创建子进程的核心利器:它通过复制父进程地址空间生成独立的子进程,凭借进程间的完全隔离性,既能避免数据资源被污染(比如子进程崩溃不会牵连父进程),又能让多个子进程被调度到不同CPU核心,最大化利用多核资源。但纯粹的fork()多进程模型有个明显短板——子进程只能机械执行预设代码后退出,父进程与子进程之间缺乏灵活的协同能力,无法实现“父进程分发任务、子进程处理任务”的动态交互。而管道(pipe)的出现,恰好完美弥补了这一缺陷,成为多进程间高效通信的经典方案。

2026-01-27 20:17:33 1261 5

原创 【Linux】文件系统与基础IO

函数原型 int open(const char *pathname, int flags, ... /* mode_t mode */);open用于在内核层打开或创建指定路径的文件,参数包含文件路径、打开模式(如只读 O_RDONLY、只写 O_WRONLY、读写 O_RDWR,创建文件需附加 O_CREAT)及文件权限(创建时生效,如 0644),返回唯一的文件描述符(fd,整数)作为后续操作标识;

2026-01-25 22:37:14 1245 1

原创 【Linxu】进程替换与自制Shell命令行解释器

1、getenv (const char *name):读取环境变量,参数为变量名,返回值指针(成功)/NULL(失败),用于获取用户名、PWD/HOSTNAME 环境变量;2、putenv (char *string):设置环境变量,参数为 "NAME=VALUE" 格式字符串,返回 0(成功)/ 非 0(失败),用于注册自定义环境变量数组;

2026-01-24 20:22:46 949 6

原创 【Linux】虚拟地址空间

首先我们以一张图来展示linux机器(以32位为例)虚拟地址空间分布方式,虚拟空间大小为4GB也就是2^32个地址,其中用户空间大小为3GB,内核空间爱你大小为1GB。用户空间由低地址(0x00000000)到高地址(0xBFFFFFFF)的空间排布结构如图所示,内核空间主要用于存放进程PCB以及内核代码数据等,并且区别于用户空间,内核空间为所有进程共享。

2026-01-18 13:59:44 718 1

原创 【Linux】环境变量与main()函数参数

PATH是系统查找可执行程序的目录列表,ls 等指令的目录在其中所以不用./;HOME是当前用户的家目录,就是它的简写;USER记录当前登录用户名;PWD是终端当前所在目录。这些变量就像系统的基础说明书,程序读取它们就能获取系统和用户的关键信息。Linux 中所有可执行程序的真正入口函数都不是 main (),而是_start 函数,main () 只是 C/C++ 编译器为我们封装的应用层入口,gcc 会自动链接启动代码,由_start 调用 main ();

2026-01-10 19:14:25 1274 3

原创 【Linux】进程切换与调度

进程优先级指的是进程得到CPU资源的先后顺序,进程优先级的存在可以让操作系统公平地对每个进程进行资源分配,将有限的CPU资源最大化合理利用。

2026-01-04 20:45:30 1221 2

原创 【Linux】初识Linux进程

linux进程初学(何为进程?进程的状态)

2025-12-17 23:25:17 767 8

空空如也

空空如也

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

TA关注的人

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