计算机操作系统详细学习笔记(四):设备管理 —— I/O 管理
文章目录
- 四、设备管理 —— I/O 管理
- 4.1 设备管理概述
- 4.1.1 I/O 设备
- 4.1.2 设备管理
- 4.2 I/O 控制方式
- 4.2.1 设备控制器
- 4.2.2 轮询方式
- 4.2.3 中断方式
- 4.2.4 DMA 方式
- 4.2.5 三类 I/O 控制方式总结
- 4.2.6 I/O 通道
- 4.3 总线与 I/O
- 4.3.1 总线概述
- 4.3.2 单总线
- 4.3.3 传统的三级总线
- 4.3.4 采用南北桥的多级总线
- 4.3.5 采用 I/O 通道的多级总线
- 4.4 I/O 软件的实现层次
- 4.4.1 I/O 软件设计
- 4.4.2 I/O 软件层次结构
- 4.5 I/O 软件的实现
- 4.5.1 I/O 中断处理程序
- 4.5.2 设备驱动程序
- 4.5.3 独立于设备的 I/O 软件
- 4.5.4 用户空间的 I/O 软件
- 4.6 I/O 缓冲区
- 4.6.1 I/O 缓冲区概述
- 4.6.2 单缓冲区
- 4.6.3 双缓冲区
- 4.6.4 循环缓冲区
- 4.7 设备独立性
- 4.7.1 设备独立性概念
- 4.7.2 设备独立性优点
- 4.8 独占型外设的分配
- 4.8.1 独占型外设概念
- 4.8.2 设备分配方式
- 4.8.3 设备分配的数据结构
- 4.9 磁盘的物理结构
- 4.9.1 磁盘结构
- 4.9.2 磁盘读取数据流程
- 4.9.3 磁盘存取时间
- 4.10 磁盘的驱动调度
- 4.10.1 磁盘调度
- 4.10.2 移动臂调度
- 4.10.3 旋转调度
- 4.11 SPOOLing 系统
- 4.11.1 虚拟设备
- 4.11.2 SPOOLing 系统结构
- 4.11.3 打印 SPOOLing 系统
- 4.12 批处理系统作业管理
四、设备管理 —— I/O 管理
4.1 设备管理概述
4.1.1 I/O 设备
I/O 设备概述
背景: 现代计算机系统通常配备大量的 I/O 设备,用于计算机系统与外部世界(如用户、其它计算机或电子设备等)进行信息交换或存储
- I/O 设备又称为外围设备或外部设备,简称外设
- I/O 操作: 内存和 I/O 设备之间的信息传送操作
按信息传输方向划分 I/O 设备
- 输入设备: 将外界信息输入计算机(键盘、鼠标)
- 输出设备: 将计算结果输出(显示屏、打印机)
- 输入输出设备: 既可以输入信息,也可以输出信息(网卡、磁盘)
按交互功能划分 I/O 设备
- 人际交互设备: 用于用户与计算机之间的交互通信(鼠标、键盘、显示器)
- 存储设备: 持久性地存储大量信息并快速检索(磁盘、光盘)
- 机机通信设备: 用于计算机和计算机之间的通信(网卡、调制解调器)
按设备管理划分 I/O 设备
- 字符设备: 以字符为单位进行信息交换(大多数人机交互设备)
- 块设备: 以固定大小的数据块进行信息交换(磁盘)
- 网络设备: 用于与远程设备通信的设备(网卡)
4.1.2 设备管理
目标
- 克服设备和 CPU 速度不匹配所引起的问题。令主机和设备并行工作,提高设备使用效率。
- 对设备进行抽象,屏蔽设备的物理细节和操作过程,配置驱动程序,提供统一界面,供用户或高层软件使用。
- 抽象为文件系统中的节点,统一管理
- 裸设备: 不被操作系统直接管理,由应用程序读写,I/O 效率更高
管理内容
- 设备中断处理
- 缓冲区管理
- 设备的分配与去配
- 设备驱动调度
- 实现虚拟设备
管理层次
- I/O 硬件: I/O 设备、接口线路、控制部件、通道
- I/O 软件: 系统 I/O 软件、用户空间 I/O 软件
4.2 I/O 控制方式
4.2.1 设备控制器
概述
将 I/O 设备中的机械部件和电子部件分开处理,其中电子部件称为设备控制器。
设备控制器又称为设备适配器、I/O 控制器、I/O 控制接口,简称 I/O 模块或 I/O 接口。
OS 与控制器交互,而非与设备交互。
功能
- 接受、识别命令(来自 CPU 或通道)
- 数据交换
- 记录设备状态(供 CPU 处理)
- 设备地址识别(连接多台设备时)
组成
- 与主机交互
- (记录设备状态)状态/控制寄存器
- (数据交换)数据缓冲寄存器
- (接受命令)地址译码和 I/O 控制逻辑
- 与设备交互
- 外设接口控制逻辑
4.2.2 轮询方式
具体流程
轮询方式是忙等待的过程。
- 处理器向控制器发送一个 I/O 命令
- 如果设备未就绪,则反复查看 I/O 状态,直至设备就绪
- 执行数据交换
特点
- 处理 I/O 请求会终止原程序的执行
- CPU 需要参与数据传送
- CPU 与设备串行工作,效率低下
4.2.3 中断方式
具体流程
- 处理器向控制器发出 I/O 命令,然后继续执行后续指令。
- 如果该进程支持异步 I/O,则继续执行该进程。
- 否则,进程在这个中断点挂起,CPU 执行其他程序。
- 控制器检查设备状态,就绪后发起中断。
- CPU 响应中断,转向中断处理程序。
- 中断处理程序执行数据读写操作。
- 恢复执行原先程序。
特点
- CPU 不需要等待 I/O 设备就绪
- CPU 仍需要参与数据传送(响应中断后,原程序会停止执行)
- CPU 和设备部分并行,效率提高
4.2.4 DMA 方式
DMA 模块
DMA: 直接存储器访问
DMA 模块: 模仿处理器来控制主存和设备控制器之间的数据交换
具体流程
- 处理器向 DMA 模块发出 I/O 命令
- 处理器继续执行其它工作,DMA 模块负责传送全部数据
- 数据传送结束后,DMA 中断处理器
特点
- CPU 不会终止原程序的执行(CPU 无须等待 I/O 设备就绪,也无需进行数据传送)
- CPU 只在数据传送的开始和结束时参与
- 开始时,CPU 需要对 DMA 模块进行初始化
- 结束时,CPU 响应中断,但不必保存现场
DMA 方式中的周期窃取
当 DMA 和 CPU 同时经总线访问内存时,CPU 总是将总线的占有权让给 DMA 一个或几个主存周期。
由于 CPU 大部分情况下与 Cache 进行数据交换,因此周期窃取对 CPU 与主存的数据交换速率影响不大。
4.2.5 三类 I/O 控制方式总结
轮询方式
CPU 需要等待设备就绪,且参与数据传送。
中断方式
CPU 无需等待设备就绪,但响应中断后参与数据传送。
DMA 方式
CPU 在数据传送开始和结束时参与,与主存进行数据交换时不参与。
4.2.6 I/O 通道
概述
I/O 通道,又称为通道控制器、I/O 处理器。
设备控制器包含自身专用的处理器和通道程序。
- I/O 指令不再由处理器执行,而是存在主存中,由 I/O 通道所包含的处理器执行。
- 采用四级结构,处理器-通道-控制器-设备
带有局部存储器的 I/O 通道
- 相当于一台自治的计算机
- I/O指令存储在控制器自带的局部存储器中,并由 I/O 通道所包含的处理器执行
- 可以控制大量的 I/O 设备,同时最小化 CPU 的干涉
- 常用于交互式终端通信,负责包括控制终端在内的大部分任务
流程
- CPU 遇到 I/O 请求,启动指定通道
- 一旦启动成功,通道开始控制 I/O 设备进行操作,CPU 执行其他任务
- I/O 操作完成后,I/O 通道发出中断,CPU 停止当前工作,转向处理 I/O 操作结束事件
CPU 与通道并行工作。
4.3 总线与 I/O
4.3.1 总线概述
总线目标: 解决 I/O 速度不匹配问题。
总线连接方式不同,会导致计算机性能的巨大差异,从而导致计算机价格的巨大差异。只有合理地组织总线,才能使得处理器和设备充分并行,提高系统效率。
4.3.2 单总线
总线结构
将 CPU、主存和 I/O 模块连接到同一组总线上。
优点
结构简单、易于扩充。
缺点
- 主存需要和 I/O 模块共用总线
- 设备增多会造成总线变长,进而增加传输时延
- 无法适用于大量高速设备
4.3.3 传统的三级总线
总线结构
- 主存和 Cache 通过主存总线传送数据,主存总线和扩展总线上的 I/O 设备之间传送数据通过扩展总线接口缓冲
优点
- 主存与 I/O 之间的数据传送与处理器的活动分离
- 可以支持更多的 I/O 设备
缺点
不适用于 I/O 设备数据速率相差太大的情形。
4.3.4 采用南北桥的多级总线
总线结构
通过存储总线、PCI 总线、E(ISA) 总线分别连接主存、高速 I/O 设备和低速 I/O 设备。
优点
可以支持不同数据速率的 I/O 设备。
4.3.5 采用 I/O 通道的多级总线
总线结构
- 支持 CPU、主存和多个 I/O 通道之间的数据传送
- 支持 I/O 通道和 I/O 控制器,以及 I/O 控制器和设备之间的数据传送
4.4 I/O 软件的实现层次
4.4.1 I/O 软件设计
设计目标
高效率: 改善设备效率,尤其是磁盘 I/O 操作的效率。
通用性: 用统一的标准来管理所有设备。
设计思路
把软件组织成层次结构,低层软件用来屏蔽硬件细节,高层软件向用户提供简洁、友善的界面。
设计原则
- 设备无关性: 编写访问文件的程序与具体设备无关
- 出错处理: 低层软件能处理的错误不让高层软件感知
- 同步/异步传输: 支持阻塞和中断驱动两种工作方式
- 缓冲技术: 建立数据缓冲区,提高吞吐率
4.4.2 I/O 软件层次结构
4.5 I/O 软件的实现
4.5.1 I/O 中断处理程序
概述
- 位于 OS 底层,与硬件设备密切相关,与系统其余部分尽可能少地发生联系
- 进程请求 I/O 操作时,通常被挂起,直到数据传输结束后并产生 I/O 中断时,操作系统接管 CPU 后转向中断处理程序
- 当设备向 CPU 提出中断请求时,CPU 响应请求并转入中断处理程序
功能
检查设备状态寄存器内容,判断产生中断的原因,根据 I/O 操作的完成情况进行相应的处理。
- (错误)如果数据传输有错,向上层软件报告设备的出错信息,实施重新执行
- (正常结束)如果正常结束,唤醒等待传输的进程,使其转换为就绪态
- (未结束)如果有等待传输的 I/O 命令,通知相关软件启动下一个 I/O 请求
4.5.2 设备驱动程序
概述
- 设备驱动程序包括与设备密切相关的所有代码
- 从独立于设备的软件中接收并执行 I/O 请求
- 逻辑 I/O(用户提交)转化为物理 I/O
- 监督设备是否正确执行,管理数据缓冲区,进行必要的纠错处理
设备驱动程序与中断处理程序的区别
中断处理程序: 响应并原子处理 I/O 中断
设备驱动程序: 负责设备中具体的处理细节
功能
- 设备初始化
- 在系统初次启动或设备传输数据时,预置设备和控制器以及通道状态
- 执行设备驱动例程
- 负责启动设备,进行数据传输
- 对于具有通道方式的设备,还负责生成通道指令和通道程序,启动通道工作
- 调用和执行中断处理程序
- 负责处理设备和控制器及通道所发出的各种中断
层次
每个设备驱动程序只处理一种设备,或者一类紧密相关的设备。
整体驱动程序
- 直接向 OS 提供接口和控制硬件,适用于功能简单的驱动程序,效率较高,但较难迁移
分层驱动程序
- 将驱动程序分成多层,放在栈中,系统接到 I/O 请求时先调用栈顶的驱动程序,栈顶的驱动程序可以直接处理请求或向下调用更低层的驱动程序,直至请求被处理。
- 适用于功能复杂、重用性要求较高的驱动程序,结构清晰且便于移植,但会增加一部分系统开销。
4.5.3 独立于设备的 I/O 软件
执行适用于所有设备的常用 I/O 功能,并向用户层软件提供一致性接口。
功能
- 设备命名: 通过路径名寻址设备
- 设备保护: 检查用户是否有权访问所申请设备
- 提供与设备无关的数据单位: 字符数量,块尺寸
- 缓冲技术: 传输速率,时间约束,不能直接送达目的地
- 设备分配和状态跟踪: 分配不同类型的设备
- 错误处理和报告: 驱动程序无法处理的错误
4.5.4 用户空间的 I/O 软件
库函数
- 一小部分 I/O 软件不在 OS 中,是与应用程序链接在一起的库函数,甚至完全由运行于用户态的程序组成。
- 系统调用通常由库函数封装后供用户使用,封装函数只是将系统调用所用的参数放在合适位置,然后执行访管指令来陷入内核,再由内核函数实现真正的 I/O 操作。
SPOOLing 软件
在内核外运行的系统 I/O 软件,采用预输入、缓输出和井管理技术,通过创建守护进程和特殊目录解决独占型设备的空占问题。
4.6 I/O 缓冲区
4.6.1 I/O 缓冲区概述
提出原因
为了解决 CPU 与设备之间速度不匹配的矛盾,协调逻辑记录大小和物理记录大小不一致的问题(每次读入大小),提高 CPU 和设备并行性,减少 I/O 操作对 CPU 的中断次数,放宽对 CPU 中断响应时间的要求。
缓冲区位置
在内存中开辟的存储区,专门用于临时存放 I/O 操作的数据。
缓冲区的两个操作
- 写操作: 将数据送至缓冲区,直到装满,进程继续计算,同时系统将缓冲区的内容写到设备上。
- 读操作: 系统将设备上的物理记录读至缓冲区,根据要求将当前所需要的数据从缓冲区中读出并传送给进程。
4.6.2 单缓冲区
只有一个缓冲区,I/O设备 OS,OS 用户进程,两个过程不能同时进行,效果一般。
4.6.3 双缓冲区
使用两个缓冲区,I/O 先将数据传给 Buffer1,Buffer1 将数据传给用户的同时,I/O 将数据传给 Buffer2,使得 “I/O设备 OS”,“OS 用户” 两个过程可以并行,效率提高。
4.6.4 循环缓冲区
循环缓冲区,I/O 给 Buffer2 数据,Buffer1 把数据给用户;I/O 给 Buffer3 数据时,Buffer2 把数据给用户。
4.7 设备独立性
设备独立性的本质是对于 “用户申请物理设备” 这一过程再加了一层封装。
4.7.1 设备独立性概念
用户执行作业前不指定物理设备,而是指定逻辑设备,使得用户作业和物理设备分离开,再通过其它途径建立逻辑设备和物理设备之间的映射。
条件
设备管理中需要将逻辑设备名转换为物理设备名,因此系统需要提供逻辑设备名和物理设备名的对应表以供转换使用。
4.7.2 设备独立性优点
- 应用程序通用性更强。
- 应用程序与具体物理设备无关,系统增减或变更设备时不需要修改源程序。
- 易于应对 I/O 设备故障,提高系统可靠性。
- 增加设备分配的灵活性,更有效地利用设备资源,实现多道程序设计。
4.8 独占型外设的分配
4.8.1 独占型外设概念
独占型外设: 只能由一个进程独占式使用
共享设备: 可以让多个进程同时使用。此类设备的管理主要是驱动调度和实施驱动,一般不必分配。
计算机中绝大多数设备属于独占型设备,如键盘、鼠标,而只有磁盘、光盘、磁带库不属于独占设备。
4.8.2 设备分配方式
静态分配
静态分配: 进程运行前申请
- 实现简单,能够防止系统发生死锁,但会降低设备利用率。
动态分配
动态分配: 进程随用随申请
- 提高设备利用率,但可能发生死锁问题。
例如: 一个系统只有一台磁带机和一台打印机,现在有两个进程 A 和 B 执行时都需要这两台机器,而 A 动态分配到了磁带机,B 动态分配到了打印机,此时就发生了死锁。
4.8.3 设备分配的数据结构
设备表
每条设备都有各自的设备表,用来登记这类设备中的每台物理设备。
内容: 物理设备名、逻辑设备名、占有设备的进程号、是否分配、好/坏标志
设备类表
每类设备对应于设备类表中的一栏。
内容: 设备类、总台数、空闲台数、设备表起始地址
支持设备独立性时才会使用设备类表。
4.9 磁盘的物理结构
4.9.1 磁盘结构
盘片
- 磁盘由多个盘片组成
- 每个盘片被划分为多个同心圆结构的磁道
- 不同盘片上位于相同位置的磁盘构成的圆柱体称为柱面
扇区、簇(多个相邻扇区)
每个磁道分为固定多个或不等个数的扇区,为了对大量扇区寻址,OS 将相邻扇区组合成簇存储文件。
磁盘物理块地址
- (柱面号, 磁头号, 扇区号): 表示移动臂在哪一个柱面上,磁头定位了哪个盘面,扇区定位了哪一个具体的物理记录。
- (0面0道1扇区): 0盘面,0柱面,1扇区(盘面、柱面从 0 开始编号,扇区从 1 开始编号)
4.9.2 磁盘读取数据流程
磁盘读取数据时,磁头必须定位到指定的磁道上的指定扇区的开始处。
具体过程
- 寻道: 控制移动臂到达指定柱面,选择磁头号
- 旋转: 等待要读写的扇区旋转到磁头下
- 数据传送
4.9.3 磁盘存取时间
磁盘完成数据读写所需时间 = 寻道时间 + 旋转延迟 + 传送时间
存取时间
寻道时间
磁盘旋转速度(转/秒)
要传送的字节数
一个磁道中的字节数
4.10 磁盘的驱动调度
4.10.1 磁盘调度
调度原因
磁盘可能同时接收到若干 I/O 请求,如果随机选择并响应 I/O 请求,可能得到最坏的性能。
调度策略
磁盘存取时间主要是寻道与旋转,因此调度策略主要是移臂调度和旋转调度。
4.10.2 移动臂调度
目的
使移动臂的移动时间最短,从而减少寻道总时间。
(1)先进先出
- 移动臂式随机移动,寻道性能较差
- 按顺序处理请求,对所有进程公平
(2)最短查找时间优先
- 先执行查找时间最短的请求,具有较好的寻道性能
- 存在 “饥饿” 现象
(3)扫描算法 ———— 单向扫描
- 扫描臂总向一个方面扫描,归途中不提供服务
- 适用于不断有大量柱面均匀分布的请求的情形
(4)扫描算法 ———— 双向扫描
该算法是对单向扫描的一个改进。
- 移动臂每次向一个方向移动,遇到最近的 I/O 请求便进行处理,到达最后一个柱面后再向相反方向移动
- 对最近扫描所跨越区域的请求响应较慢
(5)电梯调度
对扫描算法进行一个终版优化。电梯调度算法是解决移臂调度的经典算法。
- 无请求时移动臂停止不动,有请求时按电梯规律移动
- 每次选择沿移动臂的移动方向最近的柱面
- 如果当前移动方向上没有但相反方向有请求时,改变移动方向
4.10.3 旋转调度
目的
使得旋转延迟总时间最少。
(1)循环排序
- 通过优化 I/O 请求排序,在最少旋转圈数内完成位于同一柱面的访问请求。
- 旋转位置测定硬件和多磁头同时读写技术有利于提高旋转调度的效率。
(2)优化分布
通过优化信息在存储空间的排列方式来减少旋转延迟。
- 交替排序
- 如果沿着磁道按序对扇区编号,可能由于磁盘转速太快,造成处理当前扇区的数据时,下一个扇区已经跳过,需要再转一圈才能继续读数据。
- 因此,对扇区编号时会间隔编号,例如 2:1 表示相邻编号之间会间隔 1 个扇区,3:1 表示会间隔 2 个扇区。
- 相邻扇区成簇
- 把相邻多个扇区集中成簇一起读写
- 柱面集中存储
- 连续记录数据时,先记录在同一柱面的不同磁道上,然后再更换柱面
- 减少数据读写时的移臂操作
4.11 SPOOLing 系统
SPOOLing 系统的实质就是用缓冲区实现 “输入预先完成,输出成批输出” 的效果,提高效率。
本质上还是将一个 “输入-执行-输出” 的连续过程切分为三个离散过程,来保证 CPU 与外设的并发性。
4.11.1 虚拟设备
虚拟设备: 使用一类物理设备模拟另一类物理设备的技术。
- 内存卡模拟磁盘
- 块设备模拟字符设备
- 输入输出重定向(文件)
4.11.2 SPOOLing 系统结构
五大组成部件
为存放输入、输出数据,系统在磁盘上开辟输入井和输出井,用作缓冲区。
- 输入井
- 输出井
- 预输入程序: 将数据从输入设备传送到磁盘输入井
- 预输出程序: 将数据从磁盘输出井传送到输出设备
- 井管理程序: 控制作业和井之间的数据交换(I/O 重定向)
SPOOLing 结构功能
- 预输入
- OS 将作业需要的输入数据成批从输入设备上预先输入到磁盘的输入缓冲区中暂存
- 调度作业执行时,作业使用数据不必再启动输入设备,从磁盘的输入缓冲区读入即可
- 缓输出
- 作业不启动输出设备,只是将输出数据暂存到磁盘输出缓冲区中
- 作业执行完毕后,数据由 OS 成批输出
- 优点
- 设备利用率提高
- 作业运行时间缩短
- 每个作业都感觉各自拥有所需的独占设备
4.11.3 打印 SPOOLing 系统
打印机空占问题
如果用户进程通过打开打印机的设备文件来申请和使用打印机,往往会造成该进程打开设备文件后长达数小时不用,但其他进程又无法使用打印机。
解决方案
- 打印机守护进程是唯一有特权使用打印机设备的进程
- 打印文件前,用户进程先产生完整的待输出文件,并存放在打印目录下
- 打印机空闲时,启动守护进程,打印待输出文件
4.12 批处理系统作业管理
多道批处理 OS 的作业管理
- 作业说明语言: 用于作业控制的语言
- 作业说明书: 刻画具体作业的控制方式
- 作业状态
- 输入状态(预输入)
- 后备状态(空闲)
- 运行状态(运行)
- 完成状态(缓输出)
- 作业调度: 从后备状态作业中选择部分进入运行状态(前提是资源充足)
- 作业调度算法: 优先数、短作业、响应比、设备搭配等
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- SpringBoot整合JWT 一
第一步:创建项目 Maven依赖...
2024/4/30 2:03:25 - K-D tree小结
介绍 是一个能维护多维空间中点集的数据结构。 各方面操作复杂度据说都比较玄学。 构造 假设现在要维护的是一个 kkk 维点的点集。 K-D tree会构造成一个类似平衡树的样子,但是一般的平衡树只有一个键值,而这里每个点有 kkk 维的坐标,看起来不是很好比较。 容易想到的方法是…...
2024/5/6 0:46:22 - leetcode【每日一题】110. 平衡二叉树 Java
题干 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7]3/ \9 20/ \15 7 返回 true 。示例 2: 给定二叉树 [1,2,2,3,3,null,n…...
2024/4/29 1:03:08 - 深度学习框架Tensorflow学习与应用
视频地址:https://www.bilibili.com/video/av20542427/课程大纲: 第一课 Tensorflow简介,Anaconda安装,Tensorflow的CPU版本安装。 第二课 Tensorflow的基础使用,包括对图(graphs),会话(session),张量(tensor),变量(Variable)的一些解释和操作。 第三课 Tensorflow线性回归…...
2024/5/7 16:35:51 - CSS文字阴影
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>CSS文字阴影</title><style> p{f…...
2024/5/2 15:31:35 - 我的T265 win10上手操作
我的T265 win10上手操作今天T265到手了,我决定先在win10上玩玩先按这个教程弄https://blog.csdn.net/sinat_16643223/article/details/107435808按教程说的进这个页面https://www.intelrealsense.com/zh-hans/developers/然后我点了SDK2.0跳到这个页面,它直接显示的就是win…...
2024/5/7 16:36:01 - TOEFL TV: The Official TOEFL iBT Channel TOEFL 官方Youtube账号
TOEFL TV: The Official TOEFL iBT Channelhttps://www.youtube.com/channel/UCEI_IuJ2jdqjYl0T-k04RLw如果你在准备TOEFL考试,TOEFL官方提供的视频是非常值得一看的。孙子兵法中 有一条是知彼知己 百战不殆无论是考试,工作 还是生活对事物的深刻理解,有助于你达到你的目标,…...
2024/4/30 2:03:10 - HYPOTHESES ON THE EXISTENCE OF ADVERSARIAL EXAMPLES
对抗样本存在的猜想最初的猜想- low-probability spaces一开始,对抗样本被认为存在于低概率空间,难以通过对输入周围空间的随机采样来获取。寻找公式2的解决方案 包含了输入空间来寻找对抗样本,使得solver能够找到扰动。而最先进的dnn模型已经使用数据增强方法来增加它们的鲁…...
2024/4/30 2:03:06 - 折叠Visual Studio代码中的所有方法
本文翻译自:Collapse all methods in Visual Studio Code In Visual Studio Professional, we have a shortcut key, Ctrl + M Ctrl + O to collapse all methods and properties in a class. 在Visual Studio Professional中,我们有一个快捷键Ctrl + M Ctrl + O来折叠类中的…...
2024/5/5 12:00:07 - 探索 Android 网络优化方法
目录前言 1. 网络优化的三个要点 1. 多维 网络优化应该是多维的,一般情况下,一谈到网络优化,大部分人首先想到的就是流量消耗,但是实际上流量消耗多少只是网络优化的其中一个维度。 只对流量消耗一个维度进行优化是不够的,甚至有的团队即便在流量优化上也没有做好,比如对…...
2024/5/5 9:20:15 - Flutter引用外部包
Flutter外部包网站:https://pub.dev/ Flutter使用pubspec文件管理应用程序的assets(资源,如图片、package等)。1.引用外部包的方法 在pubspec.yaml,添加依赖项,如添加english_words包:dependencies:flutter:sdk: flutterenglish_words: ^3.1.02.安装依赖 在Android Studio…...
2024/5/7 19:43:45 - Intellij IDEA中使用Protobuf的正确姿势
Intellij IDEA中使用Protobuf的正确姿势一、.proto文件语法高亮显示需要安装Protobuf Support插件依次点击Intellij中的“File”-->"Settings"-->"Plugins"-->"Browse repositories",如下所示:输入Protobuf,如下所示安装完后,重启I…...
2024/5/6 23:14:30 - 触发器
触发器: 概念: 触发器是一种特殊类型的存储过程,在满足定义条件操作时触发,并自动执行触发器中预先设定好的定义的语句集合。 1、触发器是特殊的存储过程 2、触发器是在对表操作时,满足条件就科一自动调用预先编译的sql语句触发器是个被动技能:被动技能就是提前编译好触发…...
2024/5/7 18:53:31 - Solr自动更新索引
前言 几年前在集成solr版本4.x和6.x 时,曾搞过定时自动更新索引的功能;时过境迁,这次基于solr8.5.1版,来搞 定时自动更新索引的功能,顺便做个笔记,省得下次又需要采坑本文solr版本基于8.5.1solr定时更新索引的思路 具体思路:通过定时器定时调用 resultful接口,从而让solr…...
2024/5/7 23:54:14 - python---生成器函数 “for i in generator()”,执行步骤分析
我想说现在在网上查找一个问题,全是copy的一堆定义和概念,读了一圈还是蒙。至少也得有个演示代码吧(吐槽)。。。。 直接来看代码 def foo(num):print("starting")while num<10:num=num+1yield num #yeild关键之->生成器函数print("end") for …...
2024/5/6 15:07:23 - Qt 大于等于0的正整数 正则表达式
Qt 大于等于的正整数 正则表达式 QRegExp regExp1(“0|[1-9]\d+$”);...
2024/5/5 15:30:58 - 手撸一个SpringBoot缓存系统
缓存是最直接有效提升系统性能的手段之一。个人认为用好用对缓存是优秀程序员的必备基本素质。 本文结合实际开发经验,从简单概念原理和代码入手,一步一步搭建一个简单的二级缓存系统。一、通用缓存接口1、缓存基础算法 FIFO(First In First Out),先进先出,和OS里的FIFO思…...
2024/5/5 15:10:11 - 安装Java开发环境 IntelliJ IDEA(以Java1.8为例)
文章目录准备环境安装Java编译器添加Java环境变量安装ideaHello World! 准备环境 Windows10主机 java软件包,IntelliJ IDEA安装包安装Java编译器添加Java环境变量安装idea此时idea安装完成,进行激活即可(可以支持正版,或者…)Hello World!...
2024/4/30 2:02:30 - Java基础 throw与throws以及异常处理
Java基础 throw与throws以及异常处理 throw throw通常用与在java程序中抛出异常,非捕获。 public static void main(String[] args) {String s = "abc";if(s.equals("abc")) {throw new NumberFormatException();} else {System.out.println(s);}//functi…...
2024/4/30 2:02:26 - 在Windows实现类似MacOS的时间壁纸,编写脚本自定义自己喜欢的壁纸
在目前的Windows 10系统版本上,系统原生还没有支持时间壁纸,但是我们只要下载安装一个WinDynamicDesktop软件就可以在自己的Windows 10系统上,体验到MacOS一样的时间壁纸功能。 通过该软件,可以实现日出、白天、日落、夜晚显示不一样的壁纸。 1.准备工作 GitHub下载WinDyna…...
2024/5/6 3:25:13
最新文章
- JavaScript中如何实现函数缓存,函数缓存有哪些应用场景
函数缓存就是将函数运算的结果进行缓存。 本质上是利用空间换时间。 常用于缓存数据计算结果和缓存对象。缓存只是一个临时的数据存储,它保存数据,为了方便将来对该数据的请求时,可以更快的得到处理。 缓存函数 实现一个缓存函数…...
2024/5/8 2:57:40 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - 数据可视化-ECharts Html项目实战(11)
在之前的文章中,我们学习了如何在ECharts中特殊图表的双y图以及自定义形状词云图。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 数据可视化-ECh…...
2024/5/2 20:21:56 - CSS3 高级- 复杂选择器、内容生成、变形(transform)、过渡(transition)、动画(animation)
文章目录 一、复杂选择器兄弟选择器:选择平级元素的唯一办法属性选择器:1、通用:基本用不着,太泛了2、自定义:4种伪类选择器:1、目标伪类:2、结构伪类:3、元素状态伪类:4、伪元素选择器:应用于文字,使网页看起来想杂志5、否定伪类:选择器:not([本选择器的条件]) /*…...
2024/5/7 6:09:12 - 【C++】C++中的list
一、介绍 官方给的 list的文档介绍 简单来说就是: list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中…...
2024/5/5 8:49:36 - 416. 分割等和子集问题(动态规划)
题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满ÿ…...
2024/5/7 19:05:20 - 【Java】ExcelWriter自适应宽度工具类(支持中文)
工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...
2024/5/7 22:31:36 - Spring cloud负载均衡@LoadBalanced LoadBalancerClient
LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...
2024/5/8 1:37:40 - TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案
一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...
2024/5/7 14:19:30 - VB.net WebBrowser网页元素抓取分析方法
在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...
2024/5/8 1:37:39 - 【Objective-C】Objective-C汇总
方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...
2024/5/7 16:57:02 - 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...
2024/5/7 14:58:59 - 【ES6.0】- 扩展运算符(...)
【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数࿰…...
2024/5/7 1:54:46 - 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?
文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...
2024/5/7 21:15:55 - Go语言常用命令详解(二)
文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...
2024/5/8 1:37:35 - 用欧拉路径判断图同构推出reverse合法性:1116T4
http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai 和 a i 1 a_{i1} ai1 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然࿰…...
2024/5/7 16:05:05 - 【NGINX--1】基础知识
1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...
2024/5/7 16:04:58 - Hive默认分割符、存储格式与数据压缩
目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...
2024/5/8 1:37:32 - 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...
2024/5/7 16:05:05 - --max-old-space-size=8192报错
vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...
2024/5/8 1:37:31 - 基于深度学习的恶意软件检测
恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...
2024/5/8 1:37:31 - JS原型对象prototype
让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...
2024/5/7 11:08:22 - C++中只能有一个实例的单例类
C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...
2024/5/7 7:26:29 - python django 小程序图书借阅源码
开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图࿰…...
2024/5/8 1:37:29 - 电子学会C/C++编程等级考试2022年03月(一级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...
2024/5/7 17:09:45 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57