前文主要介绍了 SylixOS 中的块设备 CACHE 管理,本章主要介绍磁盘高速传输。在 CAHCE 回写中 SyilxOS 采取了两种方式,即直接回写和多管线并发回写。并发写管线通过多线程并发处理 CACHE 提交的写请求,实现磁盘高速传输。
SylixOS 中通过 LW_DISKCACHE_WP 结构体管理并发写管线,该结构体的具体内容如程序清单 1-1 所示。
程序清单 1-1
- typedef struct { BOOL DISKCWP_bExit;
- /* 是否需要退出 */
- BOOL DISKCWP_bCacheCoherence;
- /* CACHE 一致性标志 */
- BOOL DISKCWP_bParallel;
- /* 并行化读写支持 */
- INT DISKCWP_iPipeline;
- /* 写管线线程数 */
- INT DISKCWP_iMsgCount;
- /* 写消息缓冲个数 */
- PVOID DISKCWP_pvRBurstBuffer;
- /* 管线缓存 */
- PVOID DISKCWP_pvWBurstBuffer;
- /* 管线缓存 */
- LW_OBJECT_HANDLE DISKCWP_hMsgQueue;
- /* 管线刷新队列 */
- LW_OBJECT_HANDLE DISKCWP_hCounter;
- /* 计数信号量 */
- LW_OBJECT_HANDLE DISKCWP_hPart;
- /* 管线缓存管理 */
- LW_OBJECT_HANDLE DISKCWP_hSync;
- /* 排空信号 */
- LW_OBJECT_HANDLE DISKCWP_hDev;
- /* 非并发设备锁 */
- LW_OBJECT_HANDLE DISKCWP_hWThread[LW_CFG_DISKCACHE_MAX_PIPELINE];
- /* 管线写任务表 */
- } LW_DISKCACHE_WP;
- typedef LW_DISKCACHE_WP * PLW_DISKCACHE_WP;
DISKCWP_bExit:为 LW_TRUE 时,写管线线程将会退出;
DISKCWP_bCacheCoherence:为 LW_TRUE 时,管线缓存将使用非缓冲的内存;
DISKCWP_bParallel:并行化读写支持,如果不支持则需要在操作设备前调用设备锁,防止并发操作;
DISKCWP_iPipeline:写管线线程数,为 0 时表示不是用并发写管线;
DISKCWP_iMsgCount: 写消息缓冲个数,最小为 DCATTR_iPipeline, 可以为 DCATTR_iPipeline 的 2 ~ 8 倍;
DISKCWP_hMsgQueue:管线刷新队列,上层通过发送一个消息,发起一个写请求;
DISKCWP_hCounter:计数信号量,用于计数当前缓冲块,发起写请求时申请,完成回写时释放;
DISKCWP_hPart:通过定长内存管理管线缓存;
DISKCWP_hDev:非并发设备锁;
DISKCWP_hWThread:管线写任务表;
DISKCWP_hSync:排空信号,用于回写完成后同步。
来源: http://www.bubuko.com/infodetail-2120752.html