调试及开发工具
为了方便调试和开发,在 RuxOS 功能模块中实现了相关的工具:
日志调试工具 axlog
RuxOS 基于第三方库 log 封装了 axlog,提供了不同的日志等级,方便内核开发者调试。
日志等级从高到低分别为:error、warn、info、debug、trace。使用方法如下:
#![allow(unused)] fn main() { // Examples use axlog::{debug, error, info, trace, warn}; // Initialize the logger. axlog::init(); // Set the maximum log level to `info`. axlog::set_max_level("info"); // The following logs will be printed. error!("error"); warn!("warn"); info!("info"); // The following logs will not be printed. debug!("debug"); trace!("trace"); }
同步工具 axsync
在内核开发中,往往涉及到多任务间的同步,在 axsync 中,基于 spinlock 组件实现了开发工具 axsync,提供 Mutex 数据结构,基于 CAS 指令和 WaitQuquq 实现。
快速用户态锁 ruxfutex
Linux 提供了快速用户态锁 futex,让应用程序能够快速对锁进行检查,而不需要每次都进入内核。借助 futex 的实现,进一步封装为了 pthread_mutex、semaphore 的相关语义。基于 Linux 的 futex,RuxOS 实现了 ruxfutex,用于匹配 futex 相关的系统调用。
ruxfutex 基于 WaitQueue 来实现,根据不同的 FutexKey,将不同的任务阻塞在不同的 bucket 中,其中 FutexKey 包含了某一变量地址、该地址上期望的变量值。支持了 futex_wait、futex_wake 语义。