Tencent Tiny OS RTOS

笔者在暑假参加了腾讯犀牛鸟开源人才培养计划,做的其中一个RTOS项目,是给Tencent Tiny OS 添加内核态和用户态 以及 添加用户态的TLIB库 ,可以使用内核API(Tencent LIB)

2 个赞

写了之后的感受 :

  • 项目的需求目的是比较好的 , 想要既要和内核API 保持一致 内核开发人员无感替换 也想要安全
  • 不至于跑飞了影响内核的代码和数据

BUT

  • 和内核API保持一致,就需要将所有的内核数据结构交给用户管理, 所有的PCB 所有的信号量等等
  • 一旦暴露了真实内存给开发人员,就已经不能做到安全了
    • 用户可以在用户态改一下PCB , 来影响整个内核的调度
    • MPU单元不像MMU那么完全绝对防护,不同用户之间也可以访问相互的数据结构
    • 最容易犯错的还是stack_overflow 带来的问题 由stack_overflow 很有可能会导致以上一系列的问题, 因为内核数据都在用户态, 我们并不知道stack_overflow之后的那段数据是属于哪个数据结构 或者又是另一个线程的栈
    • 我曾经设想过,使用MPU来控制栈溢出,就是一个栈下面接一段空属性的一小段,用户不能访问,一旦栈溢出就触发Mem_Handler异常,但是MPU可以控制的段数量[max : 16] 就限制了线程开辟的数量
    • 也其实可以在软件上解决问题,在PCB中添加一个栈阈值,每次CPU重新捡起线程的时候去检测阈值是否超越,如果是就直接杀掉进程 , 但是这个应该是大部分RTOS会做这个检验的 (TOS好像没有 = - =)
  • 综上,要解决安全问题,同时还要让TLIB完全和内核API映射 ,应该是鱼与熊掌的关系了(

TOS本身

  • TOS 好多文档和代码都存在些许问题 , 我是写TLIB的过程中一直在补TOS的文档
  • CPU临界区用的比较乱,在任务动态创建这里的临界区我提了一个PR 但是预计可能其他地方也有类似的
  • 在开发的过程中MMHEAP动态内存分配模块中的FREE函数应该是有BUG的,我在使用的过程中遇到了一些不可描述的内存问题 , 现在还没查出来,主要是由于内存管理这块特别杂,所以后面用静态全局变量 ,就避开了这块错误。

然后对于项目本身

  • 项目有点类似开源之夏,对高校学生十分友好,推荐报名!!!
  • 【既可以积累项目经验,又可以给开源社区提PR 结业还可以领取结业奖金,推荐指数:十分 】
  • 申请项目流程
    • 百度搜索腾讯犀牛鸟开源人才培养社区
    • 注册登录,可以查看腾讯推出的各个项目
    • 开始时间是每年6月初
    • 开源实战开始时间是7月初
    • 实战结束是9月底
    • 其中审核是9月初
    • 详细了解的话还是要看官网
  • 官网 : 腾讯开源 | Tencent Open Source

最后是技术分享

  • **文档和全部代码,用户手册,代码详解,都在我的github里 **
  • 等项目结题9月底完结后 会发链接 供给下一年想要参加的同学参考 以及想要了解TOS的同学参考

Jer6y/tos_tlib: TOS_TLIB (github.com) 文档代码都在这里了 () 最终项目结果还可, 有1W 的税前奖金,腾讯开源贡献者证书和优秀学生证书

错误的,之前说保持API一致但是又没有办法完全做内核用户隔离的想法是冲突的, 是我的思想固化了, 可以在用户层维护一块数据区域用来存内核一些结构体比如PCB的备份, 给用户一个假的感觉,每次返回用户态的时候再做check 如果不同步 说明用户态有人无意,蓄意改了这块数据结构, 就直接终结进程