【笔记】I/O总结王道强化视频笔记

文章目录

  • 从中断控制器的角度来理解整个中断处理的过程
      • 复习 处理器的中断处理机制
      • **中断驱动I/O方式**
  • printf——从系统调用到I/O控制方式的具体实现1
    • 轮询方式下输出一个字符串(程序查询)
    • 中断驱动方式下输出一个字符串
      • 中断服务程序
      • 中断服务程序与设备驱动程序之间的关系
    • DMA方式下输出一个字符串
  • scanf——中断方式下输入要给字符串的具体过程

从中断控制器的角度来理解整个中断处理的过程

深入理解中断机制——从中断控制器出发
当外设准备好时,便从CPU发出中断请求,CPU响应后,中止现行程序的执行,转入一个"中断服务程序"进行输入/出操作,实现主机和外设接口之间的数据传送,并启动外设工作。“中断服务程序”执行完后,返回原被中止的程序断点出继续执行。此时,外设和CPU并行工作。
在这里插入图片描述

复习 处理器的中断处理机制

关中断:将中断允许标志清零。在psw中一个标志位(中断允许标志位)
中断发生时,处理器必须做以下基本处理:
① 保护断点和程序状态: 将返回原程序的断电和程序状态保存到堆栈中或特殊寄存器中。
PC=>堆栈 或 特殊寄存器
PSWR=>堆栈 或 特殊寄存器
((PSW):程序状态字
PSWR(PSW寄存器):用于存放程序状态的寄存器。如x86的FLAGS)

② 识别中断事件
有两种不同的方式:软件识别硬件识别(向量中断方式)
(1) 软件识别(MIPS采用):设置一个异常状态寄存器(MIPS中为Cause寄存器),用于记录异常原因。操作系统使用一个统一的异常处理程序(MIPS的入口为0x8000 0180),该程序按优先级顺序查询异常状态寄存器,识别出异常事件。
(2) 硬件识别(向量中断)(80x86采用):用专门的硬件查询电路按优先级顺序识别中断,得到一个“中断类型号”,根据此号,到中断向量表中读取对应的中断服务程序的入口地址。
PIC:可编程的硬件控制器,识别了中断事件之后,就会切换到某一个具体的中断服务程序执行。

③ 切换到具体的中断处理程序执行

在这里插入图片描述
在这里插入图片描述

中断控制器的基本结构:
在这里插入图片描述

  • 问题一 形成中断号(向量地址)送到什么线上
    送到数据线上。
    数据线不仅能传送指令还能传送向量地址
  • 第二个问题 何时采样
    (当前指令周期结束后)每条指令执行的最后一个操作控制信号,就要求CPU去检测这个INTR是否有中断请求信号?那么CPU采样到这个INTR信号有效,就立即进入中断响应周期。
  • 中断查询信号什么时候发出
    在 CPU 进入中断响应周期后,CPU 会暂停当前正在执行的指令,并保存当前的执行状态(如程序计数器、寄存器等),以便在中断处理完成后能够恢复执行。*(经过了一个固定的延迟时间)*然后,CPU 会发出中断查询信号,以查询哪些中断请求是有效的且未被屏蔽的。*发出中断查询信号,这个信号的作用是触发系统中所有中断源的响应。*这个中断查询信号会发送给系统中的所有中断源,每个中断源都会根据自身的状态(是否有中断请求且未被屏蔽)来响应这个信号。如果某个中断源有有效的中断请求且未被屏蔽,它就会向判优电路发出信号。以便判优电路能够选择一个优先级最高的中断请求进行响应。
    判优电路可以被看作是一个编码器,它将【多个中断请求信号】转换为一个【单一的中断向量号】,该向量号指向中断处理程序的入口地址。
    请添加图片描述
    请添加图片描述

CPU能不能检测到信号由中断处理优先级决定
响应顺序:A>B>C
处理顺序:C>B>A

它的完成的顺序就是先完成c,再完成b,

那么最后才完成a,它的响应的顺序是在执行a的过程当中,它先响应的b,然后后响应的c,

  1. 中断响应优先级:判优电路决定的
  2. 中断处理优先级:中断屏蔽字寄存器来决定的它。它是中断服务程序来设置的。能不能检测到中断请求信号有效。只有检测到中断请求信号又笑了才能进入到下一步。

在中断处理过程中,当系统内有ABC三个(中断源),且它们的中断响应优先级为a>b>c,中断处理优先级为c>b>a时

当前状态:CPU正在执行中断源a的中断服务程序。
中断请求:同时,中断源b和c发出中断请求。
中断检测:
CPU在执行完一条指令后,检查中断请求信号寄存器(intr)。
由于中断处理优先级c>b>a,当前执行的中断服务程序a无法屏蔽b和c的中断请求。
因此,b和c的中断请求使intr寄存器有效。
中断响应:
CPU检测到有效的中断请求信号。
CPU发出中断查询信号,以确定要响应哪个中断源。
由中断响应优先级b>c决定,判优电路选择中断源b,并形成中断源b的向量地址送到CPU。
CPU响应并处理中断源b的中断。
中断服务程序执行:
CPU执行中断源b的中断服务程序。
在中断服务程序中,b设置新的屏蔽字,并保存现场。
如果系统支持多重中断,b的中断服务程序会开启中断。
多重中断处理(如果系统支持):
在b的中断服务程序执行期间,CPU检测到中断源c的中断请求有效(因为c的处理优先级高于b,且此时未被屏蔽)。
CPU响应并处理中断源c的中断。
执行c的中断服务程序。
恢复与返回:
c的中断服务程序执行完毕后,返回到b的中断服务程序继续执行。
b的中断服务程序执行完毕后,最终返回到原来的中断源a的中断服务程序或主程序。
完成顺序:
响应顺序:在执行a的过程中,先响应b,后响应c(由中断响应优先级决定)。
完成顺序:先完成c,再完成b,最后完成a(由中断处理优先级和多重中断处理机制决定)。

中断驱动I/O方式

  • 中断过程
    • 中断响应(硬件实现)
    • 中断处理(软件实现)
  • 中断响应
    中断响应是指主机发现外部中断请求,中止现行程序的执行,到调出中断服务程序这一过程。
    (1)中断响应的条件
    • CPU处于开中断状态
    • 在一条指令执行完
    • 至少要有一个未被屏蔽的中断请求

问题:中断响应的时间点和异常处理的时间点是否相同,为什么?

中断一定是在一条指令执行结束后开始宣询有无中断请求,有的话立即响应,所以一定是在指令执行完时响应中断,而“异常”发生在指令执行过程中,所以不能等到指令执行完才进行异常处理,(缺页异常、非法操作码)

中断响应过程:
当CPU决定响应中断时,会执行一系列操作,包括关中断(以防止新的中断干扰当前中断处理)、保存断点(即保存下一条将要执行的指令的地址)和程序状态(如寄存器内容),然后识别中断源并跳转到相应的中断服务程序。

典型的中断处理(三阶段):

  • 先行段(准备阶段)
    • 保护现场及旧屏蔽字(通用寄存器当中的内容,中断返回需要恢复旧的屏蔽字)
    • 查明原因(软件识别中断时)
    • 设置新屏蔽字
    • 开中断(多重中断需要)
  • 本体段(具体的中断处理程序)
  • 结束段(恢复阶段)
    • 关中断
    • 恢复现场及旧屏蔽字
    • 清“中断请求”
    • 开中断
    • 中断返回

异常处理过程:
不同的中断源会调用不同的中断服务程序进行处理。
不同的异常类型也会触发不同的异常处理程序进行响应。
在这里插入图片描述

多重本断和中断处理优先权的动态分配

  • 多重中断的概念
    在一个中断处理(即执行中断服务程序)过程中,若又有新的中断请求发生,而新中断优先级高于正在执行的中断,则应立即中止正在执行的中断服务程序,转取处理新的中断。这种情况为多重中断,也称中断嵌套。

中断优先级的概念:
中断响应优先级----由查询程序或硬联排队线路决定的优先权,反映多个中断同时请求时选择哪个响应。
中断处理优先级----由各自的中断屏蔽字来动态设定,反映本中断与其它中断间的关系。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

当我们正在执行用户程序时,假设中断源2和4同时发出中断请求。由于此时系统没有执行其他中断服务程序,因此这两个中断源都没有被屏蔽,它们会同时被送往硬件排队器进行排队。

在决定先响应哪个中断请求时,我们需要依据中断响应优先级。由于中断源2的优先级高于中断源4,因此CPU会首先响应中断源2的中断请求。在执行中断源2的中断服务程序过程中,我们需要先保存现场、旧的屏蔽字,并设置新的屏蔽字。

在具体的中断处理前,我们需要先开启中断。但需要注意的是,一旦开启中断,CPU会立即检测到当前系统中的其他中断请求,即中断源4的请求。由于中断源4的优先级仍然高于当前正在处理的中断源2(但低于已经决定先响应的2,这里指的是在开启中断后的即时检测),且此时没有其他更高优先级的中断请求,因此CPU会立即转到中断源4的中断服务程序去执行。等待中断源4执行完毕后,CPU会返回到中断源2的中断服务程序环境中,继续执行其剩余部分。

接下来,当中断源2的执行过程中,中断源1、3和5同时发出中断请求。根据中断处理优先级(1>5>2>3),中断源2能够屏蔽掉中断源3的请求,但无法屏蔽中断源1和5的请求。因此,这两个请求会被送往硬件排队器进行排队。

由中断响应优先级决定,CPU会先执行中断源1的中断服务程序。由于中断源1的优先级最高,因此它不会被中断源5打断。等待中断源1执行完毕后,CPU会返回到中断源2的中断服务程序环境中。一旦返回到此环境,由于中断源5的优先级高于中断源2(但此时是在中断源2恢复执行后的检测),CPU会立即响应中断源5的中断请求,并执行其中断服务程序。

等待中断源5执行完毕后,CPU再次返回到中断源2的中断服务程序环境中。此时,所有中断源1、4、5的中断服务程序都已执行完毕。系统中只剩下中断源3发出的中断请求。**由于中断源2的优先级高于中断源3,因此中断源3的请求被中断源2屏蔽。**等待中断源2执行完毕后,CPU会先返回到用户程序环境中。

在用户程序环境下,CPU才能够检测到中断源3发出的中断请求,并立即响应它,执行中断源3的中断服务程序。等待中断源3执行完毕后,CPU最终返回到用户程序继续执行。

  • 在开启中断后,CPU会立即检测到当前系统中的其他中断请求。
  • 中断屏蔽是指CPU在处理某个中断时,能够屏蔽掉其他低优先级的中断请求。
  • 在处理完所有中断请求后,CPU需要返回到用户程序继续执行。需要理解这一步骤的必要性和作用。

printf——从系统调用到I/O控制方式的具体实现1

printf(“Hello World”);
用户层I/O软件

  • 库函数
  • 系统调用命令
  • 假脱机(Spooling)系统

第一阶段的工作:由库函数完成
// printf在函数库中展开后的代码
char buf[20]; //申请一个字符数组
将字符串“Hello World”填入buf中;
write(1,buf,8);//实际的系统调用命令
在这里插入图片描述

执行系统调用的操作:

  1. 传递系统调用参数
  2. 执行陷入指令
  3. 执行相应的服务程序
  4. 返回用户态

在这里插入图片描述
中断隐指令完成:保存断点和程序状态字、将CPU模式改为内核态

操作系统完成:保存通用寄存器的内容和执行系统调用服务例程

字符串输出最终是由内核中的sys_write系统调用例程实现
sys_write可用三种I/O方式实现:程序查询、中断和DMA
在这里插入图片描述

轮询方式下输出一个字符串(程序查询)

  • I/O设备(包括设备控制器)将自己的状态放到状态寄存器中
    • 显示器忙、未就绪等都是状态
  • OS阶段性地查询状态寄存器中的特定状态,以决定下一步动作
    • 如:未“就绪”时,则一直“等待”
  • 例如:sys write进行字符串打印的程序段大致过程如下
    copy_string_to kernel(strbuf,kernelbuf,n);/ 将字符串复制到内核缓冲区,系统调用write位于内核态,需要把用户缓冲区的内容复制到内核空间。
    内存共享
    在这里插入图片描述
for (i=0; i < n; i++){ // 对于每个打印字符循环执行
while ( printer status != READY);//等待直到显示器状态为“就绪”*printer_data port=kernelbuf[i];//向数据端口输出一个字符
*printer_control_port=START;// 发送“启动输出”命令
return_to_user();//返回用户态

如何判断就绪?如何"等待"?
读取状态寄存器,判断特定位(1-就绪;0-未就绪)是否为1
等待:读状态、判断是否为1?不是,则继续读状态、判断……

I/O接口(I/O控制器)的结构
在这里插入图片描述
通过I/O控制寄存器发送命令字来向设备发送命令
通过从状态寄存器读取状态字来获取外设或I/O控制器的状态信息
通过I/O控制器发送或读取数据来和外设进行数据交换
将I/O控制器中CPU能够访问的各类寄存器称为I/O端口
对外设的访问通过向I/O端口发命令、读状态、读/写数据来进行。
在这里插入图片描述

就绪的含义:
显示器控制器的数据缓冲中内容已经被取走,现为“空",可接受新的打印字符。由显示器控制器自动设置。

在这里插入图片描述
特点:

  • 简单易控制、外围接口控制逻辑少
  • CPU与外设串行工作,效率低、速度慢,适合于慢速设备.
  • 查询开销极大(CPU完全在等待“外设完成”)
  • 工作方式:完全串行或部分串行,CPU用100%的时间为I/O服务!

中断驱动方式下输出一个字符串

在这里插入图片描述
绿色部分是CPU和外设并行工作的时间
程序切换,响应中断是由硬件完成的,

就是执行中断隐指令。执行中断隐指令的时间又是绿色部分的这段时间。就是CPU和外设。程序切换,响应中断是由硬件完成的,

就是执行中断隐指令。

在这里插入图片描述
Q1:以上过程中,设备驱动程序在哪些过程中体现的?是以单独的进程的形式存在的吗?
在这里插入图片描述
在这里插入图片描述

Q2:以上过程中,设备驱动程序和中断处理程序全部在同一个进程中运行吗?
设备驱动程序一定有一部分是在发起系统调用的进程A当中执行的。而中断处理程序则不一定是在进程A中执行,取决于CPU响应中断时正在执行哪个进程。

Q3:以上过程中,如果不采用内核缓冲区,直接使用用户缓冲区会发生什么问题?
系统调用write位于内核态,需要把用户缓冲区中的内容复制到内核空间。

中断服务程序在运行的时候,是在进程B的资源平台上,进程B的页表与进程A的页表是不同的,而用户缓冲区buf进程A中的地址,它不能用进程B的页表来进行地址映射。而内核缓冲区中的数据,无论是进程A还是进程B,它们的内核地址空间中的内容都是相同的,因此能顺利的访问。
在这里插入图片描述

为什么有开中断?是在哪里进行关中断的?
在系统调用入内核态的时候,进行了关中断,所以此时有对应的关中断。

此程序段和轮巡方式下的sys write程序段最本质的区别在哪里
中断方式下,仅仅是把第一个字符放数据寄存器中然后就不管了,至于这个字符何时打印出来,以及剩余的字符如何打印出来就不是系统调用函数的任务了。
剩余的那些字符在哪里处理呢?
当然是在中断服务程序当中
什么时候调出中断服务程序呢?
当第一个字符输出完成之后,然后外设会向CPU发出一个中断请求,然后调出相应的中断服务程序。当显示器完成了第一个字符的输出之后,这个时候调出中断服务程序。

在这里插入图片描述

中断服务程序

在这里插入图片描述

在这里插入图片描述

sys_write 是如何调出来的?
系统调用
中断服务程序是如何调出来的?
外设完成任务!然后向CPU发出中断请求

总结:完成字符串输出需要两个函数:

  1. system_write
  2. 中断服务程序

过程:

  1. 用户进程A执行write,触发系统调用,进入内核态

  2. 把第一个字符“H”送到显示器的设备控制器。控制器命令显示器输出这个字符,与此同时,进程A被阻塞,调度另一个进程B执行

  3. 当“H”输出之后,控制器发出一个中断给CPU,并跳转到相应的中断处理程序,在中断处理程序中,进行后续的字符输出。

当“H”输出之后,控制器发出一个中断给CPU,并跳转到相应的中断处理程序,在中断处理程序进行后续的字符输出。

注意此时并没有发生进程的切换,仍然是进程B在运行,但执行的指令(中断服务程序)实际上是在做进程A的工作,是在帮助进程A完成此次I/O!

中断服务程序与设备驱动程序之间的关系

在这里插入图片描述
在这里插入图片描述
如果题目当中同时出现了中断服务程序和设备驱动程序,那么这里的中断服务程序垂解为中断总控程序!
如果题目当中只有中断服务程序,那么一般情况下,此时中断服务程序应该理解1,2,3,4,5,6整个过程。

数据传输过程:
计组里面强调是中断处理程序
而在操作系统里面,它强调的是设备驱动程序

DMA方式下输出一个字符串

在这里插入图片描述

在这里插入图片描述
DMA优先权高:
dma控制器当中的数据,如果不被及时的取出,那么就容易被后续的数据给它冲刷掉,但是CPU里面的数据,因为它是有通用寄存器的数据可以暂存在CPU里面的通用寄存器。
在这里插入图片描述

DMA控制器接受到“启动”命令后,控制总线进行DMA传送。通常用周期挪用法“:设备每准备好一个数据,挪用一次”存储周期“,使用一次总线事务进行数据传送,计数器减1。计数器为0时,发送DMA结束中断请求。

在这里插入图片描述
驱动程序:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

scanf——中断方式下输入要给字符串的具体过程

在这里插入图片描述

在这里插入图片描述
中断驱动方式下输入一个字符串
基本思想:
首先是用户进程A执行,它执行了scanf函数,然后进入系统调用,然后到标准接口read函数,然后再到驱动程序foo read函数,这些都是普通的函数调用,都是在进程A的资源平台上运行的。接下来,在foo read函数中,在使用outb指令启动了这次I/O操作后,进程A就会被阻塞起来。然后进行进程切换,调度另一个进程B去运行。当B在运行时,如果I/O操作完成,就会发生一次中断,把进程B打断并跳转到中断处理程序foo interruptible去执行,然后在这里再去唤醒进程A。

通过sys_read字符输入核心程序段和中断处理程序foo_interruptible执行
在这里插入图片描述

在这里插入图片描述
这里的程序使用到了程序的PV同步互斥问题

在这里插入图片描述
在这里插入图片描述
关于I/O系统你还记得哪些?
计组里面着重讲三种I/O控制方式,操作系统里面着重讲I/0软件的处理过程,软硬件究竟是怎么协同工作的呢???
不同的I/O控制方式对应不同的设备驱动程序工作流程上到底有什么样的区别呢?
设备驱动程序和中断处理程序到底是什么呢?有什么区别呢?是什么关系呢?傻分不清楚?
什么是设备控制器?用户缓冲区?内核缓冲区?数据究竟是怎么一步一步一步的输入输出的呢?每一个过程是由什么程序来控制的呢?
系统调用在I/O里面起了什么作用呢?中断软件机制和中断硬件是怎么协同工作的呢?
关于I/O系统你是不是一团浆糊?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
②①
在这里插入图片描述

在这里插入图片描述
键盘中断处理程序执行的时候还是处于阻塞态。CPU处于内核态。中断响应的过程中由硬件进行转换来完成。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性代数在大一计算机课程中的重要性

线性代数在大一计算机课程中的重要性 线性代数是一门研究向量空间、矩阵运算和线性变换的数学学科&#xff0c;在计算机科学中有着广泛的应用。大一的计算机课程中&#xff0c;线性代数的学习为学生们掌握许多计算机领域的关键概念打下了坚实的基础。本文将介绍线性代数的基本…

数据库——创立表和库

数据库&#xff08;Database&#xff09;是一个用于存储、管理和检索数据的系统。它可以组织结构化数据&#xff0c;支持高效的存取和操作。数据库通常由一个数据库管理系统&#xff08;DBMS&#xff09;来支持&#xff0c;常见的DBMS包括&#xff1a; 关系数据库&#xff08;R…

Java创建型模式(二)——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式、工厂模式扩展等完整详解,附有代码——案例)

文章目录 五.工厂模式5.1 概述5.2简单工厂模式5.2.1 概述5.2.2 结构5.2.3 实现5.2.4 优缺点5.2.5 扩展—静态工厂 5.3 工厂方法模式5.3.1概述5.3.2 结构5.3.3 实现5.3.4 优缺点 5.4 抽象工厂模式5.4.1 概述5.4.2 结构5.4.3 实现5.4.4 优缺点5.4.5 使用场景 5.5 工厂模式扩展 五…

R语言机器学习算法实战系列(三)lightGBM算法(Light Gradient Boosting Machine)

文章目录 介绍原理:应用方向:教程下载数据加载R包导入数据数据预处理数据描述数据切割设置数据对象调节参数训练模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve特征的重要性模型SHAP值解释保存模型总结系统信息介绍 LightGBM(Light Gradient B…

MyBatis-Plus 之 typeHandler 的使用

一、typeHandler 的使用 1、存储json格式字段 如果字段需要存储为json格式&#xff0c;可以使用JacksonTypeHandler处理器。使用方式非常简单&#xff0c;如下所示&#xff1a; 在domain实体类里面要加上&#xff0c;两个注解 TableName(autoResultMap true) 表示自动…

腾讯云-云直播

云直播&#xff08;Cloud Streaming Services&#xff09;为您提供极速、稳定、专业的直播云端处理服务&#xff0c;根据业务中不同直播场景的需求&#xff0c;云直播提供标准直播、快直播、慢直播和云导播台服务&#xff0c;分别针对大规模实时观看、高并发推流录制及超低延时…

数学建模算法与应用 第11章 偏最小二乘回归及其方法

目录 11.1 偏最小二乘回归概述 11.2 Matlab 偏最小二乘回归命令 Matlab代码示例&#xff1a;偏最小二乘回归 11.3 案例分析&#xff1a;化学反应中的偏最小二乘回归 Matlab代码示例&#xff1a;光谱数据的PLS回归 习题 11 总结 偏最小二乘回归&#xff08;Partial Least …

如何加密重要U盘?U盘怎么加密保护?

在日常生活中&#xff0c;我们常常使用U盘来存储和传输重要文件。然而&#xff0c;U盘的便携性也意味着它容易丢失或被盗。为了保护U盘中的数据安全&#xff0c;我们需要对U盘进行加密。本文将为您介绍如何加密重要U盘&#xff0c;以及U盘加密保护的方法。 BitLocker BitLocke…

动态规划——多状态动态规划问题

目录 一、打家劫舍 二、打家劫舍 II 三、删除并获得点数 四、粉刷房子 五、买卖股票的最佳时机含冷冻期 六、买卖股票的最佳时机含手续费 七、买卖股票的最佳时机III 八、买卖股票的最佳时机IV 一、打家劫舍 打家劫舍 第一步&#xff1a;确定状态表示 当我们每次…

『Mysql进阶』Mysql SQL语句性能分析(七)

目录 什么是Profile&#xff1f; 开启Profile功能 基本使用 分析案例 什么是Profile&#xff1f; Query Profiler是 MySQL 自带的一种 Query 诊断分析工具 &#xff0c;通过它可以分析出一条 SQL 语句的 硬件性能瓶颈 在什么地方。 通常我们是使用的 explain &#xff0c;…

企业内部文档安全外发如何挑选合适的外发系统?

企业文档的外发不仅关系到运营效率&#xff0c;更是信息安全的重要组成部分。面对B2B模式下文档交换的普遍性和重要性&#xff0c;企业内部文档的安全外发成为了众多公司关注的重点之一。 随着互联网技术的发展&#xff0c;企业之间的合作越来越紧密&#xff0c;文档的交流也变…

springboot+react实现移动端相册(上传图片到oss/ 批量删除/ 查看图片详情等功能)

相册页面及功能展示&#xff1a; react前端结构及代码&#xff1a; Java后端结构及代码 数据库结构&#xff1a; photo&#xff1a; user 这是首个利用AI自有知识构建的简易相册系统&#xff0c;项目是react构造前端spring boot构造后端。 前端有四个主要页面&#xff1…

Compose第六弹 对话框与弹窗

1.compose中怎么使用对话框&#xff1f; 2.怎么显示Popup弹窗&#xff1f; 一、Compose显示对话框 二、Popup Popup就类似以前的Popupwindow&#xff0c;我们可以看到其实上面的DropdownMenu是Popup的一个具体实现。 2.1 Popup定义 Popup的定义如下&#xff1a; Composable…

Windows 下 cocos2d-x-3.17.2 VS2017开发环境搭建

1.下载cocos2d-x-3.17.2 源码: Cocos2d-x - 成熟、轻量、开放的跨平台解决方案 2.下载Python2 Python 2.7.0 Release | Python.org 加入环境变量: 测试版本

JAVA基础 day12

一、File、IO流 File是java.io.包下的类&#xff0c;file类的对象&#xff0c;用于代表当前操作系统的文件&#xff08;可以代表文件、文件夹&#xff09;&#xff0c;使用File可以操作文件及文件夹。 注意&#xff1a;File只能对文件本身进行操作&#xff0c;不能读写文件里…

哈夫曼树和哈夫曼编码

现在需要对下列字符编码 其中我么你发现A 出现三次&#xff0c;B出现一次&#xff0c;C出现两次&#xff0c;D出现一次 那么我们统计出现次数为&#xff1a;3&#xff0c;2&#xff0c;1&#xff0c;1 我们将1&#xff0c;1组成一个树 现在统计次数变为3&#xff0c;2&#x…

Java—继承性与多态性

目录 一、this关键字 1. 理解this 2. this练习 二、继承性 2.1 继承性的理解 2.1.1 多层继承 2.2 继承性的使用练习 2.2.1 练习1 2.2.2 练习2 2.3 方法的重写 2.4 super关键字 2.4.1 子类对象实例化 三、多态性 3.1 多态性的理解 3.2 向下转型与多态练习 四、Ob…

构建高效作业管理平台:Spring Boot师生协作评审系统

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

神经网络超参数优化

遗传算法与深度学习实战&#xff08;16&#xff09;——神经网络超参数优化 0. 前言1. 深度学习基础1.1 传统机器学习1.2 深度学习 2. 神经网络超参数调整2.1 超参数调整策略2.2 超参数调整对神经网络影响 3. 超参数调整规则小结系列链接 0. 前言 我们已经学习了多种形式的进化…

鸿蒙开发实战项目【硅谷租房】--- 项目介绍

目录 一、简述 二、项目资料 2.1 UI设计稿 2.2 服务器 2.3 Apifox接口JSON文件 使用 Apifox 测试接口 一、简述 这是一个基于 鸿蒙 API12 开发的移动端租房 App&#xff0c;用户可以使用该应用搜索租房列表、查看房屋详情、预约租房等。 该项目的tabbar包含五部分&…