操作系统 1.3-开机页面的产生
问题引入
从打开电源开始..
这神秘的黑色背后发生着什么?...
设计思路
伟大的数学家图灵,设计了这样的一个模型:
首先我们计算机有一个控制器,他可以处理一系列提供给他的动作。我们将控制器动作,控制器状态,数据对象提供给控制器,控制器就会执行。
存储程序思想
存储程序的主要思想:将程序和数据存放到计算机内部的存储器中,计算机在程序的控制下一步一步进行处理
那我们计算机就使用cs,ip来执行对应的汇编代码。
打开电源,计算机执行的第一句指令什么?
开机之后执行的步骤
(1)x86 PC刚开机时CPU处于实模式
(2)开机时,CS=0xFFFF:IP=0x0000
(3)寻址0xFFFFO(ROM BIOS映射区)
(4)检查RAM,键盘,显示器,软硬磁盘
(5)将磁盘0磁道0扇区读入0x7c00处
(6)设置cs=0x07c0,ip=0x0000
0x7c00处存放的代码
刚开始我们将将磁盘0磁道0扇区读入0x7c00处,磁盘0磁道0扇区就是引导扇区,大小是512个字节.这也是开机之后第一段可以读到的代码
代码解读
引导扇区的代码:
第一段
.globl begtext, begdata, begbss, endtext, enddata, endbss
.text // 文本段
begtext:
.data // 数据段
begdata:
.bss // 未初始化数据段
begbss:entry start // 关键字entry告诉链接器“程序入口”
start:mov ax, #BOOTSEG // 将BOOTSEG的值加载到AX寄存器mov ds, ax // 将AX寄存器的值移动到DS寄存器,设置数据段寄存器mov ax, #INITSEG // 将INITSEG的值加载到AX寄存器mov es, ax // 将AX寄存器的值移动到ES寄存器,设置附加段寄存器mov cx, #256 // 将256加载到CX寄存器,设置循环计数器sub si, si // 将SI寄存器清零sub di, di // 将DI寄存器清零rep movw // 重复移动字(word),从DS:SI到ES:DI,共CX次jmpi go, INITSEG // 跳转到INITSEG处的go标签BOOTSEG = 0x07c0
INITSEG = 0x9000
SETUPSEG = 0x9020
-
段定义:
-
.text
:定义文本段,用于存放代码。 -
.data
:定义数据段,用于存放已初始化的数据。 -
.bss
:定义未初始化数据段,用于存放未初始化的数据。
-
-
段标签:
-
begtext
、begdata
、begbss
:分别标记文本段、数据段和未初始化数据段的开始位置。 -
endtext
、enddata
、endbss
:分别标记文本段、数据段和未初始化数据段的结束位置。
-
-
程序入口:
-
entry start
:告诉链接器程序的入口点是start
标签。
-
-
初始化段寄存器:
-
mov ax, #BOOTSEG
:将引导段地址0x07c0
加载到AX寄存器。 -
mov ds, ax
:将AX寄存器的值移动到DS寄存器,设置数据段寄存器。 -
mov ax, #INITSEG
:将初始化段地址0x9000
加载到AX寄存器。 -
mov es, ax
:将AX寄存器的值移动到ES寄存器,设置附加段寄存器。
-
-
设置循环计数器:
-
mov cx, #256
:将256加载到CX寄存器,设置循环计数器。
-
-
清零索引寄存器:
-
sub si, si
:将SI寄存器清零。 -
sub di, di
:将DI寄存器清零。
-
-
数据复制:
-
rep movw
:重复移动字(word),从DS:SI到ES:DI,共CX次。将0x07c0:0x0000处的256个字移动到0x9000:0x0000处。
-
-
跳转指令:
-
jmpi go, INITSEG
:跳转到初始化段地址0x9000
处的go
标签。
-
这段代码的主要作用是初始化段寄存器,并将引导扇区的数据从0x07c0:0x0000处复制到0x9000:0x0000处,然后跳转到初始化段继续执行。
第二段
jmpi go, INITSEG // 跳转到INITSEG段的go标签go:mov ax, cs // 将CS寄存器的值移动到AX寄存器mov ds, ax // 将AX寄存器的值移动到DS寄存器,设置数据段寄存器mov es, ax // 将AX寄存器的值移动到ES寄存器,设置附加段寄存器mov ss, ax // 将AX寄存器的值移动到SS寄存器,设置堆栈段寄存器mov sp, #0xff00 // 设置堆栈指针SP为0xff00load_setup: // 载入setup模块mov dx, #0x0000 // 将0x0000加载到DX寄存器mov cx, #0x0002 // 将0x0002加载到CX寄存器mov bx, #0x0200 // 将0x0200加载到BX寄存器mov ax, #0x0200+SETUPLEN // 计算内存地址int 0x13 // BIOS中断,调用BIOS读磁盘扇区的中断jnc ok_load_setup // 如果没有发生错误(Carry Flag未设置),跳转到ok_load_setupmov dx, #0x0000 // 将0x0000加载到DX寄存器mov ax, #0x0000 // 将0x0000加载到AX寄存器int 0x13 // BIOS中断,复位jmp load_setup // 重读ok_load_setup:; 继续执行后续代码
-
段间跳转:
-
jmpi go, INITSEG
:执行段间跳转,将CS设置为INITSEG,IP设置为go标签的地址。
-
-
段寄存器初始化:
-
mov ax, cs
:将CS寄存器的值移动到AX寄存器。 -
mov ds, ax
:将AX寄存器的值移动到DS寄存器,设置数据段寄存器。 -
mov es, ax
:将AX寄存器的值移动到ES寄存器,设置附加段寄存器。 -
mov ss, ax
:将AX寄存器的值移动到SS寄存器,设置堆栈段寄存器。 -
mov sp, #0xff00
:设置堆栈指针SP为0xff00。
-
-
载入setup模块:
-
load_setup
:标签,表示开始载入setup模块的代码。 -
mov dx, #0x0000
:将0x0000加载到DX寄存器。 -
mov cx, #0x0002
:将0x0002加载到CX寄存器。 -
mov bx, #0x0200
:将0x0200加载到BX寄存器。 -
mov ax, #0x0200+SETUPLEN
:计算内存地址。 -
int 0x13
:调用BIOS中断0x13,读取磁盘扇区。
-
-
错误处理:
-
jnc ok_load_setup
:如果没有发生错误(Carry Flag未设置),跳转到ok_load_setup。 -
mov dx, #0x0000
:将0x0000加载到DX寄存器。 -
mov ax, #0x0000
:将0x0000加载到AX寄存器。 -
int 0x13
:调用BIOS中断0x13,复位。 -
jmp load_setup
:重读。
-
-
继续执行:
-
ok_load_setup
:标签,表示成功载入setup模块后的代码。
-
这段代码的主要作用是初始化段寄存器,设置堆栈指针,并通过BIOS中断0x13读取磁盘扇区,将setup模块加载到内存中。如果在读取过程中发生错误,则进行重读。
第三段
ok_load_setup: // 载入setup模块mov dl, #0x00 // 将0x00加载到DL寄存器mov ax, #0x0800 // 将0x0800加载到AX寄存器int 0x13 // BIOS中断,ah=8获取磁盘参数mov ch, #0x00 // 将0x00加载到CH寄存器mov sectors, cx // 将CX寄存器的值移动到sectors变量mov ah, #0x03 // 将0x03加载到AH寄存器xor bh, bh // 将BH寄存器清零int 0x10 // BIOS中断,读光标mov cx, #24 // 将24加载到CX寄存器mov bx, #0x0007 // 将0x0007加载到BX寄存器,7是显示属性mov bp, #msg1 // 将msg1的地址加载到BP寄存器mov ax, #1301 // 将1301加载到AX寄存器int 0x10 // BIOS中断,显示字符mov ax, #SYSSEG // 将SYSSEG的值加载到AX寄存器mov es, ax // 将AX寄存器的值移动到ES寄存器call read_it // 调用read_it读取system模块jmpi 0, SETUPSEG // 跳转到SETUPSEG段的0地址
-
获取磁盘参数:
-
mov dl, #0x00
:将0x00加载到DL寄存器。 -
mov ax, #0x0800
:将0x0800加载到AX寄存器。 -
int 0x13
:调用BIOS中断0x13,ah=8获取磁盘参数。 -
mov ch, #0x00
:将0x00加载到CH寄存器。 -
mov sectors, cx
:将CX寄存器的值移动到sectors变量。
-
-
读光标:
-
mov ah, #0x03
:将0x03加载到AH寄存器。 -
xor bh, bh
:将BH寄存器清零。 -
int 0x10
:调用BIOS中断0x10,读光标。
-
-
显示字符:
-
mov cx, #24
:将24加载到CX寄存器。 -
mov bx, #0x0007
:将0x0007加载到BX寄存器,7是显示属性。 -
mov bp, #msg1
:将msg1的地址加载到BP寄存器。 -
mov ax, #1301
:将1301加载到AX寄存器。 -
int 0x10
:调用BIOS中断0x10,显示字符。
-
-
设置段寄存器:
-
mov ax, #SYSSEG
:将SYSSEG的值加载到AX寄存器。 -
mov es, ax
:将AX寄存器的值移动到ES寄存器。
-
-
读取system模块:
-
call read_it
:调用read_it读取system模块。
-
-
跳转:
-
jmpi 0, SETUPSEG
:跳转到SETUPSEG段的0地址。
-
其他说明:
read it代码读取system模块,
-
显示字符:显示的24个字符是“Loading system...”,这是用户看到的第一个“创举”。
-
数据段:
-
sectors: .word 0
:磁道扇区数。 -
msg1: .byte 13,10
:换行符和回车符。 -
.ascii "Loading system..."
:显示的字符串。 -
.byte 13,10,13,10
:换行符和回车符。
-
这段代码的主要作用是载入setup模块,获取磁盘参数,显示提示信息,并读取system模块。
其中,读取system模块,其中就有loading system,这就是我们开机之后显示的第一个黑窗口。只不够我们的操作系统更换了里面的显示内容而已。
第四段
read_it: // 读入system模块mov ax, escmp ax, #ENDSEGjb ok1_readret
ok1_read:mov ax, sectorssub ax, sread // sread是当前磁道已读扇区数,ax未读扇区数call read_track // 读磁道...// 引导扇区的末尾 // BIOS用以识别引导扇区
.org 510
.word 0xAA55 // 扇区的最后两个字节// 可以转入setup执行了,jmpi 0, SETUPSEG
-
跨越磁道读取:
-
read_it
函数用于读取system
模块。由于system
模块可能很大,需要跨越多个磁道,因此需要定义一个函数来处理这种读取。 -
ENDSEG
定义了读取的结束段地址,计算方式为ENDSEG = SYSSEG + SYSSIZE
,其中SYSSIZE
可以根据Image
大小设定(例如0x8000
)。
-
-
读取逻辑:
-
ok1_read
标签用于处理实际的读取逻辑。 -
mov ax, sectors
将扇区数加载到AX
寄存器。 -
sub ax, sread
计算未读扇区数,其中sread
是当前磁道已读扇区数。 -
call read_track
调用read_track
函数读取剩余的磁道。
-
-
引导扇区的末尾:
-
在引导扇区的末尾,使用
.org 510
和.word 0xAA55
来标识引导扇区的结束。这是BIOS识别引导扇区的标志,否则可能会识别为非引导设备。
-
-
跳转到
setup
执行:-
jmpi 0, SETUPSEG
指令用于跳转到setup
段的起始地址,继续执行setup
模块。
-
这些代码和知识点展示了如何从磁盘读取大模块(如 system
模块),并在读取完成后跳转到特定的执行段(如 setup
段)。同时,确保引导扇区的正确标识对于BIOS正确识别和启动操作系统至关重要。
之后执行
我们上面的代码,开机后读取boot引导扇区的代码,加载了setup和system的内容之后,显示了window的local,就进入下一段的代码setup
总结
计算机系统结构详解
1. 硬件层
-
CPU(中央处理器):执行指令和处理数据。
-
内存(RAM):临时存储数据和程序,供CPU快速访问。
-
硬盘:长期存储数据和程序,即使断电数据也不会丢失。
-
输入/输出设备:如键盘、鼠标、显示器等,用于与用户交互。
2. 操作系统层(超系统)
-
资源管理:操作系统负责管理硬件资源,如内存、CPU时间、设备等。
-
抽象接口:提供高级接口给应用程序,使得应用程序可以不必关心硬件细节。
-
进程管理:操作系统管理进程的创建、执行、终止等。
-
文件系统:管理文件的存储、检索和更新。
-
网络管理:管理网络连接和数据传输。
3. 应用层
-
应用程序:用户直接使用的软件,如文字处理软件、浏览器、游戏等。
-
服务程序:在后台运行的程序,如数据库服务、邮件服务等。
操作系统的作用和重要性详解
1. 提供接口
-
系统调用:操作系统提供系统调用,如文件操作(open、read、write)、进程控制(fork、exec)、设备IO等。
-
库函数:基于系统调用,进一步封装成库函数,如C标准库中的文件操作函数。
2. 提高效率
-
缓冲管理:操作系统通过缓冲区减少对硬盘的直接访问,提高数据读写效率。
-
进程调度:操作系统通过进程调度算法优化CPU时间分配,提高系统性能。
3. 深入学习操作系统
-
设计新功能:理解操作系统的内部机制有助于设计和实现新的系统功能。
-
提升能力:深入学习操作系统可以提升计算机能力,为未来的职业发展打下坚实的基础。
计算机启动过程详解
1. BIOS启动
-
初始化硬件:BIOS代码负责初始化硬件设备,检查硬件状态。
-
设置启动顺序:BIOS设置启动设备的顺序,如硬盘、光驱、USB等。
2. 读取引导扇区
-
加载引导扇区:BIOS代码从磁盘的0磁道0扇区读取操作系统的引导扇区,并将其加载到内存的0x7C00地址处。
-
执行引导扇区代码:引导扇区包含的代码负责进一步读取操作系统的其他部分。
3. 显示启动信息
-
提示用户:引导扇区的代码会在屏幕上显示启动信息,如“loading system”。
-
反馈:这些信息用于提示用户系统正在启动,并提供反馈。
4. 读取操作系统
-
加载操作系统:引导扇区的代码会从磁盘读取操作系统的其他部分,加载到内存中。
-
核心模块:这些部分可能包括操作系统的核心模块、驱动程序等。
5. 跳转到操作系统
-
转移控制权:引导扇区的代码执行完毕后,会将控制权交给操作系统。
-
执行操作系统:通过修改CS和IP寄存器,跳转到操作系统的入口点执行。
总结
-
操作系统的核心作用:操作系统是计算机系统中至关重要的组成部分,它不仅管理硬件资源,还提供了方便的接口给上层应用。
-
深入理解操作系统:理解操作系统的内部机制对于计算机专业的学生和工程师来说是非常重要的,它不仅可以提升技术能力,还可以为未来的职业发展打下坚实的基础。
-
计算机启动过程:计算机启动过程是操作系统加载和运行的起点,通过学习这个过程,可以更好地理解操作系统的工作原理和启动机制。
相关文章:
操作系统 1.3-开机页面的产生
问题引入 从打开电源开始.. 这神秘的黑色背后发生着什么?... 设计思路 伟大的数学家图灵,设计了这样的一个模型: 首先我们计算机有一个控制器,他可以处理一系列提供给他的动作。我们将控制器动作,控制器状态,数据…...
单例模式:确保一个类只有一个实例
目录 引言 1. 单例模式的核心思想 2. 单例模式的实现方式 2.1 饿汉式单例 2.2 懒汉式单例 2.3 线程安全的懒汉式单例 2.4 双重检查锁定(Double-Checked Locking) 2.5 静态内部类实现单例 2.6 枚举实现单例 3. 单例模式的使用场景 4. 单例模式…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_modules
定义在 objs\ngx_modules.c #include <ngx_config.h> #include <ngx_core.h>extern ngx_module_t ngx_core_module; extern ngx_module_t ngx_errlog_module; extern ngx_module_t ngx_conf_module; extern ngx_module_t ngx_openssl_module; extern ngx_modul…...
vue3中 组合式~测试深入组件:事件 与 $emit()—setup() 上下文对象ctx.emit
一、语法(props) 第一步:在组件模板表达式中,可以直接用$emit()方法触发自定义事件, <!-- MyComponent --> <button click"$emit(someEvent)">Click Me</button> 第二步父组件可以通过 v-on (缩写为 ) 来监听…...
uniapp小程序对接腾讯IM即时通讯无ui集成(1)
首先需要完成一些准备工作。 1.注册腾讯云账号 腾讯云 注册账号后搜索im即时通讯,新创建一个应用。 2.uniapp创建项目 腾讯云无ui集成文档 按照文档步骤下载完这两个包后打开项目。有下图这两个包就算完成了开始工作。 3.APP目录进行引入和集成 <script…...
【YOLOv12改进trick】StarBlock引入YOLOv12,创新涨点优化,含创新点Python代码,方便发论文
🍋改进模块🍋:StarBlock 🍋解决问题🍋:采用StarBlock将输入数据映射到一个极高维的非线性特征空间,生成丰富的特征表示,使得模型在处理复杂数据时更加有效。 🍋改进优势🍋:简单粗暴的星型乘法涨点却很明显 🍋适用场景🍋:目标检测、语义分割、自然语言处理…...
机器学习之强化学习
引言 在人工智能的众多分支中,强化学习(Reinforcement Learning, RL) 因其独特的学习范式而备受关注。与依赖标注数据的监督学习或探索数据结构的无监督学习不同,强化学习的核心是智能体(Agent)通过与环境…...
天津大学02-深度解读DeepSeek:部署、使用、安全【文末附下载链接】
大模型风险与不当用例——价值观错位 大模型与人类价值观、期望之间的不一致而导致的安全问题,包含:• 社会偏见(Social Bias)LLM在生成文本时强化对特定社会群体的刻板印象,例如将穆斯林与恐怖主义关联,或…...
C# OPC DA获取DCS数据(提前配置DCOM)
OPC DA配置操作手册 配置完成后,访问远程ip,就能获取到服务 C#使用Interop.OPCAutomation采集OPC DA数据,支持订阅(数据变化)、单个读取、单个写入、断线重连...
ReAct论文阅读笔记总结
ReAct:Synergizing Reasoning and Acting in Language Models 背景 最近的研究结果暗示了在自主系统中结合语言推理与交互决策的可能性。 一方面,经过适当Prompt的大型语言模型(LLMs)已经展示了在算术、常识和符号推理任务中通…...
【计网】运输层
运输层 5.1 运输层概述5.2 运输层端口号、复用与分用5.3 UDP和TCP的区别5.4 TCP具体实现5.4.1 TCP的流量控制5.4.2 TCP的拥塞控制5.4.3 TCP超时重传时间的选择5.4.4 TCP可靠传输的实现5.4.5 TCP运输连接管理(一)TCP连接的建立(三报文握手&…...
计算机毕业设计SpringBoot+Vue.js多媒体素材库系统(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
MC9S12单片机的内存映射机制
地址空间 这是个16位的单片机。CPU的寻址空间最大为2^1664K。 这个64K是包括外设、RAM、EEPROM、和FLASH的。现在程序越来越大,64K的空间肯定是不够用的。因此,需要扩展。 扩展方法就是:分页。 把原来的64K空间,划分一块出来&a…...
鸿蒙HarmonyOS评论功能小demo
评论页面小demo 效果展示 1.拆解组件,分层搭建 我们将整个评论页面拆解为三个组件,分别是头部导航,评论项,回复三个部分,然后统一在index界面导入 2.头部导航界面搭建 Preview Component struct HmNavBar {// 属性&a…...
数据仓库为什么要分层
数据仓库分层架构是数据仓库设计中的一个重要概念,其主要目的是为了更好地组织和管理数据,提高数据仓库的可维护性、可扩展性和性能。分层架构将数据仓库划分为多个层次,每个层次都有其特定的职责和功能。以下是数据仓库分层的主要原因和好处…...
【powerjob】 powerjobserver注册服务IP错误
1、问题:powerjobserver 4.3.6 的服务器上有多个网卡对应多个ip,示例 eth0 :IP1 ,docker0:IP2 和worker 进行通信时 正确的应该时IP1 但是注册显示获取的确实IP2,导致 worker 通过ip2和server通信,网络不通,注册不上 2、解决方案 …...
JCRQ1河马算法+四模型对比!HO-CNN-GRU-Attention系列四模型多变量时序预测
JCRQ1河马算法四模型对比!HO-CNN-GRU-Attention系列四模型多变量时序预测 目录 JCRQ1河马算法四模型对比!HO-CNN-GRU-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于HO-CNN-GRU-Attention、CNN-GRU-Attent…...
智能硬件如何和应用层app连接?
现在比较方便的是一键配置方式,主要是使用蓝牙、smartconfig、ZigBee和声波配置。 蓝牙配置:比如蓝牙耳机、蓝牙鼠标,只能支持点对点连接,且对设备和app距离要求严格。 ZigBee配置方式:无法直接接入网络,…...
深度学习系列78:使用langchain的api进行RAG
用起来很麻烦,看api的工夫都已经能自己写完代码了。但现在有些开源api用的是langchain的接口,还是了解一下。参考官方文档:https://www.langchain.com.cn/docs/how_to/ 1. LLM和langserve示例 以openai接口为例,可以看到分为3步…...
海思Hi3516DV300交叉编译opencv
OpenCV是一个开源的跨平台计算机视觉库,支持C、Python等多种语言,适用于图像处理、目标检测、机器学习等任务。其核心由C编写,高效轻量,提供实时视觉处理功能,广泛应用于工业自动化、医疗影像等领域。 1 环境准备 1…...
责任链模式:优雅处理复杂流程的设计艺术
引言 在软件设计中,我们经常会遇到需要按特定顺序处理请求的场景。例如,一个订单处理系统可能需要经过验证、付款、物流安排和客户通知等多个步骤。如果我们将这些步骤硬编码在一个方法中,代码将变得臃肿且难以维护。这时,责任链…...
【DeepSeek】5分钟快速实现本地化部署教程
一、快捷部署 (1)下载ds大模型安装助手,下载后直接点击快速安装即可。 https://file-cdn-deepseek.fanqiesoft.cn/deepseek/deepseek_28348_st.exe (2)打开软件,点击立即激活 (3)选…...
HTML前端手册
HTML前端手册 记录前端框架在使用过程中遇到的各种问题和解决方案,供后续快速进行手册翻阅使用 文章目录 HTML前端手册1-前端框架1-TypeScript框架2-CSS框架 2-前端Demo1-Html常用代码 2-知云接力3-Live2D平面动画 3-前端运维1-NPM版本管理 1-前端框架 1-TypeScrip…...
【uniapp】图片添加canvas水印
目录 需求&背景实现地理位置添加水印 ios补充 需求&背景 需求:拍照后给图片添加水印, 水印包含经纬度、用户信息、公司logo等信息。 效果图: 方案:使用canvas添加水印。 具体实现:上传图片组件是项目里现有的ÿ…...
Java 大视界 -- Java 大数据在智能金融反欺诈中的技术实现与案例分析(114)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
机器学习数学基础:43.外生变量与内生变量
外生变量与内生变量:模型中的因果角色 在因果模型(像结构方程模型、回归分析这类)里,外生变量和内生变量是用来区分变量来源和相互关系的重要概念。下面从定义、实例、差异以及应用场景四个方面来详细介绍: 一、定义…...
Bean 的生命周期主要包括以下阶段:
Bean 的生命周期主要包括以下阶段: 定义 :在配置文件或注解中定义 Bean,包括其类、作用域等信息。 实例化 :Spring 容器根据定义创建 Bean 的实例。 属性赋值 :容器为 Bean 设置配置的属性值。 初始化 :…...
Unity游戏开发中的网格简化与LOD技术(Mesh Simplification LOD)
在Unity游戏开发中,网格简化(Mesh Simplification)和LOD(Level of Detail)技术是优化渲染性能的关键手段,尤其在处理复杂场景和高精度模型时至关重要。以下是一套系统的实现方案与优化策略: 一、…...
3.7[Q]CV
对于一个由cmake构建的项目,什么时候应该执行cmake指令?什么时候执行make指令?即,一个cmake构建的项目,各步骤的意义是什么?当我修改了部分代码后,重启项目该执行什么命令? view,mod…...
发行思考:全球热销榜的频繁变动
几点杂感: 1、单机游戏销量与在线人数的衰退是剧烈的,有明显的周期性,而在线游戏则稳定很多。 如去年的某明星游戏,最高200多万在线,如今在线人数是48名,3万多。 而近期热门的是MH,在线人数8…...
Springboot全局LocalDateTime时间格式化配置
我们对字段的日期格式化时一般会用注解: JsonFormat(pattern "yyyy-MM-dd HH:mm:ss", timezone "GMT8")private Date createDate;但是每个字段都要写也太麻烦了 不是我的全局化作风 在application.yml中配置全局时间格式化只会对Date类型有用: jackson:d…...
Redis主从复制
目录 点单问题 启动多个redis服务器 配置主从结构 查看主从结构信息 断开主从结构 修改主从结构 主从复制的拓扑结构 主从复制的基本流程 全量复制和部分复制 全量复制的流程 部分复制的流程 实时复制的流程 主从复制总结 主从复制是基于分布式系统进行讨论的&am…...
玩转python:掌握Python数据结构之栈Stack
栈(Stack)是计算机科学中一种非常基础且重要的数据结构。它的特点是后进先出(LIFO,Last In First Out),就像我们生活中叠盘子一样,最后放上去的盘子总是最先被拿走。本文将用通俗易懂的语言和丰…...
电脑如何拦截端口号,实现阻断访问?
如果你弟弟喜欢玩游戏,你可以查询该应用占用的端口,结合以下方法即可阻断端口号,让弟弟好好学习,天天向上! 拦截端口可以通过防火墙和路由器进行拦截 ,以下是常用方法: 方法 1:使用…...
DeepSeek 医疗大模型微调实战讨论版(第一部分)
DeepSeek医疗大模型微调实战指南第一部分 DeepSeek 作为一款具有独特优势的大模型,在医疗领域展现出了巨大的应用潜力。它采用了先进的混合专家架构(MoE),能够根据输入数据的特性选择性激活部分专家,避免了不必要的计算,极大地提高了计算效率和模型精度 。这种架构使得 …...
Apache Httpd 多后缀解析
目录 1.原因 2.环境 3.复现 4.防御 1.Apache Httpd 多后缀解析原因 Apache HTTP Server 在处理文件请求时,通常会根据文件的后缀来确定如何处理该文件。例如,.php文件会被交给 PHP 解释器处理,而.html文件则直接作为静态文件返回。 然而…...
2025年03月07日Github流行趋势
项目名称:ai-hedge-fund 项目地址url:https://github.com/virattt/ai-hedge-fund项目语言:Python历史star数:12788今日star数:975项目维护者:virattt, seungwonme, KittatamSaisaard, andorsk, arsaboo项目…...
Jenkins在Windows上的使用(二):自动拉取、打包、部署
(一)Jenkins全局配置 访问部署好的Jenkins服务器网址localhost:8080,完成默认插件的安装后,接下来将使用SSH登录远程主机以实现自动化部署。 1. 配置插件 选择dashboard->Manage Jenkins->plugins 安装下面两个插件 …...
【JavaEE】-- 多线程(初阶)4
文章目录 8.多线程案例8.1 单例模式8.1.1 饿汉模式8.1.2 懒汉模式 8.2 阻塞队列8.2.1 什么是阻塞队列8.2.2 生产者消费者模型8.2.3 标准库中的阻塞队列8.2.4 阻塞队列的应用场景8.2.4.1 消息队列 8.2.5 异步操作8.2.5 自定义实现阻塞队列8.2.6 阻塞队列--生产者消费者模型 8.3 …...
测试直播postman+Jenkins所学
接口自动化 什么是接口?本质上就是一个url,用于提供数据。后台程序提供一种数据地址,接口的数据一般是从数据库中查出来的。 postman自动化实操: 一般来说公司会给接口文档,如果没有,通过拦截,…...
5人3小时复刻Manus?开源OpenManus项目全解剖,我的DeepSeek股票报告这样诞生
大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。 更多文章可关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! OpenManus是什么 1. 项目背景 OpenManus 是由 MetaGPT 核心团队仅用 3 小时复刻而成的开源…...
【javaEE】多线程(基础)
1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…...
0.大模型开发知识点需求综述
文章目录 一、机器学习与深度学习基础二、自然语言处理(NLP)基础三、大模型架构四、训练优化技术五、数据处理与预处理六、分布式训练与并行化策略七、微调方法与参数高效微调八、训练框架、工具与自动化流程九、评估与部署十、前沿技术与未来趋势 已更新…...
WHAT - 前端阻塞场景梳理
目录 前言场景梳理1. JavaScript 执行阻塞主线程场景优化思路具体代码示例1. 长时间运行的同步 JavaScript 代码2. 过多的主线程任务(如频繁的 setTimeout/setInterval)3. 未优化的第三方库或框架初始化逻辑总结 2. 样式计算与布局(Layout&am…...
微前端框架 Qiankun 的应用及问题分析
一、Qiankun 的核心应用场景与优势 多技术栈共存与灵活集成 Qiankun 支持主应用与子应用使用不同技术栈(如 Vue、React、Angular 等),通过 HTML Entry 方式接入子应用,无需深度改造子应用即可实现集成,降低了技术迁移成…...
bash: uwsgi: 未找到命令
针对你提出的“bash: uwsgi: command not found”问题,以下是一些可能的解决方案,请按照步骤逐一排查: 1、检查uwsgi命令是否正确: 确保你输入的命令是uwsgi,而不是uWSGI或其他变体。 2、确认uwsgi是否已安装&…...
HAL库,配置adc基本流程
1. 初始化阶段---cubemx (1) GPIO初始化 函数:HAL_GPIO_Init() 作用:配置ADC引脚为模拟输入模式。 代码示例: // 使能GPIOA时钟 __HAL_RCC_GPIOA_CLK_ENABLE();// 配置PA1为模拟输入 GPIO_InitTypeDef GPIO_InitStruct {0}; GPIO_InitStr…...
【Unity】 HTFramework框架(六十一)Project窗口文件夹锁定器
更新日期:2025年3月7日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 Project窗口文件夹锁定器框架文件夹锁定自定义文件夹锁定限制条件 Project窗口文件夹锁定器 在Project窗口中,文件夹锁定器能够为任何文件夹加…...
网络安全技术整体架构 一个中心三重防护
网络安全技术整体架构:一个中心三重防护 在信息技术飞速发展的今天,网络安全的重要性日益凸显。为了保护信息系统不受各种安全威胁的侵害,网络安全技术整体架构应运而生。本文将详细介绍“一个中心三重防护”的概念,并结合代码示…...
《AJAX:前端异步交互的魔法指南》
什么是AJAX AJAX(Asynchronous JavaScript and XML,异步 JavaScript 和 XML) 是一种用于创建异步网页应用的技术,允许网页在不重新加载整个页面的情况下,与服务器交换数据并局部更新页面内容。尽管名称中包含 XML&…...