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

网站关键词优化原理红色网站建设的作用和意义

网站关键词优化原理,红色网站建设的作用和意义,自建英文网站,短视频营销推广往期知识点记录#xff1a; 鸿蒙#xff08;HarmonyOS#xff09;应用层开发#xff08;北向#xff09;知识点汇总 轻内核A核源码分析系列一 数据结构-双向循环链表 轻内核A核源码分析系列二 数据结构-位图操作 轻内核A核源码分析系列三 物理内存#xff08;1#xff0…往期知识点记录 鸿蒙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
http://www.hkea.cn/news/14471564/

相关文章:

  • 惠州网站制作推广公司排名广告效果图设计
  • 网站设计验收企业网站管理系统 软件著作权
  • dede音乐网站源码c#做的网站怎么上传图片
  • 摄影网站的模板网站安全建设架构
  • 个体营业执照网站备案如何获取新注册公司电话
  • 长沙建站公司模板房建设计网站好
  • 景征网站建设免费建网站软件哪个好
  • 普拓网站建设郑州网站制作_郑州网页制作_做网站设计_河南网站制作网
  • 程序员 做 个人网站短链生成网站
  • 分类信息网站系统国内wordpress例子
  • 安阳网站建设哪家好开一个软件开发公司需要多少钱
  • 网站制作大型公司房产信息网510
  • 装潢设计培训班学费多少钱seo搜索引擎优化书籍
  • 田贝网站建设汇算清缴在哪个网站上做
  • 自己做发小说网站app下载汅api免费安卓
  • 网站源码上传到空间以后怎么做观澜网站建设公司
  • mc建筑网站wordpress 众筹中文
  • wordpress 手机网站支付华竣国际的展厅设计公司
  • 延边州建设局网站企云网站建设
  • 广阳区建设局网站设置网站关键词怎么做
  • 珠海网站建设尚古道策略西安都蓝网站建设
  • 如何提高网站的排名男人直接做的视频网站
  • 可以做进销存的网站系统工程建设管理
  • 微信公众平台做微网站吗我的世界怎么做赞助网站
  • 做一个网站开发项目有哪些阶段电子商务网页设计论文
  • 游仙移动网站建设长春网长春网站设计站建设
  • 智能模板网站建设方案棒的网页设计
  • 中国建设造价协会网站网页制作最常用的软件
  • 北京做网站便宜的公司哪家好自己做网站类型
  • 网站开发数据接口如何利用长宁制作网站