【北邮 操作系统】第十三章 I/O系统

article/2025/6/6 17:20:46

最后一章啦,完结撒花hhh

一、I/O设备的概念和分类

【1】I/O设备的概念:I/0设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。

【2】I/O设备的类型

  • 设备按传输速率分类:低速设备、中速设备、高速设备
  • 设备按信息交换的单位分类:块设备、字符设备
  • 设备按其共享属性分类:独占设备、共享设备、虚拟设备
  • 设备按其使用特性分类:存储设备、人机交互类外部设备、网络通讯设备

二、I/O控制器

【1】I/O设备的部件

  1. I/O设备的机械部件主要用来执行具体I/0操作。如我们看得见摸得着的鼠标/键盘的按钮:显示器的LED屏:移动硬盘的磁臂、磁盘盘面

  2. I/O设备的电子部件通常是一块插入主板扩充槽的印刷电路板。

【2】I/O控制器的概念

  1. CPU无法直接控制I/O设备的机械部件,因此I/0设备还要有一个电子部件作为CPU和I/0设备机械部件之间的“中介”,用于实现CPU对设备的控制。

  2. 这个电子部件就是I/0控制器,又称设备控制器。CPU可控制I/0控制器,又由I/0控制器来控制设备的机械部件。

【3】I/O设备的功能

【4】I/O控制器的组成

  1. 一个I/0控制器可能会对应多个设备;

  2. 数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/0;另一些计算机则采用I/0专用地址,即寄存器独立编址

【5】内存映像I/O和寄存器独立编址

三、I/O控制方式

  • 需要注意的问题

    1. 完成一次读/写操作的流程:

    2. CPU干预的频率;

    3. 数据传送的单位;

    4. 数据的流向;

    5. 主要缺点和主要优点。

  • 注:通道控制方式本校本科期间不做考察要求

3.1 程序直接控制方式

  1. 完成一次读/写操作的流程(key word:轮询)

  2. CPU干预的频率很频繁,I/0操作开始之前、完成之后需要CPU介入,并且在等待I/0完成的过程中CPU需要不断地轮询检查

  3. 数据传送的单位:每次读/写一个字

  4. 数据的流向:

    读操作(数据输入):I/O设备→CPU寄存器→内存

    写操作(数据输出):内存→CPU寄存器→I/O设备每个字的读/写都需要CPU的帮助

  5. 主要缺点和主要优点

    优点:实现简单。在读/写指令之后,加上实现循环检查的一系列指令即可(因此才称为“程序直接控制方式”)

    缺点:CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低

3.2 中断驱动方式

  1. 完成一次读/写操作的流程

  2. 引入中断机制

    1) 由于I/0设备速度很慢,因此在CPU发出读/写命令后,可将等待I/0的进程阻塞,先切换到别的进程执行。

    2) 当I/0完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。

    3) 处理中断的过程中,CPU从I/0控制器读一个字的数据传送到CPU寄存器,再写入主存。

    4) 接着,CPU恢复等待I/0的进程(或其他进程)的运行环境,然后继续执行

  3. .CPU干预的频率:

    每次I/0操作开始之前、完成之后需要CPU介入。等待I/0完成的过程中CPU可以切换到别的进程执行.

  4. 数据的流向:

    读操作(数据输入):I/O设备→CPU寄存器→内存

    写操作(数据输出):内存→CPU寄存器→I/0设备

  5. 数据传送的单位:每次读/写一个字

  6. 主要缺点和主要优点:

    优点:与“程序直接控制方式”相比,在“中断驱动方式”中,0控制器会通过中断信号主动报告I/0已完成,CPU不再需要不停地轮询。CPU和I/O设备可并行工作,CPU利用率得到明显提升。

    缺点:每个字在I/0设备与内存之间的传输,都需要经过CPU。而频繁的中断处理会消耗较多的CPU时间

3.3 DMA方式

  1. 与“中断驱动方式”相比,DMA方式(DirectMemoryAccess,直接存储器存取。主要用于块设备的I/O控制)有这样几个改进:

    数据的传送单位是“块”,不再是一个字、一个字的传送

    ②数据的流向是从设备直接放入内存,或者从内存直接到设备。不再需要CPU作为“快递小哥”

    ③仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。

  2. DMA控制器

                   1) DR(Data Register,数据寄存器):暂存从设备到内存,或从内存到设备的数据。 

                   2) MAR(MemoryAddress Register,内存地址寄存器):在输入时,MAR表示数据应放到内存中的什么位置:输出时MAR表示要输出的数据放在内存中的什么位置。

                   3) DC(Data Counter,数据计数器):表示剩余要读/写的字节数。

                   4) CR(Command Register,命令/状态寄存器):用于存放CPU发来的I/0命令,或设备的状态信息

     3. 完成一次读/写操作的流程:

     4. CPU干预的频率: 仅在传送一个或多个数据块的开始和结束时,才需要CPU干预

     5. 数据传送的单位:

每次读/写一个或多个块

(注意:每次读写的只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的)

     6. 数据的流向(不再需要经过CPU):

        读操作(数据输入):I/0设备 → 内存

        写操作(数据输出):内存I0设备

     7. 主要缺点和主要优点

        优点:数据传输以“块”为单位,CPU介入频率进一步降低。数据的传输不再需要先经过CPU再写入内存,数据传输效率进一步增加。CPU和I/O设备的并行性得到提升。

        缺点:CPU每发出一条I/0指令,只能读/写一个或多个连续的数据块。如果要读/写多个离散存储的数据块,或者要将数据分别写到不同的内存区域时,CPU要分别发出多条I/0指令,进行多次中断处理才能完成。

四、I/O软件的层次结构

【1】用户层软件

【2】设备独立性软件

  1. 设备独立性软件,又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。

     2. 主要实现的功能:

  • 向上层提供统一的调用接口(如read/write 系统调用);

  • 设备的保护:原理类似与文件保护,设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样;

  • 差错处理:设备独立性软件需要对一些设备的错误进行处理;

  • 设备的分配与回收

  • 数据缓冲区管理:可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异;

  • 建立逻辑设备名到物理设备名的映射关系,根据设备类型选择调用相应的驱动程序

【3】设备驱动程序

        主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化成特定设备“能听得懂”的一系列操作。包括设置设备寄存器;检查设备状态等

【4】中断处理程序

当I/0任务完成时,I/0控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。中断处理程序的处理流程如下:

可见,中断处理程序也会和硬件直接打交道。

五、输入/输出应用程序接口和设备驱动程序接口

显然,用户层的应用程序无法用一个统一的系统调用接口来完成所有类型设备的I/O

【1】输入/输出应用程序接口

【2】阻塞I/O与非阻塞I/O

  • 阻塞I/0:应用程序发出I/0系统调用,进程需转为阻塞态等待。eg:字符设备接口 -- 从键盘读一个字符get

  • 非阻塞I/0:应用程序发出I/0系统调用,系统调用可迅速返回,进程无需阻塞等待。eg:块设备接口 -- 往磁盘写数据 write

【3】设备驱动程序接口

  • 操作系统规定好设备驱动程序的接口标准,各厂商必须按要求开发设备驱动程序

  • 不同的操作系统,对设备驱动程序接口的标准各不相同。

  • 设备厂商必须根据操作系统的接口要求,开发相应的设备驱动程序,设备才能被使用

六、I/O核心子系统

因此I/0核心子系统要实现的功能其实就是中间三层要实现的功能

需要学习的部分:

6.1 I/O调度与设备保护

  1. I/0调度:用某种算法确定一个好的顺序来处理各个I/0请求。如:磁盘调度,当多个磁盘I/0请求到来时,用某种调度算法确定满足I/0请求的顺序。同理,打印机等设备也可以用先来先服务算法、优先级算法、短作业优先等算法来确定I/0调度顺序。不再赘述。

  2. 设备保护:操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)。在UNIX系统中,设备被看做是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问某个设备时,系统根据FCB中记录的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能。(参考“文件保护”小节),不再赘述。

6.2 假脱机技术

【1】什么是脱机技术

  1. 手工操作阶段:主机直接从I/0设备获得数据,由于设备速度慢,主机速度很快。人机速度矛盾明显,主机要浪费很多时间来等待设备。

  2. 批处理阶段引入了脱机输入/输出技术(用磁带完成):

  3. 为什么称为“脱机” -- 脱离主机的控制进行的输入/输出操作。

  4. 引入脱机技术后,缓解了CPU与慢速I/O设备的速度矛盾。另一方面,即使CPU在忙碌,也可以提前将数据输入到磁带;即使慢速的输出设备正在忙碌,也可以提前将数据输出到磁带。

【2】假脱机技术

“假脱机技术”,又称“SPOOLing 技术”是用软件的方式模拟脱机技术。 SPOOLing 系统的组成如下:

        1. 输入井和输出井:在磁盘上开辟出两个存储区域--“输入井”和“输出井“

                1) “输入井”模拟脱机输入时的磁带,用于收容I/0设备输入的数据;

                2) "输出井”模拟脱机输出时的磁带,用于收容用户进程输出的数据.

        2. 输入进程与输出进程:要实现SPO0Ling技术,必须要有多道程序技术的支持。系统会建立“输入进程”和“输出进程

                1) "输入进程”模拟脱机输入时的外围控制机;

                2) "输出进程”模拟脱机输出时的外围控制机.

        3. 输入缓冲区与输出缓冲区:输入缓冲区和输出缓冲区是在内存中的缓冲区

                1) 在输入进程的控制下,“输入缓冲区”用于暂存从输入设备输入的数据,之后再转存到输入井中

                2) 在输出进程的控制下,输出缓冲区”用于暂存从输出井送来的数据,之后再传送到输出设备上

【3】共享打印机原理分析

       1. 当多个用户进程提出输出打印的请求时,系统会答应它们的请求,但是并不是真正把打印机分配给他们,而是由假脱机管理进程为每个进程做两件事:

                1) 在磁盘输出井中为进程申请一个空闲缓冲区(也就是说,这个缓冲区是在磁盘上的),并将要打印的数据送入其中;

                2) 为用户进程申请一张空白的打印请求表,并将用户的打印请求填入表中(其实就是用来说明用户的打印数据存放位置等信息的),再将该表挂到假脱机文件队列上。

     2. 当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到输出缓冲区,再输出到打印机进行打印。用这种方式可依次处理完全部的打印任务

     3. 虽然系统中只有一个台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现对打印机的共享。

      4. SPOOLing 技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备

6.3 设备的分配与回收*

注:本小节了解即可不做考察要求

【1】设备分配时应考虑的因素

     1. 设备的固有属性可分为三种:独占设备、共享设备、虚拟设备

  • 独占设备 -- 一个时段只能分配给一个进程(如打印机)

  • 共享设备 -- 可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备而微观上交替使用。

  • 虚拟设备 -- 采用 SPO0Ling技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用 SPOOLing 技术实现的共享打印机)

     2. 设备的分配算法:先来先服务、优先级高者优先、短任务优先......

     3. 从进程运行的安全性上考虑,设备分配有两种方式:

  • 安全分配方式:为进程分配一个设备后就将进程阻塞,本次I/0完成后才将进程唤醒。(eg:考虑进程请求打印机打印输出的例子)

  • 优点:破坏了“请求和保持”条件,不会死锁

  • 缺点:对于一个进程来说,CPU和I/O设备只能串行工作

  • 不安全分配方式:进程发出I/0请求后,系统为其分配I/0设备,进程可继续执行,之后还可以发出新的I/O请求。只有某个I0请求得不到满足时才将进程阻塞。

  • 优点:进程的计算任务和I/0任务可以并行处理,使进程迅速推进

  • 缺点:有可能发生死锁(死锁避免、死锁的检测和解除)

【2】静态分配与动态分配

  • 静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源

  • 动态分配:进程运行过程中动态申请设备资源

【3】设备分配管理中的数据结构

  1. 设备控制表(DCT):系统为每个设备配置一张DCT,用于记录设备情况

  2. 控制器控制表(COCT):每个设备控制器都会对应一张COCT。操作系统根据COCT的信息对控制器进行操作和管理。

  3. 通道控制表(CHCT):每个通道都会对应一张CHCT。操作系统根据CHCT的信息对通道进行操作和管理。

  4. 系统设备表(SDT):记录了系统中全部设备的情况,每个设备对应一个表目。

【4】设备分配的步骤

①根据进程请求的物理设备名查找SDT(注:物理设备名是进程请求分配设备时提供的参数)

②根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列中,不忙碌则将设备分配给进程。

③根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。

④根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程。

【5】设备分配的改进

①根据进程请求的逻辑设备名查找SDT(注:用户编程时提供的逻辑设备名其实就是“设备类型”

②查找SDT,找到用户进程指定类型的、并且空闲的设备,将其分配给该进程。操作系统在逻辑设备表(LUT)中新增一个表项

③根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。 ④根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程

6.4 缓冲区管理

【1】什么是缓冲区、缓冲区有什么作用

  1. 缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。
  2. 使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本)
  3. 一般情况下,更多的是利用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区
  4. 缓冲区的作用:

【2】单缓冲

  1. 单缓冲区:假设某用户进程请求某种块设备读入若干块的数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)

  2. 注意:当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出

补充:由于缓冲区是共享资源,生产者与消费者在使用缓冲区时必须互斥。如果消费者尚未取走缓冲区中的数据,即使生产者又生产出新的数据,也无法将它送入缓冲区,生产者等待。如果为生产者与消费者设置了两个缓冲区,便能解决这一问题。

【3】双缓冲

  1. 双缓冲区:为了加快输入和输出速度,提高设备利用率,人们又引入了双缓冲区机制,也称为缓冲对换(Buffer Swapping)。在设备输入时,先将数据送入第一缓冲区,装满后便转向第二缓冲区。此时OS可以从第一缓冲区中移出数据,并送入用户进程。接着由CPU对数据进行计算。(若题目中没有特别说明,一个缓冲区的大小就是一个块)

  2. 若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输。

【4】循环缓冲

  1. 将多个大小相等的缓冲区链接成一个循环队列。

  2. 以下图示中,橙色表示已充满数据的缓冲区,绿色表示空缓冲区

【5】缓冲池

   1. 缓冲池由系统中共用的缓冲区组成。这些缓冲区按使用状况可以分为:

  • 空缓冲队列

  • 装满输入数据的缓冲队列(输入队列)

  • 装满输出数据的缓冲队列(输出队列)

   2. 根据一个缓冲区在实际运算中扮演的功能不同,又设置了四种工作缓冲区:

  • 用于收容输入数据的工作缓冲区(hin)

  • 用于提取输入数据的工作缓冲区(sin)

  • 用于收容输出数据的工作缓冲区(hout)

  • 用于提取输出数据的工作缓冲区(sout)

   3. 缓冲区可以工作在如下四种工作方式:

  • 输入进程请求输入数据:从空缓冲队列中取出一块作为收容输入数据的工作缓冲区(hin)。冲满数据后将缓冲区挂到输入队列队尾。

  • 计算进程想要取得一块输入数据:从输入队列中取得一块冲满输入数据的缓冲区作为”提取输入数据的工作缓冲区(sin)“。缓冲区读空后挂到空缓冲区队列。

  • 计算进程想要将准备好的数据冲入缓冲区:从空缓冲队列中取出一块作为“收容输出数据的工作缓冲区(hout)"。数据冲满后将缓冲区挂到输出队列队尾。

  • 输出进程请求输出数据:从输出队列中取得一块冲满输出数据的缓冲区作为"提取输出数据的工作缓冲区(sout)"。缓冲区读空后挂到空缓冲区队列。

The End


http://www.hkcw.cn/article/rIEJwTkagY.shtml

相关文章

机器学习——放回抽样

为了构建树集成模型,需要一种叫做有放回采样的技术。 以4个标记为演示,分别是红色、黄色、绿色和蓝色,用一个黑色的袋子把这四个标记的例子放进去,然后从这个袋子里有放回地抽取四次,抽出一个标记,结果是绿…

组相对策略优化(GRPO):原理及源码解析

文章目录 PPO vs GRPOPPO的目标函数GRPO的目标函数KL散度约束与估计ORM监督RL的结果PRM监督RL的过程迭代RL算法流程 GRPO损失的不同版本GRPO源码解析 DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models PPO vs GRPO PPO的目标函数 J P P O…

黑马Java面试笔记之 集合篇(算法复杂度+ArrayList+)

一. 算法复杂度分析 1.1 时间复杂度 时间复杂度分析:来评估代码的执行耗时的 常见的复杂度表示形式 常见复杂度 1.2 空间复杂度 空间复杂度全称是渐进空间复杂度,表示算法占用的额外存储空间与数据规模之间的增长关系 二. 数组 数组(Array&a…

AI数据集构建:从爬虫到标注的全流程指南

AI数据集构建:从爬虫到标注的全流程指南 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 AI数据集构建:从爬虫到标注的全流程指南摘要引言流程图:数据集构建全生命周期一、数据采…

飞算 JavaAI 赋能老项目重构:破旧立新的高效利器

许多企业的 Java 老项目面临着代码陈旧、架构落后、维护困难等问题。老项目重构势在必行,却又因庞大的代码量、复杂的业务逻辑让开发团队望而却步。 老项目重构困境重重 传统的 Java 老项目往往在长期的迭代和维护中积累了诸多问题。一方面,代码质量堪…

服装产品属性描述数据集(19197条),AI智能体知识库收集~

今天再来分享一个关于服装产品属性描述数据集!可用户AI训练,AI智能体知识库! 一、数据集介绍 电商文案优化 / 属性智能识别 / 服装产品描述数据训练首选资源 1、数据规模: 共计 19197 条 2、文件格式: Excel格式 3、字…

Java程序员学从0学AI(四)

一、前言 在上一篇文章中,我们学习了SpringAI种的Advisor组件,这个是一个类似AOP的,用于增强大模型调用的组件。今天我们继续学习新的组件提示词:Prompts 二、Prompts 1、简介 提示词是我们和大模型交互的入口,我们…

从 iPhone 备份照片: 保存iPhone图片的5种方法

随着智能手机越来越融入我们的生活,我们的照片已成为我们设备上最有价值的数据形式之一。然而,iPhone内部存储空间仍然有限,因此我们需要将iPhone中的照片备份到另一个地方,以释放空间并确保珍贵的图像记忆的安全。阅读本指南&…

AU3110 10W、7.5V至18V、无电感器、立体声D类扬声器放大器(替代TPA3110)

1.特性 ● 输出功率 - 2 x 11W 12V,6Ω,THDN 1% - 2 x 15.5W 12V,4Ω,THDN 1% - 1 x 21W 12V,4Ω,THDN 1% - THDN< 0.04% 12V,6Ω,1W, 1kHz ● 供电电压范围 - 7.5V-18V 低导通阻抗 RDs(on):140mΩ ● 固定增益&#xff1a; - 26dB ● 低静态功耗 - > 90% Class D效率 ●…

系统设计面试利器:The System Design Primer开源项目介绍

引言 在当今软件工程领域&#xff0c;系统设计能力已经成为评判一名高级工程师技术水平的重要标准。无论是顶级科技公司的技术面试&#xff0c;还是实际工作中设计大规模分布式系统&#xff0c;掌握系统设计知识都是必不可少的技能。今天我们要深入探讨的是 GitHub 上一个备受…

一周学会Pandas2之Python数据处理与分析-Pandas2数据绘图与可视化

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Pandas 集成了 Matplotlib&#xff0c;提供了简单高效的绘图接口&#xff0c;使数据可视化变得直观便捷。本指南将详…

Go语言快速入门(基础语法与面向对象OOP)

文章目录 阅读前置条件golang环境安装golang特点第一个Go程序Go语言变量声明常量Golang多返回值的三种写法go函数import匿名与别名导包方式指针defer关键字结束(defer会在结束时调用&#xff0c;类似Java的finally)slice切片数组与动态数组的定义动态数组与切片的四种声明方式s…

用AI(Deepseek)做了配色网站-功能介绍【欢迎体验】

前言 前面分享了一篇文章&#xff1a;关于用AI做了一个配色网站&#xff0c;并讲了如何“结合AI开发想法”实现作品。 以下是文章链接&#xff1a; 一天时间&#xff0c;我用AI(DeepSeek)做了一个配色网站 当时为第一版本&#xff0c;网站的很多功能和细节还有很多完善的地方…

【2025年B卷】OD-100分-斗地主之顺子

专栏订阅🔗 -> 赠送OJ在线评测 斗地主之顺子 问题描述 卢小姐喜欢玩斗地主扑克牌游戏。在这个游戏中,扑克牌由小到大的顺序为:3、4、5、6、7、8、9、10、J、Q、K、A、2。玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等多种组合。 顺子是一种常见的出牌方…

题山采玉: Day1

嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的pa…

优化 Transformer 模型:基于知识蒸馏、量化技术及 ONNX

Transformer 模型非常强大&#xff0c;但往往太大太慢&#xff0c;不适合实时应用。为了解决这个问题&#xff0c;我们来看看三种关键的优化技术&#xff1a;知识蒸馏、量化和ONNX 图优化。这些技术可以显著减少推理时间和内存使用。 为了说明每种技术的利弊&#xff0c;我们以…

C++实现图形化2048小游戏

目录 一、游戏规则二、步骤实现(一) SDL库的安装(二) 初始化游戏界面1. 后台数字模型2 显示模型2.1 SDL库的使用2.1.1 窗口渲染2.1.2 矩形绘制 2.2 SDL-ttf库的使用2.2.1 设置字体属性2.2.2 创建纹理图层2.2.3 绘制文字 (三) 随机生成2个数字&#xff08;2或4&#xff09;(四) …

Halcon光度立体法

1、光度立体法&#xff0c;可用于将对象的三维形状与其二维纹理&#xff08;例如打印图像&#xff09;分离。需要用不同方向而且已知照明方向的多个光源&#xff0c;拍摄同一物体的至少三张图像。请注意&#xff0c;所有图像的相机视角必须相同。 物体的三维形状主要被计算为三…

北方局地40℃又来了 干热烤验来临

天气即将变热,南北方的高温特点各不相同。北方是干热型高温,南方则是闷热型高温。全国大部分地区降水稀少,仅局部有雨。从今天夜间到后两天,降水预报图上将出现大片无降水区域,雨水不再是天气舞台的主要角色。气温成为焦点,南北方30℃以上的高温将连成一片,部分地区还将…

【后端架构师的发展路线】

后端架构师的发展路线是从基础开发到技术领导的系统性进阶过程&#xff0c;需融合技术深度、架构思维和业务洞察力。以下是基于行业实践的职业发展路径和关键能力模型&#xff1a; 一、职业发展阶梯‌ 初级工程师&#xff08;1-3年&#xff09;‌ 核心能力‌&#xff1a;掌…