<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[2301_79238713的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/2301_79238713</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; 2301_79238713]]></copyright><item><title><![CDATA[项目代码笔记]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/159949959</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/159949959</guid><author>2301_79238713</author><pubDate>Sat, 27 Jun 2026 13:10:04 +0800</pubDate><description><![CDATA[符号含义等价于示例\d数字[0-9]\d{11}匹配11位数字\D非数字[^0-9]\w单词字符\w+匹配单词\W非单词字符\s空白字符\S非空白字符。]]></description><category></category></item><item><title><![CDATA[线程控制－－１]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/159007407</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/159007407</guid><author>2301_79238713</author><pubDate>Fri, 13 Mar 2026 12:32:06 +0800</pubDate><description><![CDATA[一、进程与线程的。]]></description><category></category></item><item><title><![CDATA[线程：概念-实现，原理-应用]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158975827</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158975827</guid><author>2301_79238713</author><pubDate>Thu, 12 Mar 2026 19:32:17 +0800</pubDate><description><![CDATA[一、线程是什么。]]></description><category></category></item><item><title><![CDATA[虚拟地址与内存管理底层详解]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158965048</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158965048</guid><author>2301_79238713</author><pubDate>Thu, 12 Mar 2026 12:39:23 +0800</pubDate><description><![CDATA[一、四谈虚拟地址二、进程与线程(开个头)：一个运行起来的执行流，一个加载到内存中的程序。从内核角度看，：进程内部的一个执行流，更轻量化三、物理内存管理单元：页框（页帧，物理页）为什么要以4KB为单位？磁盘和物理内存之间的IO以4KB为单位，所以内存也按4KB划分，每个4KB单元称为（或页帧，也叫物理页）。页框的状态管理内存被划分成一个个4KB的页框，每个页框有不同的状态（空闲、忙碌等）。OS需要对每个页框进行管理——。]]></description><category></category></item><item><title><![CDATA[信号处理中的不可重入函数与 volatile ，以及一些补充]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158964958</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158964958</guid><author>2301_79238713</author><pubDate>Thu, 12 Mar 2026 12:22:11 +0800</pubDate><description><![CDATA[一、不可重入函数与重入问题什么是重入？当和同时（或交替）执行同一个函数时，就发生了为什么不可重入？如果一个函数使用了或如果 main 执行到第 1 步后被信号中断，handler 也调用了inserthandler 修改了global返回 main 后，第 2 步继续执行，global就乱套了：大部分函数都是不可重入的，因为它们或多或少会用到全局数据。二、volatile 关键字编译器优化带来的问题编译器发现flag它flag。但如果 handler 修改了flagmain 循环永远不知道。]]></description><category></category></item><item><title><![CDATA[软中断--用指令连接系统调用]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158932635</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158932635</guid><author>2301_79238713</author><pubDate>Wed, 11 Mar 2026 19:58:22 +0800</pubDate><description><![CDATA[十四、软中断演示图一、什么是软中断？是 CPU 通过执行特定指令（intsyscall）主动触发的中断，不需要外部硬件参与。：外设发信号给 CPU（如键盘、时钟）：程序主动执行一条指令，让 CPU 像处理硬件中断一样去执行内核代码二、int 0x80 是什么？int 0x80是一条汇编指令，意思是：触发 0x80 号软中断。int：interrupt 的缩写0x80：中断号（128）当 CPU 执行这条指令时：暂停当前程序保护现场（保存寄存器等）根据中断号 0x80，去。]]></description><category></category></item><item><title><![CDATA[Linux 信号机制--最终章－信号处理]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158923024</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158923024</guid><author>2301_79238713</author><pubDate>Wed, 11 Mar 2026 12:31:39 +0800</pubDate><description><![CDATA[因为 pending 是内核的“待办事项清单”，由内核根据事件自动填写。如果用户能随意修改，就可以伪造信号，破坏系统安全。但 handler 执行完后，还要回到内核，再由内核返回用户态的原代码。所以必须等进程准备返回用户态时，内核“顺便”检查一下有没有信号要处理。但是我们也有修改的方式，那就是我们前面讲的５种产生信号的方式。，而是在“合适的时候”才处理。它再次陷入内核，告诉内核“信号处理完了，恢复原进程”内核修改进程的上下文，让 CPU 返回用户态时。handler 是用户代码，必须在用户态执行。]]></description><category></category></item><item><title><![CDATA[时钟中断与进程调度：从硬件到软件的完整链条]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158922714</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158922714</guid><author>2301_79238713</author><pubDate>Wed, 11 Mar 2026 12:20:30 +0800</pubDate><description><![CDATA[一、问题的起点一、问题的起点在学习操作系统时，你可能会产生一个困惑：操作系统本身也是一个软件，它被谁推动执行？进程被调度、被切换，那 OS 自己什么时候介入？是操作系统的“心脏”，它定期敲醒 OS，让 OS 有机会“插进来”做各种管理维护工作。二、时钟中断的整体流程第 0 步：系统初始化把（汇编函数）注册到中断向量表，告诉 CPU：当时钟中断来时，去执行它。第 1 步：硬件触发中断时钟源（集成在 CPU 内部或外部晶振）以固定频率（如 100Hz）发出电信号CPU 收到中断，]]></description><category></category></item><item><title><![CDATA[Linux 信号机制--续1]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158890278</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158890278</guid><author>2301_79238713</author><pubDate>Tue, 10 Mar 2026 18:50:59 +0800</pubDate><description><![CDATA[一、信号的核心数据结构每个进程的 PCB（这三张表都是sigset_t：某位为 1 表示该信号被屏蔽（暂时不处理）：某位为 1 表示已收到该信号（等待处理）：存的是函数指针（SIG_DFL、SIG_IGN 或自定义函数）二、信号的三个核心阶段如果在进程解除对某信号的阻塞之前这种信号产⽣过多次,将如何处理?POSIX.1允许系统递送该信号⼀次或多次。Linux是这样实现的:常规信号在递达之前产⽣多次只计⼀次,⽽实时信号在递达之前产⽣多次可以依次放在⼀个队列⾥。三、信号屏蔽字的操作SIG_BLOCK。]]></description><category></category></item><item><title><![CDATA[Linux 信号机制]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158882449</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158882449</guid><author>2301_79238713</author><pubDate>Tue, 10 Mar 2026 18:33:58 +0800</pubDate><description><![CDATA[一、信号是什么信号是操作系统向进程发送的，告诉进程“某个事件发生了”。我们可以把信号理解为——它不是帮进程做事，只是告诉进程“该做事了”。信号从产生到处理，经历三个阶段：二、信号的处理方式大部分信号的默认操作都是。就像红灯的默认操作是让车停下来一样，信号的“默认”就是系统预设的动作。但进程也可以自己处理信号：调用signal函数注册一个处理函数（handler）当信号来临时，：信号编号，是数字，其实就是信号的编号，通过可以看到所有信号。]]></description><category></category></item><item><title><![CDATA[System V IPC 三大件基础]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158842500</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158842500</guid><author>2301_79238713</author><pubDate>Mon, 09 Mar 2026 14:37:49 +0800</pubDate><description><![CDATA[生成一个唯一性很强键值，但注意即便如此也可能会出现相同的key，这时，只需要随意更改ID即可，路径也可以，但是改ID更好。2.消息队列内部函数（各个PIC的函数都很像）实际上就是数组下标，结合序列号防止重用。信号量就是用来保护共享资源的计数器。System V IPC 三大件。将共享内存段与当前进程脱离。五、system V信号量。临界资源的代码(⾮临界区)system V共享内存。system V消息队列。1.获取key（不说了）功能：⽤来创建共享内存。1.并发编程，概念铺垫。2.临界区和临界资源。]]></description><category></category></item><item><title><![CDATA[从零实现一个进程池（基于管道通信）]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158803251</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158803251</guid><author>2301_79238713</author><pubDate>Sun, 08 Mar 2026 10:47:20 +0800</pubDate><description><![CDATA[进程池是什么？简单说就是预先创建一批子进程，让它们等着，有任务来了就分配一个去执行。这样就不用每次有任务都现fork，省了创建进程的开销。#pragma once // 防止头文件重复包含// 定义任务类型：一个可调用对象，无参数无返回值// 任务1：模拟下载功能std::cout << "我是一个下载任务，进程ID: " << getpid() << std::endl;// 这里可以放真正的下载代码// 任务2：模拟数据库操作。]]></description><category></category></item><item><title><![CDATA[进程间通信（IPC）]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158774067</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158774067</guid><author>2301_79238713</author><pubDate>Sat, 07 Mar 2026 15:53:34 +0800</pubDate><description><![CDATA[因为当年程序员复用文件代码的时候，文件本身的设计就是单向的——数据写入缓冲区然后被刷新到磁盘，这个过程天然就是单向的。现实中也一样，天然气管道是单向的，下水管道也是单向的，道理相通。比如一个负责读的进程，如果不关写端，它有可能把自己刚写进去的数据又读走了——这就乱套了。这时候读端会阻塞，这是管道的同步机制在工作——有写端在，将来可能还有数据，所以要等。但因为管道是专门设计的，读写位置管理是独立的，不会互相干扰。我们写的代码里，明明打开了文件（有文件描述符），但看不到路径，也看不到文件名。]]></description><category></category></item><item><title><![CDATA[深入理解动态库：从编译到运行的完整旅程]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158701472</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158701472</guid><author>2301_79238713</author><pubDate>Thu, 05 Mar 2026 19:06:02 +0800</pubDate><description><![CDATA[这也是和静态链接的区别之一，静态链接是直接把库整体拷贝到了程序里，所以不可共享，想要用就得自己有，动态库则是只存在一份，但是他把自己的名片（自己的物理地址以及内部函数的物理地址）发给那些想使用自己的进程。里的库函数去将该进程所有库的起始地址（虚拟地址）加上其内部的库函数的偏移量，用这个结果去修改进程代码区里那些调用了库函数的call后面的实际地址（其实是修改对GOT表中对应的地址），在这个时候才去做。PLT这种即用即读的方式和写时拷贝很像，延迟绑定和写时拷贝有相似的思想：用到时才真正分配/解析，提高效率。]]></description><category></category></item><item><title><![CDATA[ELF文件详解]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158649008</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158649008</guid><author>2301_79238713</author><pubDate>Thu, 05 Mar 2026 11:48:42 +0800</pubDate><description><![CDATA[#读取code.o的符号表。]]></description><category></category></item><item><title><![CDATA[库制作与原理]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158568698</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158568698</guid><author>2301_79238713</author><pubDate>Tue, 03 Mar 2026 11:55:48 +0800</pubDate><description><![CDATA[我们在前面的文章---]]></description><category></category></item><item><title><![CDATA[Ext2文件系统下的路径解析]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158284876</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158284876</guid><author>2301_79238713</author><pubDate>Mon, 23 Feb 2026 09:38:38 +0800</pubDate><description><![CDATA[目录本身也是文件，内容是"文件名→inode号"的映射表路径名解析就是不断重复：读目录 inode → 读目录数据块 → 找下一层名字 → 得到下一层 inode内核有 dcache 缓存最近访问的目录项，实际查找更快。]]></description><category></category></item><item><title><![CDATA[文件系统--Ext系列]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158265283</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158265283</guid><author>2301_79238713</author><pubDate>Sat, 21 Feb 2026 23:47:40 +0800</pubDate><description><![CDATA[计算机的数据的物理存储位置。]]></description><category></category></item><item><title><![CDATA[基础-IO]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158235418</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158235418</guid><author>2301_79238713</author><pubDate>Fri, 20 Feb 2026 13:14:18 +0800</pubDate><description><![CDATA[文件描述符fd其实就是文件（struct file）在文件描述符表里的下标进程PCB里存有描述被打开的文件的一个结构体（struct files_struct），这个结构体里有一个指针数组（struct file* fd_array[]），在这个指针数组里，存放着任何一个被当前进程打开的文件的id，而这个id就叫做文件描述符fd每个设备都可以有⾃⼰的read、write，虽然名字一样，但各自实现的方式不同。但通过。]]></description><category></category></item><item><title><![CDATA[MySQL--事务]]></title><link>https://blog.youkuaiyun.com/2301_79238713/article/details/158207985</link><guid>https://blog.youkuaiyun.com/2301_79238713/article/details/158207985</guid><author>2301_79238713</author><pubDate>Thu, 19 Feb 2026 17:52:42 +0800</pubDate><description><![CDATA[特性说明示例Atomocity 原子性要么全成功，要么全失败转账的两个步骤不可分割Consistency 一致性数据状态保持一致转账前后总金额不变Isolation 隔离性事务之间互不干扰两个人同时转账不会乱Durability 持久性一旦提交，永久保存系统重启数据还在维度没有事务有事务程序员关注网络、并发、崩溃、恢复...业务逻辑本身代码复杂度极高，要处理各种异常极低，只有BEGIN/COMMIT错误处理自己写补偿逻辑数据库自动ROLLBACK并发控制自己加锁、解锁。]]></description><category></category></item></channel></rss>