操作系统 | 学习笔记 | | 王道 | 5.1 I/O管理概述

news2024/9/21 14:39:46

5.1 I/O管理概述

img

5.1.1 I/O设备

注:块设备可以寻址,但是字符设备是不可寻址的

I/O设备是将数据输入到计算机中,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件;

  1. 设备的分类
    • 按使用特性分类:
      • 人机交互类外部设备:鼠标、键盘、打印机等,用于人机交互。数据传输速度慢。
      • 存储设备:移动硬盘、光盘等,用于数据存储。数据传输速度快。
      • 网络通信设备:调制解调器等,用于网络通信。数据传输速度介于上述二者之间。
    • 按信息交换的单位分类:
      • 块设备。信息交换以数据块为单位。它属于有结构设备,如磁盘等。磁盘设备的基本特征是传输速率较高、可寻址,即对它可随机地读/写任意一块。
      • 字符设备。信息交换以字符为单位。它属于无结构类型,如交互式终端机、打印机等。
    • 按传输速率分类:
      • 低速设备。传输速率仅为每秒几字节到数百字节的一类设备,如键盘、鼠标等。
      • 中速设备。传输速率为每秒数千字节至数万字节的一类设备,如激光打印机等。
      • 高速设备。传输速率在数百千字节至千兆字节的一类设备,如磁盘机、光盘机等。
  2. I/O接口

img

I/O接口(又称为设备控制器)位于CPU与设备之间,它既要与CPU通信,又要与设备通信,还要具有按CPU发来的命令去控制设备工作的功能,主要由三部分组成,如下图所示。

img

  • 组成部分:

    • 设备控制器与CPU的接口:实现控制器与CPU之间的通信

      该接口有三类信号线:数据线、地址线和控制线。

      数据线与两类寄存器相连:数据寄存器(存放从设备送来的输入数据或从CPU送来的输出数据)和控制/状态寄存器(存放从CPU送来的控制信息或设备的状态信息)。

    • 设备控制器与设备的接口:实现控制器与设备之间的通信

      一个设备控制器可以连接一个或多个设备,因此控制器中有一个或多个设备接口。

      每个接口中都存在数据、控制和状态三种类型的信号。

    • I/O逻辑:负责识别CPU发出的命令,并向设备发出命令

      用于实现对设备的控制。它通过一组控制线与CPU交互,对从CPU收到的I/O命令进行译码。

      CPU启动设备时,将启动命令发送给控制器,同时通过地址线把地址发送给控制器,由控制器的I/O逻辑对地址进行译码,并相应地对所选设备进行控制。

  • 主要功能:

    • 接受和识别CPU发出的指令(控制寄存器)
    • 向CPU报告设备的状态(状态寄存器)
    • 数据交换(数据寄存器暂存数据)
    • 地址识别(由I/O逻辑实现)
    • 数据缓冲
    • 差错控制

img

3.I/O端口

I/O端口是指设备控制器中可被CPU直接访问的寄存器,主要有以下三类寄存器。

  • 寄存器类型:

    • 数据寄存器:实现CPU和外设之间的数据缓冲。
    • 状态寄存器:获取执行结果和设备的状态信息,以让CPU知道是否准备好。
    • 控制寄存器:由CPU写入,以便启动命令或更改设备模式。
  • 实现I/O端口通信,有两种编址方法:

    img

    • 独立编址。为每个端口分配一个I/O端口号,所有I/O端口形成I/O端口空间,普通用户程序不能对其进行访问,只有操作系统使用特殊的I/O指令才能访问端口。
    • 统一编址。又称内存映射I/O,每个端口被分配唯一的内存地址,且不会有内存被分配这地址,通常分配给端口的地址靠近地址空间的顶端。
5.1.2 I/O控制方式

设备管理的主要任务之一是控制设备和内存或CPU之间的数据传送。外围设备与内存之间的输入/输出控制方式有以下4种。

img

  1. 程序直接控制方式

    如下图所示,计算机从外部设备读取的每个字,CPU需要对外设状态进行循环检查,直到确定该字已经在I/O控制器的数据寄存器中。

    • 工作流程:

      img

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

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

    • 数据的流向:

      • 读操作(数据输入):I/O设备→CPU→内存
      • 写操作(数据输出):内存→CPU→I/O设备
      • 每个字的读/写都需要CPU的帮助
    • 优点:实现简单。在读/写指令之后,加上实现循环检查的一系列指令即可

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

    这种方式不会让进程阻塞

    /*实际上,程序直接控制方式(也称为忙等待或轮询)在某些情况下确实会让进程阻塞,但这里的“阻塞”与传统意义上的操作系统中的阻塞(如等待I/O操作完成而挂起进程)有所不同。在程序直接控制方式中,进程不会因等待I/O操作完成而被操作系统挂起或切换到其他进程,但它会停留在当前的循环中,不断检查I/O操作的完成情况,这同样会导致进程无法执行其他任务,从而形成一种“阻塞”的效果,尽管这种阻塞是在用户态内发生的,并未涉及操作系统层面的进程调度。
    
    详细解释如下:
    
    忙等待(Busy Waiting):在程序直接控制方式中,当进程需要执行I/O操作时,它不会通过系统调用来请求操作系统完成I/O,而是会直接在用户态中循环检查I/O设备的状态。如果I/O操作尚未完成,进程会继续循环检查,而不是被操作系统挂起或切换到其他进程。这种持续的检查操作占用了CPU资源,但进程并没有进行实质性的工作(如处理数据、计算等),因此被视为一种“忙等待”或“轮询”。
    CPU资源浪费:由于进程在忙等待期间持续占用CPU资源,而并没有进行有效的计算或处理,这会导致CPU资源的浪费。特别是当I/O操作需要较长时间才能完成时,这种浪费尤为明显。
    响应性差:由于进程被“阻塞”在忙等待循环中,它无法及时响应其他事件或请求,如用户输入、定时器中断等。这会导致程序的响应性变差,用户体验下降。
    并非真正的阻塞:然而,需要注意的是,程序直接控制方式中的“阻塞”与传统意义上的阻塞(如等待I/O操作完成而挂起进程)是不同的。在程序直接控制方式中,进程并没有被操作系统挂起或切换到其他进程,它仍然在运行中,只是由于持续进行无效的忙等待而无法执行其他任务。
    综上所述,程序直接控制方式虽然不会让进程在操作系统层面被挂起或阻塞,但它通过忙等待的方式同样会导致进程无法执行其他任务,从而形成一种在用户态内的“阻塞”效果。因此,在实际应用中,我们通常会采用更高效的I/O控制方式(如中断驱动方式、DMA方式等)来避免这种不必要的资源浪费和性能下降。*/
    
  2. 中断驱动方式

    image-20240920185434228

    中断驱动方式的思想是,允许I/O设备主动打断CPU的运行并请求服务,从而"解放” CPU,使得其向I/O控制器发送读命令后可以继续做其他有用的工作。

    • 工作流程:
      • 引入中断机制。由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。
      • 当I/O完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。
      • 处理中断的过程中,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存。接着,CPU恢复等待I/O的进程(或其他进程)的运行环境,然后继续执行。

    ①CPU会在每个指令周期的末尾检查中断:
    ②中断处理过程中需要保存、恢复进程的运行环境,这个过程是需要一定时间开销的。可见,如果中断发生的须率太高,也会降低系统性能。

    • CPU干预的频率:每次I/O操作开始之前、完成之后需要CPU介入。等待I/O完成的过程中CPU可以切换到别的进程执行。
    • 数据传送单位:每次读/写一个字
    • 数据流向:
      • 读操作(数据输入):I/O设备→CPU→内存
      • 写操作(数据输出):内存→CPU→I/O设备
    • 优点:与“程序直接控制方式”相比,在“中断驱动方式”中,I/O控制器会通过中断信号主动报告I/O已完成,CPU不再需要不停地轮询。CPU和I/O设备可并行工作,CPU利用率得到明显提升。
    • 缺点:每个字在I/O设备与内存之间的传输,都需要经过CPU。而频繁的中断处理会消耗较多的CPU时间。

    这种方式会让进程阻塞

  3. DMA方式

    DMA(直接存储器存取)方式的基本思想是在I/O设备和内存之间开辟直接的数据交换通路,彻底“解放”CPU。下图为DMA工作流程。

    • 与“中断驱动方式”相比,DMA方式有这样几个改进:

      • ①数据的传送单位是“块”。不再是一个字、一个字的传送:
      • ②数据的流向是从设备直接放入内存,或者从内存直接到设备。不再需要CPU作为“快递小哥”。
      • ③仅在传送一个或多个数据块的开始和结束时,才需要CPU干预,数据传送通过DMA控制器完成。
    • DMA控制器组成:

      下图为DMA控制器的组成。

      image-20240919223615920

      DMA控制器中设置如下4类寄存器:

      • 数据寄存器(DR)。暂存从设备到内存或从内存到设备的数据。
      • 内存地址寄存器(MAR)。在输入时,它存放把数据从设备传送到内存的起始目标地址;在输出时,它存放由内存到设备的内存源地址。
      • 数据计数器(DC)。存放本次要传送的字(节)数,剩余要读/写的字节数。
      • 命令/状态寄存器(CR)。接收从CPU发来的I/O命令、有关控制信息,或设备的状态。
    • CPU干预的频率:仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。

    • 数据传送单位:每次读/写一个或多个块(注意:每次读写的只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的)

    • 数据流向:

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

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

  4. 通道控制方式

    通道:I/O通道是指专门负责输入输出的处理机。是一种硬件,可以理解为是“弱鸡版的CPU”。通道可以识别并执行一系列通道指令。

    与CPU相比,通道可以执行的指令很单一,并且通道程序是放在主机内存中的,也就是说通道与CPU共享内存

    • 完成一次读写流程:

      image-20240919223709244

    • CPU干预的频率:极低,通道会根据CPU的指示执行相应的通道程序,只有完成一组数据块的读/写后才需要发出中断信号,请求CPU干预。

    • 数据传送的单位:每次读/写一组数据块

    • 数据的流向(在通道的控制下进行)

      • 读操作(数据输入):I/O设备→内存
      • 写操作(数据输出):内存→I/O设备
    • 缺点:实现复杂,需要专门的通道硬件支持

    • 优点:CPU、通道、I/O设备可并行工作,资源利用率很高。

5.1.4 I/O软件层次结构

为了更好地设计 I/O 软件,采用 层次式结构 的 I/O 软件;

image-20230921104928744

一个比较合理的层次划分如上图所示。整个I/O软件可以视为具有4个层次的系统结构,各层次功能如下:

  1. 用户层软件(产生I/O请求,格式化I/O,SPOOLing)

    实现了与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作。

    用户层软件将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务

    img

  2. 设备独立性软件(映射;保护;分块;缓冲;分配)

    img

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

    • 功能:

      • ① 向上层提供统一的调用接口(如read/write系统调用)
      • ② 设备的保护
      • ③ 差错处理
      • ④ 设备的分配与可收
  • ⑤ 数据缓冲区管理

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

    为实现设备独立性而引入了逻辑设备和物理设备这两个概念。在应用程序中,使用逻辑设备名来请求使用某类设备;而在系统实际执行时,必须将逻辑设备名映射成物理设备名使用。

    使用逻辑设备名好处

  • ①增加设备分配的灵活性

    • ②易于实现I/O重定向,指用于I/O操作的设备可以更换(即重定向),而不必改变应用程序。

    设备独立性软件需要通过“逻辑设备表(LUT,Logical Unit Table)”来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序。

    I/O设备被当做一种特殊的文件;不同类型的I/O设备需要有不同的驱动程序处理

    操作系统系统可以采用两种方式管理逻辑设备表(LUT)

    • 第一种方式,整个系统只设置一张LUT,这就意味着所有用户不能使用相同的逻辑设备名,因此这种方式只适用于单用户操作系统。
  • 第二种方式,为每个用户设置一张LUT,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统。系统会在用户登录时为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中。

  1. 设备驱动程序(设置设备寄存器,检查设备状态)

    与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序。 将上层发出的一系列命令(如read/write)转化成特定设备“能听得懂”的一系列操作。

    不同设备的内部硬件特性也不同,这些特性只有厂家才知道,因此厂家须提供与设备相对应的驱动程序,CPU执行驱动程序的指令序列,来完成设置设备寄存器检查设备状态等工作。

    为I/O内核子系统隐藏设备控制器之间的差异。

    img

    4.中断处理程序

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

  • 中断处理程序的处理流程如下:

    image-20230901173205434

  • 中断处理层的任务:

    • 进行进程上下文的切换,
    • 对处理中断信号源进行测试,
    • 读取设备状态和修改进程状态等。

由于中断处理与硬件紧密相关,对用户而言,应尽量加以屏蔽,因此应放在操作系统的底层,系统的其余部分尽可能少地与之发生联系。

img

5.硬件

执行IO操作,机械部件、电子部件组成

总结

说明用户对设备的一次命令过程如下所示:

  • ①当用户要读取某设备的内容时,通过操作系统提供的read命令接口,这就经过了用户层。
  • ②操作系统提供给用户使用的接口,一般是统一的通用接口,也就是几乎每个设备都可以响应的统一命令,如read命令,用户发出的read命令,首先经过设备独立层进行解析,然后交往下层。
  • ③接下来,不同类型的设备对read命令的行为会有所不同,如磁盘接收read命令后的行为与打印机接收read命令后的行为是不同的。因此,需要针对不同的设备,把read命令解析成不同的指令,这就经过了设备驱动层。
  • ④命令解析完毕后,需要中断正在运行的进程,转而执行read命令,这就需要中断处理程序。
  • ⑤最后,命令真正抵达硬件设备,硬件设备的控制器按照上层传达的命令操控硬件设备,完成相应的功能。

理解:

直接涉及到硬件其体细节、且与中断无关的操作肯定是在设备驱动程序层完成的;

没有涉及硬件的、对各种设备都需要进行的管理工作都是在设备独立性软件层完成的。

5.1.4 应用程序I/O接口

在I/O系统与高层之间的接口中,根据设备类型的不同,又进一步分为若干接口。

  1. 字符设备接口

    字符设备是指数据的存取和传输是以字符为单位的设备,如键盘、打印机等。基本特征是传输速率较低、不可寻址,并且在输入输出时通常采用中断驱动方式。

    • 字符设备的操作

      • get和put操作。由于字符设备不可寻址,只能采取顺序存取方式,通常为字符设备建立一个字符缓冲区,用户程序通过get操作从缓冲区获取字符,通过put操作将字符输出到缓冲区。
      • in-control指令。字符设备类型繁多,差异甚大,因此在接口中提供一种通用的in-control指令来处理它们(包含了许多参数,每个参数表示一个与具体设备相关的特定功能)。

      字符设备都属于独占设备,为此接口中还需要提供打开和关闭操作,以实现互斥共享。

  2. 块设备接口

    块设备是指数据的存取和传输是以数据块为单位的设备,典型的块设备是磁盘。基本特征是传输速率较高、可寻址。磁盘设备的I/O常采用DMA方式。

    • 隐藏了磁盘的二维结构:在二维结构中,每个扇区的地址需要用磁道号和扇区号来表示。块设备接口将磁盘的所有扇区从0到n-1依次编号,这样,就将二维结构变为一种线性序列。
    • 将抽象命令映射为低层操作:块设备接口支持上层发来的对文件或设备的打开、读、写和关闭等抽象命令,该接口将上述命令映射为设备能识别的较低层的具体操作。
    • 内存映射接口:内存映射接口通过内存的字节数组来访问磁盘,而不提供读/写磁盘操作。映射文件到内存的系统调用返回包含文件副本的一个虚拟内存地址。只在需要访问内存映像时,才由虚拟存储器实际调页。内存映射文件的访问如同内存读写一样简单,极大地方便了程序员。
  3. 网络设备接口

    许多操作系统提供的网络I/O接口为网络套接字接口,套接字接口的系统调用使应用程序创建的本地套接字连接到远程应用程序创建的套接字,通过此连接发送和接收数据。

    img

  4. 阻塞/非阻塞I/O

    • **阻塞I/O:**当用户进程调用I/O操作时,进程就被阻塞,需要等待I/O操作完成,进程才被唤醒继续执行。

      eg:字符设备接口一一从键盘读一个字符get

    • 非阻塞I/O:用户进程调用I/O操作时,不阻塞该进程,该I/O调用返回一个错误返回值,通常,进程需要通过轮询的方式来查询I/O操作是否完成。

      eg:块设备接口一一往磁盘写数据write

image-20240919194350223

5.1.5 本节小结
I/O管理要完成哪些功能?

I/O管理需要完成以下4部分内容:

  1. 状态跟踪。要能实时掌握外部设备的状态。
  2. 设备存取。要实现对设备的存取操作。
  3. 设备分配。在多用户环境下,负责设备的分配与回收。
  4. 设备控制。包括设备的驱动、完成和故障的中断处理。

错题总结或者需要注意的点

1.共享设备必须是可寻址和可随机访问的设备

2.共享设备是指在一段时间内允许多个进程同时访问的设备,而不是同一时刻

3.虚拟设备是指,把一个物理设备变换成多个对应的逻辑设备

4.设备控制器通常需要提供:控制寄存器,状态寄存器和控制命令

5.在OS中,通道技术是一种硬件机制

6.通道控制设备控制器,设备控制器控制设备工作

7.向设备寄存器的写命令是在I/O软件中的设备驱动程序完成的

8.中断驱动方式:

​ 处理中断请求:一旦确定了中断源,中断处理程序就会执行与该中断源相关联的特定代码。这可能包括读取设备的状态寄存器、从设备读取数据或向设备写入数据、更新系统的状态或执行其他必要的操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2152595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新手爬虫er必刷!如何使用代理IP全攻略!

在爬虫开发中,代理IP(也称为代理服务器)是一个非常重要的工具。当爬虫访问网站时,可能会遭遇IP封锁或请求频率限制。通过使用代理IP,可以分散请求压力并规避特定对IP的限制,从而提高采集任务的持续性。同时…

Cassandra 5.0 Spring Boot 3.3 CRUD

概览 因AI要使用到向量存储,JanusGraph也使用到Cassandra 卸载先前版本 docker stop cassandra && docker remove cassandra && rm -rf cassandra/运行Cassandra容器 docker run \--name cassandra \--hostname cassandra \-p 9042:9042 \--pri…

SpringCloud Alibaba五大组件之——Sentinel

SpringCloud Alibaba五大组件之——Sentinel(文末附有完整项目GitHub链接) 前言一、什么是Sentinel二、Sentinel控制台1.下载jar包2.自己打包3.启动控制台4.浏览器访问 三、项目中引入Sentinel1.在api-service模块的pom文件引入依赖:2.applic…

【干货整理】什么软件能监控员工电脑?六大好用的电脑监控软件,抢手推荐!

什么软件能监控员工电脑? 电脑监控软件啦! 要是能有一双无形的眼睛,既监督员工的工作状态,又保护着公司的数据安全,这无疑是企业管理者的福音。 今天,我们就来一起探索那些能够精准助力、高效护航的六大电…

张养浩,文坛政坛的双重巨匠

张养浩,字希孟,号云庄,又称齐东野人,生于元世祖至元七年(公元1270年),卒于元英宗至治三年(公元1329年),享年59岁。他是中国元代著名的文学家、政治家&#xf…

【Linux】解锁系统编程奥秘,高效文件IO的实战技巧

文件 1. 知识铺垫2. C文件I/O2.1. C文件接口2.2 fopen()与重定向2.3. 当前路径2.4. stdin、stdout、stderr 3. 系统文件I/O3.1. 前言3.2. open3.2.1. flags</h3>3.2.2. mode</h3>3.2.3. 返回值fd 3.3. write</h2>3.4. read3.5. close</h2>3.6. lseek&l…

快速响应:提升前端页面加载速度技巧的必知策略方案

在本文中&#xff0c;我们将深入探讨导致页面加载缓慢的常见原因&#xff0c;并分享一系列切实可行的优化策略&#xff0c;无论你是刚入门的新手&#xff0c;还是经验丰富的开发者&#xff0c;这些技巧都将帮助你提升网页性能&#xff0c;让你的用户体验畅快无阻。 相信作为前端…

【JavaEE精炼宝库】HTTP | HTTPS 协议详解

文章目录 一、HTTP 简介二、HTTP 协议格式&#xff1a;2.1 抓包工具的使用&#xff1a;2.2 HTTP 请求报文格式&#xff1a;2.3 HTTP 响应报文格式&#xff1a;2.4 HTTP 协议格式总结&#xff1a; 三、HTTP 请求详解&#xff1a;3.1 刨析 URL&#xff1a;3.2 方法(method)&#…

极度精简 Winows11 系统镜像!Tiny11 2311下载 - 支持苹果 M 芯片 Mac 安装 (ARM 精简版)!

最新推出的 Tiny11 是一款极端精简版 Windows 11 系统镜像&#xff0c;针对苹果 M 芯片 Mac 用户&#xff08;ARM 架构&#xff09;提供良好支持。Tiny11 内置了众多优化特性&#xff0c;如更小的安装体积和更快的启动速度&#xff0c;特别适合有特殊需求或老机型的用户。用户可…

centos 安装VNC,实现远程连接

centos 安装VNC&#xff0c;实现远程连接 VNC(Virtual Network Computing)是一种远程控制软件&#xff0c;可以实现通过网络远程连接计算机的图形界面。 服务器安装VNC服务 yum install -y tigervnc-server*启动VNC服务&#xff0c;过程中需要输入连接密码 vncserver :1查看…

2024华为杯研究生数学建模C题【数据驱动下磁性元件的磁芯损耗建模】思路详解

问题一 励磁波形分类 励磁波形作为影响磁芯性能的核心要素之一&#xff0c;其形态深刻影响着磁芯的损耗特性。励磁波形的独特形状直接塑造了磁芯内部磁通的动态行为&#xff0c;不同的波形轮廓影响了磁通密度随时间的变化速率&#xff0c;导致其损耗特性呈现出显著差异。因此&…

ESP32本地大模型对话机器人制作教程

整体架构 在本地电脑部署好Ollama服务&#xff0c;安装qwen大模型和llama3.1大模型。 ESP32接入局域网&#xff0c;用户通过串口给esp32发送问题&#xff0c;esp32打包json后向ollama服务发送请求&#xff0c;ollama返回响应&#xff0c;esp32解析结果并通过串口打印出来。 …

MavenMyBatis

Maven&MyBatis 目标 能够使用Maven进行项目的管理能够完成Mybatis代理方式查询数据能够理解Mybatis核心配置文件的配置 1&#xff0c;Maven Maven是专门用于管理和构建Java项目的工具&#xff0c;它的主要功能有&#xff1a; 提供了一套标准化的项目结构 提供了一套标准…

24最新Stable Diffusion 本地部署教程!

前言 1.前言&#xff1a; 最近看Stable Diffusion开源了&#xff0c;据说比Disco Diffusion更快&#xff0c;于是从git上拉取了项目尝试本地部署了&#xff0c;记录分享一下过程~ 这里是官网介绍&#xff1a;https://stability.ai/blog/stable-diffusion-public-release 嫌弃…

解决【WVP服务+ZLMediaKit媒体服务】加入海康摄像头后,能发现设备,播放/点播失败,提示推流超时!

环境介绍 每人搭建的环境不一样&#xff0c;情况不一样&#xff0c;但是原因都是下面几种&#xff1a; wvp配置不当网络端口未放开网络不通 我搭建的环境&#xff1a; WVP服务&#xff1a;windows下&#xff0c;用idea运行的源码 ZLM服务&#xff1a;虚拟机里 问题描述 1.…

计算机视觉的应用34-基于CV领域的人脸关键点特征智能提取的技术方法

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用34-基于CV领域的人脸关键点特征智能提取的技术方法。本文主要探讨计算机视觉领域中人脸关键点特征智能提取的技术方法。详细介绍了基于卷积神经网络模型进行人脸关键点提取的过程&#xff0c;包括使…

基于springboot学生健康管理系统的设计与实现

文未可获取一份本项目的java源码和数据库参考。 进入21世纪以来&#xff0c;随着经济水平的高速发展&#xff0c;人们的生活质量有了很大提升&#xff0c;物质和精神生活得到了极大满足。但人们的健康水平却情况堪忧。据不完全统计&#xff0c;全国近七层人口处于亚健康状态&a…

数据结构(Day18)

一、周学习内容 1、9.18 数据结构&#xff08;Day15&#xff09;-CSDN博客 2、9.19 数据结构&#xff08;Day16&#xff09;-CSDN博客 3、9.20 链表 目的 插入删除不需要移动任何节点&#xff08;元素&#xff09;。 不需要预估存储空间大小&#xff0c;长度动态增长或减小。…

Linux文件IO(六)-多次打开同一个文件

大家看到这个小节标题可能会有疑问&#xff0c;同一个文件还能被多次打开&#xff1f;事实确实如此&#xff0c;同一个文件可以被多次打开&#xff0c;譬如在一个进程中多次打开同一个文件、在多个不同的进程中打开同一个文件&#xff0c;那么这些操作都是被允许的。本小节就来…

PyRosetta打分函数介绍

在 PyRosetta 中,蛋白质结构的能量是通过打分函数(ScoreFunction)来评估的,这些打分函数基于 Rosetta 的能量方程。Rosetta 的能量函数是一种加权的分项能量表达式,包括不同的能量项来描述蛋白质的构象、相互作用和能量。核心能量函数的形式如下: 在 PyRosetta 中,打分函…