docs(kernel/task.md): replace some inappropriate/duplicate words, delete some mistake letter and adjust some mistake blankets

This commit is contained in:
RobertYuan 2021-09-22 21:29:34 +08:00
parent ae2027a2be
commit d400f41593
1 changed files with 13 additions and 13 deletions

View File

@ -32,7 +32,7 @@
### 任务状态
XiUOS 中的任务在任意时刻都处于就绪ready、运行running、阻塞/挂起suspend、退出quit)四种状态之一。状态之间的变化关系如下图所示。
XiUOS 中的任务在任意时刻都处于就绪ready、运行running、阻塞/挂起suspend、退出close)四种状态之一。状态之间的变化关系如下图所示。
<img src="./imagesrc/task_status.png" width =100%/>
@ -78,7 +78,7 @@ struct TaskDescriptor
};
```
其中stack_point 指向任务堆栈的起始地址task_dync_sched_member 包含与任务调度相关的信息task_base_info 记录任务的基本信息task_smp_info 统计与多处理器相关的信息event_id_trigger / event_mode 用于实现事件集机制(详见[任务通信](#communication)exstatus为任务调用内核接口时最近的错误码即用户线程在使用内核接口时可能会执行失败此时内核接口返回-1具体的错误码被保存在exstatus成员且在下一次调用内核接口失败时被覆盖link 用于组织内核中所有的任务。id 用于表示一个线程Done提供所有的线程的操作函数各复合成员的详细定义如下。
其中stack_point 指向任务堆栈的起始地址task_dync_sched_member 包含与任务调度相关的信息task_base_info 记录任务的基本信息task_smp_info 统计与多处理器相关的信息event_id_trigger / event_mode 用于实现事件集机制(详见[任务通信](#communication)exstatus为任务调用内核接口时最近的错误码即用户线程在使用内核接口时可能会执行失败此时内核接口返回-1具体的错误码被保存在成员变量exstatus中且在下一次调用内核接口失败时被覆盖link 用于组织内核中所有的任务。id 用于表示一个线程Done提供所有的线程的操作函数各复合成员的详细定义如下。
* struct TaskDyncSchedMember
```c
struct TaskDyncSchedMember {
@ -113,7 +113,7 @@ struct TaskDyncSchedMember {
#define KTASK_CLOSE 0x04
```
struct TaskDyncSchedMember结构用于记录与调度相关的信息。stat记录任务的当前状态可以为初始化KTASK_INIT挂起KTASK_SUSPEND、就绪KTASK_READY、运行KTASK_RUNNING或退出KTASK_CLOSE。advance_cnt表示在配置成短作业预先调度时优先处理的时间片周期个数。cur_prio表示任务当前的优先级用于优先级反转该优先级可以高于任务创建时配置的优先级。origin_timeslice表示在时间片轮转调度时任务每次运行的时间片。isolation_flag变量和指针isolation支持地址空间隔离isolation_status用于标志内核服务的过程1表示进入内核服务上下文。sched_link和sched_avl构成的联合体为就绪队列节点XiUOS中就绪队列可以组织为双链表sched_link或平衡二叉树sched_avl。task_timer为任务睡眠的计数器。
TaskDyncSchedMember结构用于记录与调度相关的信息。stat记录任务的当前状态可以为初始化KTASK_INIT挂起KTASK_SUSPEND、就绪KTASK_READY、运行KTASK_RUNNING或退出KTASK_CLOSE。advance_cnt表示在配置成短作业预先调度时优先处理的时间片周期个数。cur_prio表示任务当前的优先级用于优先级反转该优先级可以高于任务创建时配置的优先级。origin_timeslice表示在时间片轮转调度时任务每次运行的时间片。isolation_flag变量和指针isolation支持地址空间隔离isolation_status用于标志内核服务的过程1表示进入内核服务上下文。sched_link和sched_avl构成的联合体为就绪队列节点XiUOS中就绪队列可以组织为双链表sched_link或平衡二叉树sched_avl。task_timer为任务睡眠的计数器。
* struct TaskBaseInfo
```c
struct TaskBaseInfo {
@ -126,7 +126,7 @@ struct TaskBaseInfo {
};
```
struct TaskBaseInfo结构记录了任务的基本属性包括任务的名称name、入口函数func_entry和参数func_param、栈大小stack_depth、初始优先级origin_prio
TaskBaseInfo结构记录了任务的基本属性包括任务的名称name、入口函数func_entry和参数func_param、栈大小stack_depth、初始优先级origin_prio
* struct TaskSmpInfo
```c
struct TaskSmpInfo {
@ -135,7 +135,7 @@ struct TaskSmpInfo {
uint16 critical_lock_cnt;
};
```
struct TaskSmpInfo结构包含多处理器相关的信息其成员分别表示该任务绑定的CPU ID与正在运行的CPU ID。
TaskSmpInfo结构包含多处理器相关的信息其成员分别表示该任务绑定的CPU ID与正在运行的CPU ID。
<span id="api"></span>
### 任务函数接口
@ -154,7 +154,7 @@ typedef struct utask UtaskType;
int32_t UserTaskCreate(UtaskType task);
```
该函数用于用户态的任务创建。任务的各个属性由struct utask结构表示包括任务的名称、入口函数及参数、栈大小和优先级在调用该函数时需要传入该结构的实例用于配置任务属性。任务创建成功后内核会为其分配指定大小的栈及其他结构如struct TaskDescriptor并返回任务id。
该函数用于用户态的任务创建。任务的各个属性由utask结构表示包括任务的名称、入口函数及参数、栈大小和优先级在调用该函数时需要传入该结构的实例用于配置任务属性。任务创建成功后内核会为其分配指定大小的栈及其他结构如struct TaskDescriptor并返回任务id。
| 参数 | 描述 |
| --- | --- |
@ -205,7 +205,7 @@ x_err_t UserTaskCoreUnCombine(int32_t id);
x_err_t UserTaskDelay(int32_t ms);
```
该函数用于将当前任务挂起一定时间,单位为tick。挂起时间结束后,任务会进入就绪状态,等待系统调用。
该函数用于将当前任务挂起一定时间,单位为ms。挂起时间结束后,任务会进入就绪状态,等待系统调用。
| 参数 | 描述 |
| --- | --- |
@ -294,7 +294,7 @@ x_err_t UserMsgQueueSendwait(int32_t mq, const void *buffer, size_t size, int32_
x_err_t UserMsgQueueSend(int32_t mq, const void *buffer, size_t size);
```
该函数用于向消息队列发送一个消息。若消息发送成功则返回EOK若不成功(等待超时)则返回-ETIMEOUT。
该函数用于向消息队列发送一个消息。若消息发送成功则返回EOK若不成功则返回-ETIMEOUT。
| 参数 | 描述 |
| --- | --- |
@ -306,7 +306,7 @@ x_err_t UserMsgQueueSend(int32_t mq, const void *buffer, size_t size);
x_err_t UserMsgQueueUrgentSend(int32_t mq, const void *buffer, size_t size);
```
该函数用于向消息队列y优先发送一个消息。若消息发送成功则返回EOK若不成功等待超时则返回-ETIMEOUT。
该函数用于向消息队列优先发送一个消息。若消息发送成功则返回EOK若不成功等待超时则返回-ETIMEOUT。
| 参数 | 描述 |
| --- | --- |
@ -359,7 +359,7 @@ struct Semaphore
| --- | --- |
| id | 信号量ID用于唯一标识一个信号量 |
| value | 信号量的当前值 |
| pend_link | 挂起任务链表 |
| pend_list | 挂起任务链表 |
| link | 系统中所有信号量构成的链表 |
#### 信号量函数接口
@ -581,7 +581,7 @@ x_err_t UserEventReinit(EventIdType event);
XiUOS 是一个支持多任务的操作系统,对任务的数量没有限制。在 XiUOS 中,每个任务都需要自己的堆栈,同时也可能会动态申请内存资源。任务在运行过程中发生内存溢出是 RTOS 系统中最常见的问题,所以限制任务的内存空间访问是保证 RTOS 稳定运行的关键。
ARM 和 RISC-V 在体系架构上都提供了内存访问的保护功能可以通过对特定寄存器的硬编程实现对指定内存区域访问权限的设置。然而现有的大多数物联网操作系统并没有使用体系结构提供的内存保护功能来对任务运行的地址空间进行隔离保护。XiUOS 充分考虑任务运行的安全问题,在不影响任务正常执行的情况下,对每个任务所允许访问的内存地址空间进行限制。除此之外,任务在动态申请内存、释放内存、内存共享时也提供隔离服务。
ARM 和 RISC-V 在体系架构上都提供了内存访问的保护功能可以通过对特定寄存器的硬编程实现对指定内存区域访问权限的设置。然而现有的大多数物联网操作系统并没有使用体系结构提供的内存保护功能来对任务运行的地址空间进行隔离保护。XiUOS 充分考虑任务运行的安全问题,在不影响任务正常执行的情况下,对每个任务所允许访问的内存地址空间进行限制。除此之外,任务在动态申请内存、释放内存、内存共享时XiUOS提供隔离服务。
XiUOS 任务隔离的总体设计思想是将物理内存地址空间划分为信任地址空间和非信任地址空间。XiUOS 的内核任务运行在信任地址空间可以访问所有信任地址空间和非信任地址空间XiUOS 的用户程序运行在非信任地址空间,通过”内核服务表“的方式访问内核任务提供的功能。
@ -987,7 +987,7 @@ int TestRealtime(int argc, char * argv[])
```
初始化GPIO18为输出模式并初始化为低电平在while1当中调用delay函数每隔1个时间片发生一次调度。在下面的switch函数入口和出口位置操作GPIO。
初始化GPIO18为输出模式并初始化为低电平在while(1)当中调用delay函数每隔1个时间片发生一次调度。在下面的switch函数入口和出口位置操作GPIO。
```c
void __attribute__((naked)) SwitchKtaskContext(x_ubase from, x_ubase to, struct TaskDescriptor *to_task)
@ -1121,4 +1121,4 @@ void __attribute__((naked)) SaveMpie()
## 使用场景
* 在多处理器设备上,多个任务可以并行运行,从而提高处理器的利用率。
* 在一些中断驱动的应用中,如果中断需要处理的工作过于复杂,则可以创建一个任务专门用于处理相关工作,从而改善中断延迟。
* 在一些中断驱动的应用中,如果中断需要处理的工作过于复杂,则可以创建一个任务专门用于处理相关工作,从而改善中断延迟。