完善几处任务状态注释

    百图画鸿蒙 + 百文说内核 + 百万注源码  => 挖透鸿蒙内核源码
    鸿蒙研究站 | http://weharmonyos.com (国内)
              | https://weharmony.github.io (国外)
    oschina | https://my.oschina.net/weharmony
    博客园 | https://www.cnblogs.com/weharmony/
    知乎 | https://www.zhihu.com/people/weharmonyos
    csdn | https://blog.csdn.net/kuangyufei
    51cto | https://harmonyos.51cto.com/column/34
    掘金 | https://juejin.cn/user/756888642000808
    公众号 | 鸿蒙研究站 (weharmonyos)
上级 b1377799
......@@ -125,7 +125,7 @@ extern SPIN_LOCK_S g_taskSpin;//任务自旋锁
*
* The task is suspended.
*/
#define OS_TASK_STATUS_SUSPENDED 0x0008U ///< 任务状态: 暂停 ,意思是任务已经开始了, 不过现在要停
#define OS_TASK_STATUS_SUSPENDED 0x0008U ///< 任务状态: 暂停, 意思是发生了不需要等待资源的暂停,例如中断来
/**
* @ingroup los_task
......@@ -133,7 +133,7 @@ extern SPIN_LOCK_S g_taskSpin;//任务自旋锁
*
* The task is blocked.
*/
#define OS_TASK_STATUS_PENDING 0x0010U ///< 任务状态: 挂起 ,意思是任务还没开始,在等待其他条件成熟
#define OS_TASK_STATUS_PENDING 0x0010U ///< 任务状态: 挂起 ,意思在需等待其他外在资源引起的停止,例如互斥锁/信号量 ==
/**
* @ingroup los_task
......@@ -141,7 +141,7 @@ extern SPIN_LOCK_S g_taskSpin;//任务自旋锁
*
* The task is delayed.
*/
#define OS_TASK_STATUS_DELAY 0x0020U ///< 延期状态 ,见于 OsSchedDelay 延期调度
#define OS_TASK_STATUS_DELAY 0x0020U ///< 延迟状态 ,例如 delay(100),因内部原因引起的等待 见于 OsSchedDelay 延期调度
/**
* @ingroup los_task
......@@ -157,10 +157,10 @@ extern SPIN_LOCK_S g_taskSpin;//任务自旋锁
*
* The task is pend for a period of time.
*/
#define OS_TASK_STATUS_PEND_TIME 0x0080U ///< 任务状态: 挂起
#define OS_TASK_STATUS_PEND_TIME 0x0080U ///< 任务状态: 有时间限制的阻塞,例如等待某个事件时设置为时间到了就不等了
#define OS_TASK_STATUS_BLOCKED (OS_TASK_STATUS_INIT | OS_TASK_STATUS_PENDING | \
OS_TASK_STATUS_DELAY | OS_TASK_STATUS_PEND_TIME) ///< 任务状态: 屏蔽
OS_TASK_STATUS_DELAY | OS_TASK_STATUS_PEND_TIME) ///< 任务状态: 屏蔽
/**
* @ingroup los_task
......
......@@ -50,7 +50,8 @@ extern "C" {
\n 关于nPages和order的关系说明,当请求分配为5页时,order是等于3的,因为只有2^3才能满足5页的请求
*/
typedef struct VmPage {
LOS_DL_LIST node; /**< vm object dl list | 物理内框节点,通过它挂/摘到全局g_vmPhysSeg[segID]->freeList[order]物理页框链表上*/
LOS_DL_LIST node; /**< vm object dl list | 物理内框节点,通过它挂/摘到全局g_vmPhysSeg[segID]->freeList[order]物理页框链表 或被使用的链表
上, 例如 共享内存的shmIDSource.node*/
PADDR_T physAddr; /**< vm page physical addr | 物理页框起始物理地址,只能用于计算,不会用于操作(读/写数据==)*/
Atomic refCounts; /**< vm page ref count | 被引用次数,共享内存会有多次引用*/
UINT32 flags; /**< vm page flags | 页标签,同时可以有多个标签(共享/引用/活动/被锁==)*/
......
......@@ -466,7 +466,7 @@ STATIC INLINE VOID OsSchedPriQueueDelete(UINT32 proPriority, LOS_DL_LIST *prique
g_sched->queueBitmap &= ~(PRIQUEUE_PRIOR0_BIT >> proPriority);
}
}
/// 唤醒因等待时间而阻塞的任务,例如在一个任务中执行 delay(100)这样的操作
STATIC INLINE VOID OsSchedWakePendTimeTask(UINT64 currTime, LosTaskCB *taskCB, BOOL *needSchedule)
{
#ifndef LOSCFG_SCHED_DEBUG
......@@ -475,11 +475,11 @@ STATIC INLINE VOID OsSchedWakePendTimeTask(UINT64 currTime, LosTaskCB *taskCB, B
LOS_SpinLock(&g_taskSpin);
UINT16 tempStatus = taskCB->taskStatus;
if (tempStatus & (OS_TASK_STATUS_PENDING | OS_TASK_STATUS_DELAY)) {
taskCB->taskStatus &= ~(OS_TASK_STATUS_PENDING | OS_TASK_STATUS_PEND_TIME | OS_TASK_STATUS_DELAY);
if (tempStatus & OS_TASK_STATUS_PENDING) {
taskCB->taskStatus |= OS_TASK_STATUS_TIMEOUT;
LOS_ListDelete(&taskCB->pendList);
if (tempStatus & (OS_TASK_STATUS_PENDING | OS_TASK_STATUS_DELAY)) {//任务被挂起或被延迟执行
taskCB->taskStatus &= ~(OS_TASK_STATUS_PENDING | OS_TASK_STATUS_PEND_TIME | OS_TASK_STATUS_DELAY);//去掉这些标签
if (tempStatus & OS_TASK_STATUS_PENDING) {//如果贴有阻塞标签
taskCB->taskStatus |= OS_TASK_STATUS_TIMEOUT;//贴上时间到了的标签
LOS_ListDelete(&taskCB->pendList);//从阻塞链表中删除
taskCB->taskMux = NULL;
OsTaskWakeClearPendMask(taskCB);
}
......@@ -489,7 +489,7 @@ STATIC INLINE VOID OsSchedWakePendTimeTask(UINT64 currTime, LosTaskCB *taskCB, B
taskCB->schedStat.pendTime += currTime - taskCB->startTime;
taskCB->schedStat.pendCount++;
#endif
OsSchedTaskEnQueue(taskCB);
OsSchedTaskEnQueue(taskCB);//将任务加入就绪队列
*needSchedule = TRUE;
}
}
......@@ -502,7 +502,7 @@ STATIC INLINE BOOL OsSchedScanTimerList(VOID)
Percpu *cpu = OsPercpuGet();
BOOL needSchedule = FALSE;
SortLinkAttribute *taskSortLink = &OsPercpuGet()->taskSortLink;//获取本CPU核上挂的所有等待的任务排序链表
LOS_DL_LIST *listObject = &taskSortLink->sortLink;
LOS_DL_LIST *listObject = &taskSortLink->sortLink;//按到达时间从前到后排序
/*
* When task is pended with timeout, the task block is on the timeout sortlink
* (per cpu) and ipc(mutex,sem and etc.)'s block at the same time, it can be waken
......@@ -519,25 +519,25 @@ STATIC INLINE BOOL OsSchedScanTimerList(VOID)
}
SortLinkList *sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode);//获取每个优先级上的任务链表头节点
UINT64 currTime = OsGetCurrSchedTimeCycle();
while (sortList->responseTime <= currTime) {//
LosTaskCB *taskCB = LOS_DL_LIST_ENTRY(sortList, LosTaskCB, sortList);
OsDeleteNodeSortLink(taskSortLink, &taskCB->sortList);
LOS_SpinUnlock(&cpu->taskSortLinkSpin);
UINT64 currTime = OsGetCurrSchedTimeCycle();//获取当前时间
while (sortList->responseTime <= currTime) {//到达时间小于当前时间,说明任务时间过了,需要去执行了
LosTaskCB *taskCB = LOS_DL_LIST_ENTRY(sortList, LosTaskCB, sortList);//获取任务实体
OsDeleteNodeSortLink(taskSortLink, &taskCB->sortList);//从排序链表中删除
LOS_SpinUnlock(&cpu->taskSortLinkSpin);//释放自旋锁
OsSchedWakePendTimeTask(currTime, taskCB, &needSchedule);
OsSchedWakePendTimeTask(currTime, taskCB, &needSchedule);//需要唤醒任务,加入就绪队列
LOS_SpinLock(&cpu->taskSortLinkSpin);
if (LOS_ListEmpty(listObject)) {
break;
if (LOS_ListEmpty(listObject)) {//因为上面已经执行了删除操作,所以此处可能有空
break;//为空则直接退出循环
}
sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode);
sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode);//处理下一个节点
}
LOS_SpinUnlock(&cpu->taskSortLinkSpin);
return needSchedule;
return needSchedule;//返回是否需要调度
}
/*!
......
......@@ -115,7 +115,7 @@ STATIC INT32 OsVmPhysSegCreate(paddr_t start, size_t size)
}
seg = &g_vmPhysSeg[g_vmPhysSegNum++];//拿到一段数据
for (; (seg > g_vmPhysSeg) && ((seg - 1)->start > (start + size)); seg--) {
for (; (seg > g_vmPhysSeg) && ((seg - 1)->start > (start + size)); seg--) {//定位到合适的段
*seg = *(seg - 1);
}
seg->start = start;
......
git add -A
git commit -m ' 2022/01/03 同步官方代码, 只有几个小改动
git commit -m ' 完善几处任务状态注释
百图画鸿蒙 + 百文说内核 + 百万注源码 => 挖透鸿蒙内核源码
鸿蒙研究站 | http://weharmonyos.com (国内)
| https://weharmony.github.io (国外)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册