操作系统I/O系统详解:从设备控制器到SPOOLing技术
1. 为什么I/O系统是操作系统里最“接地气”的章节很多人学操作系统前面几章讲进程调度、内存管理、文件系统还能靠画状态图、算页面置换勉强跟上。一到第六章输入输出系统画风突变一堆控制器、总线、中断、DMA、设备驱动、缓冲、SPOOLing名词密度极高而且彼此之间看起来没什么逻辑关系。我当年第一次学这一章的时候最大的困惑就是——这些东西到底是怎么串起来的后来做嵌入式开发和后端性能优化才慢慢回过味来I/O系统其实是操作系统里最“接地气”的一章。你写的每一行日志、每一次网络请求、每一块磁盘读写背后都是这一章的内容在支撑。进程调度再精妙内存管理再优雅最终都要落到“数据怎么从外部设备搬进内存、怎么从内存搬出去”这个物理问题上。这一章的核心矛盾只有一个CPU和外部设备的速度差距太大了。CPU执行一条指令是纳秒级而一次磁盘I/O是毫秒级差了六个数量级。如果不做任何处理CPU大部分时间都在等设备利用率极低。整个I/O系统的设计从硬件到软件从控制器到驱动程序从中断到DMA从缓冲到SPOOLing本质上都是在解决这一个矛盾。所以这篇内容我会按照“硬件→中断→驱动→软件层次→缓冲→磁盘调度→SPOOLing”这条主线把第六章的知识点串成一条完整的链路。每个环节我都会解释“为什么需要它”以及“它解决了什么问题”而不是干巴巴地罗列定义。适合正在学操作系统原理的在校生也适合工作后想回头补一补底层知识的开发者。2. 从设备控制器到I/O端口硬件层到底在干什么2.1 设备控制器CPU和设备之间的“翻译官”外部设备本身通常不能直接和CPU通信。原因很简单CPU的总线协议、时序、电压标准和一台打印机、一块磁盘、一个键盘完全不一样。所以每类设备都需要一个中间层——设备控制器Device Controller。你可以把设备控制器理解成一个“翻译官”。CPU说“我要读第100号扇区的数据”控制器负责把这个命令翻译成磁盘能听懂的信号控制磁头移动、盘片旋转把数据读出来再通过总线送回内存。CPU不需要知道磁盘内部是怎么转的只需要知道往控制器的寄存器里写什么值。设备控制器里通常有几类寄存器数据寄存器CPU和设备之间搬运数据的缓冲区控制寄存器CPU往这里写命令比如“读”“写”“启动”状态寄存器设备往这里写状态比如“就绪”“忙”“出错”这里有个关键设计控制器可以同时管理多个设备。比如一个SCSI控制器可以挂好几块磁盘一个USB控制器可以接多个USB设备。控制器内部会维护每个设备的状态CPU只需要和控制器打交道不用直接面对每个设备。2.2 I/O端口的编址方式统一编址和独立编址CPU要访问控制器的寄存器就需要给它们分配地址。这里有两种经典方案统一编址Memory-Mapped I/O把控制器的寄存器映射到内存地址空间里。CPU用访问内存的指令就能读写寄存器比如MOV R0, [0xFFFF0000]。优点是编程简单不需要专门的I/O指令缺点是占用了内存地址空间。独立编址Port-Mapped I/O控制器寄存器有独立的I/O地址空间CPU需要用专门的I/O指令比如x86的IN和OUT。优点是内存地址空间完整保留缺点是需要额外的指令集支持。提示现代系统大多采用统一编址因为内存地址空间足够大而且编程模型更统一。但在一些嵌入式平台上独立编址仍然常见。2.3 轮询、中断和DMA三种I/O控制方式的演进CPU怎么知道设备什么时候完成了工作这里有三种方式代表了三个阶段的演进。轮询PollingCPU不断读取状态寄存器看设备是否就绪。这种方式实现简单但CPU利用率极低——它什么都不干就在那里反复问“好了没”。在早期系统或者对实时性要求极高的场景下会用但通用系统里基本淘汰了。中断Interrupt设备完成工作后主动发一个信号给CPUCPU暂停当前程序跳转到中断处理程序。这样CPU在设备工作期间可以去做别的事情利用率大幅提升。但中断也有开销每次中断都要保存现场、跳转、恢复现场如果数据量很大频繁中断会把CPU拖垮。DMADirect Memory Access让一个专门的DMA控制器直接在设备和内存之间搬运数据不需要CPU逐字节参与。CPU只需要告诉DMA控制器“从设备读N个字节到内存地址X”然后就可以去干别的。DMA搬完之后再发一个中断通知CPU。这是现代系统的主流方式。我用一个生活类比来解释这三者的区别轮询就像你在快递站门口一直等什么都不干中断就像你留了电话快递到了人家打给你DMA就像你请了一个跑腿小哥让他帮你把快递从站点搬到家里搬完了再告诉你一声。3. 中断机制I/O系统的“神经系统”3.1 中断的完整处理流程中断是I/O系统的核心机制必须把它的流程吃透。一次中断从发生到处理完成大致经过这些步骤设备发出中断请求设备完成工作或发生错误时通过中断请求线向CPU发送信号。CPU响应中断CPU在执行完当前指令后检查中断请求线如果有未屏蔽的中断就准备响应。保存现场CPU把当前程序的计数器、寄存器状态保存到栈或专门的保存区。识别中断源CPU需要知道是哪个设备发的中断。有两种方式向量中断每个设备有唯一的中断向量号CPU直接跳转和非向量中断CPU轮询所有设备找出是谁。执行中断处理程序跳转到对应的处理程序完成数据搬运、状态清除等工作。恢复现场处理完成后恢复之前保存的寄存器状态继续执行被中断的程序。这里有个容易忽略的细节中断屏蔽。有些代码段不允许被中断打断比如修改关键数据结构时。CPU提供了屏蔽字可以临时关闭某些中断。但要注意屏蔽时间不能太长否则会丢失中断或导致设备超时。3.2 中断优先级和多重中断现实中会有多个设备同时发中断的情况。比如你一边拷贝文件磁盘中断一边打字键盘中断一边还有网络数据到达网卡中断。CPU需要决定先处理谁这就是中断优先级。优先级的设计原则通常是实时性要求高的设备优先级高。比如键盘、鼠标的优先级高于磁盘因为人对输入延迟敏感而磁盘慢一点没关系。但也不能一概而论比如磁盘中断如果被延迟太久可能导致数据丢失。多重中断是指CPU在处理一个中断的过程中允许被更高优先级的中断打断。这需要更复杂的现场保存机制因为可能有多层嵌套。现代CPU通常支持中断嵌套但嵌套层数有限制太深会导致栈溢出。3.3 中断处理程序的设计要点写中断处理程序有几个铁律尽量短中断处理程序执行期间同级或低级中断被屏蔽太长会影响系统响应。所以通常只做最紧急的事剩下的交给下半部比如Linux的softirq、tasklet、工作队列。不能睡眠中断上下文没有进程上下文不能调用可能阻塞的函数。注意并发中断可能在任何时刻发生访问共享数据要加锁。清除中断标志处理完必须清除设备的中断标志否则会反复触发。注意这些是通用原则不同操作系统的具体实现有差异但核心思想一致。4. 设备驱动程序硬件和操作系统之间的“粘合剂”4.1 驱动程序到底在做什么设备驱动程序是操作系统里最“脏”的部分因为它直接和硬件打交道。不同厂商的设备寄存器布局、命令格式、时序要求都不一样驱动程序就是把这些差异封装起来给上层提供一个统一的接口。驱动程序的典型工作包括初始化设备上电后配置寄存器设置工作模式发送命令把上层的读写请求翻译成设备能理解的命令处理中断设备完成或出错时在中断处理程序里做相应处理管理缓冲区在设备和上层之间搬运数据错误处理设备出错时重试、复位或上报4.2 驱动程序的两种典型结构字符设备驱动以字节流的方式访问比如键盘、串口。通常实现open、close、read、write等接口。数据不需要缓冲来一个字节处理一个字节。块设备驱动以数据块为单位访问比如磁盘。通常实现read、write、ioctl等接口。数据需要经过缓冲区因为块设备有寻道和旋转延迟随机访问代价高。这两种结构的差异源于设备特性字符设备的数据是流式的没有“块”的概念块设备的数据是结构化的可以随机访问任意块。4.3 驱动程序开发的常见坑我做过几年嵌入式驱动开发踩过的坑可以写一本书。这里挑几个最典型的坑一寄存器读写顺序。有些设备的寄存器有严格的读写顺序比如必须先写地址寄存器再写数据寄存器。如果编译器优化打乱了顺序设备就会出错。解决办法是用volatile关键字或者内存屏障。坑二中断共享。多个设备可能共享一根中断线中断处理程序必须能区分是不是自己的设备发的中断。如果判断错误可能导致中断丢失或误处理。坑三并发访问。驱动程序的代码可能被多个进程同时调用也可能被中断打断。共享数据结构必须加锁但锁的粒度要合适太粗影响性能太细容易死锁。坑四电源管理。设备可能随时被挂起或唤醒驱动程序必须正确处理这些状态转换否则会导致设备无法工作或系统崩溃。5. I/O软件层次结构从用户请求到硬件操作5.1 四层结构的职责划分操作系统的I/O软件通常分为四层从上到下依次是层次职责典型例子用户层I/O软件提供库函数和系统调用接口printf、scanf、read、write设备独立性软件统一接口、缓冲、分配、错误处理设备名映射、权限检查设备驱动程序与硬件直接交互磁盘驱动、网卡驱动中断处理程序处理设备中断中断服务例程这个分层设计的核心思想是抽象用户不需要知道磁盘是怎么转的只需要调用read设备独立性软件不需要知道具体设备的寄存器怎么操作只需要调用驱动程序的统一接口。5.2 设备独立性软件的关键功能这一层是I/O系统里最“聪明”的部分它做了几件很重要的事统一命名用户用逻辑设备名比如/dev/sda访问设备这一层负责映射到具体的物理设备。这样设备换了用户程序不用改。缓冲管理在设备和上层之间加缓冲区解决速度不匹配和传输单位不匹配的问题。设备分配多个进程竞争同一个设备时决定谁先用、用多久。独占设备需要排队共享设备可以并发。错误处理设备出错时这一层决定是重试、上报还是忽略。上层不需要关心具体错误细节。5.3 系统调用到硬件操作的完整链路以一次read系统调用为例看看数据是怎么从磁盘到用户缓冲区的用户程序调用read(fd, buf, count)陷入内核系统调用处理程序根据fd找到对应的文件结构和设备设备独立性软件检查权限、参数决定用哪个驱动程序驱动程序把请求翻译成磁盘命令写入控制器寄存器磁盘控制器执行命令把数据读入控制器缓冲区磁盘发中断中断处理程序把数据从控制器缓冲区搬到内核缓冲区设备独立性软件把数据从内核缓冲区搬到用户缓冲区返回用户态read返回实际读取的字节数这条链路上每一步都可能出错所以错误处理贯穿始终。6. 缓冲技术解决速度矛盾的“蓄水池”6.1 为什么需要缓冲缓冲的核心目的是解决速度不匹配和传输单位不匹配的问题。速度不匹配CPU和内存很快磁盘和网络很慢。如果没有缓冲CPU每次读写都要等设备效率极低。有了缓冲CPU可以先把数据写到缓冲区然后继续干别的设备慢慢从缓冲区取数据。传输单位不匹配磁盘按块传输比如4KB而用户程序可能一次只读几个字节。如果没有缓冲每次读几个字节都要启动一次磁盘I/O代价太高。有了缓冲可以一次读一整块用户程序从缓冲区里慢慢取。6.2 单缓冲、双缓冲和缓冲池单缓冲只有一个缓冲区。设备往缓冲区写数据时CPU不能读CPU读数据时设备不能写。两者必须串行效率提升有限。双缓冲两个缓冲区。设备写缓冲区A时CPU可以读缓冲区B设备写缓冲区B时CPU可以读缓冲区A。两者可以并行效率明显提升。缓冲池多个缓冲区组成一个池按需分配。适合并发场景多个进程可以同时使用不同的缓冲区。我用一个生活类比单缓冲就像一个人既当厨师又当服务员做菜和上菜不能同时进行双缓冲就像厨师和服务员分开做菜和上菜可以并行缓冲池就像餐厅有多个服务员可以同时服务多桌客人。6.3 缓冲对性能的实际影响缓冲对性能的影响可以用一个简单模型估算。假设设备传输一块数据需要T1CPU处理一块数据需要T2。单缓冲下总时间大约是T1 T2串行。双缓冲下总时间大约是max(T1, T2)并行。如果T1远大于T2双缓冲的提升不明显如果T1和T2接近双缓冲几乎能把吞吐量翻倍。提示缓冲不是越多越好。缓冲区占用内存而且缓冲区太大可能导致数据延迟增加。实际系统中需要根据设备特性和负载情况调整缓冲区大小。7. 磁盘调度算法让磁头少跑冤枉路7.1 磁盘访问时间的组成磁盘访问时间由三部分组成寻道时间磁头移动到目标磁道的时间通常最长旋转延迟目标扇区旋转到磁头下方的时间平均是半圈的时间传输时间读写数据的时间通常最短寻道时间占大头所以磁盘调度的核心目标是减少寻道时间也就是让磁头的移动距离尽可能短。7.2 经典调度算法对比算法思想优点缺点FCFS按请求顺序服务公平、简单寻道时间长SSTF优先服务最近的请求寻道时间短可能导致饥饿SCAN磁头单向移动沿途服务兼顾公平和效率边缘请求等待久C-SCAN单向扫描回头不服务等待时间均匀回头开销LOOK到最后一个请求就回头减少无效移动实现稍复杂C-LOOK单向LOOK等待时间均匀实现复杂SSTF的问题是可能导致“饥饿”如果不断有靠近磁头当前位置的请求到来远处的请求永远得不到服务。SCAN和C-SCAN通过强制磁头移动方向解决了这个问题。7.3 实际系统中的调度策略现代磁盘包括SSD的调度策略比教科书复杂得多。几个实际考虑请求合并相邻扇区的请求可以合并成一个大的请求减少寻道次数。优先级读请求通常优先于写请求因为读是同步的进程在等写可以异步先写到缓存。截止时间有些请求有截止时间比如实时系统的I/O必须优先处理。SSD的特殊性SSD没有寻道和旋转延迟但有机身擦除和写入放大的问题。所以SSD的调度策略更关注磨损均衡和垃圾回收而不是寻道优化。注意教科书上的调度算法是基础实际系统会根据硬件特性做大量优化。理解原理比记住算法更重要。8. SPOOLing技术用软件“虚拟”出多台设备8.1 SPOOLing的核心思想SPOOLingSimultaneous Peripheral Operations On-Line的核心思想是用磁盘上的缓冲区模拟独占设备让多个进程可以“同时”使用同一台设备。最典型的例子是打印机。打印机是独占设备一次只能服务一个进程。如果没有SPOOLing多个进程要打印就得排队而且排队期间进程可能一直阻塞。有了SPOOLing进程把打印数据写到磁盘上的假脱机文件然后就可以继续干别的。一个后台进程守护进程负责从假脱机文件里取数据真正发送给打印机。这样每个进程都感觉自己独占了一台打印机实际上大家共享同一台物理设备。8.2 SPOOLing系统的组成SPOOLing系统通常由三部分组成输入井和输出井磁盘上的缓冲区存放待处理的数据输入缓冲区和输出缓冲区内存中的缓冲区缓和CPU和磁盘的速度差异输入进程和输出进程负责在缓冲区和设备之间搬运数据输入进程把设备数据读到输入井用户进程从输入井读数据用户进程把数据写到输出井输出进程把输出井的数据写到设备。8.3 SPOOLing的适用场景和局限SPOOLing适合独占设备的共享比如打印机、绘图仪。对于共享设备比如磁盘本身就可以并发访问不需要SPOOLing。局限也很明显SPOOLing需要磁盘空间而且数据要经过磁盘中转延迟比直接访问设备高。所以对实时性要求高的场景不适合。9. 从理论到实践几个值得动手的实验9.1 用strace观察I/O系统调用strace是Linux下观察系统调用的利器。写一个简单的C程序打开文件、读取、写入、关闭然后用strace跟踪strace -e traceopen,read,write,close ./myprogram你会看到openat、read、write、close等系统调用的完整参数和返回值。这能帮你把教科书上的“系统调用接口”和实际系统行为对应起来。9.2 用iostat观察磁盘I/O性能iostat可以显示磁盘的读写速率、IOPS、等待时间等指标iostat -x 1重点关注%util设备利用率、await平均等待时间、r/s和w/s每秒读写次数。如果%util接近100%说明磁盘是瓶颈。9.3 写一个简单的字符设备驱动如果你有Linux内核开发环境可以尝试写一个最简单的字符设备驱动实现open、read、write、release四个接口用一个内核缓冲区模拟设备。加载模块后用cat和echo测试。这个实验能让你真正理解驱动程序的结构和中断处理流程。不过要注意内核编程风险高建议在虚拟机里做。10. 几个容易混淆的概念辨析学这一章的时候有几个概念特别容易搞混我当年也绕了很久。中断和异常中断是外部设备触发的异常是CPU内部指令执行出错触发的比如除零、缺页。两者处理机制类似但来源不同。缓冲和缓存缓冲是为了解决速度不匹配数据通常只使用一次缓存是为了提高访问速度数据可能被多次使用。缓冲通常在设备层缓存在文件系统层。SPOOLing和缓冲缓冲是在内存里临时存放数据SPOOLing是在磁盘上模拟设备。缓冲解决速度问题SPOOLing解决共享问题。DMA和通道DMA控制器只能搬运数据通道是一个更强大的处理器可以执行通道程序控制多台设备。通道在现代系统中已经很少见但概念上很重要。11. 我在实际工作中踩过的I/O相关坑最后分享几个实际工作中遇到的I/O问题都是教科书上不会写的。坑一缓冲区大小设置不当导致性能骤降。有一次做网络服务默认缓冲区太小每个请求都要多次系统调用QPS上不去。后来把缓冲区调到合适大小性能提升了好几倍。教训是缓冲区大小要根据实际负载调整不能照搬默认值。坑二忘记清除中断标志导致中断风暴。写驱动时中断处理程序里忘了清除设备的中断标志结果设备反复触发中断CPU被中断淹没系统几乎卡死。教训是中断处理程序里一定要清除中断源。坑三磁盘调度算法选择不当导致延迟抖动。在一个实时数据采集系统里用了默认的调度算法结果偶尔出现几百毫秒的延迟抖动。后来换成带截止时间的调度策略抖动明显减小。教训是不同场景需要不同的调度策略不能一套配置打天下。坑四SPOOLing队列积压导致磁盘满。打印服务用SPOOLing结果某个进程疯狂提交打印任务把磁盘写满了导致系统其他服务也受影响。教训是SPOOLing队列要有配额和监控不能无限增长。这些坑的共同点是理论告诉你“是什么”实践告诉你“会出什么问题”。第六章的知识点不难难的是在实际系统中把它们正确地组合起来并且处理好各种边界情况。多动手、多看日志、多分析性能数据比死记硬背算法有效得多。

相关新闻

华为桌面云部署与性能调优实战经验分享

华为桌面云部署与性能调优实战经验分享

1. 桌面云到底解决了什么问题第一次接触桌面云这个概念,很多人脑子里冒出来的第一个疑问就是:这东西跟远程桌面有什么区别?我直接装个远程控制软件不就行了吗?说实话,我刚开始也是这么想的。直到有一次参与了一个终端集…

2026/10/17 0:39:03 阅读更多 →
Coord4.0:面向数据工程的高精度坐标转换命令行工具

Coord4.0:面向数据工程的高精度坐标转换命令行工具

简介:Coord4.0 坐标转换工具是一款面向GIS从业者、测绘工程师及地理信息专业学习者的实用型桌面软件,专为解决WGS84、北京54、西安80等主流坐标系间高精度转换需求而设计,广泛适用于地图制图、工程勘测、导航数据处理及教学实践等场景。资源包…

2026/10/17 0:38:03 阅读更多 →
前端模态框实战:焦点陷阱、滚动锁定与无障碍访问

前端模态框实战:焦点陷阱、滚动锁定与无障碍访问

1. 从“弹窗”到“模态框”:一个被低估的前端基础组件很多人第一次接触前端开发,写的第一个交互组件就是弹窗。点一下按钮,屏幕上浮出一块内容,再点一下关闭,完事。看起来简单到不值一提,但真正在项目里用过…

2026/10/17 0:38:03 阅读更多 →

最新新闻

AI整合安全实战:从提示词注入防御到系统级硬约束

AI整合安全实战:从提示词注入防御到系统级硬约束

直接说结论:AI整合项目里,提示词工程环节的安全策略,决定了整个系统的下限。我在多个接入大型语言模型的项目里见过同一类事故——提示注入、系统提示词被撬、训练数据被套话、输出未经校验就进了业务流程。这些问题单看都不严重,…

2026/10/17 4:43:14 阅读更多 →
多智能体编排六种模式详解:从顺序链到反思循环

多智能体编排六种模式详解:从顺序链到反思循环

做多智能体应用时间久了,你会发现真正难的从来不是单个智能体怎么写,而是多个智能体怎么协作。MAF系列写到这里是第13篇,前几篇陆续讲过工具调用、记忆管理、上下文控制,这篇集中把“智能体编排”这件事拆开聊。所谓编排&#xff…

2026/10/17 4:43:14 阅读更多 →
纯JavaScript实现RGB、HSV与十六进制颜色互转及工程实践

纯JavaScript实现RGB、HSV与十六进制颜色互转及工程实践

1. 颜色换算在真实项目里到底解决什么问题前端开发做到一定年头,你一定会碰到颜色格式打架的情况。设计师在 Figma 里给你一个#3B82F6,后端接口返回的却是rgb(59, 130, 246),而某个取色器插件复制出来的是hsv(217, 76%, 96%)。三种写法描述的…

2026/10/17 4:43:14 阅读更多 →
Android端KIMI API流式输出实战:OkHttp+Kotlin Flow实现SSE响应

Android端KIMI API流式输出实战:OkHttp+Kotlin Flow实现SSE响应

简介:本资源是一套面向Android开发者的KIMI大模型API流式响应集成实践工程,适用于需要在移动端实现低延迟、渐进式AI内容输出的中高级开发者。项目完整封装了KIMI API的异步流式调用逻辑,涵盖请求构建、SSE解析、UI线程安全更新及错误重试机制…

2026/10/17 4:43:14 阅读更多 →
malloc底层原理与动态内存管理实战指南

malloc底层原理与动态内存管理实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 4:43:14 阅读更多 →
金融数据服务中台架构实战:从多源聚合到实时推送全解析

金融数据服务中台架构实战:从多源聚合到实时推送全解析

先交代下背景。我最近在负责一个代号叫financial-services的内部项目,说白了就是一套面向金融场景的数据服务中台:上游接行情源、资讯源、账户流水,下游对接移动端、Web 和量化脚本。这个项目名字看起来很简单,但真正落地的时候牵…

2026/10/17 4:42:13 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →