From 7d4e730917a3475728aba89117fe1e3ed063247b Mon Sep 17 00:00:00 2001 From: kuangyufei Date: Thu, 30 Mar 2023 18:25:13 +0800 Subject: [PATCH] =?UTF-8?q?=20=E5=BC=80=E5=A7=8B=E6=B3=A8=E8=A7=A3?= =?UTF-8?q?=E5=AE=B9=E5=99=A8=E6=A8=A1=E5=9D=97=20=20=20=20=20=E9=B8=BF?= =?UTF-8?q?=E8=92=99=E7=A0=94=E7=A9=B6=E7=AB=99=20|=20http://weharmonyos.c?= =?UTF-8?q?om=20(=E5=9B=BD=E5=86=85)=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20|=20https://weharmony.github.io=20(=E5=9B=BD=E5=A4=96)?= =?UTF-8?q?=20=20=20=20=20=E8=AE=BA=E5=9D=9B=20|=20http://bbs.weharmonyos.?= =?UTF-8?q?com=20=20=20=20=20=E6=96=87=E6=A1=A3=E4=B8=AD=E5=BF=83=20|=20ht?= =?UTF-8?q?tp://open.weharmonyos.com=20=20=20=20=20=E5=8F=82=E8=80=83?= =?UTF-8?q?=E6=89=8B=E5=86=8C=20|=20http://doxygen.weharmonyos.com?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/base/container/los_container.c | 8 +++--- kernel/base/container/los_pid_container.c | 2 +- kernel/base/container/los_uts_container.c | 4 +-- kernel/base/core/los_info.c | 8 +++--- kernel/base/core/los_task.c | 32 ++++++++++----------- kernel/base/include/los_container_pri.h | 22 +++++++------- kernel/base/include/los_ipc_container_pri.h | 8 +++--- kernel/base/include/los_pid_container_pri.h | 32 ++++++++++----------- kernel/base/include/los_sched_pri.h | 4 +-- kernel/base/include/los_uts_container_pri.h | 12 +++++--- kernel/base/mem/tlsf/los_memory.c | 2 +- zzz/git/push.sh | 2 +- 12 files changed, 70 insertions(+), 66 deletions(-) diff --git a/kernel/base/container/los_container.c b/kernel/base/container/los_container.c index c5cf65a7..e39d4177 100644 --- a/kernel/base/container/los_container.c +++ b/kernel/base/container/los_container.c @@ -35,11 +35,11 @@ STATIC Container g_rootContainer;//根容器 STATIC ContainerLimit g_containerLimit;//所有类型容器上限 -STATIC Atomic g_containerCount = 0xF0000000U;//容器数量 +STATIC Atomic g_containerCount = 0xF0000000U;//容器总数量 #ifdef LOSCFG_USER_CONTAINER STATIC Credentials *g_rootCredentials = NULL; #endif -//获取一个容器 +//分配一个容器 UINT32 OsAllocContainerID(VOID) { return LOS_AtomicIncRet(&g_containerCount); @@ -57,7 +57,7 @@ VOID OsContainerInitSystemProcess(LosProcessCB *processCB) #endif return; } - +//获取指定容器上限值 UINT32 OsGetContainerLimit(ContainerType type) { switch (type) { @@ -368,7 +368,7 @@ CREATE_CONTAINER: COPY_CONTAINERS: return CopyContainers(flags, child, parent, processID); } - +//释放进程容器 VOID OsContainerFree(LosProcessCB *processCB) { LOS_AtomicDec(&processCB->container->rc); diff --git a/kernel/base/container/los_pid_container.c b/kernel/base/container/los_pid_container.c index 34a391eb..b580af30 100644 --- a/kernel/base/container/los_pid_container.c +++ b/kernel/base/container/los_pid_container.c @@ -526,7 +526,7 @@ UINT32 OsInitRootPidContainer(PidContainer **pidContainer) SCHEDULER_UNLOCK(intSave); return LOS_OK; } - +//从当前容器中获取父进程ID UINT32 OsGetVpidFromCurrContainer(const LosProcessCB *processCB) { UINT32 vpid = processCB->processID; diff --git a/kernel/base/container/los_uts_container.c b/kernel/base/container/los_uts_container.c index ee483928..005c2065 100644 --- a/kernel/base/container/los_uts_container.c +++ b/kernel/base/container/los_uts_container.c @@ -68,7 +68,7 @@ STATIC UtsContainer *CreateNewUtsContainer(UtsContainer *parent) { UINT32 ret; UINT32 size = sizeof(UtsContainer); - UtsContainer *utsContainer = (UtsContainer *)LOS_MemAlloc(m_aucSysMem1, size); + UtsContainer *utsContainer = (UtsContainer *)LOS_MemAlloc(m_aucSysMem1, size);//从内核动态内存分配 if (utsContainer == NULL) { return NULL; } @@ -105,7 +105,7 @@ STATIC UINT32 CreateUtsContainer(LosProcessCB *child, LosProcessCB *parent) SCHEDULER_UNLOCK(intSave); return LOS_OK; } - +//初始化uts容器 UINT32 OsInitRootUtsContainer(UtsContainer **utsContainer) { UINT32 intSave; diff --git a/kernel/base/core/los_info.c b/kernel/base/core/los_info.c index f03bac81..85c79be3 100644 --- a/kernel/base/core/los_info.c +++ b/kernel/base/core/los_info.c @@ -31,15 +31,15 @@ #include "los_info_pri.h" #include "los_task_pri.h" #include "los_vm_dump.h" - +//获取当前进程的父进程ID STATIC UINT32 GetCurrParentPid(UINT32 pid, const LosProcessCB *processCB) { if (processCB->parentProcess == NULL) { return 0; } -#ifdef LOSCFG_PID_CONTAINER - if (pid == OS_USER_ROOT_PROCESS_ID) { +#ifdef LOSCFG_PID_CONTAINER //从容器中获取 + if (pid == OS_USER_ROOT_PROCESS_ID) {//从这里可以看出 0号进程(kidle)是,1,2号进程的父进程 return 0; } @@ -49,7 +49,7 @@ STATIC UINT32 GetCurrParentPid(UINT32 pid, const LosProcessCB *processCB) #endif return processCB->parentProcess->processID; } - +//获取当前任务ID STATIC INLINE UINT32 GetCurrTid(const LosTaskCB *taskCB) { #ifdef LOSCFG_PID_CONTAINER diff --git a/kernel/base/core/los_task.c b/kernel/base/core/los_task.c index 658a1737..5cbc4d70 100644 --- a/kernel/base/core/los_task.c +++ b/kernel/base/core/los_task.c @@ -208,7 +208,7 @@ LITE_OS_SEC_TEXT WEAK VOID OsIdleTask(VOID) VOID OsTaskInsertToRecycleList(LosTaskCB *taskCB) { - LOS_ListTailInsert(&g_taskRecycleList, &taskCB->pendList); + LOS_ListTailInsert(&g_taskRecycleList, &taskCB->pendList);//将任务挂入回收链表,等待回收 } /*! @@ -431,14 +431,14 @@ STATIC INLINE VOID OsInsertTCBToFreeList(LosTaskCB *taskCB) taskCB->taskStatus = OS_TASK_STATUS_UNUSED; LOS_ListAdd(&g_losFreeTask, &taskCB->pendList); } - +//释放任务在内核态下占用的资源 STATIC VOID OsTaskKernelResourcesToFree(UINT32 syncSignal, UINTPTR topOfStack) { - OsTaskSyncDestroy(syncSignal); + OsTaskSyncDestroy(syncSignal);//任务销毁,同步信息 - (VOID)LOS_MemFree((VOID *)m_aucSysMem1, (VOID *)topOfStack); + (VOID)LOS_MemFree((VOID *)m_aucSysMem1, (VOID *)topOfStack);//释放内核态空间 } - +//释放任务资源 STATIC VOID OsTaskResourcesToFree(LosTaskCB *taskCB) { UINT32 syncSignal = LOSCFG_BASE_IPC_SEM_LIMIT; @@ -446,7 +446,7 @@ STATIC VOID OsTaskResourcesToFree(LosTaskCB *taskCB) UINTPTR topOfStack; #ifdef LOSCFG_KERNEL_VM - if ((taskCB->taskStatus & OS_TASK_FLAG_USER_MODE) && (taskCB->userMapBase != 0)) { + if ((taskCB->taskStatus & OS_TASK_FLAG_USER_MODE) && (taskCB->userMapBase != 0)) {//释放用户态栈 SCHEDULER_LOCK(intSave); UINT32 mapBase = (UINTPTR)taskCB->userMapBase; UINT32 mapSize = taskCB->userMapSize; @@ -456,48 +456,48 @@ STATIC VOID OsTaskResourcesToFree(LosTaskCB *taskCB) LosProcessCB *processCB = OS_PCB_FROM_TCB(taskCB); LOS_ASSERT(!(OsProcessVmSpaceGet(processCB) == NULL)); - UINT32 ret = OsUnMMap(OsProcessVmSpaceGet(processCB), (UINTPTR)mapBase, mapSize); + UINT32 ret = OsUnMMap(OsProcessVmSpaceGet(processCB), (UINTPTR)mapBase, mapSize);//解除映射 if ((ret != LOS_OK) && (mapBase != 0) && !OsProcessIsInit(processCB)) { PRINT_ERR("process(%u) unmmap user task(%u) stack failed! mapbase: 0x%x size :0x%x, error: %d\n", processCB->processID, taskCB->taskID, mapBase, mapSize, ret); } #ifdef LOSCFG_KERNEL_LITEIPC - LiteIpcRemoveServiceHandle(taskCB->taskID); + LiteIpcRemoveServiceHandle(taskCB->taskID);//详见百篇博客之IPC篇 #endif } #endif - if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) { + if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {//任务还没有使用情况 topOfStack = taskCB->topOfStack; taskCB->topOfStack = 0; #ifdef LOSCFG_KERNEL_SMP_TASK_SYNC syncSignal = taskCB->syncSignal; taskCB->syncSignal = LOSCFG_BASE_IPC_SEM_LIMIT; #endif - OsTaskKernelResourcesToFree(syncSignal, topOfStack); + OsTaskKernelResourcesToFree(syncSignal, topOfStack);//释放内核态所占内存,即内核态的栈空间 SCHEDULER_LOCK(intSave); #ifdef LOSCFG_KERNEL_VM - OsClearSigInfoTmpList(&(taskCB->sig)); + OsClearSigInfoTmpList(&(taskCB->sig));//归还信号控制块的内存 #endif OsInsertTCBToFreeList(taskCB); SCHEDULER_UNLOCK(intSave); } return; } - +//批量回收任务 LITE_OS_SEC_TEXT VOID OsTaskCBRecycleToFree() { UINT32 intSave; SCHEDULER_LOCK(intSave); - while (!LOS_ListEmpty(&g_taskRecycleList)) { - LosTaskCB *taskCB = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&g_taskRecycleList)); - LOS_ListDelete(&taskCB->pendList); + while (!LOS_ListEmpty(&g_taskRecycleList)) {//遍历回收链表 + LosTaskCB *taskCB = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&g_taskRecycleList));//取出任务 + LOS_ListDelete(&taskCB->pendList);//重置节点 SCHEDULER_UNLOCK(intSave); - OsTaskResourcesToFree(taskCB); + OsTaskResourcesToFree(taskCB);//释放任务所占资源 SCHEDULER_LOCK(intSave); } diff --git a/kernel/base/include/los_container_pri.h b/kernel/base/include/los_container_pri.h index 4f087c39..db10f529 100644 --- a/kernel/base/include/los_container_pri.h +++ b/kernel/base/include/los_container_pri.h @@ -59,7 +59,7 @@ typedef enum { CONTAINER = 0, PID_CONTAINER, //进程容器 PID_CHILD_CONTAINER, //子进程容器 - UTS_CONTAINER, + UTS_CONTAINER, // MNT_CONTAINER, //挂载容器 IPC_CONTAINER, USER_CONTAINER, @@ -70,29 +70,29 @@ typedef enum { } ContainerType; typedef struct Container { - Atomic rc; + Atomic rc; //原子操作 #ifdef LOSCFG_PID_CONTAINER - struct PidContainer *pidContainer; - struct PidContainer *pidForChildContainer; + struct PidContainer *pidContainer; //进程容器 + struct PidContainer *pidForChildContainer;//进程的孩子容器 #endif #ifdef LOSCFG_UTS_CONTAINER - struct UtsContainer *utsContainer; + struct UtsContainer *utsContainer; // #endif #ifdef LOSCFG_MNT_CONTAINER - struct MntContainer *mntContainer; + struct MntContainer *mntContainer; //挂载容器 #endif #ifdef LOSCFG_IPC_CONTAINER - struct IpcContainer *ipcContainer; + struct IpcContainer *ipcContainer; //IPC容器 #endif #ifdef LOSCFG_TIME_CONTAINER - struct TimeContainer *timeContainer; - struct TimeContainer *timeForChildContainer; + struct TimeContainer *timeContainer; //时间容器 + struct TimeContainer *timeForChildContainer; #endif #ifdef LOSCFG_NET_CONTAINER - struct NetContainer *netContainer; + struct NetContainer *netContainer; //网络容器 #endif } Container; - +//容器数量上限 typedef struct TagContainerLimit { #ifdef LOSCFG_PID_CONTAINER UINT32 pidLimit; diff --git a/kernel/base/include/los_ipc_container_pri.h b/kernel/base/include/los_ipc_container_pri.h index 42ccbf3e..d46bd84b 100644 --- a/kernel/base/include/los_ipc_container_pri.h +++ b/kernel/base/include/los_ipc_container_pri.h @@ -42,13 +42,13 @@ typedef struct TagQueueCB LosQueueCB; typedef struct OsMux LosMux; typedef LosMux pthread_mutex_t; typedef struct ProcessCB LosProcessCB; - +//IPC容器 typedef struct IpcContainer { Atomic rc; - LosQueueCB *allQueue; - LOS_DL_LIST freeQueueList; + LosQueueCB *allQueue; //队列控制块(读写分离模式) + LOS_DL_LIST freeQueueList;//空闲队列链表 fd_set queueFdSet; - struct mqarray queueTable[LOSCFG_BASE_IPC_QUEUE_LIMIT]; + struct mqarray queueTable[LOSCFG_BASE_IPC_QUEUE_LIMIT];//队列池 pthread_mutex_t mqueueMutex; struct mqpersonal *mqPrivBuf[MAX_MQ_FD]; struct shminfo shmInfo; diff --git a/kernel/base/include/los_pid_container_pri.h b/kernel/base/include/los_pid_container_pri.h index cc047e68..159eb480 100644 --- a/kernel/base/include/los_pid_container_pri.h +++ b/kernel/base/include/los_pid_container_pri.h @@ -40,27 +40,27 @@ struct ProcessGroup; struct Container; typedef struct { - UINT32 vid; /* Virtual ID */ - UINT32 vpid; /* Virtual parent ID */ - UINTPTR cb; /* Control block */ - LosProcessCB *realParent; /* process real parent */ + UINT32 vid; /* Virtual ID | 虚拟ID*/ + UINT32 vpid; /* Virtual parent ID | 父进程虚拟ID*/ + UINTPTR cb; /* Control block | 控制块*/ + LosProcessCB *realParent; /* process real parent | 进程真实的父进程 */ LOS_DL_LIST node; } ProcessVid; #define PID_CONTAINER_LEVEL_LIMIT 3 - +//进程容器 typedef struct PidContainer { - Atomic rc; - Atomic level; - Atomic lock; - BOOL referenced; - UINT32 containerID; - struct PidContainer *parent; - struct ProcessGroup *rootPGroup; - LOS_DL_LIST tidFreeList; - ProcessVid tidArray[LOSCFG_BASE_CORE_TSK_LIMIT]; - LOS_DL_LIST pidFreeList; - ProcessVid pidArray[LOSCFG_BASE_CORE_PROCESS_LIMIT]; + Atomic rc; //原子操作 + Atomic level; //等级 + Atomic lock; //锁 + BOOL referenced; //引用次数 + UINT32 containerID; //容器ID + struct PidContainer *parent; //父进程容器 + struct ProcessGroup *rootPGroup; //进程组 + LOS_DL_LIST tidFreeList; //任务空闲链表 + ProcessVid tidArray[LOSCFG_BASE_CORE_TSK_LIMIT];//任务池 + LOS_DL_LIST pidFreeList; //进程空闲链表 + ProcessVid pidArray[LOSCFG_BASE_CORE_PROCESS_LIMIT];//进程池 } PidContainer; #define OS_PID_CONTAINER_FROM_PCB(processCB) ((processCB)->container->pidContainer) diff --git a/kernel/base/include/los_sched_pri.h b/kernel/base/include/los_sched_pri.h index 926e6f5a..8f59144a 100644 --- a/kernel/base/include/los_sched_pri.h +++ b/kernel/base/include/los_sched_pri.h @@ -428,10 +428,10 @@ typedef struct TagTaskCB { UINTPTR fp; ///< fp寄存器 #endif #ifdef LOSCFG_PID_CONTAINER - PidContainer *pidContainer; + PidContainer *pidContainer;//进程容器 #endif #ifdef LOSCFG_IPC_CONTAINER - BOOL cloneIpc; + BOOL cloneIpc;//是否克隆过IPC (flags & CLONE_NEWIPC) #endif } LosTaskCB; diff --git a/kernel/base/include/los_uts_container_pri.h b/kernel/base/include/los_uts_container_pri.h index 5642286c..cc560d22 100644 --- a/kernel/base/include/los_uts_container_pri.h +++ b/kernel/base/include/los_uts_container_pri.h @@ -39,11 +39,15 @@ typedef struct ProcessCB LosProcessCB; struct Container; - +/**************************************** +* https://unix.stackexchange.com/questions/183717/whats-a-uts-namespace +* uts的全称: UNIX Time Sharing, UNIX分时操作系统 +* setting hostname, domainname will not affect rest of the system (CLONE_NEWUTS flag) +****************************************/ typedef struct UtsContainer { - Atomic rc; - UINT32 containerID; - struct utsname utsName; + Atomic rc; //原子操作 LDREX 和 STREX 指令保证了原子操作的底层实现 + UINT32 containerID; //容器ID + struct utsname utsName; //存放系统信息的缓冲区 } UtsContainer; UINT32 OsInitRootUtsContainer(UtsContainer **utsContainer); diff --git a/kernel/base/mem/tlsf/los_memory.c b/kernel/base/mem/tlsf/los_memory.c index cde88f32..cfd75971 100644 --- a/kernel/base/mem/tlsf/los_memory.c +++ b/kernel/base/mem/tlsf/los_memory.c @@ -105,7 +105,7 @@ #define OS_MEM_COLUMN_NUM 8 UINT8 *m_aucSysMem0 = NULL; ///< 异常交互动态内存池地址的起始地址,当不支持异常交互特性时,m_aucSysMem0等于m_aucSysMem1。 -UINT8 *m_aucSysMem1 = NULL; ///< 系统动态内存池地址的起始地址 @note_thinking 能否不要用 0,1来命名核心变量 ??? +UINT8 *m_aucSysMem1 = NULL; ///< (内核态)系统动态内存池地址的起始地址 @note_thinking 能否不要用 0,1来命名核心变量 ??? #ifdef LOSCFG_MEM_MUL_POOL VOID *g_poolHead = NULL; ///内存池头,由它牵引多个内存池 diff --git a/zzz/git/push.sh b/zzz/git/push.sh index 0952e485..1bad0416 100644 --- a/zzz/git/push.sh +++ b/zzz/git/push.sh @@ -1,5 +1,5 @@ git add -A -git commit -m ' 进程模块注释完善 +git commit -m ' 开始注解容器模块 鸿蒙研究站 | http://weharmonyos.com (国内) | https://weharmony.github.io (国外) 论坛 | http://bbs.weharmonyos.com -- GitLab