进程模块注释完善

    鸿蒙研究站 | http://weharmonyos.com (国内)
              | https://weharmony.github.io (国外)
    论坛 | http://bbs.weharmonyos.com
    文档中心 | http://open.weharmonyos.com
    参考手册 | http://doxygen.weharmonyos.com
上级 31b2b250
...@@ -289,7 +289,6 @@ ...@@ -289,7 +289,6 @@
据说喜欢 **点赞 + 分享** 的,后来都成了大神。:) [ >> 查看捐助名单](./donate.md) 据说喜欢 **点赞 + 分享** 的,后来都成了大神。:) [ >> 查看捐助名单](./donate.md)
![](https://weharmonyos.oss-cn-hangzhou.aliyuncs.com/resources/common/so1so.png) ![](https://weharmonyos.oss-cn-hangzhou.aliyuncs.com/resources/common/so1so.png)
``` ```
互联网从业十五年,计算机硕士,技术副总裁 互联网从业十五年,计算机硕士,技术副总裁
关注我,持续更新四十年,即聊技术也谈人生 关注我,持续更新四十年,即聊技术也谈人生
......
...@@ -33,13 +33,13 @@ ...@@ -33,13 +33,13 @@
#include "los_process_pri.h" #include "los_process_pri.h"
#include "internal.h" #include "internal.h"
STATIC Container g_rootContainer; STATIC Container g_rootContainer;//根容器
STATIC ContainerLimit g_containerLimit; STATIC ContainerLimit g_containerLimit;//所有类型容器上限
STATIC Atomic g_containerCount = 0xF0000000U; STATIC Atomic g_containerCount = 0xF0000000U;//容器数量
#ifdef LOSCFG_USER_CONTAINER #ifdef LOSCFG_USER_CONTAINER
STATIC Credentials *g_rootCredentials = NULL; STATIC Credentials *g_rootCredentials = NULL;
#endif #endif
//获取一个容器
UINT32 OsAllocContainerID(VOID) UINT32 OsAllocContainerID(VOID)
{ {
return LOS_AtomicIncRet(&g_containerCount); return LOS_AtomicIncRet(&g_containerCount);
...@@ -108,7 +108,7 @@ UINT32 OsContainerLimitCheck(ContainerType type, UINT32 *containerCount) ...@@ -108,7 +108,7 @@ UINT32 OsContainerLimitCheck(ContainerType type, UINT32 *containerCount)
SCHEDULER_UNLOCK(intSave); SCHEDULER_UNLOCK(intSave);
return LOS_OK; return LOS_OK;
} }
//设置容器上限
UINT32 OsSetContainerLimit(ContainerType type, UINT32 value) UINT32 OsSetContainerLimit(ContainerType type, UINT32 value)
{ {
UINT32 intSave; UINT32 intSave;
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
#ifdef LOSCFG_PID_CONTAINER #ifdef LOSCFG_PID_CONTAINER
STATIC UINT32 g_currentPidContainerNum; STATIC UINT32 g_currentPidContainerNum;//进程类容器当前数量
STATIC LosProcessCB *g_defaultProcessCB = NULL; STATIC LosProcessCB *g_defaultProcessCB = NULL;
STATIC LosTaskCB *g_defaultTaskCB = NULL; STATIC LosTaskCB *g_defaultTaskCB = NULL;
...@@ -252,7 +252,7 @@ VOID OsPidContainerDestroyAllProcess(LosProcessCB *curr) ...@@ -252,7 +252,7 @@ VOID OsPidContainerDestroyAllProcess(LosProcessCB *curr)
} }
} }
} }
//创建一个新的进程容器
STATIC PidContainer *CreateNewPidContainer(PidContainer *parent) STATIC PidContainer *CreateNewPidContainer(PidContainer *parent)
{ {
UINT32 index; UINT32 index;
......
...@@ -168,14 +168,14 @@ UINT32 OsProcessAddNewTask(UINTPTR processID, LosTaskCB *taskCB, SchedParam *par ...@@ -168,14 +168,14 @@ UINT32 OsProcessAddNewTask(UINTPTR processID, LosTaskCB *taskCB, SchedParam *par
*/ */
ProcessGroup *OsCreateProcessGroup(LosProcessCB *processCB) ProcessGroup *OsCreateProcessGroup(LosProcessCB *processCB)
{ {
ProcessGroup *pgroup = LOS_MemAlloc(m_aucSysMem1, sizeof(ProcessGroup)); ProcessGroup *pgroup = LOS_MemAlloc(m_aucSysMem1, sizeof(ProcessGroup));//分配一个进程组
if (pgroup == NULL) { if (pgroup == NULL) {
return NULL; return NULL;
} }
pgroup->pgroupLeader = (UINTPTR)processCB; pgroup->pgroupLeader = (UINTPTR)processCB;//指定进程组负责人
LOS_ListInit(&pgroup->processList); LOS_ListInit(&pgroup->processList);//初始化组员链表
LOS_ListInit(&pgroup->exitProcessList); LOS_ListInit(&pgroup->exitProcessList);//初始化僵死进程链表
LOS_ListTailInsert(&pgroup->processList, &processCB->subordinateGroupList); LOS_ListTailInsert(&pgroup->processList, &processCB->subordinateGroupList);
processCB->pgroup = pgroup; processCB->pgroup = pgroup;
...@@ -617,8 +617,8 @@ STATIC VOID SystemProcessEarlyInit(LosProcessCB *processCB) ...@@ -617,8 +617,8 @@ STATIC VOID SystemProcessEarlyInit(LosProcessCB *processCB)
#ifdef LOSCFG_KERNEL_CONTAINER #ifdef LOSCFG_KERNEL_CONTAINER
OsContainerInitSystemProcess(processCB); OsContainerInitSystemProcess(processCB);
#endif #endif
if (processCB == OsGetKernelInitProcess()) { if (processCB == OsGetKernelInitProcess()) {//2号进程
OsSetMainTaskProcess((UINTPTR)processCB); OsSetMainTaskProcess((UINTPTR)processCB);//将内核根进程设为主任务所属进程
} }
} }
/*! 进程模块初始化,被编译放在代码段 .init 中*/ /*! 进程模块初始化,被编译放在代码段 .init 中*/
...@@ -662,7 +662,7 @@ UINT32 OsProcessInit(VOID) ...@@ -662,7 +662,7 @@ UINT32 OsProcessInit(VOID)
#ifdef LOSCFG_KERNEL_PLIMITS #ifdef LOSCFG_KERNEL_PLIMITS
OsProcLimiterSetInit(); OsProcLimiterSetInit();
#endif #endif
SystemProcessEarlyInit(OsGetIdleProcess()); SystemProcessEarlyInit(OsGetIdleProcess());//初始化 0,1,2号进程
SystemProcessEarlyInit(OsGetUserInitProcess()); SystemProcessEarlyInit(OsGetUserInitProcess());
SystemProcessEarlyInit(OsGetKernelInitProcess()); SystemProcessEarlyInit(OsGetKernelInitProcess());
return LOS_OK; return LOS_OK;
...@@ -2435,7 +2435,7 @@ LITE_OS_SEC_TEXT LosProcessCB *OsGetKernelInitProcess(VOID) ...@@ -2435,7 +2435,7 @@ LITE_OS_SEC_TEXT LosProcessCB *OsGetKernelInitProcess(VOID)
{ {
return &g_processCBArray[OS_KERNEL_ROOT_PROCESS_ID]; return &g_processCBArray[OS_KERNEL_ROOT_PROCESS_ID];
} }
/// 获取空闲进程,0号进程为空闲进程,该进程不干活,专给CPU休息的。
LITE_OS_SEC_TEXT LosProcessCB *OsGetIdleProcess(VOID) LITE_OS_SEC_TEXT LosProcessCB *OsGetIdleProcess(VOID)
{ {
return &g_processCBArray[OS_KERNEL_IDLE_PROCESS_ID]; return &g_processCBArray[OS_KERNEL_IDLE_PROCESS_ID];
......
...@@ -57,10 +57,10 @@ ...@@ -57,10 +57,10 @@
typedef enum { typedef enum {
CONTAINER = 0, CONTAINER = 0,
PID_CONTAINER, PID_CONTAINER, //进程容器
PID_CHILD_CONTAINER, PID_CHILD_CONTAINER, //子进程容器
UTS_CONTAINER, UTS_CONTAINER,
MNT_CONTAINER, MNT_CONTAINER, //挂载容器
IPC_CONTAINER, IPC_CONTAINER,
USER_CONTAINER, USER_CONTAINER,
TIME_CONTAINER, TIME_CONTAINER,
......
...@@ -77,7 +77,7 @@ typedef struct { ...@@ -77,7 +77,7 @@ typedef struct {
#endif #endif
/*! 进程组结构体*/ /*! 进程组结构体*/
typedef struct ProcessGroup { typedef struct ProcessGroup {
UINTPTR pgroupLeader; /**< Process group leader is the the process that created the group */ UINTPTR pgroupLeader; /**< Process group leader is the the process that created the group | 负责创建进程组的进程首地址*/
LOS_DL_LIST processList; /**< List of processes under this process 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 exitProcessList; /**< List of closed processes (zombie processes) under this group | 进程组的僵死进程链表*/
LOS_DL_LIST groupList; /**< Process group list | 进程组链表,上面挂的都是进程组*/ LOS_DL_LIST groupList; /**< Process group list | 进程组链表,上面挂的都是进程组*/
...@@ -138,13 +138,13 @@ typedef struct ProcessCB { ...@@ -138,13 +138,13 @@ typedef struct ProcessCB {
#endif #endif
struct rlimit *resourceLimit; ///< 每个进程在运行时系统不会无限制的允许单个进程不断的消耗资源,因此都会设置资源限制。 struct rlimit *resourceLimit; ///< 每个进程在运行时系统不会无限制的允许单个进程不断的消耗资源,因此都会设置资源限制。
#ifdef LOSCFG_KERNEL_CONTAINER #ifdef LOSCFG_KERNEL_CONTAINER
Container *container; Container *container; ///< 内核容器
#ifdef LOSCFG_USER_CONTAINER #ifdef LOSCFG_USER_CONTAINER
struct Credentials *credentials; struct Credentials *credentials; ///< 用户身份证
#endif #endif
#endif #endif
#ifdef LOSCFG_PROC_PROCESS_DIR #ifdef LOSCFG_PROC_PROCESS_DIR
struct ProcDirEntry *procDir; struct ProcDirEntry *procDir; ///< 目录文件项
#endif #endif
#ifdef LOSCFG_KERNEL_PLIMITS #ifdef LOSCFG_KERNEL_PLIMITS
ProcLimiterSet *plimits; ProcLimiterSet *plimits;
...@@ -320,19 +320,19 @@ STATIC INLINE BOOL OsProcessIsPGroupLeader(const LosProcessCB *processCB) ...@@ -320,19 +320,19 @@ STATIC INLINE BOOL OsProcessIsPGroupLeader(const LosProcessCB *processCB)
* @ingroup los_process * @ingroup los_process
* ID of the kernel idle process * ID of the kernel idle process
*/ */
#define OS_KERNEL_IDLE_PROCESS_ID 0U #define OS_KERNEL_IDLE_PROCESS_ID 0U //0号进程为空闲进程
/** /**
* @ingroup los_process * @ingroup los_process
* ID of the user root process * ID of the user root process
*/ */
#define OS_USER_ROOT_PROCESS_ID 1U #define OS_USER_ROOT_PROCESS_ID 1U //1号为用户态根进程
/** /**
* @ingroup los_process * @ingroup los_process
* ID of the kernel root process * ID of the kernel root process
*/ */
#define OS_KERNEL_ROOT_PROCESS_ID 2U #define OS_KERNEL_ROOT_PROCESS_ID 2U //1号为内核态根进程
#define OS_TASK_DEFAULT_STACK_SIZE 0x2000 ///< task默认栈大小 8K #define OS_TASK_DEFAULT_STACK_SIZE 0x2000 ///< task默认栈大小 8K
#define OS_USER_TASK_SYSCALL_STACK_SIZE 0x3000 ///< 用户通过系统调用的栈大小 12K ,这时是运行在内核模式下 #define OS_USER_TASK_SYSCALL_STACK_SIZE 0x3000 ///< 用户通过系统调用的栈大小 12K ,这时是运行在内核模式下
#define OS_USER_TASK_STACK_SIZE 0x100000 ///< 用户任务运行在用户空间的栈大小 1M #define OS_USER_TASK_STACK_SIZE 0x100000 ///< 用户任务运行在用户空间的栈大小 1M
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
STATIC ProcIPCLimit *g_rootIPCLimit = NULL; STATIC ProcIPCLimit *g_rootIPCLimit = NULL;
#define PLIMIT_IPC_SHM_LIMIT_MAX 0xFFFFFFFF #define PLIMIT_IPC_SHM_LIMIT_MAX 0xFFFFFFFF
//IPC限额初始化
VOID OsIPCLimitInit(UINTPTR limite) VOID OsIPCLimitInit(UINTPTR limite)
{ {
ProcIPCLimit *plimite = (ProcIPCLimit *)limite; ProcIPCLimit *plimite = (ProcIPCLimit *)limite;
......
...@@ -40,17 +40,17 @@ extern "C" { ...@@ -40,17 +40,17 @@ extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
typedef struct ProcIPCLimit { typedef struct ProcIPCLimit {
UINT32 mqCount; UINT32 mqCount;//当前队列个数
UINT32 mqFailedCount; UINT32 mqFailedCount;
UINT32 mqCountLimit; UINT32 mqCountLimit;//队列个数上限
UINT32 shmSize; UINT32 shmSize;//
UINT32 shmFailedCount; UINT32 shmFailedCount;
UINT32 shmSizeLimit; UINT32 shmSizeLimit;//共享内存上限
} ProcIPCLimit; } ProcIPCLimit;
enum IPCStatType { enum IPCStatType {
IPC_STAT_TYPE_MQ = 0, IPC_STAT_TYPE_MQ = 0,//消息队列
IPC_STAT_TYPE_SHM = 3, IPC_STAT_TYPE_SHM = 3,//共享内存
IPC_STAT_TYPE_BUT // buttock IPC_STAT_TYPE_BUT // buttock
}; };
......
...@@ -28,15 +28,23 @@ ...@@ -28,15 +28,23 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
/*
http://open.weharmonyos.com/zh-cn/device-dev/kernel/kernel-small-plimits.html
面对进程越来越多,应用环境越来越复杂的状况,需要对容器做限制,若不做限制,会发生资源浪费、争夺等。
容器配额plimits(Process Limits)是内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,
可以对cpu,内存等资源实现精细化控制。plimits的接口通过plimitsfs的伪文件系统提供。
通过操作文件对进程及进程资源进行分组管理,通过配置plimits组内限制器Plimiter限制进程组的memory、sched等资源的使用。
*/
#ifdef LOSCFG_KERNEL_PLIMITS #ifdef LOSCFG_KERNEL_PLIMITS
#include "los_base.h" #include "los_base.h"
#include "los_process_pri.h" #include "los_process_pri.h"
#include "hal_timer.h" #include "hal_timer.h"
#include "los_plimits.h" #include "los_plimits.h"
//容器限额统一接口
typedef struct PlimiteOperations { typedef struct PlimiteOperations {
VOID (*LimiterInit)(UINTPTR); VOID (*LimiterInit)(UINTPTR);//初始化
VOID *(*LimiterAlloc)(VOID); VOID (*LimiterAlloc)(VOID);//分配
VOID (*LimiterFree)(UINTPTR); VOID (*LimiterFree)(UINTPTR);
VOID (*LimiterCopy)(UINTPTR, UINTPTR); VOID (*LimiterCopy)(UINTPTR, UINTPTR);
BOOL (*LimiterAddProcessCheck)(UINTPTR, UINTPTR); BOOL (*LimiterAddProcessCheck)(UINTPTR, UINTPTR);
......
...@@ -65,19 +65,19 @@ enum ProcLimiterID { ...@@ -65,19 +65,19 @@ enum ProcLimiterID {
#ifdef LOSCFG_KERNEL_IPC_PLIMIT #ifdef LOSCFG_KERNEL_IPC_PLIMIT
PROCESS_LIMITER_ID_IPC, PROCESS_LIMITER_ID_IPC,
#endif #endif
PROCESS_LIMITER_COUNT, PROCESS_LIMITER_COUNT,//进程
}; };
//容器限额情况
typedef struct { typedef struct {
#ifdef LOSCFG_KERNEL_MEM_PLIMIT #ifdef LOSCFG_KERNEL_MEM_PLIMIT
UINT64 memUsed; UINT64 memUsed;//内存使用情况
#endif #endif
#ifdef LOSCFG_KERNEL_IPC_PLIMIT #ifdef LOSCFG_KERNEL_IPC_PLIMIT
UINT32 mqCount; UINT32 mqCount;//
UINT32 shmSize; UINT32 shmSize;//共享内存大小
#endif #endif
#ifdef LOSCFG_KERNEL_SCHED_PLIMIT #ifdef LOSCFG_KERNEL_SCHED_PLIMIT
UINT64 allRuntime; UINT64 allRuntime;//调度运行时情况
#endif #endif
} PLimitsData; } PLimitsData;
......
git add -A git add -A
git commit -m ' 增加支持网络容器和容器限额功能 git commit -m ' 进程模块注释完善
鸿蒙研究站 | http://weharmonyos.com (国内) 鸿蒙研究站 | http://weharmonyos.com (国内)
| https://weharmony.github.io (国外) | https://weharmony.github.io (国外)
论坛 | http://bbs.weharmonyos.com 论坛 | http://bbs.weharmonyos.com
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册