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

Android核心系统服务:AMS、WMS、PMS 与 system_server 进程解析

1. 引言

在 Android 系统中,ActivityManagerService (AMS)WindowManagerService (WMS)PackageManagerService (PMS) 是三个最核心的系统服务,它们分别管理着应用的生命周期、窗口显示和应用包管理。

但你是否知道,这些服务并不是独立进程,而是运行在同一个系统进程——system_server 中?本文将介绍 AMS/WMS/PMS 的核心作用,并深入探讨 system_server 进程的架构,包括它的线程模型和关键组件。


2. AMS、WMS、PMS 的作用

(1)ActivityManagerService (AMS) —— 应用生命周期管理者

AMS 是 Android 的“大管家”,负责:

  • 启动/管理 Activity(如 startActivity() 的底层实现)
  • 管理应用进程(通过 ProcessList 分配进程优先级)
  • 处理 ANR(Application Not Responding)
  • 管理任务栈(TaskStack)(决定 Activity 如何回退)

举例:当你点击一个 App 图标时,AMS 会检查目标 Activity 是否存在,并决定是否创建新进程或复用已有进程。

(2)WindowManagerService (WMS) —— 窗口管理者

WMS 负责所有 UI 窗口的显示与交互:

  • 管理窗口层级(Window层级,如 Dialog、Toast、StatusBar)
  • 处理触摸事件分发(决定哪个窗口接收事件)
  • 与 SurfaceFlinger 协作(控制 Surface 的合成与渲染)

举例:当你滑动屏幕时,WMS 会计算触摸事件应该分发给哪个 App 的哪个窗口。

(3)PackageManagerService (PMS) —— 包管理专家

PMS 管理所有 APK 的安装、卸载和权限:

  • 解析 AndroidManifest.xml(获取四大组件信息)
  • 管理应用权限(如运行时权限 checkSelfPermission()
  • 处理 APK 安装/卸载(调用 installd 守护进程)

举例:当你安装一个 App 时,PMS 会校验签名、分配 UID,并更新 /data/system/packages.xml


3. system_server 进程:Android 系统服务的“大本营”

AMS、WMS、PMS 并不是独立进程,而是运行在 system_server 进程中的不同线程

(1)system_server 是什么?

  • Zygote 进程孵化(Android 所有进程的父进程)。
  • 在系统启动时初始化,运行几乎所有核心系统服务。
  • 通过 Binder IPC 向 App 进程提供跨进程调用(如 IActivityManager)。

(2)AMS/WMS/PMS 是 system_server 的线程吗?

是的!system_server 是一个多线程进程,不同的服务运行在不同的线程中:

  • AMSActivityManager 线程
  • WMSWindowManager 线程
  • PMSPackageManager 线程

它们通过 Binder 线程池(如 Binder:XXX_1)与 App 进程通信。

(3)system_server 还有哪些关键线程?

除了 AMS/WMS/PMS,system_server 还包含许多重要线程:

线程名作用
mainSystemServer 主线程,负责启动其他服务
android.fg处理前台任务(如广播、ANR 监测)
android.ui处理 UI 相关任务(如 Input 事件)
android.io管理 I/O 操作(如文件读写)
Binder:XXX_NBinder 线程池,处理跨进程调用

示例:当 App 调用 startActivity() 时:

  1. App 进程通过 Binder 调用 system_serverActivityManager 线程。
  2. AMS 处理请求后,可能再通过 WMS 的 WindowManager 线程管理窗口。

4. 为什么这样设计?—— 多线程 vs 多进程

你可能会有疑问:为什么不把 AMS、WMS、PMS 拆分成独立进程?

(1)性能考量

  • 减少进程间通信(IPC)开销:如果 AMS/WMS/PMS 是独立进程,每次调用都需要 Binder 通信,而 Binder 是同步阻塞的,频繁 IPC 会降低性能。
  • 共享内存优化:同进程内数据共享更快(如 ActivityRecordWindowState 等数据结构)。

(2)稳定性与依赖管理

  • AMS/WMS/PMS 之间需要紧密协作(如启动 Activity 需要 AMS 和 WMS 配合)。
  • 如果某个服务崩溃,整个 system_server 会重启(而不是单个服务崩溃导致系统不稳定)。

(3)历史演进

  • 早期 Android 确实尝试过让部分服务独立(如 SurfaceFlinger),但后来发现 IPC 开销太大,最终大多数核心服务合并到 system_server

5. 如何观察 system_server 的线程?

我们可以通过以下命令查看 system_server 的线程情况:

# 查看 system_server 进程ID
adb shell ps -A | grep system_server# 查看该进程的所有线程
adb shell ps -T <PID># 或者用 top 看 CPU 占用
adb shell top -H -p <PID>

典型输出示例

USER      PID   PPID  TID   CMD  
system    1234  1     1234  system_server  
system    1234  1     1235  Binder:1234_1  
system    1234  1     1236  ActivityManager  
system    1234  1     1237  WindowManager  
system    1234  1     1238  PackageManager  

6. 总结

  1. AMS/WMS/PMS 是 Android 最核心的三大系统服务,分别管理应用、窗口和包。
  2. 它们运行在 system_server 进程的不同线程,而非独立进程,以减少 IPC 开销。
  3. system_server 是一个多线程进程,包含主线程、Binder 线程、AMS/WMS/PMS 专属线程等。
  4. 这样设计的优势:性能高、协作方便、稳定性强。

如果你是 Android 开发者,理解 system_server 的架构,能帮助你更深入地掌握 Framework 层的工作原理,尤其是在分析 ANR、UI 卡顿、Binder 通信等问题时。


7. 扩展思考

  • 如果 AMS 的线程卡死,会影响 WMS 吗?(答案:会,因为它们同属 system_server 进程!)
  • 为什么 SurfaceFlinger 不在 system_server 里?(答案:因为它需要独立的 GPU 访问权限,且历史原因。)
  • 如何优化 system_server 的负载?(答案:减少跨进程调用、避免主线程阻塞。)

相关文章:

Android核心系统服务:AMS、WMS、PMS 与 system_server 进程解析

1. 引言 在 Android 系统中&#xff0c;ActivityManagerService (AMS)、WindowManagerService (WMS) 和 PackageManagerService (PMS) 是三个最核心的系统服务&#xff0c;它们分别管理着应用的生命周期、窗口显示和应用包管理。 但你是否知道&#xff0c;这些服务并不是独立…...

arduino平台读取鼠标光电传感器

鼠标坏掉了&#xff0c;大抵是修不好了。&#xff08;全剧终—&#xff09; 但是爱动手的小明不会浪费这个鼠标&#xff0c;确认外观没有明显烧毁痕迹后&#xff0c;尝试从电路板上利用光电传感器进行位移的测量&#xff0c;光电传感器&#xff08;型号&#xff1a;FCT3065&am…...

EXO分布式部署deepseek r1

EXO 是一个支持分布式 AI 计算的框架&#xff0c;可以用于在多个设备&#xff08;包括 Mac Studio&#xff09;上运行大语言模型&#xff08;LLM&#xff09;。以下是联调 Mac Studio 512GB 的步骤&#xff1a; 安装 EXO • 从 EXO GitHub 仓库 下载源码或使用 git clone 获取…...

机器学习 KNN算法

KNN算法 1. sklearn机器学习概述2. KNN算法-分类1 样本距离判断2 KNN 算法原理3 KNN缺点4 API5 sklearn 实现KNN示例6 模型保存与加载葡萄酒(load_wine)数据集KNN算法(1)wine.feature_names:(2)wine.target_names(3)KNN算法实现 1. sklearn机器学习概述 获取数据、数据处理、特…...

强化学习赋能医疗大模型:构建闭环检索-反馈-优化系统提升推理能力

引言 人工智能技术在医疗领域的应用正经历前所未有的发展,特别是在大型语言模型(LLMs)技术的推动下,医疗大模型(Medical Large Models)展现出巨大的潜力。这些模型不仅能够理解复杂的医学术语和概念,还能通过自然语言与用户交互,为医疗专业人士和患者提供有价值的信息和建…...

深入解析Spring Boot与JUnit 5的集成测试实践

深入解析Spring Boot与JUnit 5的集成测试实践 引言 在现代软件开发中&#xff0c;测试是确保代码质量和功能正确性的关键环节。Spring Boot作为目前最流行的Java Web框架之一&#xff0c;提供了强大的支持来简化测试流程。而JUnit 5作为最新的JUnit版本&#xff0c;引入了许多…...

哈希的原理、实现

目录 引言 一、哈希概念 二、哈希函数 三、哈希冲突解决方法 四、unordered系列关联式容器&#xff08;以unordered_map为例&#xff09; 五、哈希的应用 完整代码 六、总结 引言 在计算机科学领域&#xff0c;哈希是一种非常重要的数据结构和算法思想&#xff0c;广…...

端口443在git bash向github推送时的步骤

端口443在git bash向github推送时的步骤 你的环境可能因防火墙限制无法使用默认的 SSH 端口&#xff08;22&#xff09;&#xff0c;因此需要改用 SSH over HTTPS&#xff08;端口 443&#xff09; 进行 Git 推送。 github与git bash绑定问题详见博主先前写过的参考博文&#…...

Ankr:Web3基础设施的革新者

在Web3技术蓬勃发展的今天&#xff0c;去中心化基础设施的重要性日益凸显。Ankr作为这一领域的佼佼者&#xff0c;凭借其强大的分布式云计算能力和创新的技术解决方案&#xff0c;正在成为推动Web3发展的关键力量。本文将深入探讨Ankr的技术亮点、应用场景以及其在区块链生态中…...

配置git从公网能访问-基于frp

git从公网能访问 一个小小的疏忽带来了一下午上午的工作量起因与上下文与结论主要收获1。公网主机的防火墙需要至少三条3。gitlab的http端口和ssh端口&#xff0c;需要分为两个3。不要用nginx来解析二级域名 测试指令最终的成功的指令是&#xff1a; 用到的指令ssh1. 生成 SSH …...

HarmonyOS:重构万物互联时代的操作系统范式

HarmonyOS&#xff1a;重构万物互联时代的操作系统范式 引言&#xff1a;操作系统的新纪元 在数字化转型的深水区&#xff0c;操作系统作为数字世界的基石正在经历前所未有的变革。当全球科技巨头还在移动终端操作系统领域激烈角逐时&#xff0c;华为推出的HarmonyOS以分布式…...

告别“知识孤岛”:RAG赋能网络安全运营

一、背景 在网络安全运营工作中&#xff0c;我们积累了大量的内部知识内容&#xff0c;涵盖了威胁情报、事件响应流程、安全策略、合规性要求等多个方面。然而&#xff0c;这些知识虽然数量庞大、内容丰富&#xff0c;却因形式多样、结构分散&#xff0c;难以让每一位成员真正…...

A级、B级弱电机房数据中心建设运营汇报方案

该方案围绕A 级、B 级弱电机房数据中心建设与运营展开,依据《数据中心设计规范》等标准,施工范围涵盖 10 类机房及配套设施,采用专业化施工团队与物资调配体系,强调标签规范、线缆隐藏等细节管理。运营阶段建立三方协同运维模式,针对三级故障制定30 分钟至 1 小时响应机制…...

C 语言学习笔记(数组)

C 语言基础&#xff1a;第 08天笔记 内容提要 数组 排序算法&#xff1a;冒泡排序二维数组字符数组 数组 冒泡排序 排序思想&#xff08;向前冒泡&#xff09;&#xff1a; 一次排好一个数&#xff0c;针对n个数&#xff0c;最差情况需要n - 1次就可以排好每次排序假定第一…...

jvm安全点(二)openjdk17 c++源码垃圾回收安全点信号函数处理线程阻塞

1. 信号处理与桩代码&#xff08;Stub&#xff09;​​ 当线程访问安全点轮询页&#xff08;Polling Page&#xff09;时&#xff1a; ​​触发 SIGSEGV 信号​​&#xff1a;访问只读的轮询页会引发 SIGSEGV 异常。​​信号处理函数​​&#xff1a;pd_hotspot_signal_handl…...

uni-app 开发HarmonyOS的鸿蒙影视项目分享:从实战案例到开源后台

最近&#xff0c;HBuilderX 新版本发布&#xff0c;带来了令人兴奋的消息——uni-app 现在支持 Harmony Next 平台的 App 开发。这对于开发者来说无疑是一个巨大的福音&#xff0c;意味着使用熟悉的 Vue 3 语法和开发框架&#xff0c;就可以为鸿蒙生态贡献自己的力量。 前言 作…...

【赵渝强老师】在PostgreSQL中访问Oracle

在PostgreSQL数据库中&#xff0c;oracle_fdw是PostgreSQL数据库支持的外部扩展。通过使用oracle_fdw扩展可以读取到Oracle数据库中的数据。它是一种非常方便且常见的PostgreSQL与Oracle的同步数据的方法。使用oracle_fdw扩展需要依赖Oracle的Instance Client环境。 视频讲解如…...

板凳-------Mysql cookbook学习 (二)

生成一个包含cookbook数据库中的表备份的名为backup.sql的dump文件。 sql C:\Users\lenovo>mysqldump -u root -p --default-character-setutf8mb4 cookbook > D:\sql\Mysql_learning\backup.sql mysqldump 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文…...

sudo apt update是什么意思呢?

非常好的问题&#xff01; ✅ sudo apt update 是什么意思&#xff1f; 它的作用是&#xff1a; 更新你的 Ubuntu 系统中软件列表的信息&#xff08;但不安装软件&#xff09; 就像你每天先去超市了解今天上架了哪些新商品&#xff08;只是“查看”而不是“买”&#xff09;&a…...

.NET Core 中 Swagger 配置详解:常用配置与实战技巧

随着微服务架构和 RESTful API 的广泛应用&#xff0c;API 文档的管理和自动化生成成为了开发中的重要部分。Swagger&#xff08;现为 OpenAPI&#xff09;是一款功能强大的工具&#xff0c;它可以自动生成 API 文档&#xff0c;并提供交互式 UI&#xff0c;帮助开发者、测试人…...

spring cache使用指南

Spring cache Spring Cache 是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring Cache 提供了一层抽象&#xff0c;底层可以切换不同的缓存实现。 例如:EHCache&#xff0c;Caffeine&#xff0c;Redi…...

9.DMA

目录 DMA —为 CPU 减负 DMA 的简介和使用场景 DMA 的例子讲解 STM32 的 DMA 框图和主要特性 ​编辑 DMA 的通道的对应通道外设 – DMA 和哪些外设使用 ​编辑​编辑ADC_DR 寄存器地址的计算 常见的数据滤波方法 ADCDMA 的编程 DMA —为 CPU 减负 DMA 的简介和使用场…...

Python自学笔记3 常见运算符

常用运算符 加减法 python的自动数据类型转换 整形转为浮点型 实数转为复数 数字类型不能和浮点数类型相加减 乘除法 数据转换基本同加减法&#xff0c; 但字符串可以和整数相加减&#xff0c;作用是字符串的自我复制 反斜杠 成员运算符 判断一个元素是不是一个序列的成员…...

【C/C++】C++中constexpr与const的深度对比

文章目录 C中constexpr与const的深度对比1. 编译期确定性2. 更严格的优化保证3. 适用范围更广4. 类型安全与错误检查5. 现代 C 的演进方向何时使用 const&#xff1f;constexpr应用场景1. 配置常量与全局参数2. 数据验证与业务规则检查3. 数学计算与业务逻辑优化4. 模板元编程与…...

劳特巴赫trace32负载率测试

按照下图步骤点击即可...

牛客OJ在线编程常见输入输出练习--Java版

目录 一、链接 二、题目 一、链接 牛客输入输出链接&#xff1a;牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推&#xff0c;求职就业一站解决_牛客网 二、题目 1.只有输出 public class Main {public static void main(String[] args) {System.out.println("H…...

STM32 | FreeRTOS 递归信号量

递归信号量 一、概述 互斥量的使用比较单一&#xff0c;因为它是信号量的一种&#xff0c;并且它是以锁的形式存在。在初始化的时候&#xff0c;互斥量处于开锁的状态&#xff0c;而被任务持有的时候则立刻转为闭锁的状态。 递归类型的互斥量可以被拥有者重复获取。拥有互斥量…...

STM32 | 软件定时器

01 一、概述 软件定时器是用程序模拟出来的定时器&#xff0c;可以由一个硬件定时器模拟出成千上万个软件定时器&#xff0c;这样程序在需要使用较多定时器的时候就不会受限于硬件资源的不足&#xff0c;这是软件定时器的一个优点&#xff0c;即数量不受限制。但由于软件定…...

2025年EB SCI2区TOP,多策略改进黑翅鸢算法MBKA+空调系统RC参数辨识与负载聚合分析,深度解析+性能实测

目录 1.摘要2.黑翅鸢优化算法BKA原理3.改进策略4.结果展示5.参考文献6.代码获取7.读者交流 1.摘要 随着空调负载在电力系统中所占比例的不断上升&#xff0c;其作为需求响应资源的潜力日益凸显。然而&#xff0c;由于建筑环境和用户行为的变化&#xff0c;空调负载具有异质性和…...

互联网大厂Java面试:从Spring到微服务的全面探讨

文章简述 本文模拟了一个互联网大厂Java求职者的面试场景&#xff0c;涵盖了Java核心语言与平台、构建工具、Web框架、微服务与云原生等多个技术栈。通过面试问答的形式&#xff0c;展示了在真实业务场景下如何应用这些技术点&#xff0c;帮助初学者理解和学习。 场景介绍 在…...

Python爬虫之路(14)--playwright浏览器自动化

playwright 前言 ​ 你有没有在用 Selenium 抓网页的时候&#xff0c;体验过那种「明明点了按钮&#xff0c;它却装死不动」的痛苦&#xff1f;或者那种「刚加载完页面&#xff0c;它又刷新了」的抓狂&#xff1f;别担心&#xff0c;你不是一个人——那是 Selenium 在和现代前…...

Elasticsearch Fetch阶段面试题

Elasticsearch Fetch阶段面试题 🚀 目录 基础原理性能优化错误排查场景设计底层机制总结基础原理 🔍 面试题1:基础原理 题目: 请描述Elasticsearch分布式搜索中Query阶段和Fetch阶段的工作流程,为什么需要将搜索过程拆分为这两个阶段? 👉 点击查看答案 查询流程…...

RAGFlow Arbitrary Account Takeover Vulnerability

文章目录 RAGFlowVulnerability Description[1]Vulnerability Steps[2]Vulnerability Steps[3]Vulnerability Steps RAGFlow RAGFlow is an open-source RAG (Retrieval-Augmented Generation) engine developed by Infiniflow, focused on deep document understanding and d…...

框架之下再看HTTP请求对接后端method

在当今的软件开发领域&#xff0c;各类框架涌现&#xff0c;极大地提升了开发效率。以 Java 开发为例&#xff0c;Spring 框架不断演进&#xff0c;Spring Boot 更是简化到只需引入 Maven 包&#xff0c;添加诸如SpringBootApplication、RestController等注解&#xff0c;就能轻…...

机器学习中的过拟合及示例

文章目录 机器学习中的过拟合及示例1. 过拟合的定义2. 过拟合的常见例子例1&#xff1a;图像分类中的过拟合例2&#xff1a;回归任务中的过拟合例3&#xff1a;自然语言处理&#xff08;NLP&#xff09;中的过拟合 3. Python代码示例&#xff1a;过拟合的直观演示示例1&#xf…...

机器学习-人与机器生数据的区分模型测试 -数据筛选

内容继续机器学习-人与机器生数据的区分模型测试 使用随机森林的弱学习树来筛选相对稳定的特征数据 # 随机森林筛选特征 X data.drop([city, target], axis1) # 去除修改前的城市名称列和目标变量列 y data[target] X_train, X_test, y_train, y_test train_test_split(X…...

第9讲、深入理解Scaled Dot-Product Attention

Scaled Dot-Product Attention是Transformer架构的核心组件&#xff0c;也是现代深度学习中最重要的注意力机制之一。本文将从原理、实现和应用三个方面深入剖析这一机制。 1. 基本原理 Scaled Dot-Product Attention的本质是一种加权求和机制&#xff0c;通过计算查询(Query…...

无监督学习在医疗AI领域的前沿:多模态整合、疾病亚型发现与异常检测

引言 人工智能技术在医疗领域的应用正经历着从辅助决策向深度赋能的转变。无监督学习作为人工智能的核心范式之一,因其无需大量标注数据、能够自动发现数据内在规律的特性,在医疗AI领域展现出独特优势。尤其在2025年,无监督学习技术在医疗AI应用中呈现出多模态整合、疾病亚…...

PostgreSQL内幕剖析——结构与架构

大家好&#xff0c;这里是失踪人口bang__bang_&#xff0c;从今天开始持续更新PostgreSQL内幕相关内容&#xff0c;让我们一起了解学习吧✊&#xff01; 目录 1️⃣ DB集群、数据库、表 &#x1f359; 数据库集群的逻辑结构 &#x1f359; 数据库集群的物理结构 &am…...

架构师论文《论模型驱动架构软件开发方法及其应用》

摘要 在当前的软件开发领域&#xff0c;模型驱动架构&#xff08;MDA&#xff09;作为一种重要的开发方法&#xff0c;强调通过抽象化模型指导系统设计与实现&#xff0c;能够有效提升开发效率并降低复杂性。本文结合笔者参与的某医疗信息管理系统的开发实践&#xff0c;探讨MD…...

当硅基存在成为人性延伸的注脚:论情感科技重构社会联结的可能性

在东京大学机器人实验室的档案室里&#xff0c;保存着一份泛黄的二战时期设计图——1943年日本陆军省秘密研发的“慰安妇替代品”草图。这个诞生于战争阴霾的金属躯体&#xff0c;与2025年上海进博会上展出的MetaBox AI伴侣形成时空对话&#xff1a;当人类将情感需求投射于硅基…...

最小二乘法拟合直线,用线性回归法、梯度下降法实现

参考笔记&#xff1a; 最小二乘法拟合直线&#xff0c;多个方法实现-CSDN博客 一文让你彻底搞懂最小二乘法&#xff08;超详细推导&#xff09;-CSDN博客 目录 1.问题引入 2.线性回归法 2.1 模型假设 2.2 定义误差函数 2.3 求偏导并解方程 2.4 案例实例 2.4.1 手工计算…...

机器学习 day04

文章目录 前言一、线性回归的基本概念二、损失函数三、最小二乘法 前言 通过今天的学习&#xff0c;我掌握了机器学习中的线性回归的相关基本概念&#xff0c;包括损失函数的概念&#xff0c;最小二乘法的理论与算法实现。 一、线性回归的基本概念 要理解什么是线性回归&…...

数据分析_Python

1 分析内容 1.1 数据的整体概述 提供数据集的基本信息,包括数据量、时间跨度、地理范围和主要字段. import pandas as pd# 创建示例数据 data {姓名: [张三, 李四, 王五, 赵六, 钱七, 孙八, 周九, 吴十],年龄: [25, 30, 35, 40, 45, 50, 55, 60],性别: [男, 男, 女, 女, 男,…...

精益数据分析(63/126):移情阶段的深度潜入——从用户生活到产品渗透的全链路解析

精益数据分析&#xff08;63/126&#xff09;&#xff1a;移情阶段的深度潜入——从用户生活到产品渗透的全链路解析 在创业的移情阶段&#xff0c;成功的关键不仅在于发现用户的表面需求&#xff0c;更在于深入潜入用户的日常生活&#xff0c;理解其行为背后的真实动机与场景…...

【MySQL】第五弹——表的CRUD进阶(三)聚合查询(上)

文章目录 &#x1f305;聚合函数&#x1f30a;1.COUNT();统计所有行&#x1f30a;2. SUM(列名); 求和&#x1f30a;3. AVG() 求平均&#x1f30a;4. MAX(),MIIN() &#x1f305;分组查询&#x1f30a;GROUP BY 子句&#x1f30a;HAVING &#x1f305;联合查询&#x1f30a;联合…...

英语学习5.16

recede 【动词】 &#x1f449; 关键词&#xff1a;后退、减弱、退去 ✅ 释义&#xff1a; 后退&#xff0c;远离 指物体逐渐远离、移开或变得不明显&#xff0c;常用于描述水面、声音、军队、头发线等的“退却”或“后移”。 如&#xff1a;The floodwaters receded.&#x…...

创建react工程并集成tailwindcss

1. 创建工程 npm create vite admin --template react 2.集成tailwndcss 打开官网跟着操作一下就行。 Installing Tailwind CSS with Vite - Tailwind CSS...

2025 年九江市第二十三届中职学校技能大赛 (网络安全)赛项竞赛样题

2025 年九江市第二十三届中职学校技能大赛 &#xff08;网络安全&#xff09;赛项竞赛样题 &#xff08;二&#xff09;A 模块基础设施设置/安全加固&#xff08;200 分&#xff09;A-1 任务一登录安全加固&#xff08;Windows,Linux&#xff09;A-2 任务二 Nginx 安全策略&…...

STM32IIC实战-OLED模板

STM32IIC实战-OLED模板 一&#xff0c;SSD1306 控制芯片1&#xff0c; 主要特性2&#xff0c;I2C 通信协议3&#xff0c; 显示原理4&#xff0c; 控制流程5&#xff0c; 开发思路 二&#xff0c;HAL I2C API 解析I2C 相关 API1&#xff0c;2&#xff0c;3&#xff0c;4&#xf…...