探秘Android系统启动的神秘面纱


系统启动过程对于任何操作系统来说都是一个非常关键的环节,Android作为移动设备领域中占据主导地位的操作系统,其启动过程也是个值得深入研究的重点话题。本文将为您解开Android启动过程的神秘面纱,详细剖析其中的每一个步骤,并通过实战案例,帮助您从实践中理解这个复杂而精密的过程。


由于Android 系统是基于 Linux 内核的,所以启动过程与 Linux 系统有很多相似的地方。

对linux 系统启动过程比较感兴趣的朋友,建议前往查阅:揭秘Linux启动的层层面纱,一文看懂从黑屏到界面的精彩之旅。


在开始之前,首先来一张图 完整展示 Android 系统启动过程:

在这里插入图片描述


一、Bootloader


Android 设备作为嵌入式系统,没有像传统计算机那样的 BIOS 程序,而是使用 Bootloader 来完成系统启动前的初始化工作。Bootloader 负责初始化硬件,建立内存映射,并为加载系统内核做好准备。

Android 设备使用的是 ROM(只读存储器)来存储操作系统和用户程序,而不是硬盘。ROM 被划分为多个区域,每个区域用于存放不同类型的数据,具体如下:

  • /boot:存储启动程序,包括内核和内存管理程序。
  • /system:相当于电脑中的 C 盘,用于存储 Android 系统和系统应用程序。
  • /recovery:恢复分区,允许用户在此区域执行系统恢复操作。
  • /data:用户数据分区,存储用户的个人信息,如联系人、短信、应用设置等。
  • /cache:系统缓存分区,用于存储系统频繁访问的数据和应用程序。
  • /misc:包含系统设置和功能启用/禁用等杂项信息。
  • /sdcard:用户存储分区,用于存储照片、音乐、视频等个人文件。

在这里插入图片描述


启动 Android 设备时,Bootloader 是首先被加载的组件,类似于 PC 的启动过程。当设备开机并通电时,Bootloader 会被自动加载。

Bootloader 的任务是从 ROM 中读取操作系统信息,并将 Linux 内核加载到设备的随机存取存储器(RAM)中。

一旦 Linux 内核开始运行,它会进行一系列的初始化操作,包括配置硬件和软件环境、加载必要的驱动程序以及挂载根文件系统。这些步骤完成后,Linux 内核会启动 init 进程,这是用户空间的第一个进程,负责管理系统的启动和运行。


二、 init 进程 与 init.rc 文件

在这里插入图片描述


1、init进程介绍

在Android系统中,init进程是一个非常重要的系统进程,它是用户空间的第一个进程,具有PID(进程ID)1。init进程负责启动系统启动过程中的其他所有进程,以及管理系统的运行时环境。

以下是init进程的一些关键职责:

  • 启动服务init进程会根据启动脚本启动系统服务和应用程序,例如窗口管理器、网络守护进程等。
  • 处理启动脚本init进程会解析init.rc文件和其他.rc文件,这些脚本定义了系统启动过程中的一系列动作和条件。
  • 管理运行级别:Android的init进程管理不同的运行级别(runlevels),每个级别都对应一组应该运行的服务和进程。
  • 监听系统事件init进程会监听系统事件,如按键事件、电源事件等,并根据这些事件触发相应的动作。
  • 恢复模式:在系统启动失败或用户选择恢复模式时,init进程会启动恢复系统。

Kernel 启动后会调用 /system/core/init/Init.cpp 的 main() 方法。

  • Init.main()

首先初始化 Kernel log,创建一块共享的内存空间,加载 /default.prop 文件,解析 init.rc 文件。


2、init.rc文件介绍

init.rc文件是Android系统中的一个关键脚本文件,它位于/system/etc/init目录下。这个文件包含了一系列的命令和脚本,用于定义系统启动时应该执行的操作。

以下是init.rc文件的一些特点:

  • 语法init.rc文件使用一种简单的脚本语言,包括服务定义、条件语句和命令。
  • 服务定义:在init.rc中,每个服务都通过一系列的属性来定义,如service关键字、服务名称、启动命令、依赖关系等。
  • 条件执行init.rc支持条件执行,可以根据系统的状态或属性来决定是否启动某个服务。
  • 依赖管理:服务之间可以定义依赖关系,确保服务按照正确的顺序启动。
  • 启动阶段init.rc中的服务可以根据启动阶段(如early boot, late boot等)来分组,以控制服务的启动时机。
  • 资源管理init.rc还可以控制资源的分配,例如网络资源的分配和释放。

init.rc脚本文件在Android系统中扮演着关键角色,它配置了一系列基础服务,这些服务对于系统的正常启动和运行至关重要。init进程通过解析init.rc文件并创建子进程来启动这些服务。这些服务主要运行在Linux内核空间,并以守护进程的形式在后台提供服务,通常通过socket与系统其他部分通信。

以下是通过init.rc脚本启动的一些核心服务:

  • service_manager:负责启动Binder IPC机制,它是Android中用于进程间通信的关键技术,同时管理着系统中所有的服务。
  • mountd:作为设备安装守护进程,它负责处理设备的安装和状态通知。
  • debuggerd:启动调试系统,处理系统调试相关的请求。
  • rild:即Radio Interface Layer Daemon,它处理与电话相关的事件和请求。
  • media_server:启动多媒体服务,包括AudioFlinger、MediaPlayerService和CameraService,负责音频、视频播放和摄像头功能。
  • surface_flinger:SurfaceFlinger负责管理显示输出,是Android图形系统的一个核心组件。
  • zygote:作为进程孵化器,它启动Android Java运行时环境和system_server进程,负责孵化新的应用程序进程。

当这些服务启动并运行后,用户便能在设备屏幕上看到"Android"的标志,这通常意味着系统已经完成了关键的初始化步骤。

完成上述启动任务后,init进程将进入循环状态,继续监控和管理系统的运行。

init进程和init.rc文件共同工作,确保Android系统能够正确、高效地启动和运行。通过这些机制,Android系统可以在启动时加载必要的服务,同时保持系统的稳定性和响应性。


三、service_manager 进程


service_manager进程在Android系统中扮演着至关重要的角色。它是系统服务管理的核心组件,负责启动、管理和协调系统服务之间的通信。

以下是service_manager进程的一些关键功能和特点:

  1. 启动系统服务service_manager进程在系统启动时被init进程启动。它负责启动系统中的各个服务,这些服务是Android运行所必需的,包括窗口管理器、电源管理器、网络守护进程等。
  2. Binder IPC机制service_manager进程使用Binder机制来实现进程间通信(IPC)。Binder是Android中的一种IPC框架,允许不同进程之间通过一个客户端-服务器模型进行通信。
  3. 服务注册与发现:系统服务在启动时会向service_manager注册自己,提供服务名称和相关的服务对象。这样,当其他进程需要某个服务时,可以通过service_manager来查找并获取服务对象。
  4. 服务管理service_manager进程还负责管理服务的生命周期,包括服务的启动、停止和重启。它确保服务按照正确的顺序和依赖关系启动。
  5. 权限管理service_manager进程还负责权限管理,确保只有授权的进程才能访问特定的服务。
  6. 服务调度service_manager进程还参与服务的调度工作,确保服务能够及时响应请求。
  7. 守护进程service_manager作为一个守护进程,它在后台运行,不依赖于任何特定的应用程序或服务。
  8. 系统稳定性:由于service_manager进程管理着系统中的许多关键服务,它对于维护整个系统的稳定性和可靠性至关重要。
  9. 调试和诊断service_manager进程还可以用于调试和诊断问题,因为它提供了服务的注册信息和状态信息。
  10. 跨进程调用service_manager进程支持跨进程调用,使得不同应用程序和服务能够相互交互,实现复杂的功能。

总的来说,service_manager进程是Android系统中的一个核心组件,它通过Binder IPC机制为系统服务的启动、管理和通信提供了基础设施。通过service_manager,Android系统能够高效、安全地运行各种服务,确保整个系统的正常运作。


四、SurfaceFlinger 进程


SurfaceFlinger是Android系统中的一个关键组件,它负责处理显示输出和图形合成。这个进程在系统启动的早期阶段由init进程启动,并在整个系统运行期间持续工作。以下是SurfaceFinger进程的一些主要功能和特点:

  1. 显示合成SurfaceFlinger的主要任务是将多个层(Layers)合成为单一的显示图像。这些层可能包括应用程序界面、状态栏、屏幕锁等。
  2. 帧缓冲区管理:它管理帧缓冲区(Frame Buffer),这是直接与显示硬件交互的内存区域,用于存储最终的显示数据。
  3. VSync同步SurfaceFlinger使用垂直同步(VSync)信号来同步显示刷新,确保屏幕内容的平滑更新,减少撕裂效果。
  4. 屏幕旋转:它处理屏幕旋转请求,根据设备的传感器输入调整显示内容的方向。
  5. 多显示器支持:在支持多显示器的设备上,SurfaceFlinger可以管理多个显示器的输出。
  6. 2D和3D图形SurfaceFlinger支持2D图形的直接合成以及3D图形的硬件加速。
  7. 权限和安全:它控制对显示内容的访问权限,确保只有授权的应用和服务可以访问或修改显示层。
  8. 性能优化SurfaceFlinger通过优化图形渲染路径和减少不必要的渲染操作来提高系统性能。
  9. 显示设置:它还负责处理显示相关的设置,如亮度、色彩校正等。
  10. 跨进程通信SurfaceFlinger使用Binder机制与Android中的其他进程(如应用程序、窗口管理器等)进行通信。
  11. 资源管理:它管理显示资源,包括图层缓冲区的分配和回收。
  12. 调试和诊断SurfaceFlinger提供了调试和诊断工具,帮助开发者和技术支持人员分析显示问题。

SurfaceFlinger进程在Android系统中的作用至关重要,它不仅负责将用户界面呈现给用户,还确保了显示内容的质量和性能。通过高效的图形合成和显示管理,SurfaceFlinger为Android设备提供了流畅和响应迅速的用户体验。


五、media_server 进程


media_server进程是Android系统中的一个关键组件,它负责处理所有与多媒体相关的任务。这个服务通常在系统启动时由init进程启动,并持续运行以提供多媒体功能。以下是media_server进程的一些主要功能和特点:

  1. 多媒体播放media_server进程管理音频和视频的播放,包括本地文件和流媒体内容。
  2. 编解码器管理:它负责管理编解码器(Codecs),这些是用于压缩和解压音频和视频数据的软件或硬件模块。
  3. 音频处理media_server包含AudioFlinger组件,它处理音频数据流,包括混音、音量控制和音频效果。
  4. 视频处理:它管理视频数据流,包括视频解码和渲染。
  5. CameraServicemedia_server包含CameraService组件,它负责管理相机硬件的访问和图像捕获。
  6. 图像处理:它还可能包含图像处理功能,如图像解码、缩放和旋转。
  7. 多媒体会话管理media_server管理多媒体会话,确保音频和视频流的正确播放和切换。
  8. 电源管理:它与系统的电源管理服务协同工作,优化多媒体播放的电源使用。
  9. 硬件加速media_server利用硬件加速来提高多媒体内容的处理效率,减少CPU负载。
  10. 远程控制:它支持远程控制接口,允许其他应用程序控制播放和录制操作。
  11. 媒体数据库访问media_server提供对媒体数据库的访问,这个数据库存储了媒体文件的元数据。
  12. 媒体扫描:它负责扫描存储设备上的媒体文件,并将信息更新到媒体数据库中。
  13. 播放状态监控media_server监控播放状态,包括播放进度、缓冲情况和播放错误。
  14. 跨进程通信media_server使用Binder机制与Android系统中的其他进程进行通信,提供多媒体服务。
  15. 安全和权限:它管理对多媒体内容的访问权限,确保只有授权的应用可以访问敏感的多媒体数据。
  16. 调试和诊断media_server提供了调试工具,帮助开发者和技术支持人员诊断多媒体播放问题。

media_server进程是Android系统中多媒体功能的核心,它通过集成多种多媒体处理组件,为用户和开发者提供了一个强大而灵活的多媒体平台。通过media_server,Android设备能够支持丰富的多媒体应用,包括音乐播放器、视频播放器、相机应用等。


六、Zygote 进程


在这里插入图片描述

Zygote进程是Android系统框架(Framework)的基础,它负责孵化所有的Android应用进程。Zygote进程的启动标志着Android Framework框架的初始化和启动。

以下是Zygote服务进程的主要功能:

  1. 注册JNI函数:Zygote进程会将底层功能的JNI(Java Native Interface)函数注册到Java虚拟机中,允许Java代码调用本地代码。
  2. 预加载Java类和资源:它预加载常用的Java类和资源,以加速新进程的启动。
  3. 启动system_server进程:Zygote进程通过fork操作启动system_server,这是Android系统中的核心服务进程。
  4. 监听孵化新进程的请求:作为守护进程,Zygote监听来自系统的孵化新进程的请求。
  5. 进入循环状态:启动后,Zygote进程会进入一个循环状态,等待下一次的fork请求。

当Zygote进程启动时,它会执行以下步骤:

  • 执行frameworks/base/cmds/app_process/App_main.cpp文件中的main()方法。
  • App_main.main():设置进程名,并启动AppRuntime
  • AndroidRuntime::start():创建Java虚拟机,注册JNI方法,并调用ZygoteInit.main()方法。
  • ZygoteInit.main():为Zygote注册socket,预加载类和资源,并启动system_server进程。

完成这些步骤后,Zygote进程将进入循环状态,等待系统发出孵化新进程的请求。

Zygote进程的设计允许Android系统高效地启动新应用进程,通过预加载类和资源,减少了启动时间,提高了系统的整体性能。同时,Zygote进程作为Android Framework的基础,为Android应用的开发和运行提供了重要的支持。


七、system_server 进程


system_server进程是Android操作系统中非常核心的一个组件,它负责启动并管理Android系统中的一系列关键服务。这些服务构成了Android运行时环境(Android Runtime)的基础,为应用程序提供必要的支持。


1、system_server进程的一些关键功能和特点
  • 服务管理system_server进程启动后,会初始化并管理许多系统服务,这些服务包括窗口管理器、活动管理器、通知管理器、位置服务、电源管理器等。
  • 系统服务框架:它提供了一个框架,使得这些系统服务能够相互协作并提供一致的接口给应用程序。
  • 系统资源管理system_server进程负责协调系统资源的使用,确保系统的稳定性和响应性。
  • 安全和权限管理:它还负责执行安全策略和权限管理,确保应用程序和服务遵守Android的安全模型。
  • 系统设置和配置system_server进程管理着系统级的设置和配置,包括网络设置、用户设置等。
  • 硬件抽象层(HAL):它与硬件抽象层交互,为上层应用和服务提供硬件功能的支持。
  • 后台服务system_server作为一个守护进程,在后台持续运行,为系统提供持续的服务。
  • 系统监控:它监控系统的运行状态,包括内存使用、CPU负载等,以确保系统的健康运行。
  • 系统更新和维护system_server进程还负责处理系统更新和维护任务。
  • 跨进程通信system_server使用Binder机制来实现与其他进程的通信,这是Android系统中进程间通信的主要方式。
  • 启动顺序system_server进程是在Zygote进程之后启动的,它是由Zygote进程fork出来的。
  • 系统日志:它还负责收集和生成系统日志,这对于系统调试和问题诊断非常重要。
  • 用户空间和内核空间的桥梁system_server进程在用户空间和内核空间之间起到桥梁作用,协调两者之间的交互。

2、system_server启动过程的详细步骤
  • ZygoteInit.startSystemServer():首先调用此方法来启动system_server进程。
  • ZygoteInit.handleSystemServerProcess():此方法fork出子进程,即system_server,并进入该进程。
  • RuntimeInit.zygoteInit():设置当前进程名为“system_server”,并创建PathClassLoader类加载器。
  • nativeZygoteInit():此方法经过多层调用,最终进入app_main.cpp中的onZygoteInit()方法。
  • app_main::onZygoteInit():启动一个新的Binder线程。
  • applicationInit():此方法经过多层调用,最终抛出异常,由ZygoteInit.MethodAndArgsCaller(m, argv)捕获。
  • ZygoteInit.main():开启DDMS功能,调用preload()方法加载资源,预加载OpenGL,并调用SystemServer.main()方法。
  • SystemServer.main():初始化SystemServer对象,并调用其run()方法。
  • SystemServer.run():准备主线程的looper,加载android_servers.so库,该库包含的源码位于frameworks/base/services/目录下。
  • 初始化系统上下文:设置主题,创建系统服务管理SystemServiceManager
  • startBootstrapServices():启动引导服务,包括ActivityManagerServicePowerManagerService等。
  • startCoreServices():启动核心服务,如BatteryServiceUsageStatsServiceWebViewUpdateService等。
  • startOtherServices():启动其他服务,如InputManagerServiceWindowManagerService等,并等待ServiceManagerSurfaceFlinger启动完成,然后显示启动界面。
  • 注册服务到ServiceManager:所有服务启动完成后,注册到ServiceManager
  • ActivityManagerService.systemReady()ActivityManagerService服务启动完成后,进入此方法。
  • 启动SystemUI、WebViewFactory、Watchdog和Launcher App:启动系统界面、WebView工厂、看门狗服务和桌面启动器应用。
  • 进入循环状态:最后,system_server进程进入循环状态,通过Looper.loop()监听和处理系统事件。

system_server进程的启动和运行对于Android系统的正常工作至关重要。它不仅提供了系统服务,还确保了系统的安全性、稳定性和性能。通过精心设计的架构和高效的资源管理,system_server进程支撑着整个Android系统的运行。


八、ActivityManagerService 启动


ActivityManagerService是Android系统中负责管理应用程序生命周期和状态的核心服务。

以下是ActivityManagerService的启动过程:

  1. ActivityManagerService(Context):创建ActivityManagerService实例。
    • 创建名为“ActivityManager”的前台线程,并获取mHandler
    • 通过UiThread类,创建名为“android.ui”的线程。
    • 创建前台和后台广播接收器。
    • 创建/data/system目录。
    • 创建并启动BatteryStatsService服务。
  2. ActivityManagerService.start()
    • 启动电池统计服务。
    • 创建LocalService并添加到LocalServices
  3. ActivityManagerService.startOtherServices() -> installSystemProviders()
    • 安装所有系统Provider
  4. ActivityManagerService.systemReady()
    • 恢复最近任务列表。
    • 启动WebView、SystemUI、开启Watchdog。
    • 启动桌面Launcher应用。
    • 发送系统广播。

启动桌面Launcher应用的过程如下:

  • 首先,通过Zygote进程fork出一个新的进程作为应用进程。
  • 接着,创建Application对象。
  • 然后,创建启动的Activity
  • 最终,用户能够在设备上看到桌面。

ActivityManagerService的启动和运行对于Android系统的稳定性和应用程序的管理至关重要。它不仅管理应用程序的生命周期,还负责系统服务的启动和维护,确保用户界面和应用程序能够顺畅运行。


九、总结


通过上述分析,我们可以清晰地看到Android系统启动的整个流程,掌握每个环节的职责和工作原理。当然,随着Android版本的更新,系统启动的细节也会有所调整,但总体框架应该不会有太大变化。

如果您对此有独特的见解,欢迎在评论区与我分享。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue 将echart 下载为base64图片

1 echart是页面的子组件, 2 页面有多个echart 3 将多个echart下载为base64图片 // 子组件 echart,要保存echartconst chart this.$echarts.init(this.$refs.chart, light) this.chartData chart; //保存数据,供父组件alarmReport调用(th…

专业130+总分400+四川大学951信号与系统考研经验川大电子信息与通信工程,真题,大纲,参考书。教材。

今年四川大学951信号与系统专业课130(据我所知没有140以上的今年),总分400,顺利上岸川大,回顾一下自己这一年的复习,希望自己的经历可以对大家复习有所借鉴,也是对自己的考研画上句话。专业课&a…

重庆耶非凡科技业务大盘点:这些领域你都了解吗?

重庆耶非凡科技有限公司,这家位于重庆市经开区的企业,以其独特的业务模式和专业的技术实力,赢得了业界的广泛认可。它的主要业务涵盖了选品师项目和人力RPO项目两大领域。 首先,我们不得不提的是耶非凡科技的选品师项目 在当今消费…

算法004:盛水最多的容器

这道题比较简单,使用双指针。 要求的是最大面积,对于一个水桶(水杯来说),面积的算法是固定的,就是底乘以高。 在这个题中,我们把左边的位置设为left,右边的位置设为right&#xff…

vue3 + echarts 二次开发百分比饼图

效果图&#xff1a; 安装 pnpm i echarts 公共模块组件 <divclass"pie"ref"percent"style"width: 100%; height: calc(100% - 48px)"></div> import { ref, onMounted } from vue import * as echarts from echarts const prop…

JavaEE:http请求 | 过滤器 | 同步与异步请求 | 跨域问题 | axios框架 有这一篇就够!

&#x1f4c3;HTTP请求 ▐ http超文本传输协议&#xff1a; ⦁ http超文本传输协议属于应用层协议&#xff0c;传输内容必须是超文本内容 (网页内容) ⦁ 例如在网页上点击超链接&#xff0c;提交表单&#xff0c;都可以向后端发送一个http请求 ⦁ 一次http请求中包含请求行、…

盘点哪些企业容易被ddos攻击

DDoS&#xff08;分布式拒绝服务&#xff09;攻击已成为网络安全威胁中的重要一环。本文将探讨哪些类型的企业容易成为DDoS攻击的目标&#xff0c;并提出相应的防范策略&#xff0c;帮助企业更好地保护自身网络安全。 一、电子商务平台 电子商务平台作为线上交易和支付的重要场…

Direct local .aar file dependencies are not supported when building an AAR.

最近升级了最新的AndroidStdio版本&#xff0c;然后导入之前的安卓工程 然后经过一番折腾后项目可以跑了&#xff0c;但是意外发现出release包的时候报错了&#xff0c; Direct local .aar file dependencies are not supported when building an AAR. 网上有很多解决方法&am…

鸿蒙HarmonyOS实战—如何使用Video组件播放视频

1.视频播放 鸿蒙系统中&#xff0c;关于视频播放&#xff0c;可以使用上层视频组件Video。 参数如下 src 支持file:///data/storage路径前缀的字符串&#xff0c;用于读取应用沙箱路径内的资源。需要保证目录包路径下的文件有可读权限。 说明&#xff1a;视频支持的格式是&am…

opencv-python(四)

读取图像文件 image cv2.imread(path, flag) flag&#xff1a;1. 默认值&#xff0c;依原图像读取图像&#xff0c;保留Alpha透明度通道。2.IMREAD_GRAYSCALE&#xff1a;将图像转为灰度再读取。3.IMREAD_COLOR&#xff1a;将图像转为三通道BGR彩色再读取。 可读取的图像格…

猫头虎分享已解决Bug || Error: ‘fetch‘ is not defined

原创作者&#xff1a; 猫头虎 作者微信号&#xff1a; Libin9iOak 作者公众号&#xff1a; 猫头虎技术团队 更新日期&#xff1a; 2024年6月6日 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &…

HBuildX创建uni-app项目

新建项目 输入项目名称&#xff0c;选择存放位置、项目模板、vue版本 创建成功后左边会显示项目目录 安装插件&#xff1a;工具-》插件安装&#xff0c;根据所选vue版本安装编译器 点击运行&#xff0c;选择你需要运行的地方即可

Java面试题:ArrayList底层实现原理、HashMap的实现原理、HashMap的jdk1.7和jdk1.8有什么区别

文章目录 一、List相关面试题1.1 ArrayList源码分析&#xff08;底层实现&#xff09;1.2 ArrayList底层的实现原理是什么1.3 ArrayList listnew ArrayList(10)中的list扩容几次1.4 如何实现数组和List之间的转换1.5 ArrayList 和 LinkedList 的区别是什么 二、HashMap相关面试…

[协议]TCP协议

TCP,UDP协议工作在传输层 TCP基于连接&#xff1b; UDP基于非连接 TCP三次握手 UDP:不能保证丢包&#xff0c;传输稳定性不如TCP;

【SVG 生成系列论文(十一)】如何定制化地生成 SVG 图案?Text-Guided Vector Graphics Customization

SVG 生成系列论文&#xff08;一&#xff09; 和 SVG 生成系列论文&#xff08;二&#xff09; 分别介绍了 StarVector 的大致背景和详细的模型细节。SVG 生成系列论文&#xff08;三&#xff09;和 SVG 生成系列论文&#xff08;四&#xff09;则分别介绍实验、数据集和数据增…

《2024年DDoS趋势报告》:DDoS攻击规模飙升233.33%

2023年&#xff0c;数字领域面临着分布式拒绝服务&#xff08;DDoS&#xff09;攻击的变革浪潮&#xff0c;攻击速度创纪录地达到了每秒700 Gbps和8000万数据包。这些事件跨越了从游戏到金融服务的各个行业&#xff0c;突显了DDoS是一种普遍存在的风险。 值得注意的是&#xf…

关于家储用防逆流电流互感器AKH-0.66/K K-φ16 100A/40mA详细介绍-安科瑞 蒋静

1.产品特点 产品外形美观&#xff0c;安装、接线方便&#xff0c;专用于通讯机房 100A 及以下配电系统改造&#xff0c;可与 AMC16 多回路监控仪表配合使用。 2.型号说明 3.外形尺寸(公差&#xff1a;2mm) 4.规格参数对照表 5.使用环境 &#xff08;1&#xff09;额定工作…

2024年能源、电力电气与机电工程国际学术会议(ICEPEME 2024)

全称&#xff1a;2024年能源、电力电气与机电工程国际学术会议&#xff08;ICEPEME 2024&#xff09; 2024 International Conference on Civil Engineering and Architectural Planning 会议网址:http://www.icepeme.com会议时间&#xff1a;2024/7/10截稿时间&#xff1a;20…

【传知代码】时序预测:多头注意力+宽度学习(论文复现)

前言&#xff1a;近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;尤其是深度学习领域的突破&#xff0c;时序预测领域也迎来了新的变革。传统的预测方法&#xff0c;如线性回归、时间序列分析等&#xff0c;虽然在某些场景下表现良好&#xff0c;但在面对复杂、非线…

FPGA - 4位数值比较器电路

4位数值比较器电路 描述 某4位数值比较器的功能表如下。 请用Verilog语言采用门级描述方式&#xff0c;实现此4位数值比较器 输入描述&#xff1a; input [3:0] A , input [3:0] B 输出描述&#xff1a; output wire…