Hasty Briefsbeta

双语

Memory Safe Context Switching

13 days ago
  • #memory safety
  • #context switching
  • #Fil-C
  • Fil-C通过longjmp/setjmp和ucontext API支持内存安全上下文切换,防止堆栈损坏。
  • setjmp/longjmp用于异常处理,而ucontext API(getcontext、setcontext、makecontext、swapcontext)实现协程/纤程。
  • Fil-C通过将jmp_buf存储为不透明的zjmp_buf、限制直接调用和验证堆栈帧祖先,使setjmp/longjmp安全。
  • ucontext安全性通过使用不透明的zfiber_context对象、严格状态机、线程亲和性以及集成GC与灰色纤程追踪来实现。
  • 该实现确保没有误用会导致悬空堆栈执行;不安全操作会导致panic或编译时错误。
  • GC集成通过灰色纤程列表在标记阶段处理纤程堆栈,以防止动态垃圾回收中的竞态条件。
  • Fil-C的ucontext支持在glibc构建中可用(源版本0.680之后),其中setjmp/longjmp更加成熟。
  • 示例演示了volatile变量和编译器优化如何影响setjmp行为,强调了Fil-C对C语义的遵守。