跳到主要内容

USB 异步设计思路

异步模型

基于Ring的无锁设计,每个Ring元素TRB都是一个异步任务,保存异步状态,future通过查询ring来获取异步结果。

未使用特定Executor,且不包含任务队列,因此可以支持任意Executor

TRB已预分配,且互不干涉,内部可以无锁访问。

对于同步系统,如ArceOS,在调用async接口时可使用spin_on原地轮询poll,等效于现有同步驱动。若支持进程yeild,可在poll遇到Pending时记录进程ID,并yeild,在中断回调中恢复相应进程。

设计图如下:

流程图