当前位置: 首页 > news >正文

操作系统 | 学习笔记 | | 王道 | 5.3 磁盘和固态硬盘

5.3 磁盘和固态硬盘

5.3.1 磁盘

img

  1. 磁盘结构

    image-20230921170548395

    • 磁盘:磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据

    • 磁道:磁盘的盘面被划分成一个个磁道。这样的一个“圈”就是一个磁道

    • 扇区:一个磁道又被划分成一个个扇区,每个扇区就是一个“磁盘块”各个扇区存放的数据量相同

      最内侧磁道上的扇区面积最小,因此数据密度最大

    • 盘面:磁盘有多个盘片"摞"起来,每个盘片有两个盘面。

    • 柱面:所有盘面中相对位置相同的磁道组成柱面。

  2. 如何在磁盘中读/写数据

    需要把“磁头”移动到想要读/写的扇区所在的磁道。磁盘会转起来,让目标扇区从磁头下面划过,才能完成对扇区的读/写操作。

  3. 磁盘的物理地址:磁盘地址用“柱面号•盘面号•扇区号”表示,可根据该地址读取一个“块”

    img

    • ①根据“柱面号”移动磁臂,让磁头指向指定柱面;
    • ②激活指定盘面对应的磁头;
    • ③磁盘旋转的过程中,指定的扇区会从磁头下面划过,这样就完成了对指定扇区的读/写。
  4. 磁盘的分类

    • 磁头是否移动
      • 磁头可以移动的称为活动头磁盘。磁臂可以来回伸缩来带动磁头定位磁道
      • 磁头不可移动的称为固定头磁盘。这种磁盘中每个磁道有一个磁头
      • image-20240923100926215
    • 根据盘片是否可更换
      • 固定盘磁盘
      • 可换盘磁盘
5.3.2 磁盘管理

img

  1. 磁盘初始化

    一个新的磁盘只是一个磁性记录材料的空白盘。在磁盘可以存储数据之前,必须将它分成扇区,以便磁盘控制器能够进行读写操作,这个过程称为低级格式化(或称物理格式化)。

    低级格式化为每个扇区使用特殊的数据结构,填充磁盘。每个扇区的数据结构通常由头部、数据区域(通常为512B大小)和尾部组成。头部和尾部包含了一些磁盘控制器的使用信息(包含管理扇区需要的数据结构和校验码)。

  2. 分区

    在可以使用磁盘存储文件之前,操作系统还要将自己的数据结构记录到磁盘上,分为两步:

    • 第一步是,将磁盘分为由一个或多个柱面组成的分区(即我们熟悉的C盘、D盘等形式的分区),每个分区的起始扇区和大小都记录在磁盘主引导记录的分区表中
    • 第二步是,对物理分区进行逻辑格式化创建文件系统),操作系统将初始的文件系统数据结构存储到磁盘上,这些数据结构包括空闲空间和已分配的空间以及一个初始为空的目录。

    因扇区的单位太小,为了提高效率,操作系统将多个相邻的扇区组合在一起,形成一簇(在Linux中称为块)。为了更高效地管理磁盘,一簇只能存放一个文件的内容,文件所占用的空间只能是簇的整数倍;如果文件大小小于一簇(甚至是0字节),也要占用一簇的空间。

    image-20240923103233427

  3. 引导块

    计算机启动时需要运行一个初始化程序(自举程序),它初始化CPU、寄存器、设备控制器和内存等,接着启动操作系统。为此,自举程序找到磁盘上的操作系统内核,将它加载到内存, 并转到起始地址,从而开始操作系统的运行。

    自举程序通常存放在ROM中,为了避免改变(更新)自举代码而需要改变ROM硬件的问题,通常只在ROM中保留很小的自举装入程序,而将完整功能的引导程序保存在磁盘的启动块上,启动块位于磁盘的固定位置。具有启动分区的磁盘称为启动磁盘或系统磁盘(C:盘)。

    即自举装入程序很小,复杂度低,可以保证不出错,如果需要修改自举程序的话,就只需要改引导块中的固定位置,而不需要该ROM,会让自举程序的更新变得更加简单。

    • Windows允许将磁盘分为多个分区,有一个分区为引导分区,它包含操作系统和设备驱动程序。

    • Windows系统将引导代码存储在磁盘的第0号扇区,它称为主引导记录(MBR)。

    • 引导首先运行ROM中的代码,这个代码指示系统从MBR中读取引导代码。

      除了包含引导代码,MBR还包含:一个磁盘分区表和一个标志(以指示从哪个分区引导系统)

    • 当系统找到引导分区时,读取分区的第一个扇区,称为引导扇区,并继续余下的引导过程,包括加载各种系统服务。

  4. 坏块

    由于磁盘有移动部件且容错能力弱,因此容易导致一个或多个扇区损坏。

    • 对于简单磁盘,如采用IDE控制器的磁盘,坏块可手动处理,如MS-DOS的Format命令执行逻辑格式化时会扫描磁盘以检查坏块。坏块在FAT表上会标明,因此程序不会使用它们
    • 对于复杂的磁盘,控制器维护磁盘内的坏块列表。这个列表在出厂低级格式化时就已初始化,并在磁盘的使用过程中不断更新。低级格式化将一些块保留作为备用,操作系统看不到这些块。
      控制器可以采用备用块来逻辑地替代坏块,这种方案称为扇区备用

    对坏块的处理实质上就是用某种机制使系统不去使用坏块

5.3.3 磁盘调度算法

image-20240923110705361

img

只有寻道时间是操作系统可以优化的

  1. 先来先服务(FCFS)

    根据进程请求访问磁盘的先后顺序进行调度。

    image-20230922090407192

    • 优点:公平;如果请求访问的磁道比较集中的话,算法性能还算过的去
    • 缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长。
  2. 最短寻找时间优先(SSTF)

    SSTF算法会优先处理的磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。(其实就是贪心算法的思想,只是选择眼前最优,但是总体未必最优)

    image-20230922090856029

    • 优点:性能较好,平均寻道时间短

    • 缺点:可能产生“饥饿”现象,磁头有可能在一个小区域内来回来去地移动。

      Eg:本例中,如果在处理18号磁道的访问请求时又来了一个38号磁道的访问请求,处理38号磁道的访问请求时又来了一个18号磁道的访问请求。如果有源源不断的18号、38号磁道的访问请求到来的话,150、160、184号磁道的访问请求就永远得不到满足,从而产生“饥饿”现象。

  3. 扫描算法(SCAN)

    又称电梯算法,只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。

    image-20230922091629172

    • 优点:性能较好,平均寻道时间较短,不会产生饥饿现象
    • 缺点:
      • ①只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了。
      • ②SCAN算法对于各个位置磁道的响应频率不平均(如:假设此时磁头正在往右移动,且刚处理过90号磁道,那么下次处理90号磁道的请求就需要等磁头移动很长一段距离;而响应了184号磁道的请求之后,很快又可以再次响应184号磁道的请求了)
  4. LOOK调度算法

    如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。(边移动边观察,因此叫 LOOK)

    image-20230922092519102

    • 优点:比起SCAN算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短
  5. 循环扫描算法(C-SCAN)

    只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求。

    image-20230922092744277

    • 优点:比起SCAN来,对于各个位置磁道的响应频率很平均。
    • 缺点:只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了;并且,磁头返回时其实只需要返回到18号磁道即可,不需要返回到最边缘的磁道。另外,比起SCAN算法来,平均寻道时间更长。
  6. C-LOOK 调度算法

    如果磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可。

    image-20240923110535105

    • 优点:比起C-SCAN算法,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短

减少磁盘延迟时间的方法

image-20240923114524479

  • 磁盘地址结构的设计:
    • 为什么磁盘的物理地址是(柱面号,盘面号,扇区号)而不是(盘面号,柱面号,扇区号)?
    • 答:读取地址连续的磁盘块时,采用这样的的地址结构可以减少磁头移动消耗的时间(其实是减少了磁头移动到其他磁道的次数,从而减少了时间)
    • 还有是因为高位地址不容易发生改变,一般连续存储的都是低位地址的加加减减,所以才把柱面号,也就是磁道号放在高位,一般就不动这个磁道号,也就节省了磁头移动时间
  • 方法
    • 交替编号
      • 具体做法:让编号相邻的扇区在物理上不相邻
      • 原理:磁头读入一个扇区数据后需要一小段时间处理,如果逻辑上相邻的扇区在物理上也相邻,则读入几个连续的逻辑扇区,可能需要很长的“延迟时间”(因为读完一个不能立马读连续的下一个,必须等着第二圈过来才能读)
    • 错位命名
      • 具体做法:让相邻盘面的扇区编号"错位"
      • 原理:与"交替编号"的原理相同。“错位命名法"可降低延迟时间

文件的访问速度是衡量文件系统性能最重要的因素,提高的措施:

  1. 改进文件的目录结构及检索目录的方法,以减少对目录的查找时间
  2. 选取好的文件存储结构,以提高对文件的访问速度
  3. 提高磁盘I/O速度,以实现文件中的数据在磁盘和内存之间快速传送

提高磁盘IO速度的方法

1)采用磁盘高速缓存。
2)调整磁盘请求顺序(磁盘调度算法)。
3)提前读。在读磁盘当前块时,将下一磁盘块也读入内存缓冲区。
4)延迟写。仅在缓冲区首部设置延迟写标志,然后释放此缓冲区并将其链入空闲缓冲区链表的尾部,当其他进程申请到此缓冲区时,才真正将缓冲区信息写入磁盘块。
5)优化物理块的分布。除了上面介绍的扇区编号优化,当文件采用链接方式和索引方式组织时,应尽量将同一个文件的盘块安排在一个磁道上或相邻的磁道上,以减少寻道时间。另外,将若干盘块组成簇,按簇对文件进行分配,也可减少磁头的平均移动距离。
6)虚拟盘。是指用内存空间去仿真磁盘,又叫RAM盘。常用于存放临时文件。
7)采用磁盘阵列RAID。由于可采用并行交叉存取,因此能大幅提高磁盘I/O速度。
5.3.4 固态硬盘

img

静态磨损均衡算法通常比动态磨损均衡算法的表现更优秀。

  1. 固态硬盘的特性

    • 原理:固态硬盘(SSD)是基于闪存技术Flash Memory,属于电可擦除ROM,即EEPROM

    • 组成:

      image

      • 闪存翻译层:负责翻译逻辑块号,找到对应页(Page)
      • 存储介质:多个闪存芯片(Flash Chip);每个芯片包含多个块(block);每个块包含多个页(page)。
    • 读写性能特性:

      • 数据是以页为单位读写的。相当于磁盘的“扇区”
      • 以块(bock)为单位“擦除“,擦干净的块,其中的每页都可以写一次,读无限次。
      • 支持随机访问,系统给定一个逻辑地址,闪存翻译层可通过电路迅速定位到对应的物理地址
      • 读快、写慢,但都比机械磁盘要快(因为没有机械操作)。要写的页如果有数据,则不能写入,需要将块内其他页全部复制到一个新的(擦除过的)块中,再写入新的页
    • 与机械硬盘对比

      • SSD读写速度快,随机访问性能高,用电路控制访问位置;机诚硬盘通过移动磁臂旋转磁盘控制访问位置,有寻道时间和旋转延迟
      • SSD安静无噪音、耐摔抗震、能耗低、造价更贵
      • SSD的一个"块"被擦除次数过多(重复写同一个块)可能会坏掉,而机械硬盘的扇区不会因为写的次数太多而坏掉
  2. 磨碎均衡

    思想:将“擦除”平均分布在各个块上,以提升使用寿命

    • 动态磨损均衡:写入数据时,优先选择累计擦除次数少的新闪存块。
    • 静态磨损均衡:SSD监测并自动进行数据分配、迁移,让老旧的闪存块承担以读为主的储存任务,让较新的闪存块承担更多的写任务

    静态比动态更优秀

    例:某固态硬盘采用磨损均衡技术,大小为240B=1TB,闪存块的擦写寿命只有210=1K次。某男子平均每天会对该固态硬盘写237B=128GB数据。在最理想的情况下,这个固态硬盘可以用多久?

    SSD采用磨损均衡技术,最理想情况下,SSD中每个块被擦除的次数都是完全均衡的。
    1 T / 128 G = 8 1T/128G=8 1T/128G=8
    因此,平均8天,每个闪存块需要擦除一次。

    每个闪存块可以被擦除1K次,因此经过8K天,约23年,固态使用到寿命。

以下无聊的时候看看了解一下

使用机械硬盘的设备:

  1. 台式电脑:许多台式电脑仍然使用机械硬盘作为主要的存储设备,特别是对于那些对存储容量有较高要求但对速度要求不是极高的用户。机械硬盘以其大容量和相对较低的成本成为台式电脑中的常见选择。
  2. 服务器和数据中心:在企业服务器和数据中心中,机械硬盘也得到了广泛应用。虽然固态硬盘在速度和可靠性方面具有优势,但机械硬盘的大容量和低成本使得它们在需要海量数据存储和长时间运行的服务器环境中仍然具有竞争力。特别是在进行批量读写和长时间存储数据的场合,机械硬盘的性价比更高。
  3. 安防监控系统:安防监控系统通常需要长时间连续录制视频,并存储大量的视频数据。由于这些系统对存储容量的需求远大于对速度的需求,因此机械硬盘成为了一个理想的选择。
  4. 特定用途的笔记本电脑:虽然大多数现代笔记本电脑都倾向于使用固态硬盘,但一些特定用途的机型,如某些工作站或图形设计电脑,可能会选择使用机械硬盘来提供额外的存储空间,同时结合固态硬盘来提高系统性能。

使用固态硬盘的设备:

  1. 笔记本电脑:随着固态硬盘技术的不断发展和价格的逐渐下降,越来越多的笔记本电脑开始采用固态硬盘作为主硬盘。固态硬盘能够显著提高系统的启动速度、文件传输速度和整体性能,使笔记本电脑更加轻薄、高效。
  2. 超薄本和二合一设备:这类设备对体积和重量有严格的要求,因此固态硬盘成为了首选的存储设备。固态硬盘的小巧体积和低功耗特性使得这些设备能够实现更长的续航时间和更轻薄的机身设计。
  3. 服务器和数据中心:虽然机械硬盘在服务器和数据中心中也有应用,但固态硬盘凭借其高速的读写能力和出色的稳定性,正在逐渐取代机械硬盘成为这些领域的新宠。固态硬盘能够大大提高服务器和数据中心的性能和效率,提升用户体验和运营效率。
  4. 移动设备:随着移动设备的普及和性能要求的提高,固态硬盘也逐渐被应用于智能手机、平板电脑等移动设备中。固态硬盘的快速读写速度和低功耗特性能够提高移动设备的运行效率和续航能力。
  5. 工业控制领域和航空航天领域:这些领域对设备的可靠性和稳定性要求非常高,固态硬盘能够提供更加稳定和可靠的存储服务。同时,固态硬盘具有较长的使用寿命和较低的维护成本,也更加适合这些领域的使用需求。
5.3.5 本节小结

1)在磁盘上进行一次读/写操作需要哪几部分时间?其中哪部分时间最长?

   在磁盘上进行一次读/写操作花费的时间由寻道时间、延迟时间和传输时间决定。其中寻道时间是将磁头移动到指定磁道所需要的时间,延退时间是磁头定位到某一磁道的扇区(块号)所需要的时间,传输时间是从磁盘读出或向磁盘写入数据所经历的时间。一般来说,寻道时间因为要移动磁头臂,所以占用时间最长。

2)存储一个文件时,当一个磁道存储不下时,剩下部分是存在同一个盘面的不同磁道好还是存在同一个柱面上的不同盘面好?

   上一问经说到,寻道时间对于一次磁盘访问的影响是最大的,若存在同一个盘面的不同磁道,则磁头臂势必要移动,这样会大大增加文件的访问时间,而存在同一个柱面上的不同盘面就不需要移动磁道,所以一般情况下存在同一个柱面上的不同盘面更好。
错题总结或需要注意的点

1.只能顺序:磁带

可以按任意次序读写:光盘,U盘,磁盘

2.磁盘调度中对读写时间影响最大的是寻道时间(这个是机械运动,耗时)

3.硬盘的操作系统引导扇区产生在对硬盘进行高级格式化时

4.静态磨损均衡算法比动态的算法表现更加优秀

相关文章:

操作系统 | 学习笔记 | | 王道 | 5.3 磁盘和固态硬盘

5.3 磁盘和固态硬盘 5.3.1 磁盘 磁盘结构 磁盘:磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据 磁道:磁盘的盘面被划分成一个个磁道。这样的一个“圈”就是一个磁道 扇区:一个磁道又被划分成一个个扇区&am…...

【Oauth2整合gateway网关实现微服务单点登录】

文章目录 一.什么是单点登录?二.Oauth2整合网关实现微服务单点登录三.时序图四.代码实现思路1.基于OAuth2独立一个认证中心服务出来2.网关微服务3产品微服务4.订单微服务5.开始测试单点登录 一.什么是单点登录? 单点登录(Single Sign On&…...

WEB领域是不是黄了还是没黄

进入2024年后,WEB领域大批老表失业,一片哀嚎,个个饿的鬼叫狼嚎,为啥呢,下面是我个人的见解和看法。 中国程序员在应用层的集中 市场需求:中国的互联网行业在过去几年中经历了爆炸性增长,尤其是…...

Android系统:系统架构

文章目录 分层设计分块设计总结 分层设计 自上而下分为:应用层、应用架构层、系统运行层、硬件抽象层、Linux内核层 应用层 封装一系列系统App 应用架构层(Framework) 封装一系列运行App需要的Java框架 提供App开发需要的API 系统运行层(Libraries) 封装一系…...

NCNN 源码(1)-模型加载-数据预处理-模型推理

参考 ncnn 第一个版本的代码。 0 整体流程 demo:squeezenet ncnn 自带的一个经典 demo:squeezenet 的代码: // 网络加载 ncnn::Net squeezenet; squeezenet.load_param("squeezenet_v1.1.param"); squeezenet.load_model("squeezenet_…...

重修设计模式-结构型-享元模式

重修设计模式-结构型-享元模式 复用不可变对象,节省内存 享元模式(Flyweight Pattern)核心思想是通过共享对象方式,达到节省内存和提高性能的目的。享元对象需是不可变对象,因为它会被多处代码共享使用,要避…...

JavaScript 运算符

JavaScript 中的运算符可以根据其功能和用途分为几类。以下是主要的运算符类型及其用法: 1. 算术运算符 用于执行基本的数学运算。 : 加法 let sum 5 3; // 8- : 减法 let difference 5 - 3; // 2* : 乘法 let product 5 * 3; // 15/ : 除法 let quotient 5…...

3.js - 运动曲线

这个球,绕着这个红色的线圈转 代码 import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControlslet scene,camera,renderer,controls nulllet moon,earth null// 根据,一系列的点,创建曲线 le…...

免费ppt模板哪里找?职场必备这些利器

一眨眼,9月份的尾声渐近,无论是学生还是职场人士,都开始准备着新一轮的演讲和报告。在这个忙碌的时期,一份精美的PPT模板能够大幅提升你的工作效率,让你的演示更加引人入胜。 不用担心高昂的版权费用,市场…...

wampserve 配置本地域名,出现错误

概述 今天更换了电脑,在本地安装和配置docker的时候,想用自定义域名访问NGINX容器,127.0.0.1和localhost都可以访问,但是自定义域名无法访问, 接着去捯饬已经使用的wampserver的集成环境,出现了同样的问题…...

MySQL慢查询优化指南

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 前言 当遇到慢查询问题时,不仅影响服务效率,还可能成为系统瓶颈。作为一位软件工程师,掌握MySQL慢查询优化技巧至关重要。今天,我们就来一场“数据库加速之旅…...

怎么录制游戏视频?精选5款游戏录屏软件

对于热爱游戏的你来说,记录游戏中的精彩瞬间并分享给朋友或粉丝,无疑是一种享受。然而,在众多录屏软件中,如何选择最适合你的那一款?今天,我们就为大家精选了五款游戏录屏软件,需要的朋友快来选…...

论文阅读 - MDFEND: Multi-domain Fake News Detection

https://arxiv.org/pdf/2201.00987 目录 ABSTRACT INTRODUCTION 2 RELATED WORK 3 WEIBO21: A NEW DATASET FOR MFND 3.1 Data Collection 3.2 Domain Annotation 4 MDFEND: MULTI-DOMAIN FAKE NEWS DETECTION MODEL 4.1 Representation Extraction 4.2 Domain Gate 4.…...

LabVIEW软件出现Bug如何解决

在LabVIEW开发中,程序出现bug是不可避免的。无论是小型项目还是复杂系统,调试与修复bug都是开发过程中的重要环节。下文介绍如何有效解决LabVIEW软件中的bug,包括常见错误类型、调试工具、错误处理机制。 1. 常见Bug类型分析 在LabVIEW中&am…...

【数据结构-栈】力扣844. 比较含退格的字符串

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。 注意:如果对空文本输入退格字符,文本继续为空。 示例 1: 输入:s “ab#c”, t “…...

DataFrame生成excel后为什么多了一行数字

问题描述 python查询数据生成excel文件,生成的excel多了第一行数字索引,1,2,3,4,5...... 代码: df pd.DataFrame(data)df.to_excel(filename, sheet_name用户信息表, indexFalse) 解决: 原理也很简单,就是设置个参…...

linux 内存屏障(barrier)分析

谈起内存屏障,大家感觉这个"玩意儿"很虚,不太实际,但是内核代码中又广泛地可以看到起身影。内存屏障,英文barrier,这个"玩意儿"它还不太好去定义它。barrier,中文翻译为栅栏,栅栏大家都见过,现实生活中就是防止他人或者动物非法闯入而用来进行隔…...

【人工智能】Transformers之Pipeline(十九):文生文(text2text-generation)

目录 一、引言 二、文生文(text2text-generation) 2.1 概述 2.2 Flan-T5: One Model for ALL Tasks 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数 ​​​​​​​ 2.3.3 pipeline返回参数 ​​​​​​​​​​​…...

如何使用ssm实现基于VUE的儿童教育网站的设计与实现+vue

TOC ssm676基于VUE的儿童教育网站的设计与实现vue 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全…...

MODBUS TCP 转 CANOpen

产品概述 SG-TCP-COE-210 网关可以实现将 CANOpen 接口设备连接到 MODBUS TCP 网络中。用户不需要了解具体的 CANOpen 和 Modbus TCP 协议即可实现将CANOpen 设备挂载到 MODBUS TCP 接口的 PLC 上,并和 CANOpen 设备进行数据交互。 产品特点 &#xf…...

vue2+elementUI实现handleSelectionChange批量删除-前后端

功能需求&#xff1a;实现选中一个或多个执行批量删除操作 在elementUI官网选择一个表格样式模板&#xff0c;Element - The worlds most popular Vue UI framework 这里采用的是 将代码复制到前端&#xff0c;这里是index.vue <template><el-button type"dang…...

LLMs之OCR:llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略

LLMs之OCR&#xff1a;llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略 目录 llm_aided_ocr的简介 1、特性 2、详细技术概览 PDF处理和OCR PDF到图像转换 OCR处理 文本处理流程 分块创建 错误校正与格式化 重复内容移除 标题和页码…...

低代码平台后端搭建-阶段完结

前言 最近又要开始为跳槽做准备了&#xff0c;发现还是写博客学的效率高点&#xff0c;在总结其他技术栈之前准备先把这个专题小完结一波。在这一篇中我又试着添加了一些实际项目中可能会用到的功能点&#xff0c;用来验证这个平台的扩展性&#xff0c;以及总结一些学过的知识。…...

暑假考研集训营游记

文章目录 摘要&#xff1a;1.对各大辅导机构考研封闭集训营的一些个人看法&#xff1a;2.对于考研原因一些感想&#xff1a;结语 摘要&#xff1a; Ashy在暑假的时候参加了所在辅导班的为期一个月的考研封闭集训营&#xff0c;有了一些全新的感悟&#xff0c;略作记录。 1.对…...

C#中的报文(Message)

在C#中&#xff0c;报文&#xff08;Message&#xff09;通常是指在网络通信中交换的数据单元。报文可以由多种不同的组成部分构成&#xff0c;具体取决于通信协议和应用场景。 以下是一些常见的报文组成部分&#xff1a; 头部&#xff08;Header&#xff09;&#xff1a;包含…...

Python知识点:如何使用Python与Java进行互操作(Jython)

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; Jython 是一种完全兼容 Java 的 Python 实现&#xff0c;它将 Python 代码编译成…...

ffmpeg解封装解码

文章目录 封装和解封装封装解封装 相关接口解封装的流程图关于AVPacket的解释如何区分不同的码流&#xff0c;视频流&#xff0c;音频流&#xff1f;第一种方式av_find_best_stream第二种方式 通过遍历流 代码 封装和解封装 封装 是把音频流 &#xff0c;视频流&#xff0c;字…...

golang学习笔记10-循环结构

注&#xff1a;本人已有C&#xff0c;C,Python基础&#xff0c;只写本人认为的重点。 go的循环只有for循环&#xff0c;但有多个语法&#xff0c;可以实现C/C中的while和do while。当然&#xff0c;for循环也有break和continue&#xff0c;这点和C/C相同。 语法1&#xff1a; f…...

Java高级编程——泛型(泛型类、泛型接口、泛型方法,完成详解,并附有案例+代码)

文章目录 泛型21.1 概述21.2 泛型类21.3 泛型方法21.4 泛型接口 泛型 21.1 概述 JDK5中引入的特性&#xff0c;在编译阶段约束操作的数据类型&#xff0c;并进行检查 泛型格式&#xff1a;<数据类型> 泛型只能支持引用数据类型&#xff0c;如果写基本数据类型需要写对…...

GPU硬件如何实现光栅化?

版权声明 本文为“优梦创客”原创文章&#xff0c;您可以自由转载&#xff0c;但必须加入完整的版权声明文章内容不得删减、修改、演绎本文视频版本&#xff1a;见文末 引言 大家好&#xff0c;我是老雷&#xff0c;今天我想从GPU硬件原理出发&#xff0c;给大家分享在图形渲…...