news 2026/10/6 2:48:30

【万字长文】操作系统原理期末试题深度剖析与内核级拓展(卷八)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【万字长文】操作系统原理期末试题深度剖析与内核级拓展(卷八)

【万字长文】操作系统原理期末试题深度剖析与内核级拓展(卷八)

博主寄语:
操作系统(OS)是计算机系统的“灵魂”,也是考研408和大厂校招笔试、面试的绝对重镇。很多同学在复习时,只停留在“背题-对答案”的浅层阶段,忽略了题目背后庞大的知识网络和底层设计哲学。

本系列博客将对经典期末试题进行降维打击式的深度解剖。本文作为卷八,不仅提供标准答案,更将每道题作为切入点,横向拓展核心概念,纵向深挖Linux内核底层原理,补充实战代码与面试真题。全文超万字,建议收藏、点赞并反复阅读,将其作为你的操作系统“通关秘籍”。


目录

  1. 引言:如何建立操作系统的“三维视角”?
  2. 第一章:I/O架构、设备管理与磁盘调度的底层逻辑
  3. 第二章:内存管理、虚拟内存与地址映射的硬核推演
  4. 第三章:进程管理、调度算法与状态机的数学之美
  5. 第四章:并发控制、死锁深渊与PV操作实战
  6. 第五章:文件系统、目录结构与VFS虚拟文件系统
  7. 第六章:系统架构、中断机制与内核态/用户态的跨越
  8. 结语与期末/考研/面试备考指南

引言:如何建立操作系统的“三维视角”?

在学习操作系统时,我们必须建立“三维视角”,才能做到融会贯通,在考试和面试中降维打击对手:

  1. 用户/程序员视角:这个功能对上层应用意味着什么?(如:文件路径、逻辑设备名、系统调用API、多线程并发)。
  2. OS内核视角:内核是如何通过数据结构和算法实现这个功能的?(如:页表、信号量、inode、PCB、红黑树)。
  3. 硬件底层视角:底层硬件提供了什么支持?(如:MMU、TLB、中断控制器、DMA、磁盘磁头与柱面)。

带着这三个视角,我们开始卷八的深度剖析。


第一章:I/O架构、设备管理与磁盘调度的底层逻辑

1.1 通道技术:解放CPU的I/O处理机

【原题 - 单选1】通道又被称为I/O处理器,用于实现( )之间的信息传输。
A、主存与外设 B、CPU与外设 C、外设与外设 D、CPU与辅存
【答案】A

【深度解析】

在计算机体系结构中,I/O控制方式经历了从“CPU全程参与”到“硬件高度自治”的演进:

  1. 程序直接控制:CPU死循环查询设备状态,利用率极低。
  2. 中断驱动:设备准备好后发中断,CPU被打断,开销大。
  3. DMA(直接内存访问):DMA控制器接管总线,实现主存与外设之间的直接数据搬运,CPU只在开始和结束时参与。
  4. 通道(Channel):一种专用的硬件处理器(I/O Processor)。它有自己的指令集(通道命令字CCW),能独立执行通道程序,管理多个DMA控制器。

核心结论:通道和DMA的核心目的都是实现主存与外设之间的直接数据传输,从而将CPU从繁重的I/O搬运中彻底解放出来。

【内核拓展:现代Linux的I/O栈与io_uring】

在现代Linux内核中,传统的通道概念已被更先进的总线架构(如PCIe)和DMA引擎取代。近年来,Linux引入了io_uring机制,通过共享的环形缓冲区(Ring Buffer)在用户态和内核态之间零拷贝地传递I/O请求和完成事件,彻底消除了传统epoll和read/write系统调用的上下文切换开销,将I/O性能推向了硬件极限。


1.2 共享设备与独占设备的并发控制

【原题 - 单选2】磁盘是可共享设备,每一时刻( )进程与它交换信息。
A、允许有两个 B、可以有任意多个 C、最多有1个 D、至少有1个
【答案】C

【深度解析】
  • 独占设备:如打印机。一旦分配给某个进程,其他进程必须等待,直到释放。
  • 共享设备:如磁盘。在一段时间内,多个进程可以交替访问磁盘的不同磁道/扇区。
  • 微观本质:虽然宏观上磁盘是共享的,但在任何一个绝对的物理时刻(微秒级),磁盘的磁头只能定位在一个柱面上,只能为最多1个进程进行数据读写。OS通过磁盘调度算法和请求队列,将并发的I/O请求串行化执行。

1.3 驱动调度与磁盘访问时间

【原题 - 简答41,填空29】什么是驱动调度?磁头移到指定柱面的时间称(寻道)时间,指定扇区转到磁头位置的时间称(旋转延迟)时间。

【深度解析】

驱动调度(Disk Scheduling)的目的是优化磁头移动,减少平均寻道时间。
磁盘I/O总时间 =寻道时间(最耗时,机械运动) +旋转延迟时间(盘片旋转) +传输时间(读写数据)。

经典调度算法对比:

  • FCFS(先来先服务):公平,但磁头来回穿梭,寻道极长。
  • SSTF(最短寻道时间优先):优先服务最近的请求,可能导致远处请求饥饿。
  • SCAN(电梯算法):单向扫描到底再反向,兼顾效率与公平。
  • C-SCAN(循环扫描):单向扫描,到底后直接快速返回起点,提供更均匀的等待时间。

第二章:内存管理、虚拟内存与地址映射的硬核推演

2.1 虚拟存储器的魔法与“抖动”现象

【原题 - 单选3,填空27】可扩充主存容量的存储管理方案是(页式虚拟)。选择页面调度算法应尽量避免(抖动/颠簸)现象。

【深度解析】
  • 虚拟内存的扩充:固定分区、可变分区、基本分页都要求进程一次性全部装入物理内存,无法扩充容量。只有请求分页虚拟存储利用局部性原理,允许页面按需调入/换出,从逻辑上打破了物理内存的限制。
  • 抖动(Thrashing):如果分配给进程的物理块太少,或者多道程序度过高,进程会频繁发生缺页中断。系统大部分时间都花在页面的换入换出(磁盘I/O)上,CPU利用率断崖式下跌。
  • 解决抖动:采用工作集模型(Working Set Model),动态跟踪进程最近一段时间内实际访问的页面集合,确保分配给进程的物理块数≥ \ge≥工作集大小。

2.2 连续分配与动态重定位

【原题 - 双选22,填空26】(可变分区)和(固定分区)要求逻辑地址与主存区域连续。可变分区采用(动态)重定位。

【深度解析】
  • 连续分配:固定分区和可变分区都要求作业在内存中占用连续的物理空间。
  • 动态重定位:在可变分区中,为了支持紧凑技术(Compaction)解决外部碎片,必须采用动态重定位。程序装入时不修改代码中的地址,而是在执行时由硬件MMU(内存管理单元)通过基址寄存器动态加上偏移量。这样OS在移动进程时,只需修改基址寄存器即可。

2.3 综合题:分页地址映射的硬核计算

【原题 - 综合44】主存640K,分160块。作业4页,分配到2、4、1、5块。计算页大小、页表、起始地址。

【深度推演与手算】

1. 计算页面大小:

  • 主存总容量 = 640 KB
  • 物理块总数 = 160 块
  • 页面大小 = 物理块大小=640 KB / 160 = 4 KB 640 \text{ KB} / 160 = 4 \text{ KB}640KB/160=4KB。
  • 4 KB =2 12 2^{12}212字节,因此页内偏移量占 12 位。

2. 构建页表:

逻辑页号 (Page No.)物理块号 (Frame No.)
02
14
21
35

3. 计算每页在主存中的物理起始地址:

  • 物理地址 = 物理块号× \times×块大小
  • 0页:2 × 4 K = 8 K 2 \times 4\text{K} = 8\text{K}2×4K=8K。转换为16进制:8 × 1024 = 8192 = 0x2000 8 \times 1024 = 8192 = \text{0x2000}8×1024=8192=0x2000。
  • 1页:4 × 4 K = 16 K = 0x4000 4 \times 4\text{K} = 16\text{K} = \text{0x4000}4×4K=16K=0x4000。
  • 2页:1 × 4 K = 4 K = 0x1000 1 \times 4\text{K} = 4\text{K} = \text{0x1000}1×4K=4K=0x1000。
  • 3页:5 × 4 K = 20 K = 0x5000 5 \times 4\text{K} = 20\text{K} = \text{0x5000}5×4K=20K=0x5000。
【内核拓展:x86_64的四级页表】

在现代64位Linux中,虚拟地址空间高达256TB。为了管理庞大的页表,硬件采用了四级页表结构(PGD→ \to→PUD→ \to→PMD→ \to→PTE)。每次地址转换需要访问4次内存,因此TLB(Translation Lookaside Buffer,转译后备缓冲器)成为了提升性能的关键硬件缓存。


第三章:进程管理、调度算法与状态机的数学之美

3.1 进程、程序与作业的本质辨析

【原题 - 填空24、25,简答42,判断36】程序获得(工作区)和(PCB)后创建进程。两个进程对应的程序(可以相同)。阐述作业、程序、进程的关系。

【深度解析】
  • 程序(Program):静态的指令和数据集合,存储在磁盘上。
  • 进程(Process):程序在数据集上的一次动态执行过程。进程实体 = 程序段 + 数据段(工作区) +PCB(进程控制块)。
  • 一对多关系:两个同时存在的进程可以对应同一个程序。例如,你同时打开了3个Word文档,操作系统会创建3个独立的Word进程,它们共享同一份磁盘上的WINWORD.EXE代码(通过共享内存和写时复制技术),但拥有各自独立的PCB和数据区。
  • 作业(Job):用户视角的概念,是用户提交给系统的一个完整任务。在批处理系统中,一个作业可能包含多个程序,OS通过作业调度将其装入内存并创建进程。

3.2 调度算法的数学推导:SJF与HRRN

【原题 - 单选6,填空30】短作业优先调度次序。响应比计算。

【深度推演】

1. 短作业优先(SJF)推演(单选6):

  • J1:8:00到达,运行2h。
  • J2:8:45到达,运行1h。
  • J3:9:30到达,运行0.25h (15分钟)。
  • 执行过程:
    • 8:00 只有J1到达,J1开始执行,10:00结束。
    • 10:00 时,J2和J3都在后备队列中。根据SJF,J3(0.25h) < J2(1h),J3先执行,10:15结束。
    • 10:15J2执行,11:15结束。
  • 次序:J1→ \to→J3→ \to→J2。

2. 响应比高优先(HRRN)计算(填空30):

  • 公式:R p = 等待时间 + 运行时间 运行时间 = 1 + 等待时间 运行时间 R_p = \frac{\text{等待时间} + \text{运行时间}}{\text{运行时间}} = 1 + \frac{\text{等待时间}}{\text{运行时间}}Rp​=运行时间等待时间+运行时间​=1+运行时间等待时间​
  • 题目:9:00进入输入井(到达),运行1h,10:00被选中。
  • 等待时间 = 10:00 - 9:00 = 1h。
  • R p = ( 1 + 1 ) / 1 = 2 R_p = (1 + 1) / 1 = \mathbf{2}Rp​=(1+1)/1=2。

3.3 时间片轮转(RR)的动态调整策略

【原题 - 单选4,简答45】分时系统采用(时间片轮转)。经常中断的进程分配较短时间片,为什么?

【深度解析】

标准的RR算法对所有进程一视同仁,分配固定的时间片Q QQ。但在实际工程中,OS会进行动态调整(如多级反馈队列 MLFQ):

  • I/O密集型进程(经常中断):它们通常只运行很短时间就会发起I/O请求并主动阻塞。如果给它们很长的时间片,纯属浪费。分配较短的时间片(或赋予高优先级),能让它们快速获得CPU,发起I/O后立刻让出,从而提高I/O设备的利用率和系统的交互响应速度。
  • CPU密集型进程(中断少):它们需要长时间连续计算。分配较长的时间片,可以减少上下文切换的频率,降低系统开销,提高CPU的有效吞吐量。
【内核拓展:Linux CFS调度器】

现代Linux彻底抛弃了传统的时间片概念,采用了完全公平调度器(CFS)。它通过红黑树维护所有进程的vruntime(虚拟运行时间)。每次调度时,直接挑选vruntime最小的进程(即“最吃亏”的进程)投入运行。I/O密集型进程因为经常睡眠,其vruntime增长缓慢,醒来后会被CFS优先调度,完美实现了上述的动态调整哲学。


第四章:并发控制、死锁深渊与PV操作实战

4.1 信号量的取值范围与互斥

【原题 - 单选5】三个进程共享一个资源,每次只允许一个使用,PV操作管理时信号量S的可能值是( )。
A、1,0,-1,-2 B、2,0,-1,-2 C、1,0,1 D、3,2,1,0
【答案】A

【深度解析】
  • 初值:1个资源,初值S = 1 S = 1S=1。
  • 执行过程:
    • 进程1执行P(S),S = 0 S = 0S=0,进入临界区。
    • 进程2执行P(S),S = − 1 S = -1S=−1,阻塞。
    • 进程3执行P(S),S = − 2 S = -2S=−2,阻塞。
  • 取值范围:最大值为初值1,最小值为1 − 3 = − 2 1 - 3 = -21−3=−2。因此范围是1, 0, -1, -2。
  • 物理意义:S > 0 S > 0S>0表示可用资源数;S ≤ 0 S \le 0S≤0时,∣ S ∣ |S|∣S∣表示阻塞队列中等待的进程数。

4.2 死锁的预防与银行家算法的避坑

【原题 - 单选12,填空31,简答43】12个资源,4个进程,分配情况… 防止死锁的策略。

【深度推演与纠错】

原题解析修正:

  • 资源总数 = 12。
  • 已分配:P1(2), P2(3), P3(4), P4(1)。已分配总和 = 10。剩余可用 = 2。
  • 最大需求:P1(4), P2(6), P3(7), P4(4)。
  • 计算各进程的剩余需求(Need = Max - Alloc):
    • P1 Need = 4 - 2 =2
    • P2 Need = 6 - 3 =3
    • P3 Need = 7 - 4 =3
    • P4 Need = 4 - 1 =3
  • 安全性分析:当前剩余2个资源。只有P1的Need(2)≤ \le≤剩余(2)。
  • 结论:必须将剩余的2个资源全部分配给P1,满足P1的要求。P1执行完毕后释放其占用的4个资源,系统才能继续推进。如果分配给P2/P3/P4,谁都无法完成,直接死锁。因此应满足P1的申请。(注:原题提供的选项D可能有误,正确逻辑必须是满足P1)。

死锁预防策略(填空31):
破坏四大必要条件:

  1. 静态分配(破坏请求和保持):运行前一次性申请所有资源。
  2. 按序分配(破坏循环等待):资源全局编号,必须按递增顺序申请。
  3. 剥夺式分配(破坏不可剥夺):高优先级可强抢低优先级的资源。

4.3 综合题:PV操作解决数据竞争(Data Race)

【原题 - 综合46】进程A:N=N+1;进程B:print(N); N=0。指出临界区,错误原因,写PV代码。

【深度剖析】

1. 临界区识别:

  • 进程A的临界区:N = N + 1;
  • 进程B的临界区:print(N); N = 0;(这两个操作必须原子执行,否则打印后N被A修改,再清零会导致A的修改丢失)。

2. 与时间有关的错误(Data Race):
假设当前 N=1。

  • B执行print(N),打印出 1。
  • 此时发生中断,A被调度,执行N = N + 1,N变成 2。
  • A时间片用完,B恢复执行N = 0,N变成 0。
  • 结果:A的加1操作被B的清零操作覆盖(丢失更新),N的最终状态错误。

3. PV操作标准代码:

var N: integer := 1; var mutex: semaphore := 1; // 互斥信号量,初值为1 cobegin process A: begin while true do begin P(mutex); // 进入临界区前加锁 N := N + 1; V(mutex); // 离开临界区后解锁 end; end; process B: begin while true do begin P(mutex); // 进入临界区前加锁 print(N); N := 0; V(mutex); // 离开临界区后解锁 end; end; coend;
【硬件视角:为什么 N=N+1 不是原子的?】

在汇编层面,N = N + 1会被编译为三条指令:

  1. LOAD R1, [N](从内存读入寄存器)
  2. ADD R1, 1(寄存器加1)
  3. STORE [N], R1(写回内存)
    如果两个线程交错执行这三条指令,必然导致数据覆盖。在现代编程中,我们通常使用原子操作(Atomic Operations)或互斥锁(Mutex)来解决,而不是手动写PV操作。

第五章:文件系统、目录结构与VFS虚拟文件系统

5.1 文件的逻辑结构与记录式文件

【原题 - 单选9,填空33】用户存取记录式文件的最小单位是(记录)。MS-DOS文件的逻辑结构是(流式)文件。

【深度解析】
  • 流式文件(无结构):如Linux/Windows下的普通文件,OS将其视为一连串的字节流。存取的最小单位是字节/字符。MS-DOS和现代UNIX均采用此结构,将解析工作交给应用程序。
  • 记录式文件(有结构):由一系列定长或变长的记录组成(如数据库表的一行)。存取的最小单位是记录。早期OS(如OS/360)常用,现代OS多交由DBMS在应用层实现。

5.2 目录结构、命名冲突与文件保护

【原题 - 单选10,双选18、19、21,判断38】多级目录可以(解决命名冲突)。MS-DOS树形目录分支是(子目录),叶是(文件)。防止共享破坏采用(用户分类)和(访问权限分类)。信箱是(软件)资源。

【深度解析】
  • 多级目录(树型目录):完美解决了单级目录的命名冲突问题。只要不在同一个父目录下,文件名就可以相同。在MS-DOS/Linux中,分支节点是目录(子目录),叶子节点是文件。
  • 文件保护机制:
    • 访问控制矩阵/ACL:为每个文件设置读/写/执行权限(如Linux的rwxr-xr-x)。
    • 用户分类:区分文件主、同组用户、其他用户。
    • 注意:文件加锁(Lock)主要用于并发控制,而不是防止恶意破坏的安全保护。
  • 信箱通信(Message Passing):信箱(Mailbox)是OS内核在内存中分配的一块缓冲区,用于进程间传递消息。它是软件资源,绝非硬件资源。

5.3 打开与关闭文件的内核本质

【原题 - 简答40】“打开文件”和“关闭文件”操作的功能是什么?

【深度解析】
  • 打开文件(Open):
    • 将文件的控制信息(FCB / inode)从磁盘读入内存的活跃文件目录表中。
    • 在进程的打开文件表(files_struct)中创建一个表项,返回文件描述符(fd)。
    • 目的:避免每次读写都去磁盘查找目录,极大提高访问速度。
  • 关闭文件(Close):
    • 将内存中修改过的FCB/inode写回磁盘(保证数据一致性)。
    • 释放内存中的FCB,清空进程打开文件表中的表项,释放文件描述符。
【内核拓展:Linux VFS的“一切皆文件”】

Linux通过虚拟文件系统(VFS)抽象了所有文件系统(Ext4, NTFS, FAT32, 甚至Socket和管道)。VFS定义了统一的file_operations结构体,使得用户态调用read(fd)时,内核能根据 fd 找到对应的底层驱动函数,实现了完美的设备无关性。


第六章:系统架构、中断机制与内核态/用户态的跨越

6.1 目态与管态、访管指令

【原题 - 单选7,判断34】访管指令(只能在目态)执行。目态与管态记录在(PSW)中。

【深度解析】
  • 管态(内核态 / Kernel Mode / Ring 0):最高特权级,可执行所有指令(包括特权指令,如清中断、修改页表)。OS内核运行在此态。
  • 目态(用户态 / User Mode / Ring 3):最低特权级,只能执行非特权指令。用户程序运行在此态。
  • 访管指令(Trap / System Call):如int 0x80或syscall。它是非特权指令,用户程序在目态下执行它,故意触发一个软中断(陷阱),使CPU从目态切换到管态,从而陷入内核请求服务。
  • 状态记录:当前CPU处于什么态,记录在程序状态字(PSW / EFLAGS / CPSR)的特权级标志位中,而不是PCB中(PCB只是在上下文切换时保存PSW的副本)。

6.2 中断优先级与中断屏蔽

【原题 - 判断35】中断优先级由硬件确定,系统只能按既定次序响应。(×)

【深度解析】
  • 硬件排队器:决定了中断的静态优先级(如:掉电 > 硬件故障 > 时钟 > I/O)。
  • 中断屏蔽(Interrupt Mask):OS可以通过修改PSW中的中断屏蔽位,动态改变中断的响应次序。例如,在处理某个关键I/O中断时,屏蔽同级或低级中断,实现中断嵌套;或者屏蔽所有中断(关中断)来保护内核临界区。因此,“只能按既定次序”是错误的。

6.3 可再入程序与纯代码

【原题 - 简答39】什么是可再入程序?有什么特点?

【深度解析】

可再入程序(Reentrant Code),又称纯代码(Pure Code),是指可以被多个进程/线程同时并发调用,且执行结果不会相互干扰的程序。
两大核心特点:

  1. 只读性:代码段是只读的,执行过程中绝对不能修改自身的指令或全局静态变量。
  2. 独立工作区:每个调用者必须提供独立的数据区/栈空间(局部变量),用于保存自己的执行状态。
【面试真题:可再入 vs 线程安全】
  • 可再入:强调代码本身的属性(无状态、纯函数),不依赖任何锁机制,天然支持并发。
  • 线程安全(Thread-Safe):代码可能包含全局状态,但通过互斥锁(Mutex)或原子操作保护了临界区,从而在多线程下表现正确。可再入代码一定是线程安全的,但线程安全的代码不一定是可再入的(如使用了不可重入的锁或信号处理函数)。

结语与期末/考研/面试备考指南

通过对卷八这30多道题的“扒皮式”解析,我们贯穿了操作系统的核心脉络。从通道的硬件自治,到虚拟内存的魔法;从PV操作的严谨,到VFS的抽象,每一个知识点都是构建计算机大厦的基石。

给期末考生的“抢分”建议:

  1. 死磕计算题:分页地址映射(块大小、物理地址计算)、响应比计算、SJF调度次序、信号量取值范围。这些是必考的拉分项,必须保证100%正确。
  2. 掌握判断改错的“陷阱”:如“访管指令只能在管态执行(错,是目态)”、“目态记录在PCB中(错,是PSW)”。这些是老师最爱挖坑的地方,要理解硬件底层的真实机制。
  3. 简答题要“分点+关键词”:如答打开文件的功能,必须写出“读入FCB到内存”、“建立联系”;答可再入程序,必须写出“纯代码/不修改自身”、“独立工作区”。

给考研/面试者的“进阶”建议:

  1. 理解“为什么”:不要只背“时间片轮转用于分时系统”,要理解它如何通过上下文切换制造“并发”的 illusion;不要只背“多级目录解决重名”,要理解inode与目录项的映射关系。
  2. 关注现代OS的演进:去了解现代的Linux CFS调度器、io_uring、eBPF、NVMe多队列、Btrfs/ZFS文件系统。当面试官问你“文件打开”时,如果你能讲出“VFS的dentry缓存和file_struct的引用计数”,你将直接绝杀。
  3. 动手实践:在Linux下用strace跟踪一个cat命令,看看它底层的open,read,write系统调用;用objdump反编译一段C代码,看看N=N+1到底是不是原子的;用top命令观察进程的上下文切换(cs指标)。

互动时间:
你在复习操作系统时,遇到最让你头疼的概念是什么?是PV操作的死锁,还是虚拟内存的TLB?欢迎在评论区留言,博主会逐一解答!

下期预告:《操作系统原理期末试题深度剖析(卷九)》将聚焦死锁的银行家算法手算与磁盘调度算法的极限推演,敬请期待!

如果这篇万字长文对你有所帮助,请务必一键三连(点赞、收藏、关注),你的支持是我持续输出硬核技术文章的最大动力!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 2:48:11

怎么让 AI 引擎引用你的内容?抓取、理解、引用三阶段讲清楚

AI 引擎引用你的内容&#xff0c;本质上要过三道关&#xff1a;爬虫抓得到、模型读得懂、答案愿意引&#xff1b;三关缺一&#xff0c;内容就只是躺在服务器上的文本。本文把这三阶段拆开讲清楚&#xff0c;每一步给出可落地的配置位置和自查方法。 第一阶段&#xff1a;抓取—…

作者头像 李华
网站建设 2026/10/6 2:48:10

学Simulink——基于滑模变结构控制(SMC)的双向DC-AC逆变器鲁棒控制仿真

目录 手把手教你学Simulink——基于滑模变结构控制(SMC)的双向DC-AC逆变器鲁棒控制仿真 一、 引言:当“参数漂移”遇上“模式切换”——滑模控制如何化身双向变流器的“金刚不坏之身”? 二、 问题本质:双向DC-AC的“核心挑战”与“SMC协同逻辑” 1. 核心挑战 2. 协同逻…

作者头像 李华
网站建设 2026/10/6 2:46:42

SpringMvc——注意事项

在实际开发中 spring 会扫描包 springmvc也会去扫描controller的包&#xff0c;所以在写扫描路径的时候&#xff0c;需要将springmvc扫描路径写成 com.xxx.controller 然后spring也去写具体的路径&#xff0c;或者将springmvc扫描的controller排除如果是按照上面的方法&#x…

作者头像 李华
网站建设 2026/10/6 2:45:17

视觉处理为什么会慢?解码、预处理、模型推理、后处理和编码的性能拆解

GPU 利用率很低不一定是模型慢&#xff1b;利用率很高也不代表整条视频任务足够快。用户等待的是从输入视频到可播放结果的总时间&#xff0c;而这段时间由读取解码、预处理、推理、后处理、绘制和编码共同组成。本文用固定视频任务说明怎样定位瓶颈&#xff0c;而不是只报一个…

作者头像 李华