X86架构(九)——保护模式的进入

news2024/12/23 23:09:06

全局描述符表

全局描述符表(Global Descriptor Table,GDT)是保护模式下非常重要的一个数据结构。

在保护模式下,对内存的访问仍然使用段地址和偏移地址,在每个段能够访问之前,必须先行设置好 GDT 的地址,并加载全局描述符表寄存器(GDTR)

和一个段有关的信息需要8 个字节来描述,所以称为段描述符(Segment Descriptor),每个段都需要一个描述符。为了存放这些描述符,需要在内存中开辟出一段空间。在这段空间里,所有的描述符都是挨在一起,集中存放的,这就构成一个描述符表

最主要的描述符表是全局描述符表(Global Descriptor Table,GDT),在进入保护模式前,必须要定义全局描述符表

处理器内部有一个48位的寄存器(全局描述符表寄存器(GDTR))用于跟踪全局描述符表。该寄存器分为两部分:
GDTR
32位线性基地址:保存全局描述符表在内存中的起始线性地址
16位边界:保存全局描述符表的边界(界限)
因为GDT的界限是16位的,所以,该表最大是65536 字节且一个描述符占8 字节,故最多可以定义8192个描述符

由于在进入保护模式之后,处理器立即要按新的内存访问模式工作,所以,必须在进入保护模式之前定义GDT。但是,由于在实模式下只能访问1MB的内存,故GDT通常都定义在1MB以下的内存范围中。允许在进入保护模式之后换个位置重新定义GDT
GDT+GDTR

从BIOS理解GDT的设置

在实模式下,主引导程序的加载位置是0x0000:0x7c00.
在32位模式下,对应着物理地址0x00007c00。主引导扇区程序共512字节,GDT可设在主引导程序之后,也就是物理地址0x00007e00处
内存分配

  1. 初始化段寄存器
	; 设置堆栈段和栈指针 
	mov ax, cs      
	mov ss, ax		; 栈基地址与代码段相同
	mov sp, 0x7c00	; 栈指针指向0x7c00

; GDT起始线性地址
gdt_base:
	dd 0x00007e00

	; 创建段描述符(段描述符格式见下图)
	; 此时处理器处于实模式
	; 计算GDT所在的逻辑段地址 
	; 主引导程序的实际加载位置是逻辑地址0x0000:0x7c00
	; 故标号gdt_base处的偏移地址是gdt_base+0x7c00
	mov ax, [cs:gdt_base+0x7c00]        ;16位 
    mov dx, [cs:gdt_base+0x7c00+0x02]   ;16位 
    mov bx, 16
    ; 32位除法
    ; 商是逻辑段地址,余数是偏移地址     
    div bx
    ; 商在ax中
    mov ds, ax
    ; 余数在dx中
    mov bx, dx

在32位保护模式下,段地址是32位的线性地址,如果未开启分页功能,该线性地址就是物理地址
段描述符

  • 段基地址可以是0~4GB范围内的任意地址
  • 20位的段界限用来限制段的扩展范围
  • G是粒度(Granularity)位,用于解释段界限的含义。当G 位是"0"时,段界限以字节为单位,此时,段的扩展范围是从1字节到1兆字节,因为描述符中的界限值是20 位的。相反,如果该位是"1",那么,段界限是以4KB为单位的,此时,段的扩展范围是从4KB到4GB
  • S用于指定描述符的类型(Descriptor Type)。当该位是"0"时,表示是一个系统段;为"1"时,表示是一个代码段或者数据段(栈段也是特殊的数据段)
  • DPL表示描述符的特权级(Descriptor Privilege Level - DPL),共有4种处理器支持的特权级别,分别是0、1、2、3,其中0 是最高特权级别,3 是最低特权级别。刚进入保护模式时执行的代码具有最高特权级0,这些代码通常都是操作系统代码,因此它的特权级别最高
    note 描述符的特权级用于指定要访问该段所必须具有的最低特权级。如果这里的数值是2,那么,只有特权级别为0、1 和2 的程序才能访问该段,而特权级为3 的程序访问该段时,处理器会予以阻止
  • P是段存在位(Segment Present)。P位用于指示描述符所对应的段是否存在
  • D/B位是"默认的操作数大小"(Default Operation Size)或者"默认的栈指针大小"(Default Stack Pointer Size),又或者"上部边界"(Upper Bound)标志
    note 设立该标志位,主要是为了能够在32位处理器上兼容运行16位保护模式的程序(对于代码段,此位称做"D"位,用于指示指令中默认的偏移地址和操作数尺寸。D=0表示指令中的偏移地址或者操作数是16位的;D=1指示32 位的偏移地址或者操作数)
  • L位是64位代码段标志(64-bit Code Segment),保留此位给64 位处理器使用
  • TYPE字段用于指示描述符的子类型,对于数据段来说,这4位分别是X、E、W、A 位;而对于代码段来说,这4位则分别是X、C、R、A 位
    type
    对于数据段来说,E位指示段的扩展方向。E=0是向上扩展的,是普通的数据段;E=1是向下扩展的,通常是栈段。W位指示段的读写属性,W=0的段是不允许写入的,否则会引发处理器异常中断;W =1的段是可以正常写入的

对于代码段来说,C位指示段是否为特权级依从的(Conforming)。C=0表示非依从的代码段,这样的代码段可以从与它特权级相同的代码段调用;C=1表示允许从低特权级的程序转移到该段执行

R位指示代码段是否允许读出

数据段和代码段的A位是已访问(Accessed)位,用于指示它所指向的段最近是否被访问过。在描述符创建的时候,应该清零。之后,每当该段被访问时,处理器自动将该位置1。对该位的清零是由操作系统负责的,通过定期监视该位的状态,就可以统计出该段的使用频率。当内存空间紧张时,可以把不经常使用的段退避到硬盘上,从而实现虚拟内存管理

  • AVL是软件可以使用的位(Available),通常由操作系统来用,处理器并不使用它
  1. 初始化GDT
    ;处理器规定,GDT中的第一个描述符必须是空描述符
    ;创建0#描述符
	mov dword [bx+0x00], 0x00
	mov dword [bx+0x04], 0x00

	;创建#1描述符,保护模式下的代码段描述符
	mov dword [bx+0x08], 0x7c0001ff     
	mov dword [bx+0x0c], 0x00409800   

描述符1的低32位是0x7c0001ff,高32位是0x00409800
段描述符1
该描述符所指向的段是现在正在执行的主引导程序所在的区域

	;创建#2描述符,保护模式下的数据段描述符(文本模式下的显示缓冲区) 
	mov dword [bx+0x10],0x8000ffff     
	mov dword [bx+0x14],0x0040920b  

描述符2用于安装一个数据段描述符(0x000b8000是显存的起始地址)
描述符2

;创建#3描述符,保护模式下的堆栈段描述符
	mov dword [bx+0x18],0x00007a00
	mov dword [bx+0x1c],0x00409600

描述符3用于安装栈段的描述符
描述符3
段界限的值0x07a00加上1,ESP寄存器所允许的最小值。当执行push、call 这样的隐式栈操作时,处理器会检查ESP 寄存器的值,一旦发现它小于等于这里指定的数值,会引发异常中断

  1. 加载描述符表的线性基地址和界限到GDTR寄存器
gdt_size:
	dw 0
gdt_base:
	dd 0x00007e00
	; 初始化描述符表寄存器GDTR
	;16位是GDT的界限值,高32位是GDT的基地址
	; 共有4个描述符(包括空描述符),每个描述符占8字节,一共是32字节
	mov word [cs:gdt_size+0x7c00], 31  ;描述符表的界限(总字节数减一)
	; lgdt的操作数是一个48位的内存区域(GDTR48)
	lgdt [cs:gdt_size+0x7c00]
  1. A20遗留问题
    在即将进入保护模式之前,这里还涉及一个历史遗留问题,那就是处理器的第21根地址线 —— A20
    简单点说呢就是从808680286再到80486为解决实模式下地址回绕的问题而引申出的一种与硬件特性挂钩的解决方案
    80486处理器开始,处理器有了A20M#引脚,低电平有效的
    A20
    输入输出控制器集中芯片ICH的处理器接口部分,有一个用于兼容老式设备的端口0x92,第0位叫做INIT_NOW,用于初始化处理器,当它从0过渡到1时,ICH芯片会使处理器INIT#引脚的电平变低,导致计算机重新启动
    端口0x92的位1用于控制A20(ALT_A20_GATE),它和来自键盘控制器的A20控制线一起,通过或门连接到处理器的A20M#引脚。当INIT_NOW0过渡到1时,ALT_A20_GATE将被置"1"。这就是说,计算机启动时,A20是自动启用的
	in al, 0x92                        ;南桥芯片内的端口 
    or al, 0000_0010B
    out 0x92, al                       ;打开A20
  1. 保护模式下的内存访问
    我们要知道:保护模式与实模式的切换是由CR0寄存器(这两种模式切换的开关原是在一个叫CR0 的寄存器)控制的(别问我怎么知道,书上说的😅)
    CR0是32位的寄存器,包含了一系列用于控制处理器操作模式和运行状态的标志位.它的位0是保护模式允许位(Protection Enable,PE),如果把该位置"1",处理器进入保护模式

保护模式下的中断机制和实模式不同,因此,原有的中断向量表不再适用
在重新设置保护模式下的中断环境之前,必须关中断

	;保护模式下中断机制尚未建立,应禁止中断
	cli
	;设置PE位  
	mov eax, cr0
	or eax, 1
	mov cr0, eax                            
  1. 段寄存器
    32位处理器的段寄存器又分为两部分,前16位和8086相同,在实模式下,它们用于按传统的方式寻址1MB内存
    每个段寄存器还包括一个不可见的部分,称为描述符高速缓存器,用来存放段的线性基地址、段界限和段属性
    段寄存器
    在实模式下,每当引用一个段时,处理器自动将段地址左移4位,并传送到描述符高速缓存器。在保护模式下,尽管访问内存时也需要指定一个段,但传送到段选择器的内容不是逻辑段地址,而是段描述符在描述符表中的索引号
    在保护模式下访问一个段时,传送到段选择器的是段选择子
    段选择子- 描述符索引用来在描述符表中选择一个段描述符
  • TI是描述符表指示器(Table Indicator),TI=0时,表示描述符在GDT中;TI=1时,描述符在LDT中
  • RPL是请求特权级,表示给出当前选择子的那个程序的特权级别
flush:
	; 将描述符选择子0x0010传送到段选择器DS
	; 指定的描述符索引号是2(上方创建的),指定的描述符表是GDT,请求特权级RPL00
	mov cx,00000000000_10_000B         ;加载数据段选择子(0x10)
	mov ds,cx

GDT的线性基地址在GDTR中,每个描述符占8字节,因此,描述符在表内的偏移地址是索引号乘以8。如下图所示,当处理器在执行任何改变段选择器的指令时会将指令中提供的索引号乘以8作为偏移地址,同GDTR中提供的线性基地址相加,以访问GDT
加载过程
此后,每当有访问内存的指令时,就不再访问GDT中的描述符,直接用当前段寄存器描述符高速缓存器提供线性基地址。
保护模式内存访问

	; 如上图所示,指令没有段超越前缀,默认使用数据段寄存器DS
	; 执行这些指令时,处理器用DS描述符高速缓存中的线性基地址加上指令中给出的偏移量形成32位物理地址
	mov byte [0x00],'P'  
	mov byte [0x02],'r'
	mov byte [0x04],'o'
	mov byte [0x06],'t'
	mov byte [0x08],'e'
	mov byte [0x0a],'c'
	mov byte [0x0c],'t'
	mov byte [0x0e],' '
	mov byte [0x10],'m'
	mov byte [0x12],'o'
	mov byte [0x14],'d'
	mov byte [0x16],'e'
	mov byte [0x18],' '
	mov byte [0x1a],'O'
	mov byte [0x1c],'K

不单单是访问数据段,即使是处理器取指令执行时,也采用了相同的方法。如下图所示,在32位保护模式下,处理器使用的指令指针寄存器是EIP。假设已经从描述符表中选择了一个段描述符,CS描述符高速缓存器已经装载了正确的32位线性基地址,那么,当处理器取指令时,会自动用描述符高速缓存器中的32位线性基地址加上指令指针寄存器EIP中的32位偏移量,形成32位物理地址,从内存中取得执令并加以执行
指令过程

  1. 清空流水线并串行化处理器
    在进入保护模式前,有很多指令已经进入了流水线。因为处理器工作在实模式下,所以它们都是按16位操作数和16位地址长度进行译码的。进入保护模式后,由于对操作数和默认地址大小的解释不同,指令的执行结果可能会不正确,所以必须清空流水线。
;以下进入保护模式... ...
	; 清流水线并串行化处理器 
	; dword修饰偏移量为32; 保护模式下,处理器都将把第一个操作数0x0008视为段选择子
	; 段选择子0x0008(索引号为1TI 位是0RPL00)对应着前方定义的描述符1
	jmp dword 0x0008:flush             ;16位的描述符选择子:32位偏移
	; 当指令执行时,处理器加载段选择器CS,从GDT中取出相应的描述符加载到CS描述符高速缓存,同时,把指令中给出的32位偏移量传送到指令指针寄存器EIP
  1. 保护模式下的栈
    如上方定义的描述符3,栈的32位线性基地址是0x00000000,段界限为0x07a00,粒度为字节,属于可读可写、向下扩展的数据段
	mov cx,00000000000_11_000B         ;加载堆栈段选择子
	mov ss,cx
	; ESP作为栈指针,段界限是和段粒度一起,决定ESP寄存器所能具有的最小值
	; 对于描述符中G位是“0”的段来说,粒度值是1byte;而对于G位是"1"的段来说,粒度值是4KB
	mov esp,0x7c00

栈段

	mov ebp,esp                        ;保存堆栈指针 
	; 关键字“byte”仅仅是给编译器用的,告诉它,该指令对应的格式为push imm8,必须使用操作码0x6A,而不是用来在编译后的机器指令前添加指令前缀
	; 故压入栈中的是一个双字
	push byte '.'                      ;压入立即数
	
	sub ebp,4
	cmp ebp,esp                        ;判断压入立即数时,ESP是否减4 
	jnz ghalt                          
	pop eax
	mov [0x1e],al                      ;显示句点 
      
  ghalt:     
	hlt                                ;已经禁止中断,将不会被唤醒

完整程序

;设置堆栈段和栈指针 
	mov ax,cs      
	mov ss,ax
	mov sp,0x7c00
      
	;计算GDT所在的逻辑段地址 
	mov ax,[cs:gdt_base+0x7c00]        ;16位 
	mov dx,[cs:gdt_base+0x7c00+0x02]   ;16位 
	mov bx,16        
	div bx            
	mov ds,ax                          ;DS指向该段以进行操作
	mov bx,dx                          ;段内起始偏移地址 
      
	;创建0#描述符,它是空描述符,这是处理器的要求
	mov dword [bx+0x00],0x00
	mov dword [bx+0x04],0x00  

	;创建#1描述符,保护模式下的代码段描述符
	mov dword [bx+0x08],0x7c0001ff     
	mov dword [bx+0x0c],0x00409800     

	;创建#2描述符,保护模式下的数据段描述符(文本模式下的显示缓冲区) 
	mov dword [bx+0x10],0x8000ffff     
	mov dword [bx+0x14],0x0040920b     

	;创建#3描述符,保护模式下的堆栈段描述符
	mov dword [bx+0x18],0x00007a00
	mov dword [bx+0x1c],0x00409600

	;初始化描述符表寄存器GDTR
	mov word [cs: gdt_size+0x7c00],31  ;描述符表的界限(总字节数减一)   
	
	lgdt [cs: gdt_size+0x7c00]
      
	in al,0x92                         ;南桥芯片内的端口 
	or al,0000_0010B
	out 0x92,al                        ;打开A20

	cli                                ;保护模式下中断机制尚未建立,应 
	;禁止中断 
	mov eax,cr0
	or eax,1
	mov cr0,eax                        ;设置PE;以下进入保护模式... ...
	jmp dword 0x0008:flush             ;16位的描述符选择子:32位偏移
	;清流水线并串行化处理器 
	[bits 32] 

flush:
	mov cx,00000000000_10_000B         ;加载数据段选择子(0x10)
	mov ds,cx

	;以下在屏幕上显示"Protect mode OK." 
	mov byte [0x00],'P'  
	mov byte [0x02],'r'
	mov byte [0x04],'o'
	mov byte [0x06],'t'
	mov byte [0x08],'e'
	mov byte [0x0a],'c'
	mov byte [0x0c],'t'
	mov byte [0x0e],' '
	mov byte [0x10],'m'
	mov byte [0x12],'o'
	mov byte [0x14],'d'
	mov byte [0x16],'e'
	mov byte [0x18],' '
	mov byte [0x1a],'O'
	mov byte [0x1c],'K'

	;以下用简单的示例来帮助阐述32位保护模式下的堆栈操作 
	mov cx,00000000000_11_000B         ;加载堆栈段选择子
	mov ss,cx
	mov esp,0x7c00

	mov ebp,esp                        ;保存堆栈指针 
	push byte '.'                      ;压入立即数
         
	sub ebp,4
	cmp ebp,esp                        ;判断压入立即数时,ESP是否减4 
	jnz ghalt                          
	pop eax
	mov [0x1e],al                      ;显示句点 
      
ghalt:     
	hlt                                ;已经禁止中断,将不会被唤醒 

;-----------------------------------------------------------------------
	gdt_size         dw 0
	gdt_base         dd 0x00007e00     ;GDT的物理地址 
	        
	times 510-($-$$) db 0
	     			 db 0x55,0xaa

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

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

相关文章

推荐4款2024年大家都在用的高质量翻译器。

翻译器在我们的生活中有着很重要的作用,不管是我们在学习还是工作,生活娱乐,出国旅游等场合都会派上用场,它是我们解决沟通的障碍,提高阅读效率的好帮手。我自己使用的翻译器有很多,可以给大家列举几款特别…

依赖倒置原则(学习笔记)

抽象不应该依赖细节,细节应该依赖抽象。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。 以…

了解输出电源优先级

主要又SUB,SBU以及USB三种模式。 调试10kW逆变器存在的输出电源优先级的问题,当优先级为SUB时,利用电压源模拟电池,当电池电压超过58.4V,即过压,在接入市电,市电继电器仍然闭合,仍然…

pyboard405意外故障,micropython OLED例程无法运行,折腾了大半天。

thonny报告&#xff1a; Traceback (most recent call last): File "<stdin>", line 3, in <module> RuntimeError: name too mode # main.py -- put your code here! from machine import I2C,Pin #从machine模块导入I2C、Pin子模块 from ss…

javascript:监听浏览器页签切换

监听页面的可见性变化&#xff0c;在很多场景下非常实用&#xff0c;比如跟踪用户行为、节省资源、优化性能等。 1 代码示例 document.addEventListener("visibilitychange", () > {if (document.visibilityState "visible") {alert("当前页面已…

上交所系统被股民买崩了?原因竟然是...

在A股市场迎来久违的牛市之际&#xff0c;上海证券交易所&#xff08;上交所&#xff09;却在关键时刻遭遇了技术挑战。9月27日&#xff0c;上交所的交易系统出现了罕见的宕机现象&#xff0c;持续时间长达两个小时&#xff0c;导致投资者在火热的交易期间无法正常进行交易操作…

通信工程学习:什么是OFDM正交频分复用

OFDM&#xff1a;正交频分复用 OFDM&#xff08;Orthogonal Frequency Division Multiplexing&#xff0c;正交频分复用&#xff09;是一种在通信领域中广泛应用的多载波调制技术。该技术通过将高速数据流分割成多个低速子流&#xff0c;并在不同频率上同时传输这些子流&#x…

论文笔记:Gradient Episodic Memory for Continual Learning

1. Contribution 提出了一组指标来评估模型在连续数据上的学习情况。这些指标不仅通过测试准确性来表征模型&#xff0c;还通过其跨任务迁移知识的能力来表征模型。针对持续学习任务&#xff0c;提出了GEM模型&#xff08;Gradient Episodic Memory&#xff09;&#xff0c;它…

【预备理论知识——1】深度学习:概率论概述

简单地说&#xff0c;机器学习就是做出预测。 概率论 掷骰子 假设我们掷骰子&#xff0c;想知道看到1的几率有多大&#xff0c;而不是看到另一个数字。 如果骰子是公平的&#xff0c;那么所有六个结果{1,…, 6}都有相同的可能发生&#xff0c; 因此我们可以说 1 发生的概率为1…

Linux date命令(用于显示和设置系统的日期和时间,不仅可以显示时间,还能进行复杂的时间计算和格式化)

文章目录 深入探讨 Linux Date 命令1. Date 命令详细功能解析1.1 命令概述1.2 命令语法 2. 时间显示与格式化2.1 标准时间输出2.2 自定义格式输出 3. 设置系统日期和时间3.1 基本用法3.2 注意事项 4. 实用示例与脚本应用4.1 生成时间戳秒级时间戳毫秒时间戳 4.2 时间戳转换4.3 …

什么是后仿

什么是后仿 参考 查了一圈发现网上对post netlist simulation 介绍的比较少&#xff0c;今天和大家聊聊post netlist simulation。 首先什么是post netlist simulation(后面简称 postsim )&#xff1f; Netlist simulation 有些公司也叫gate level simulation&#xff0c;是指将…

问:全国产业园数量增长,对中小企业意味着什么?

随着全国产业园数量的持续增长&#xff0c;这一趋势无疑为中小企业带来了前所未有的机遇与可能。产业园作为产业集聚的重要载体&#xff0c;不仅为中小企业提供了更广阔的发展空间&#xff0c;还通过资源共享、成本降低、创新协同等方式&#xff0c;助力企业快速成长。 对于中…

高效的视频压缩标准H.264介绍,以及H.264在视频监控系统中的应用

目录 一、概述 二、 工作原理 三、技术特点与优势 1、高效压缩率 2、高质量视频 3、错误恢复能力 4、灵活性 四、编解码过程 1、编码过程 2、解码过程 五、帧类型与结构 1、I帧 2、P帧 3、B帧 六、应用与优势 1、节省存储空间和带宽 2、提高视频质量 3、适应…

中间件技术

在Java开发中&#xff0c;中间件技术是一种非常关键且广泛使用的技术。中间件通常被定义为位于操作系统、网络和数据库之上的软件层&#xff0c;用于简化分布式系统的开发、部署和管理。它们提供了一系列服务&#xff0c;如消息传递、事务管理、安全控制等&#xff0c;以帮助开…

Eth-trunk的介绍以及实验配置

目录 技术背景 Eth-Trunk概念 LACP模式下优先级 LACP的抢占机制 Eth-Trunk 配置 LACP模式 手工模式 Eth-Trunk接口负载分担 技术背景 随着网络中部署的业务量不断增长&#xff0c;单条物理链路的带宽已不能满足正常的业务流量需求。这时可以选择使用更高带宽的接口板或…

招联金融内推-2025校招

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递&#xff09; 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

yolov8/9/10模型在安全帽、安全衣检测中的应用【代码+数据集+python环境+GUI系统】

yolov8910模型安全帽、安全衣检测中的应用【代码数据集python环境GUI系统】 yolov8/9/10模型在安全帽、安全衣检测中的应用【代码数据集python环境GUI系统】 背景意义 安全帽和安全衣在工业生产、建筑施工等高风险作业环境中是保护工人免受意外伤害的重要装备。然而&#xff0…

推荐一款良心的视频去水印在线工具!!!

推荐一款良心的视频去水印在线工具!!! 去水印工具是专门设计来处理图像和视频中不需要的水印、标志、文字或其他元素的软件或在线服务。这些工具通过智能算法识别并移除特定元素&#xff0c;同时尽量保持原始内容的画质和细节。 应用场景 版权清理&#xff1a;去除网络上获取…

SpringBoot项目请求不中断动态更新代码

在开发中&#xff0c;有时候不停机动态更新代码热部署是一项至关重要的功能&#xff0c;它可以在请求不中断的情况下下更新代码。这种方式不仅提高了开发效率&#xff0c;还能加速测试和调试过程。本文将详细介绍如何在 Spring Boot 项目在Linux系统中实现热部署&#xff0c;特…

GPT与大模型行业落地实践探索

简介 本课程探讨GPT和大模型技术在行业中的实际应用和发展。课程将涵盖GPT的基础知识、原理、及其在行业中的应用案例&#xff0c;如财报分析和客服机器人。重点在于结合实际案例中的使用效果&#xff0c;讲解如何利用GPT的API开发企业级应用以及利用更高级的功能构造AI Agent。…