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

鸿蒙轻内核A核源码分析系列七 进程管理 (2)

往期知识点记录:

  • 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总
  • 轻内核A核源码分析系列一 数据结构-双向循环链表
  • 轻内核A核源码分析系列二 数据结构-位图操作
  • 轻内核A核源码分析系列三 物理内存(1)
  • 轻内核A核源码分析系列三 物理内存(2)
  • 轻内核A核源码分析系列四(1)虚拟内存进程空间编号
  • 轻内核A核源码分析系列四(2) 虚拟内存
  • 轻内核A核源码分析系列四(3) 虚拟内存
  • 轻内核A核源码分析系列五 虚实映射(1)基础概念
  • 轻内核A核源码分析系列五 虚实映射(2)虚实映射初始化
  • 轻内核A核源码分析系列五 虚实映射(3)虚拟物理内存映射
  • 轻内核A核源码分析系列五 虚实映射(5)虚实映射解除
  • 轻内核A核源码分析系列五 虚实映射(6)虚拟映射修改转移
  • 轻内核A核源码分析系列五 虚实映射(7)虚实映射Flag属性
  • 轻内核A核源码分析系列六 MMU协处理器(1)
  • 轻内核A核源码分析系列六 MMU协处理器(2)
  • 轻内核A核源码分析系列七 进程管理 (1)
  • 轻内核A核源码分析系列七 进程管理 (2)
  • 轻内核A核源码分析系列七 进程管理 (3)
  • 持续更新中……

本文先熟悉下进程管理的文件kernel\base\core\los_process.c中的内部接口,读读代码,做些记录。

1、LiteOS-A内核进程全局变量

⑴是进程池,存放各个进程控制块LosProcessCB的信息。⑵处开始的g_freeProcess是空闲进程链表,挂载各个空闲进程控制块;g_processRecycleList是待回收进程控制块链表,挂载各个等待回收的进程控制块。⑶处开始的g_userInitProcess是用户根进程的进程号,数值固定为1.,g_kernelInitProcess是内核进程,内核进程的进程号固定为2,g_kernelIdleProcess是内核空闲进程,进程号固定为0。⑷处开始的g_processMaxNum表示为配置的进程的最大数目,g_processGroup维护进程组信息,所有的进程组都会挂载这个全局进程组链表节点g_processGroup->groupList上。

⑴  LITE_OS_SEC_BSS LosProcessCB *g_processCBArray = NULL;
⑵  LITE_OS_SEC_DATA_INIT STATIC LOS_DL_LIST g_freeProcess;LITE_OS_SEC_DATA_INIT STATIC LOS_DL_LIST g_processRecycleList;
⑶  LITE_OS_SEC_BSS UINT32 g_userInitProcess = OS_INVALID_VALUE;LITE_OS_SEC_BSS UINT32 g_kernelInitProcess = OS_INVALID_VALUE;LITE_OS_SEC_BSS UINT32 g_kernelIdleProcess = OS_INVALID_VALUE;
⑷  LITE_OS_SEC_BSS UINT32 g_processMaxNum;LITE_OS_SEC_BSS ProcessGroup *g_processGroup = NULL;

2. 涉及空闲进程链表内部操作

空闲进程块链接操作涉及初始化OsProcessInit、插入空闲链接OsInsertPCBToFreeList、从链表获取空闲进程块OsGetFreePCB。我们先看下OsInsertPCBToFreeList和OsGetFreePCB。初始化链表在初始化进程时再看。

2.1 OsInsertPCBToFreeList

OsInsertPCBToFreeList函数会进程控制块插入到空闲进程块链表。函数比较简单,把进程结构体块清空,然后放入进程块链表。有个有意思的细节需要了解下。⑴处记录下进程号,然后把进程块置空。⑵处又把进程号设置给进程块结构体,进程号数量是固定的。⑶处开始设置进程为未使用状态,更新定时器编号未无效值,然后插入到空闲进程块链表。

    STATIC INLINE VOID OsInsertPCBToFreeList(LosProcessCB *processCB){
⑴      UINT32 pid = processCB->processID;(VOID)memset_s(processCB, sizeof(LosProcessCB), 0, sizeof(LosProcessCB));
⑵      processCB->processID = pid;
⑶      processCB->processStatus = OS_PROCESS_FLAG_UNUSED;processCB->timerID = (timer_t)(UINTPTR)MAX_INVALID_TIMER_VID;LOS_ListTailInsert(&g_freeProcess, &processCB->pendList);}

2.2 OsGetFreePCB

OsGetFreePCB函数用于从空闲进程链表中获取进程块,该函数只有在开启LOSCFG_KERNEL_VM的时候才生效。⑴处当空闲进程链表为空时,返回NULL。⑵处获取空闲进程块指针,然后虫空闲进程块链表中删除。

STATIC LosProcessCB *OsGetFreePCB(VOID)
{LosProcessCB *processCB = NULL;UINT32 intSave;SCHEDULER_LOCK(intSave);
⑴  if (LOS_ListEmpty(&g_freeProcess)) {SCHEDULER_UNLOCK(intSave);PRINT_ERR("No idle PCB in the system!\n");return NULL;}⑵  processCB = OS_PCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&g_freeProcess));LOS_ListDelete(&processCB->pendList);SCHEDULER_UNLOCK(intSave);return processCB;
}

3. 涉及进程和线程的内部操作

该类操作包含把线程从进程中删除OsDeleteTaskFromProcess,还包括把线程包含进进程OsProcessAddNewTask。

3.1 OsDeleteTaskFromProcess

OsDeleteTaskFromProcess函数用于从进程中删除一个线程。⑴处可以看出每个线程/任务控制块都维护进程号,根据进程号可以获取进程控制块。每个线程控制块通过自己的成员变量threadList挂载到进程的线程链表上。⑵处从进程的线程链表上删除,然后把进程的线程数减去1。
⑶处把任务控制块插入到待回收链表上。

    VOID OsDeleteTaskFromProcess(LosTaskCB *taskCB){
⑴      LosProcessCB *processCB = OS_PCB_FROM_PID(taskCB->processID);⑵      LOS_ListDelete(&taskCB->threadList);processCB->threadNumber--;
⑶      OsTaskInsertToRecycleList(taskCB);}

3.2 OsProcessAddNewTask

函数OsProcessAddNewTask把线程关联到进程上,需要两个参数,分别进程号和线程控制块。需要注意返回值,返回值表示,关联新线程之前的,进程的线程数量。⑴处获取进程块,⑵处把线程块关联的进程号设置为参数中输入的进程号,然后把线程控制块挂载到进程的线程链表上。可以看出,线程块的threadList用于挂载到进程的线程链表,进程块的threadSiblingList节点用于挂载本进程下的各种线程。⑶处如果是用户态进程,标记线程的状态为用户态线程。⑷如果进程的线程数目大于0,线程的基础优先级basePrio设置为和进程的主线程的优先级一样,否则设置为最大优先级。⑸如果是内核进程,线程的基础优先级设置为当前线程的优先级。⑹处如果开启了虚拟内存,设置线程的MMU结构体信息为进程虚拟地址空间中维护的MMU。⑺处如果进程的线程数为0,则把线程设置为进程的主线程。然后把进程的线程数加1。⑻处获得进程已有的线程数量,然后把进程的线程数量增加1。然后返回进程的关联新线程之前的线程数量。

    UINT32 OsProcessAddNewTask(UINT32 pid, LosTaskCB *taskCB){UINT32 intSave;UINT16 numCount;
⑴      LosProcessCB *processCB = OS_PCB_FROM_PID(pid);SCHEDULER_LOCK(intSave);
⑵      taskCB->processID = pid;LOS_ListTailInsert(&(processCB->threadSiblingList), &(taskCB->threadList));⑶      if (OsProcessIsUserMode(processCB)) {taskCB->taskStatus |= OS_TASK_FLAG_USER_MODE;
⑷          if (processCB->threadNumber > 0) {taskCB->basePrio = OS_TCB_FROM_TID(processCB->threadGroupID)->basePrio;} else {taskCB->basePrio = OS_USER_PROCESS_PRIORITY_HIGHEST;}} else {
⑸           taskCB->basePrio = OsCurrTaskGet()->basePrio;}#ifdef LOSCFG_KERNEL_VM
⑹      taskCB->archMmu = (UINTPTR)&processCB->vmSpace->archMmu;#endifif (!processCB->threadNumber) {
⑺          processCB->threadGroupID = taskCB->taskID;}processCB->threadNumber++;⑻      numCount = processCB->threadCount;processCB->threadCount++;SCHEDULER_UNLOCK(intSave);return numCount;}

4、涉及进程组的内部操作

涉及进程组的内部操作包含进程组的创建OsCreateProcessGroup、进程组的退出OsExitProcessGroup、查找进程组OsExitProcessGroup。

4.1 OsCreateProcessGroup

OsCreateProcessGroup函数用于根据进程号创建进程组,返回值为创建的进程组指针。进程组是动态创建的,⑴处为进程组控制块申请动态内存。⑵处进程组的groupId即为创建进程组的进程号,接着初始化进程组的两个链表。⑶处获取进程控制块,然后执行⑷把进程挂载到进程组的processList进程链表上,使用的挂载点为进程控制块的subordinateGroupList链表节点,所以看到这个成员变量,要想起来是在同一个进程组的各个进程的链接关系。然后更新进程的进程组信息,并更新进程状态为进程组leader。⑸处如果存在全局进程组,则把创建的进程组挂载到全局进程组变量上。

    STATIC ProcessGroup *OsCreateProcessGroup(UINT32 pid){LosProcessCB *processCB = NULL;
⑴      ProcessGroup *group = LOS_MemAlloc(m_aucSysMem1, sizeof(ProcessGroup));if (group == NULL) {return NULL;}⑵      group->groupID = pid;LOS_ListInit(&group->processList);LOS_ListInit(&group->exitProcessList);⑶      processCB = OS_PCB_FROM_PID(pid);
⑷      LOS_ListTailInsert(&group->processList, &processCB->subordinateGroupList);processCB->group = group;processCB->processStatus |= OS_PROCESS_FLAG_GROUP_LEADER;
⑸      if (g_processGroup != NULL) {LOS_ListTailInsert(&g_processGroup->groupList, &group->groupList);}return group;}

4.2 OsExitProcessGroup

OsExitProcessGroup函数用于把一个进程退出进程组,第一个参数指定进程控制块,第二个为输出参数,记录进程所在的进程组。⑴根据进程获取所在的进程组,然后获取进程组的主进程,然后获取主进程的进程控制块。⑵处把进程从进程组里删除。⑶处表示如果进程组下面没有挂载进程,并且进程组下面也没有挂载退出的进程,则执行⑷把进程组从全局进程组链表上删除。然后,把进程组的主进程的状态设置为非主进程OS_PROCESS_FLAG_GROUP_LEADER。⑸处如果主进程未使用状态并且主进程非退出状态,则把主进程从阻塞链表上删除,然后插入到空闲空闲进程链表上。⑹处既然进程推出了进程组,需要更新该进程的所属进程组为NULL。

    STATIC VOID OsExitProcessGroup(LosProcessCB *processCB, ProcessGroup **group){
⑴      LosProcessCB *groupProcessCB = OS_PCB_FROM_PID(processCB->group->groupID);⑵      LOS_ListDelete(&processCB->subordinateGroupList);
⑶      if (LOS_ListEmpty(&processCB->group->processList) && LOS_ListEmpty(&processCB->group->exitProcessList)) {
⑷          LOS_ListDelete(&processCB->group->groupList);groupProcessCB->processStatus &= ~OS_PROCESS_FLAG_GROUP_LEADER;*group = processCB->group;
⑸          if (OsProcessIsUnused(groupProcessCB) && !(groupProcessCB->processStatus & OS_PROCESS_FLAG_EXIT)) {LOS_ListDelete(&groupProcessCB->pendList);OsInsertPCBToFreeList(groupProcessCB);}}⑹      processCB->group = NULL;}

4.3 OsFindProcessGroup

OsFindProcessGroup函数用于根据进程组编号获取进程组指针。⑴如果等于全局进程组的编号,则反正全局进程组指针。⑵处遍历全局进程组下面的各个进程组,判断遍历到的进程组的编号是否等于传入的进程组编号,如果相等则返回。如果执行到⑶,表明没有查询到指定的进程组编号的进程组信息。

    STATIC ProcessGroup *OsFindProcessGroup(UINT32 gid){ProcessGroup *group = NULL;
⑴      if (g_processGroup->groupID == gid) {return g_processGroup;}⑵      LOS_DL_LIST_FOR_EACH_ENTRY(group, &g_processGroup->groupList, ProcessGroup, groupList) {if (group->groupID == gid) {return group;}}⑶      PRINT_INFO("%s is find group : %u failed!\n", __FUNCTION__, gid);return NULL;}

小结

本文介绍了进程管理的文件本文先熟悉下进程管理的文件kernel\base\core\los_process.c中的部分内部接口。

经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?

为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。

在这里插入图片描述

《鸿蒙 (Harmony OS)开发学习手册》(共计892页):https://gitcode.com/HarmonyOS_MN/733GH/overview

如何快速入门?

1.基本概念
2.构建第一个ArkTS应用
3.……

开发基础知识:

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……

在这里插入图片描述

基于ArkTS 开发

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

在这里插入图片描述

鸿蒙开发面试真题(含参考答案):https://gitcode.com/HarmonyOS_MN/733GH/overview

在这里插入图片描述

OpenHarmony 开发环境搭建

图片

《OpenHarmony源码解析》:https://gitcode.com/HarmonyOS_MN/733GH/overview

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……
  • 系统架构分析
  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

图片

OpenHarmony 设备开发学习手册:https://gitcode.com/HarmonyOS_MN/733GH/overview

图片
在这里插入图片描述

相关文章:

鸿蒙轻内核A核源码分析系列七 进程管理 (2)

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 轻内核A核源码分析系列一 数据结构-双向循环链表 轻内核A核源码分析系列二 数据结构-位图操作 轻内核A核源码分析系列三 物理内存(1&#xff0…...

关于TypeScript使用讲解

TypeScript讲解 安装环境 1.安装node js 配置环境变量 2.在终端中 运行 npm i -g typescript typescript: 用于编译ts代码 提供了 tsc命令 实现了将 TS>>>> JS转换 验证: tsc -v 编译并运行 TS代码 1.创建ts文件(TS文件为后缀名的文件&#xff0…...

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目&#xff1a; 题解&#xff1a; static const int MASK1 1 << 7; static const int MASK2 (1 << 7) (1 << 6);bool isValid(int num) {return (num & MASK2) MASK1; }int getBytes(int num) {if ((num & MASK1) 0) {return 1;}int n 0;in…...

Netty权威指南:Netty总结-编解码与序列化

第四章 TCP粘包/拆包问题 4.1 TCP 粘包/拆包 TCP是流协议&#xff0c;也就是没有界限的的一串数据&#xff0c;底层并不知道上层业务数据的具体含义&#xff0c;也就是说一个完整的包可能会被拆分成多个包进行发送&#xff0c;也可能把几个小包封装成一个大的数据包发送。这就…...

FIDAVL:基于视觉语言模型的假图像检测与归因 !

FIDAVL:基于视觉语言模型的假图像检测与归因 &#xff01; 这份完整版的大模型 AI 学习资料已经上传CSDN&#xff0c;朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 作者提出了FIDAVL&#xff1a;使用视觉语言模型进行虚假图像检测。FIDAVL是一…...

如何通过海外云手机提升运营效率

随着技术的不断进步&#xff0c;市场上出现了越来越多的提高跨国电商运营效率的应用&#xff0c;海外云手机就是其中一个。海外云手机的优势体现在多个方面&#xff0c;那么如何通过使用海外云手机来提升运营效率&#xff1f;可以从以下几个方面了解。 首先&#xff0c;海外云手…...

数据库4个范式的说明

在数据库设计中&#xff0c;范式&#xff08;Normal Form&#xff09;用于消除冗余和异常&#xff0c;确保数据一致性。以下是第一范式、第二范式、第三范式和BCNF&#xff08;Boyce-Codd Normal Form&#xff0c;即第四范式&#xff09;的示例说明&#xff1a; 1. 第一范式&a…...

Excel怎么截图?快速捕捉工作表的多种方法

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f4f8; 在日常工作中&#xff0c;我们经常需要对Excel工作表进行截图&#xff0c;无论是为了记录数据、制作演示还是进行数据对比。今天&#xff0c;我们就来学习几种在Excel中截图的方法以及它们的快捷键。 一、使…...

MyBatis动态SQL标签总结、开发手册、高阶用法(动态SQL、OGNL、批量操作、片段重用、 SQL 组合、 执行优化、嵌套查询与延迟加载)

MyBatis提供了一个非常强大的动态SQL功能&#xff0c;它使用了一组XML标签来帮助我们根据不同条件生成动态SQL。动态SQL的设计让开发者可以根据业务需求&#xff0c;灵活地构建SQL查询语句。以下是MyBatis动态SQL标签的总结。 动态SQL标签说明特点<if>条件判断语句&…...

出处不详 取数游戏

目录 取数游戏题目描述背景输入输出数据范围 题解解法优化 打赏 取数游戏 题目描述 背景 两人将 n n n个正整数围成一个圆环&#xff0c;规则如下&#xff1a; 第一名玩家随意选取数字&#xff1b;第二名玩家从与第一名玩家相邻的两个数字中选择一个&#xff1b;而后依次在…...

拉取ros2_control_demos存储库

目录 克隆存储库 方法 1: 使用 git clone 和 rosdep 安装依赖 方法 2: 使用 vcs 工具管理多个存储库 区别总结 rosdep 和 APT 的关系 网络问题 安装依赖 克隆存储库 方法 1: 使用 git clone 和 rosdep 安装依赖 下载存储库&#xff1a; mkdir -p ~/ros2_ws/src cd ~/ros…...

Apache Doris Flink Connector 24.0.0 版本正式发布

亲爱的社区伙伴们&#xff0c;Apache Doris Flink Connector 24.0.0 版本已于 2024 年 9 月 5 日正式发布。该版本新增了对 Flink 1.20 的支持&#xff0c;并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。此外&#xff0c;整库同步所依赖的 FlinkCDC&#xff0c;也需升级…...

‌语音控制小夜灯的实现方案介绍

‌语音控制小夜灯的实现方案组成部分‌ 语音控制小夜灯的实现方案主要包括硬件组装和软件编程两个部分。‌ ‌硬件组装‌涉及将语音声控模块、灯泡、USB连接线等组件正确连接。首先&#xff0c;使用螺丝刀和螺丝将四个隔离柱固定在底板四个拐角处&#xff0c;同时将语音声控模…...

万龙觉醒免费辅助:VMOS云手机辅助巴克尔阵容搭配攻略!

《万龙觉醒》是一款策略类手游&#xff0c;选择合适的英雄阵容搭配能够极大提升战斗效果。而借助VMOS云手机的辅助功能&#xff0c;玩家可以更加轻松地管理游戏进程&#xff0c;优化操作体验。以下是VMOS云手机的三大核心功能&#xff0c;帮助你更好地掌控《万龙觉醒》战局。 V…...

【English】长难句翻译

这里写目录标题 技巧知识点1. 定语从句 和 状从区别2. 定从 修饰词3. who 和 whom 区别4. 除了定从、状从,还有啥?5. 怎么在长难句快速定位到主谓宾而不被各种从句中的动词影响判断6. 没有,的那种一大堆从句连起来的长难句怎么办7. 时态怎么放在翻译里总结技巧 知识点 1. 定语…...

npm login 或者 npm publish 超时timeout

场景&#xff1a;空闲时间想自己尝试下npm发布包&#xff0c;毕竟这东西可以不用&#xff0c;但不能不会 步骤很简单 1.npm login 2.npm publish 这里有个坑。。。因为想发布到npm上&#xff0c;所以这里的镜像源要换回https://registry.npmjs.org&#xff0c;不能使用淘宝镜像…...

Python的openpyxl使用記錄(包含合併單元格,圖片下載和圖片插入,設置邊框,設置背景顏色)

背景 因為公司最近要求我做一份自動化導出報告&#xff0c;內容有點多&#xff0c;為了省事&#xff0c;我選用了python&#xff0c;後面估計要自建在線辦公系統&#xff0c;這個後續再講 需要的庫 openpyxl 和Pandas 開始 Execl導入 from openpyxl import load_workbook …...

基于springboot+vue实现的在线商城系统

系统主要功能&#xff1a; &#xff08;1&#xff09;商品管理模块&#xff1a;实现了商品的基本信息录入、图片上传、状态管理等相关功能。 &#xff08;2&#xff09;商品分类模块&#xff1a;实现了分类的增删改查、分类层级管理、商品分类的关联等功能。 &#xff08;3&…...

fastjson漏洞--以运维角度进行修复

文章目录 前言一、漏洞详情二、修复过程1.通过脚本方式修复1.1.脚本修复原理1.2.脚本演示1.3.执行脚本 2. 手动升级包2.1.修复步骤2.2.遇到的问题 前言 该漏洞是三个月前由安全团队扫描出来的&#xff0c;主要影响是: FastJSON是阿里巴巴的开源JSON解析库&#xff0c;它可以解…...

82页精品PPT | 构建数字化工厂的智能制造-数字化智能制造

新模式、新技术 、新制造的挑战 中国制造业正处于转型升级的关键时期&#xff0c;面临着多方面的挑战。创新能力不足导致产品同质化严重&#xff0c;缺乏核心竞争力&#xff1b;质量管理水平参差不齐&#xff0c;影响着产品的可靠性和安全性&#xff1b;品牌价值不高&#xff…...

Python的10个日期和时间操作的实用技巧

在Python中&#xff0c;处理日期和时间是一项常见且重要的任务。datetime模块提供了丰富的功能来执行这些操作。以下是10个日期和时间操作的实用技巧及其代码演示&#xff1a; 1. 获取当前日期和时间 from datetime import datetimenow datetime.now() print(f"当前日期…...

关于大模型在产品开发中所面临的问题,利用大模型技术解决很简单!

“ 具体问题具体分析&#xff0c;大模型技术没有统一的解决方案 ” 有人说2024年是大模型应用的元年&#xff0c;而大模型在未来的发展潜力毋庸置疑&#xff0c;这也就意味着人工智能技术是下一个风口&#xff0c;因此各种各样基于大模型技术的创业公司如雨后春笋般涌现。 从…...

SpringBoot2:请求处理原理分析-利用内容协商功能实现接口的两种数据格式(JSON、XML)

文章目录 一、功能说明二、案例实现1、基于请求头实现2、基于请求参数实现 一、功能说明 我们知道&#xff0c;用ResponseBody注解标注的接口&#xff0c;默认返回给页面的是json数据。 其实&#xff0c;也可以返回xml结构的数据给页面。 这一篇就来实现一下这个小功能。 二、…...

BUUCTF 之Basic 1(BUU LFI COURSE 1)

1、启动靶场&#xff0c;会生成一个URL地址&#xff0c;打开给的URL地址&#xff0c;会看到一个如下界面 可以看到是一个PHP文件&#xff0c;非常的简单&#xff0c;就几行代码&#xff0c;判断一下是否有一个GET的参数&#xff0c;并且是file名字&#xff0c;如果是并且加载&a…...

Android 蓝牙三方和动态权限三方

记录一下最近用到的简单的框架 蓝牙 FastBle&#xff1a;Android BLE通信库的介绍与高级用法 - 简书 https://github.com/Jasonchenlijian/FastBle 动态权限: GitHub - googlesamples/easypermissions: Simplify Android M system permissions 位置权限举例,arrayOf中多个…...

点餐|基于java的电子点餐系统小程序(源码+数据库+文档)

电子点餐系统|小程序|在线点餐 目录 基于java的电子点餐系统小程序 一、前言 二、系统设计 三、系统功能设计 系统功能实现 前台&#xff1a; 后台&#xff1a; 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; …...

18、Gemini-Pentest-v1

难度 中 &#xff08;个人认为是高&#xff09; 目标 root权限 一个flag 靶机启动环境为VMware kali 192.168.152.56 靶机 192.168.152.64 信息收集 突破点大概就是web端了 web测试 访问主页直接就是目录遍历 不过进去后是一个正常的网页 简单的试了几个弱口令无果继续信息…...

MIT6.824 课程-MapReduce

MapReduce&#xff1a;在大型集群上简化数据处理 概要 MapReduce是一种编程模型&#xff0c;它是一种用于处理和生成大型数据集的实现。用户通过指定一个用来处理键值对(Key/Value)的map函数来生成一个中间键值对集合。然后&#xff0c;再指定一个reduce函数&#xff0c; 它用…...

7个 C# 高阶用法详解:从基础到实战

C# 高阶用法详解&#xff1a;从基础到实战 在实际开发中&#xff0c;C# 提供了很多高级特性和设计模式&#xff0c;帮助我们写出更加简洁、灵活和高效的代码。本篇将深入探讨 C# 中的高阶用法&#xff0c;通过丰富的示例&#xff0c;带你掌握这些工具的精髓。 1. LINQ&#x…...

[数据集][目标检测]乱堆物料检测数据集VOC+YOLO格式1143张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1143 标注数量(xml文件个数)&#xff1a;1143 标注数量(txt文件个数)&#xff1a;1143 标注…...