XWOS标准

XWOS的基本类型、概念、习惯

基本类型

XWOS的所有可以确定位宽的数据类型被称为 基本数据类型 ,定义如下:

  • xwu8_t : 8位无符号整数
  • xws8_t : 8位有符号整数
  • xwu16_t : 16位无符号整数
  • xws16_t : 16位有符号整数
  • xwu32_t : 32位无符号整数
  • xws32_t : 32位有符号整数
  • xwu64_t : 64位无符号整数
  • xws64_t : 64位有符号整数
  • xwsz_t : 大小值(无符号)
  • xwssz_t : 大小值(有符号)
  • xwstk_t : 栈帧(无符号),必须与指针位宽一致
  • xwptr_t : 指针的整数值(无符号),必须与指针位宽一致
  • xwreg_t : 寄存器(无符号),必须与指针位宽一致
  • xwsreg_t : 寄存器(有符号),必须与指针位宽一致
  • xwer_t : 错误码(有符号),必须与指针位宽一致
  • xwsq_t : 序列值/位置/偏移(无符号),必须与指针位宽一致
  • xwssq_t : 序列值/位置/偏移(有符号),必须与指针位宽一致
  • xwsid_t : ID(有符号),必须与指针位宽一致
  • xwid_t : ID(无符号),必须与指针位宽一致
  • typedef void (* xwisr_f)(void) : 中断函数指针
  • xwirq_t : 中断号(有符号),负的中断号表示系统异常,正的中断号表示外部中断
  • xwpr_t : 优先级(有符号)
  • xwbmp_t : 位图(无符号)
  • xwtk_t : 系统滴答计数(64位无符号整数)
  • xwtm_t : 时间(64位有符号整数,单位:纳秒)
  • xwlfq_t : 无锁队列
  • typedef void (* ctor_f)(void * /*obj*/) : 构造函数指针
  • typedef void (* dtor_f)(void * /*obj*/) : 析构函数指针
  • typedef xws64_t (* xwsc_f)(void * /*arg*/, ...) : 系统调用函数指针

数据类型命名习惯

用户在阅读XWOS源码时,要注意以下几个命名习惯的隐含意义:

  • 对于比较小的数据,XWOS会通过 typedef 定义成一种类型。这种类型就和基本数据类型一样, 在函数间传递参数时是直接传递,不会使用 type_t * 去传递指针,除非是返回数据。
    • 命名通常是 type_t 的形式,函数指针则为 type_f 的形式,对象描述符 则为 xwobj_d
  • 对于大数据结构,XWOS并 不会 使用 typedef 来省略关键字 struct 。 目的是提醒读者这是一个大结构体。将它作为参数传递时是通过传递 指针 来引用数据。
  • 除了 对象描述符 xwobj_d ,XWOS使用 typedef 定义数据类型的依据是看此数据类型是否可以定义原子类型。

原子类型

所有基本数据类型增加前缀 atomic_ 表示此类型的原子类型。例如: _Atomic xwsq_t 等价于 __xwcc_atomic xwsq_t 又等价于 atomic_xwsq_t 。 原子类型的变量可以使用XWOS的 原子操作库 来操作,也可以使用标准C头文件 <stdatomic.h> 中定义的函数来操作。

系统位数

XWOS内核支持32位与64位两种CPU。

时间

XWOS内核使用64位有符号整数 xwtm_t 表示时间,单位为纳秒。并提供一系列操作函数。 详细参考头文件 xwos/osal/time.h

对象

xwos_object 是XWOS所有对象的父类。

对象描述符

对象描述符 是XWOS为了解决对象野指针问题而引入的机制。

调度器

调度器 用于管理CPU资源。在多核系统中,XWOS会为每个CPU创建独立的调度器。

滴答定时器

滴答定时器是操作系统内核的一个重要组件。它为调度器产生固定频率中断,使得操作系统调度的代码可以周期性运行。 同时,滴答定时器也为操作系统的定时功能提供单位时间间隔参考。

线程

调度器内的基本调度单位为 线程 。线程是与调度器绑定的。

软件定时器

基于调度器的滴答定时器实现的 软件定时器 也是与调度器绑定的。

XWOS的锁机制有:

  • 互斥锁 :防止两个 线程 竞争内存数据的锁,不可用于其他上下文,例如 中断
  • 自旋锁 :防止任意上下文竞争内存数据的锁。
  • 顺序锁 :自旋锁的改良版本,可分为读锁和写锁,读锁可共享,写锁独占。

同步机制

XWOS的 基本同步机制

通讯机制

基于 基本同步机制 ,XWOS的中间件XWMD提供了线程间的通讯机制: