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

【Linux笔记】——进程信号的捕捉——从中断聊聊OS是怎么“活起来”的

🔥个人主页🔥:孤寂大仙V
🌈收录专栏🌈:Linux
🌹往期回顾🌹:【Linux笔记】——进程信号的保存
🔖流水不争,争的是滔滔不息


  • 一、信号捕捉的流程
  • 二、硬件中断
    • 时钟中断
  • 三、异常
  • 四、用户态与内核态
  • 五、不可重入函数
  • 六、volatile

一、信号捕捉的流程

在这里插入图片描述

上图中,横线以上是用户态以下是内核态,执行主程序也就是我们的代码的时候会因为一些原因比如中断、异常、或系统调用进入进入内核态,在内核态时处理完异常准备返回用户态之前会进行信号检测,所谓的信号处理确实就是在那个pending表检测,如果有相应的信号需要处理,就会去用户态进行信号的处理,然后信号处理函数返回时执行特殊的系统调用再进入到内核态,然后返回最开始用户态main函数中执行的时候被中断的地方继续向下执行。

在这里插入图片描述
重点注意:

信号的真正执行(调用 handler)其实是在用户态完成的。
但是信号检测 & 调度的决定权在内核态。
信号处理函数(handler)本质上是“用户态的中断服务例程”

在这里插入图片描述


如果信号的处理动作是用户自定义函数,在信号递达的时候就调用这个函数,就称为捕捉函数

信号处理的过程:

  1. 用户程序注册了 SIGQUIT 信号的处理函数 sighandler 。
  2. 当前正在执行 main 函数,这时发生中断或异常切换到内核态。
  3. 在中断处理完毕后要返回用户态的 main 函数之前检查到有信号 SIGQUIT 递达。
  4. 内核决定返回用户态后不是恢复 main 函数的上下文继续执行,而是执行 sighandler 函数, sighandler 和 main 函数使用不同的堆栈空间,它们之间不存在调用和被调用的关系,是两个独立的控制流程。
  5. sighandler 函数返回后自动执行特殊的系统调用 sigreturn 再次进入内核态。
  6. 如果没有新的信号要递达,这次再返回用户态就是恢复 main 函数的上下文继续执行了。

二、硬件中断

穿插软件中断的话题,下面对硬件中断的理解并不严谨主要是理解

简单来说,外部设备就绪,会通过发送高低点评给中断控制器,(中断控制器是给 CPU 管理突发事件的“调度台”,负责接收、筛选、优先级排序各种中断请求,然后在合适的时机打断 CPU 处理)。中断控制器接收到后判断是不是该管这事,再决定要不要“喊醒”CPU 处理。在操作系统中软件层面,内存中会有一个函数指针数组中断向量表就是中断来了要干什么。CPU会根据中断号索引中断向量表中的中断方法。“中断”本质上是打断 CPU 当前的执行,去处理“更紧急”的事。
在这里插入图片描述
虽然“中断”和“信号”本质上属于不同领域的机制,但它们的运行思路确实很像,可以说有种“精神上的共鸣”。

时钟中断

在这里插入图片描述
引入问题,当中断没有到来了的时候操作系统在干什么,操作系统什么都没做!是暂停的

对中断进行进一步的理解,多增加点东西
时钟源在物理上是外部设备,中断向量表中有进程调度的中断服务,时钟源发出Tick信号后,必须通过中断控制器传递到CPU,CPU响应后由操作系统处理“时钟中断”,从而驱动整个系统的“时间流动”。时钟源以固定的特定的频率向CPU发送特定的中断,然后操作系统就在硬件时钟中断的驱动下根据中断号执行中断处理历程执行中断方法进行调度了。这里可以得出一个结论,操作系统就是基于中断进行工作的软件。时钟中断让OS有了‘时间’的概念,靠时间片完成任务切换,形成一个高效运转的多任务系统。CPU主频决定做事快不快,时钟中断频率决定多频繁切任务。操作系统,是中断驱动下的超级调度器。

操作系统=中断驱动的超级调度器

三、异常

上面我们聊的是通过硬件来触发中断,其实通过软件也能触发中断。
为了让操作系统支持进行系统调用,CPU也设计了对应的汇编指令(int 或者 syscall),可以让CPU内部触发中断逻辑。int和syscall属于指令集,指令集是“CPU能干的活”。
在这里插入图片描述
指令集里有 syscall / int 这样的指令,可以触发异常(trap),让CPU跳到内核态,再查系统调用表找到对应的内核函数去执行。就可以理解为触发了异常,然后去中断向量表中在处理软中断的中断服务中,根据系统调用号查系统调用函数执行对应的方法。(系统调用函数指针表,用于系统调用中断处理程序,作为跳转表。每一个系统调用都有一个唯一的下标,这个下标叫做系统调用号)。这里可能会有问题,那用户层面是如何进行系统调用的?其实我们用的函数,不是操作系统提供的系统调用接口,操作系统只提供系统调用号。我们用的函数都是比如说open close这些都是glibc封装的。

// 系统调⽤函数指针表。⽤于系统调⽤中断处理程序(int 0x80),作为跳转表。
fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read,
sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link,
sys_unlink, sys_execve, sys_chdir, sys_time, sys_mknod, sys_chmod,
sys_chown, sys_break, sys_stat, sys_lseek, sys_getpid, sys_mount,
sys_umount, sys_setuid, sys_getuid, sys_stime, sys_ptrace, sys_alarm,
sys_fstat, sys_pause, sys_utime, sys_stty, sys_gtty, sys_access,
sys_nice, sys_ftime, sys_sync, sys_kill, sys_rename, sys_mkdir,
sys_rmdir, sys_dup, sys_pipe, sys_times, sys_prof, sys_brk, sys_setgid,
sys_getgid, sys_signal, sys_geteuid, sys_getegid, sys_acct, sys_phys,
sys_lock, sys_ioctl, sys_fcntl, sys_mpx, sys_setpgid, sys_ulimit,
sys_uname, sys_umask, sys_chroot, sys_ustat, sys_dup2, sys_getppid,
sys_getpgrp, sys_setsid, sys_sigaction, sys_sgetmask, sys_ssetmask,
sys_setreuid, sys_setregid
}

所有调用系统函数(比如你在用户空间调用 open、read、write 等操作)通常是通过异常来实现的,具体来说,是通过系统调用(system call)触发的异常来完成的。 还有除以0、非法指令等,通常是由CPU执行时的错误或特殊事件触发,CPU自己去查中断向量表。

注意⚠️不要混淆软中断与异常
在这里插入图片描述
软中断(SoftIRQ) 并不是软件程序直接触发的中断。这个名字有点误导,实际上它是内核自己使用的一种机制。它是用来处理一些高频率的中断任务(比如网络数据包、磁盘I/O等)并把这些任务分配给内核去处理,但并不是由用户直接触发的。

软中断的触发并不是由用户程序直接发起,而是 硬中断触发后,由内核自己决定要不要处理。当硬中断(比如网络卡收到数据包)完成后,内核可以决定将一些任务推到“软中断”队列,稍后在合适的时机处理。

四、用户态与内核态

在这里插入图片描述
根据上图我们发现,0-3gb是用户区,3-4gb是内核区,用户区是用户的进程和数据等等,内核区是操作系统、和有哪些系统调用、中断运行需要的东西也在这里。多个进程有多个用户区,多个用户区根据进程的不同存有不同的信息,但是多个进程的内核区都指向一块区域,所以操作系统无论怎么切换进程都能找到同一个操作系统,所以操作系统系统调用方法的执行实在进程的地址空间中执行的。

我们发现内核和用户都在同一块地址空间上,会不会用户可以随便访问内核的代码和数据?其实并不会因为操作系统不相信任何人必须采用系统调用的方式进行访问,所以用户态,只能以用户身份访问自己的0-3gb的空间,内核态,以内核的身份运行通过系统调用的方访问3-4gb的空间。

在系统中,用户或者os怎么知道自己处于内核态还是用户态?

用户态 → 内核态,寄存器到底发生了啥?
假设场景:
你调用了个 read() 系统调用,本质上是个 syscall 指令 → CPU切内核态。

CPU干的 4件事:

  1. 【换CS】:切换代码段特权级
    用户态 时:CS = 0x1B(Ring3 用户代码段)
    内核态 时:CS = 0x08(Ring0 内核代码段)
    这个动作瞬间改变了特权级,低2位是 CPL(Current Privilege Level)

  2. 【换SS(栈段) + RSP(栈指针)】:切换到内核态栈
    用户态有自己的用户栈(SS = 0x23, RSP = 用户栈地址)进内核前,CPU 会:把用户态栈信息(SS、RSP)暂存切换到内核态专用栈(TSS 里提前设定好了内核栈地址)防止内核操作时还用着“脆弱的用户栈”。

  3. 【保存上下文】:把用户态的寄存器信息压栈把当前的RIP(下一条要执行的用户代码地址、RFLAGS(标志寄存器)、甚至 RAX、RBX、RCX、RDX… 这些通用寄存器,全都“啪!”压到内核栈上。
    这是为了返回用户态时能恢复“原汁原味”。

  4. 【跳转到内核代码执行】
    CPU 根据 IDT表(中断描述符表) 找到对应的中断/系统调用入口。开始执行内核里的 sys_read() 代码。

执行完后 → 内核态 → 用户态(返回)
当 read() 干完活后,要回去继续跑你的代码,CPU还得干这些事:

CPU做了:

  1. 【恢复寄存器上下文】:从内核栈里把刚才压的 RIP、RFLAGS、通用寄存器 恢复回来。

  2. 【换回用户态CS】:CS 从 0x08 → 0x1B (回到用户代码段,Ring3)2.

  3. 【换回用户态SS、RSP】:恢复用户栈。

  4. 【执行 iret 指令】:跳回你用户程序的下一条指令,继续愉快干活。

“CPU切内核态时,核心就两件事:
换‘工作服’(CS、SS、RSP变成内核态的),收拾行李(把用户态寄存器都保存好)。干完活后,再换回‘用户态衣服’,提着原来的行李继续走。”

五、不可重入函数

在进行链表插入节点的时候,本来插入一个节点就OK了,但是这时候插入节点的时候进行了自定义捕捉信号,让这个插入节点的逻辑又去干别的了。那么这时候可能就会出错,比如插入的节点是node1,这时候信号捕捉像同一个链表中插入了节点node2,最后只有一个节点插入了链表中。

insert函数可能会因为出入而造成错乱,这样的函数被称为不可重入函数。

如果一个函数符合以下条件之一就是不可重复的:

  1. 调用了malloc或free,因为malloc也是用全局链表来管理堆的。
  2. 调用了标准i/o库函数,标准i/o库的很多实现都是以不可重入的方式使用全局数据结构。

六、volatile

信号处理函数里访问的全局变量,必须用 volatile 来修饰。

volatile相当于告诉编译器,不要优化不要把全局变量放到寄存器,每次都要从内存中拿。

//假如写了一个全局变量
int stop=0//主程序循环
while(!stop)
{
}
//信号处理函数
void sigint_handler(int signum)
{stop=1;
}

如果没有volatile ,编译器看stop是全局变量,并且stop没变过,就直接放寄存器里了。这是信号触发,stop=1改的是内存中的值,但是循环检测检测的是寄存器里的值,这时候就完蛋了死循环了。

所以,信号处理函数必须要用volatile ,因为这样全局变量就不会往寄存器里拿了,想要用每次都要访问内存,去内存中拿,那么这样上述的例子,stop=1改了内存中的值,这时循环检测检测的值就是内存中已经改过的值。

volatile 的本质作用:
“告诉编译器:这个变量随时可能被外部修改,不许优化,不许缓存,每次都得去内存拿最新值。”

相关文章:

【Linux笔记】——进程信号的捕捉——从中断聊聊OS是怎么“活起来”的

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:Linux 🌹往期回顾🌹:【Linux笔记】——进程信号的保存 🔖流水不争,争的是滔滔不息 一、信号捕捉的流程二、…...

VCS X-PROP建模以及在方针中的应用

VCS X-PROP建模以及在方针中的应用 摘要:VCS X-Prop(X-Propagation)是 Synopsys VCS 仿真工具中的一种高级功能,用于增强 X 态(未知态)和 Z 态(高阻态)在 RTL 仿真中的建模和传播能力…...

OpenSHMEM 介绍和使用指南

OpenSHMEM 介绍和使用指南 什么是 OpenSHMEM? OpenSHMEM 是一个用于并行计算的标准化 API,它提供了一种分区全局地址空间 (PGAS) 编程模型。OpenSHMEM 最初由 Cray 公司开发,后来成为一个开源项目,旨在为高性能计算提供高效的通…...

Electron入门指南:用前端技术打造桌面应用

🌟 目录速览 什么是Electron?为什么要用Electron?核心概念三分钟掌握快速创建第一个应用典型应用场景开发注意事项常见问题解答 一、什么是Electron?🤔 Electron就像魔法转换器,它能将你熟悉的&#xff1…...

机器学习第十讲:异常值检测 → 发现身高填3米的不合理数据

机器学习第十讲:异常值检测 → 发现身高填3米的不合理数据 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南 一、幼儿…...

【Redis】缓存穿透、缓存雪崩、缓存击穿

1.缓存穿透 是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,导致请求直接穿透缓存到达数据库,给数据库带来压力的情况。 常见的解决方案有两种: 缓存空对象:实现简单,维护方便&am…...

科学养生指南:打造健康生活

在快节奏的现代生活中,健康养生成为人们关注的焦点。科学养生无需复杂理论,掌握以下几个关键要素,就能为身体构筑坚实的健康防线。​ 合理饮食是健康的基础。世界卫生组织建议,每天应摄入至少 5 份蔬菜和水果,保证维生…...

解锁健康生活:现代养生实用方案

早上被闹钟惊醒后匆忙灌下咖啡,中午用外卖应付一餐,深夜刷着手机迟迟不肯入睡 —— 这样的生活模式,正在不知不觉侵蚀我们的健康。科学养生并非遥不可及的目标,只需从生活细节入手,就能逐步改善身体状态。​ 饮食管理…...

深入解析JVM字节码解释器执行流程(OpenJDK 17源码实现)

一、核心流程概述 JVM解释器的核心任务是将Java字节码逐条翻译为本地机器指令并执行。其执行流程可分为以下关键阶段: 方法调用入口构建:生成栈帧、处理参数、同步锁等。 字节码分派(Dispatch):根据字节码跳转到对应…...

【HCIA】BFD

前言 前面我们介绍了浮动路由以及出口路由器的默认路由配置,可如此配置会存在隐患,就是出口路由器直连的网络设备并不是运营商的路由器,而是交换机。此时我们就需要感知路由器的存活状态,这就需要用到 BFD(Bidirectio…...

vue使用路由技术实现登录成功后跳转到首页

文章目录 一、概述二、使用步骤安装vue-router在src/router/index.js中创建路由器,并导出在vue应用实例中使用router声明router-view标签,展示组件内容 三、配置登录成功后跳转首页四、参考资料 一、概述 路由,决定从起点到终点的路径的进程…...

用户模块 - IP归属地框架吞吐测试

一、引言 在很多用户系统中,我们常常需要知道一个IP地址来自哪里,比如判断一个用户是否来自国内、识别异常登录等。而实现这个功能,通常会使用一个“IP归属地解析框架”,它可以根据IP地址返回国家、省份、城市等信息。 不过&#…...

生活实用小工具-手机号归属地查询

一、接口定义 手机号码归属地接口(又称手机号查询API)是一种通过输入手机号码,快速返回其归属地信息(如省份、城市、运营商、区号等)的应用程序接口。其数据基础来源于运营商(移动、联通、电信)…...

鸿蒙-5.1.0-release源码下载

源码获取 前提条件 注册码云gitee帐号。注册码云SSH公钥,请参考码云帮助中心。安装git客户端和git-lfs并配置用户信息。 git config --global user.name "yourname" # 这得和gitee的账号对的上 git config --global user.email "your-email-ad…...

2020年下半年试题三:论云原生架构及其应用

论文库链接:系统架构设计师论文 论文题目 近年来,随着数字化转型不断深入,科技创新与业务发展不断融合,各行各业正在从大工业时代的固化范式进化成面向创新型组织与灵活型业务的崭新模式。在这一背景下,以容器盒微服务…...

Flutter到HarmonyOS Next 的跨越:memory_info库的鸿蒙适配之旅

Flutter到鸿蒙的跨越:memory_info库的鸿蒙适配之旅 本项目作者:kirk/坚果 您可以使用这个Flutter插件来更改应用程序图标上的角标 作者仓库:https://github.com/MrOlolo/memory_info/tree/master/memory_info 在数字化浪潮的推动下&#…...

昆士兰科技大学无人机自主导航探索新框架!UAVNav:GNSS拒止与视觉受限环境中的无人机导航与目标检测

作者: Sebastien Boiteau, Fernando Vanegas, Felipe Gonzalez 单位:昆士兰科技大学电气工程与机器人学院,昆士兰科技大学机器人中心 论文标题:Framework for Autonomous UAV Navigation and Target Detection in Global-Naviga…...

uniapp设置 overflow:auto;右边不显示滚动条的问题

设置了overflow:auto;或者其它overflow的属性不显示滚动条是因为在uniapp中默认隐藏了滚动条 解决方法: //强制显示滚动条 ::-webkit-scrollbar {width: 8px !important;background: #ccc !important;display: block !important;}//设置滚动条颜色.cu-…...

基于SIP协议的VOIP话机认证注册流程分析与抓包验证

话机的认证注册报文怎么看? 在SIP协议中,当VOIP话机首次启动的时候,他会向SIP服务器发送一个Register请求来注册自己的信息地址,,告诉服务器 话机当前在线话机的IP地址和端口是什么话机希望接收通话的联系方式 认证注…...

JS,ES,TS三者什么区别

Java Script(JS)、ECMAScript(ES)、TypeScript(TS) 的核心区别与关联的详细解析,结合技术背景、设计目标及应用场景展开说明: 一、核心定义与关系 JavaScript(JS) 定义:一种动态类型、基于原型的脚本语言,由 Netscape 公司于 1995 年首次开发,用于网页交互功能。角…...

深度理解指针(2)

🎁个人主页:工藤新一 🔍系列专栏:C面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章 深入理解指…...

笔记本/台式机加装PCIe 5.0固态硬盘兼容性与安装方法详解 —— 金士顿Kingston FURY Renegade G5装机指南

在2025年,存储设备市场迎来了革命性的升级浪潮。作为最高性能PCIe 5.0固态硬盘的代表,Kingston FURY Renegade G5 PCIe 5.0 NVMe M.2 固态硬盘不仅刷新了读写速度新高,更以优异的能耗和温控表现成为高端PC、游戏本和工作站升级的“定心丸”。…...

使用libUSB-win32的简单读写例程参考

USB上位机程序的编写,函数的调用过程. 调用 void usb_init(void); 进行初始化 调用usb_find_busses、usb_find_devices和usb_get_busses这三个函数,获得已找到的USB总线序列;然后通过链表遍历所有的USB设备,根据已知的要打开USB设…...

Tailwind CSS 实战教程:从入门到精通

Tailwind CSS 实战教程:从入门到精通 前言 在Web开发的世界里,CSS框架层出不穷。从早期的Bootstrap到现在的Tailwind CSS,前端开发者们总是在寻找更高效、更灵活的样式解决方案。今天,我们就来深入探讨这个被称为"实用优先…...

【IC】如何获取良好的翻转数据来改进dynamic IR drop分析?

动态电压降分析是一个复杂的过程。为了成功执行适当的分析,需要组合多个输入文件和不同的配置设置。 切换场景是任何动态压降分析的关键。设计中的所有门电路和实例不会同时处于活动状态。此外,对于更复杂的单元,可能的切换模式会非常多。这…...

WebGL知识框架

一、WebGL 基础概念 1. WebGL 简介 是什么? 基于 OpenGL ES 的浏览器 3D 图形 API,直接操作 GPU 渲染。 核心特点 底层、高性能、需手动控制渲染管线。 依赖 JavaScript 和 GLSL(着色器语言)。 与 Three.js 的关系 Three.js…...

集成 ONLYOFFICE 与 AI 插件,为您的服务带来智能文档编辑器

在数字化办公浪潮中,文档处理效率对企业发展具有关键意义。但许多办公平台仅支持基础流程,查阅、批注和修改需借助外部工具,增加了操作复杂性和沟通成本。本文将为开发者介绍如何集成 ONLYOFFICE 文档并利用其中的 AI 插件,智能处…...

Simulink模型回调

Simulink 模型回调函数是一种特殊的 MATLAB 函数,可在模型生命周期的特定阶段自动执行。它们允许用户自定义模型行为、执行初始化任务、验证参数或记录数据。以下是各回调函数的详细说明: 1. PreLoadFcn 触发时机:Simulink 模型加载到内存之…...

网络协议分析 实验五 UDP-IPv6-DNS

文章目录 实验5.1 UDP(User Datagram Protocol)练习二 UDP单播通信练习三 利用仿真编辑器编辑UDP数据包,利用工具接收练习四 UDP受限广播通信练习六 利用仿真编辑器编辑IPV6的UDP数据包并发送实验5.2 DNS(Domain Name System)练习二 仿真编辑DNS查询报文&#xff08…...

共享代理IP vs 动态IP:企业级业务场景的选型深度解析

在数字化转型加速的今天,IP地址管理已成为企业网络架构中的核心命题。无论是跨境电商的多账号运营、大数据采集的精准度保障,还是网络安全的纵深防御,IP解决方案的选择直接关系到业务效能与合规风险。本文将从技术底层逻辑出发,结…...

鸿蒙OSUniApp制作一个小巧的图片浏览器#三方框架 #Uniapp

利用UniApp制作一个小巧的图片浏览器 最近接了个需求,要求做一个轻量级的图片浏览工具,考虑到多端适配的问题,果断选择了UniApp作为开发框架。本文记录了我从0到1的开发过程,希望能给有类似需求的小伙伴一些参考。 前言 移动互联…...

Java并发编程面试题:并发工具类(10题)

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...

【Oracle专栏】扩容导致数据文件 dbf 丢失,实操

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 同事检查扩容情况,发现客户扩容后数据盘后,盘中原有文件丢失,再检查发现数据库没有启动。通过检查发现数据盘中丢失的是oracle的 dbf 表空间文件。数据库无法启动。 检查情况:1)没有rman备份 …...

【Linux】Linux 的管道与重定向的理解

目录 一、了解Linux目录配置标准FHS 二、Linux数据重定向的理解与操作 2.1基本背景 2.2重定向的理解 2.3Linux管道命令的理解与操作 三、Linux 环境变量与PATH 3.1环境变量PATH 一、了解Linux目录配置标准FHS FHS本质:是一套规定Linux目录结构,软…...

【交互 / 差分约束】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long;const int N 10510; const int M 200 * 500 10; int h[N], ne[M], e[M], w[M], idx; ll d[N]; int n, m; bool st[N]; int cnt[N];void add(int a, int b, int c) {w[idx] c, e[idx] b…...

1. Go 语言环境安装

&#x1f451; 博主简介&#xff1a;高级开发工程师 &#x1f463; 出没地点&#xff1a;北京 &#x1f48a; 人生目标&#xff1a;自由 ——————————————————————————————————————————— 版权声明&#xff1a;本文为原创文章&#xf…...

灰度图像和RGB图像在数据大小和编码处理方式差别

技术背景 好多开发者对灰度图像和RGB图像有些认知差异&#xff0c;今天我们大概介绍下二者差别。灰度图像&#xff08;Grayscale Image&#xff09;和RGB图像在编码处理时&#xff0c;数据大小和处理方式的差别主要体现在以下几个方面&#xff1a; 1. 通道数差异 图像类型通道…...

Lord Of The Root: 1.0.1通关

Lord Of The Root: 1.0.1 来自 <Lord Of The Root: 1.0.1 ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.247 3&…...

虚拟机安装CentOS7网络问题

虚拟机安装CentOS7网络问题 1. 存在的问题1.1 CentOS7详细信息 2. 解决问题3.Windows下配置桥接模式 1. 存在的问题 虽然已经成功在虚拟机上安装了CentOS7&#xff0c;但是依旧不能上网。 1.1 CentOS7详细信息 [fanzhencentos01 ~]$ hostnamectlStatic hostname: centos01Ic…...

AI-02a5a6.神经网络-与学习相关的技巧-批量归一化

批量归一化 Batch Normalization 设置合适的权重初始值&#xff0c;则各层的激活值分布会有适当的广度&#xff0c;从而可以顺利的进行学习。那么&#xff0c;更进一步&#xff0c;强制性的调整激活值的分布&#xff0c;是的各层拥有适当的广度呢&#xff1f;批量归一化&#…...

matlab实现蚁群算法解决公交车路径规划问题

使用蚁群算法解决公交车路径规划问题的MATLAB代码实现&#xff0c;包含详细注释和仿真流程。该算法以站点间行驶时间或距离为优化目标&#xff0c;寻找最优公交路线。 1. 问题建模与参数设置 1.1 输入数据 站点坐标&#xff1a;假设有20个公交站点&#xff0c;随机生成位置。…...

Agent Builder API - Agent Smith 扩展的后端服务(开源代码)

​一、软件介绍 文末提供程序和源码下载 Agent Builder API - Agent Smith 扩展的后端服务&#xff08;开源代码&#xff09;手动设置&#xff1a;在本地计算机中克隆此存储库并启动 python FAST API 服务器。&#xff08;可选&#xff09;安装并设置 Mongo DB。Dev Container…...

C++类和对象之相关特性

C 一.类型转换隐式类型转换 二.static成员一、static成员变量二、static成员函数三、static成员的存储位置四、总结 三.友元一、友元函数二、友元类三、友元成员函数四、总结 四.内部类五.匿名对象六.new 一.类型转换 在C中&#xff0c;类类型转换是指将一个类的对象转换为另一…...

容器编排的革命:Kubernetes如何引领IT的云原生时代

文章目录 Kubernetes的本质&#xff1a;容器世界的智能指挥家Kubernetes的核心功能包括&#xff1a; Kubernetes的演进&#xff1a;从谷歌的实验到全球标准核心技术&#xff1a;Kubernetes的基石与生态1. Pod与容器&#xff1a;最小调度单位2. Deployment&#xff1a;无状态应用…...

2025视频协作工具全景解析:技术跃迁与场景重构

一、技术演进:从功能工具到智能生态 2025年视频协作软件的核心竞争力已从基础功能升级为技术生态的构建。以分秒帧为例,其音视频生产协作系统,可帮助创作者在云端构建工作流,让跨地域、跨终端、跨团队的协作组可以在统一的安全平台上管理所有媒体资源、任务、反馈信息,从而更高…...

保持视频二维码不变,更新视频的内容

视频替换功能允许用户在保持视频二维码、观看地址和调用代码不变的情况下更新视频内容&#xff0c;从而节省重新印刷物料的成本。这一功能适用于多种场景&#xff0c;如营销宣传、产品操作手册、设备说明书等&#xff0c;当视频内容需要修改或更新时&#xff0c;用户只需上传新…...

Linux常用命令40——alias设置命令别名

在使用Linux或macOS日常开发中&#xff0c;熟悉一些基本的命令有助于提高工作效率&#xff0c;alias命令来自英文单词alias&#xff0c;中文译为“别名”&#xff0c;其功能是设置命令别名信息。我们可以使用alias将一些较长的命令进行简写&#xff0c;往往几十个字符的命令会变…...

Java大师成长计划之第22天:Spring Cloud微服务架构

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4o-mini模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 随着企业应用的不断扩展&#xff0c…...

为什么go语言中返回的指针类型,不需要用*取值(解引用),就可以直接赋值呢?

Go 中返回的是指针&#xff0c;但你却能直接用“.”访问字段&#xff0c;看起来像是“没有解引用”&#xff0c;其实是 Go 帮你自动处理了“指针解引用”的语法糖。 在 Go 中&#xff0c;如果你有一个结构体指针&#xff08;例如 *FileMeta&#xff09;&#xff0c;你可以直接…...

Java生成可控的Word表格功能开发

在日常办公自动化与系统集成场景中,生成结构化的Word文档已成为一种刚性需求,尤其是带有格式规范、内容动态填充的Word表格(Table)。本文将围绕如何利用Java开发一个可控的Word表格生成功能模块展开,涵盖技术选型、代码实现、边界控制与常见问题处理等方面,帮助开发者快速…...