USB 异步设计思路
异步模型
基于Ring的无锁设计,每个Ring元素TRB都是一个异步任务,保存异步状态,future通过查询ring来获取异步结果。
未使用特定Executor,且不包含任务队列,因此可以支持任意Executor。
TRB已预分配,且互不干涉,内部可以无锁访问。
对于同步系统,如ArceOS,在调用async接口时可使用spin_on原地轮询poll,等效于现有同步驱动。若支持进程yeild,可在poll遇到Pending时记录进程ID,并yeild,在中断回调中恢复相应进程。
设计图如下:
