南京网站制作搭建wordpress不自动更新

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

南京网站制作搭建,wordpress不自动更新,汕头网站建设报价,网站开发流程主要分成什么往期知识点记录#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) 持续更新中…… 本文开始继续分析OpenHarmony LiteOS-A内核的源代码接下来会分析进程和任务管理模块。本文中所涉及的源码以OpenHarmony LiteOS-A内核为例均可以在开源站点 https://gitee.com/openharmony/kernel_liteos_a 获取。如果涉及开发板则默认以hispark_taurus为例。 本文先熟悉下进程管理的概念、运行机制和编程接口。 1、LiteOS-A内核进程基本概念 进程是系统资源管理的最小单元。OpenHarmony LiteOS-A内核提供的进程模块主要用于实现用户态进程的隔离内核态被视为一个进程空间不存在其它进程(KIdle除外KIdle进程是系统提供的空闲进程和KProcess共享一个进程空间。 1.1 LiteOS-A内核进程特征 LiteOS-A内核进程有如下特征 进程模块主要为用户提供多个进程实现了进程之间的切换和通信帮助用户管理业务程序流程。 进程采用抢占式调度机制采用高优先级优先同优先级时间片轮转的调度算法。 进程一共有32个优先级(0-31)用户进程可配置的优先级有22个(10-31)最高优先级为10最低优先级为31。 高优先级的进程可抢占低优先级进程低优先级进程必须在高优先级进程阻塞或结束后才能得到调度。 每一个用户态进程均拥有自己独立的进程空间相互之间不可见实现进程间隔离。 用户态根进程init由内核态创建其它用户态子进程均由init进程fork而来。
1.2 LiteOS-A内核进程状态 LiteOS-A内核进程状态包含初始化态、就绪态、运行态、阻塞态、僵死态等几种状态。 初始化Init进程正在被创建。 就绪Ready进程在就绪列表中等待CPU调度。 运行Running进程正在运行。
阻塞Pending进程被阻塞挂起。本进程内所有的线程均被阻塞时进程被阻塞挂起。 僵尸Zombies进程运行结束等待父进程回收其控制块资源。 各个状态迁移示意图如下所示图片来自openharmony docs文档仓 进程状态迁移说明如下 1、Init→Ready 进程创建或fork时拿到该进程控制块后进入Init状态处于进程初始化阶段当进程初始化完成将进程插入调度队列此时进程进入就绪状态。 2、Ready→Running 进程创建后进入就绪态发生进程切换时就绪列表中最高优先级的进程被执行从而进入运行态。若此时该进程中已无其它线程处于就绪态则进程从就绪列表删除只处于运行态若此时该进程中还有其它线程处于就绪态则该进程依旧在就绪队列此时进程的就绪态和运行态共存但对外呈现的进程状态为运行态。 3、Running→Pending 进程在最后一个线程转为阻塞态时 进程内所有的线程均处于阻塞态此时进程同步进入阻塞态然后发生进程切换。 4、Pending→Ready 阻塞进程内的任意线程恢复就绪态时进程被加入到就绪队列同步转为就绪态。 5、Ready→Pending 进程内的最后一个就绪态线程转为阻塞态时进程从就绪列表中删除进程由就绪态转为阻塞态。 6、Running→Ready 进程由运行态转为就绪态的情况有以下两种 6.1 有更高优先级的进程创建或者恢复后会发生进程调度此刻就绪列表中最高优先级进程变为运行态那么原先运行的进程由运行态变为就绪态。6.2 若进程的调度策略为LOS_SCHED_RR且存在同一优先级的另一个进程处于就绪态则该进程的时间片消耗光之后该进程由运行态转为就绪态另一个同优先级的进程由就绪态转为运行态。 7、Running→Zombies 当进程的主线程或所有线程运行结束后进程由运行态转为僵尸态等待父进程回收资源。
2、LiteOS-A内核进程运行机制 OpenHarmony 提供的进程模块主要用于实现用户态进程的隔离支持用户态进程的创建、退出、资源回收、设置/获取调度参数、获取进程ID、设置/获取进程组ID等功能。用户态进程通过fork父进程而来fork进程时会将父进程的进程虚拟内存空间clone到子进程子进程实际运行时通过写时复制机制将父进程的内容按需复制到子进程的虚拟内存空间。进程只是资源管理单元实际运行是由进程内的各个线程完成的不同进程内的线程相互切换时会进行进程空间的切换。 3、LiteOS-A内核进程模块接口 3.1 LiteOS-A内核进程模块对外接口 进程模块对外接口文件kernel\include\los_process.h定义的接口如下表所示。 功能分类接口名称描述进程调度参数控制LOS_GetProcessScheduler获取指定进程的调度策略LOS_SetProcessScheduler设置指定进程的调度参数包括优先级和调度策略LOS_GetProcessPriority获取指定进程的优先级LOS_SetProcessPriority设置指定进程的优先级进程操作LOS_Wait等待子进程结束并回收子进程LOS_Waitid等待子进程结束并回收子进程LOS_Exit退出进程LOS_ForkFork进程进程组LOS_GetProcessGroupID获取指定进程的进程组IDLOS_GetCurrProcessGroupID获取当前进程的进程组ID获取进程IDLOS_GetCurrProcessID获取当前进程的进程IDLOS_GetUsedPIDList获取已用的进程ID列表输出到进程ID数组用户及用户组LOS_GetUserID获取当前进程的用户IDLOS_GetGroupID获取当前进程的用户组IDLOS_CheckInGroups检查指定用户组ID是否在当前进程的用户组内系统支持的最大进程数LOS_GetSystemProcessMaximum获取系统支持的最大进程数目文件描述符表LOS_GetFdTable根据进程ID获取文件描述符表 完整的接口声明如下 extern INT32 LOS_Fork(UINT32 flags, const CHAR *name, const TSK_ENTRY_FUNC entry, UINT32 stackSize);extern INT32 LOS_SetProcessPriority(INT32 pid, UINT16 prio);extern INT32 LOS_GetProcessPriority(INT32 pid);extern INT32 LOS_GetProcessScheduler(INT32 pid);extern INT32 LOS_SetProcessScheduler(INT32 pid, UINT16 policy, UINT16 prio);extern UINT32 LOS_GetCurrProcessID(VOID);extern INT32 LOS_Wait(INT32 pid, USER INT32 *status, UINT32 options, VOID *rusage);extern INT32 LOS_Waitid(INT32 pid, USER siginfo_t *info, UINT32 options, VOID *rusage);extern INT32 LOS_GetCurrProcessGroupID(VOID);extern INT32 LOS_GetProcessGroupID(UINT32 pid);extern VOID LOS_Exit(INT32 status);extern UINT32 LOS_GetSystemProcessMaximum(VOID);#ifdef LOSCFG_SECURITY_CAPABILITY extern BOOL LOS_CheckInGroups(UINT32 gid); #endif extern INT32 LOS_GetUserID(VOID); extern INT32 LOS_GetGroupID(VOID);extern INT32 LOS_GetUsedPIDList(UINT32 *pidList, INT32 pidMaxNum);#ifdef LOSCFG_FS_VFS struct fd_table_s *LOS_GetFdTable(UINT32 pid); #endif3.2 LiteOS-A内核进程模块结构体 私有头文件kernel\base\include\los_process_pri.h中定义了宏、结构体等。进程组、进程控制块结构体如下。对于进程组如⑴所示进程组的编号等于创建该进程组的进程的进程编号。每个进程组维护一个链表挂载本组的非僵尸态进程还维护一个链表挂载本组的僵尸态进程。所有的进程都通过链表节点groupList挂载到全局进程组链表上可以方便管理进程组。 进程控制块结构体比较复杂⑵-⑶维护进程的名称、ID编号、状态、模式、退出状态等等⑷-⑸维护各种链表进程组信息线程数量等。接下来维护多核时的CPU信息信号信息虚拟地址框架文件安全能力等。涉及具体代码时再深入分析这些结构体成员。 typedef struct { ⑴ UINT32 groupID; /** Process group ID is the PID of the process that created the group */LOS_DL_LIST processList; /** List of processes under this process group */LOS_DL_LIST exitProcessList; /** List of closed processes (zombie processes) under this group */LOS_DL_LIST groupList; /** Process group list */} ProcessGroup;typedef struct ProcessCB { ⑵ CHAR processName[OS_PCB_NAME_LEN]; /** Process name */UINT32 processID; /** Process ID */UINT16 processStatus; /** [15:4] Process Status; [3:0] The number of threads currentlyrunning in the process */UINT16 consoleID; /** The console id of task belongs */UINT16 processMode; /** Kernel Mode:0; User Mode:1; */UINT32 parentProcessID; /** Parent process ID */ ⑶ UINT32 exitCode; /** Process exit status */ ⑷ LOS_DL_LIST pendList; /** Block list to which the process belongs */LOS_DL_LIST childrenList; /** Children process list */LOS_DL_LIST exitChildList; /** Exit children process list */LOS_DL_LIST siblingList; /** Linkage in parents children list */ProcessGroup *group; /** Process group to which a process belongs */LOS_DL_LIST subordinateGroupList; /** Linkage in group list */UINT32 threadGroupID; /** Which thread group , is the main thread ID of the process */LOS_DL_LIST threadSiblingList; /** List of threads under this process */volatile UINT32 threadNumber; /** Number of threads alive under this process */UINT32 threadCount; /** Total number of threads created under this process */ ⑸ LOS_DL_LIST waitList; /** The process holds the waitLits to support wait/waitpid */#ifdef LOSCFG_KERNEL_SMPUINT32 timerCpu; /** CPU core number of this task is delayed or pended */#endifUINTPTR sigHandler; /** Signal handler */sigset_t sigShare; /** Signal share bit */#ifdef LOSCFG_KERNEL_LITEIPCProcIpcInfo *ipcInfo; /** Memory pool for lite ipc */#endif#ifdef LOSCFG_KERNEL_VMLosVmSpace *vmSpace; /** VMM space for processes */#endif#ifdef LOSCFG_FS_VFSstruct files_struct *files; /** Files held by the process */#endiftimer_t timerID; /** ITimer */#ifdef LOSCFG_SECURITY_CAPABILITYUser *user;UINT32 capability;#endif#ifdef LOSCFG_SECURITY_VIDTimerIdMap timerIdMap;#endif#ifdef LOSCFG_DRIVERS_TZDRIVERstruct Vnode *execVnode; /** Exec bin of the process */#endifmode_t umask;#ifdef LOSCFG_KERNEL_CPUPOsCpupBase *processCpup; /** Process cpu usage */#endifstruct rlimit *resourceLimit;} LosProcessCB; 3.3 LiteOS-A内核进程模块内联函数 私有头文件kernel\base\include\los_process_pri.h中还定义了内联函数等。下述几个函数用于判断进程是否未使用是否未激活状态是否死亡进程是否初始化是否用户态进程等。 STATIC INLINE BOOL OsProcessIsUnused(const LosProcessCB *processCB) {return ((processCB-processStatus OS_PROCESS_FLAG_UNUSED) ! 0); }STATIC INLINE BOOL OsProcessIsInactive(const LosProcessCB *processCB) {return ((processCB-processStatus (OS_PROCESS_FLAG_UNUSED | OS_PROCESS_STATUS_INACTIVE)) ! 0); }STATIC INLINE BOOL OsProcessIsDead(const LosProcessCB *processCB) {return ((processCB-processStatus (OS_PROCESS_FLAG_UNUSED | OS_PROCESS_STATUS_ZOMBIES)) ! 0); }STATIC INLINE BOOL OsProcessIsInit(const LosProcessCB *processCB) {return (processCB-processStatus OS_PROCESS_STATUS_INIT); } STATIC INLINE BOOL OsProcessIsUserMode(const LosProcessCB processCB) {return (processCB-processMode OS_USER_MODE); }下述几个函数对指定进程设置不同的退出代码coredump、signal等等。 /** Process exit code 31 15 8 7 0* | | exit code | core dump | signal |*/ #define OS_PRO_EXIT_OK 0 STATIC INLINE VOID OsProcessExitCodeCoreDumpSet(LosProcessCB *processCB) {processCB-exitCode | 0x80U; }STATIC INLINE VOID OsProcessExitCodeSignalSet(LosProcessCB *processCB, UINT32 signal) {processCB-exitCode | signal 0x7FU; }STATIC INLINE VOID OsProcessExitCodeSignalClear(LosProcessCB *processCB) {processCB-exitCode (~0x7FU); }STATIC INLINE BOOL OsProcessExitCodeSignalIsSet(LosProcessCB *processCB) {return (processCB-exitCode) 0x7FU; }STATIC INLINE VOID OsProcessExitCodeSet(LosProcessCB processCB, UINT32 code) {processCB-exitCode | ((code 0x000000FFU) 8U) 0x0000FF00U; / 8: Move 8 bits to the left, exitCode */ }小结 本文介绍了进程管理的概念、运行机制和编程接口。 经常有很多小伙伴抱怨说不知道学习鸿蒙开发哪些技术不知道需要重点掌握哪些鸿蒙应用开发知识点 为了能够帮助到大家能够有规划的学习这里特别整理了一套纯血版鸿蒙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