搜索
bottom↓
回复: 10

在RTOS实现中,使用SVC调用系统函数是不是更安全?

[复制链接]

出0入25汤圆

发表于 2018-7-19 14:11:14 | 显示全部楼层 |阅读模式

对于Cortex-M单片机,用户程序调用RTOS系统函数有两种思路:

假设创建任务的RTOS函数是xxx_task_create()

第一类:FreeRTOS、RT-Thread中采用的方法,和调用普通的用户函数一样,xxx_task_create()调用直接执行任务创建代码
第二类:RTX、zephyr中采用的方法,xxx_task_create()中并没有任务创建代码,xxx_task_create()调用会执行SVC指令,触发SVC中断,在SVC_Handler()中根据参数调用相应的RTOS函数从而创建任务,,这种方法更类似于Windows、Linux等大型OS中系统调用采用的方法

那么第二种方法会比第一种方法更安全吗?

另外,除了上面提到的RTX、zephyr,,还有哪些RTOS采用SVC的方法实现系统调用?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2018-7-19 14:15:22 | 显示全部楼层
本帖最后由 xivisi 于 2018-7-19 14:20 编辑

理论上 用svc 更安全。前提是,需要做足够的安全检查

PS:并且做好安全隔离。比用限制用户线程,不能直接访问系统权限区域,必须通过特定函数(内部调用svc),特定函数又必须做足够的安全检查。也要防止非法的 svc指令

出0入8汤圆

发表于 2018-7-19 14:16:29 | 显示全部楼层
是的,更安全。
但对于小型的项目而言,一般也没必要分用户权限和系统权限,不然的话,所有的操作系统,应该都长一个样了。

出0入25汤圆

 楼主| 发表于 2018-7-19 14:19:42 | 显示全部楼层
security 发表于 2018-7-19 14:16
是的,更安全。
但对于小型的项目而言,一般也没必要分用户权限和系统权限,不然的话,所有的操作系统,应 ...


赞同,小型项目没必要太在意这个,而且用SVC的方法可能更不方便调试

大型项目还是应该用SVC的,,

出0入0汤圆

发表于 2018-7-19 14:29:00 | 显示全部楼层
XIVN1987 发表于 2018-7-19 14:19
赞同,小型项目没必要太在意这个,而且用SVC的方法可能更不方便调试

大型项目还是应该用SVC的,, ...


用svc方法,有助于区分用户代码和os代码,一般os代码调试好以后,你不太需要和这个打交道

调试的时候好像不太方便,调试的时候一不小心一个svc,然后你就不知道跟踪到哪里去了

但是你如果不想去管os内部的逻辑,专心于你自己的代码,何尝不是个好事呢

用svc的os,还有个优点就是更容易做动态加载,正如你说的,这更像是Windows或者linux的做法

出0入0汤圆

发表于 2018-7-19 14:32:04 | 显示全部楼层
本帖最后由 myxiaonia 于 2018-7-19 14:33 编辑

像FreeRTOS、RT-Thread这些rtos,可能为了方便移植,也会放弃svc这种做法,毕竟门槛低一些的mcu并没有这种中断,虽然你也可以用其他中断模拟

而rtx这种就属于专门为某类mcu定制的,它一定会用上一些高级特征来提升性能

出0入25汤圆

 楼主| 发表于 2018-7-19 14:34:27 来自手机 | 显示全部楼层
myxiaonia 发表于 2018-7-19 14:32
像FreeRTOS、RT-Thread这些rtos,可能为了方便移植,也会放弃svc这种做法,毕竟门槛低一些的mcu并没有这种 ...

是的,svc方法对mcu有限制。rtx只支持arm,zephyr只支持32位处理器

出0入0汤圆

发表于 2018-7-20 02:25:06 | 显示全部楼层
本帖最后由 gwnpeter 于 2018-7-20 02:31 编辑

其实用svc会更加安全,不只是用户权限的问题。
即使在小型系统中,如果建立线程的过程中,发生中断,又有一些系统调用,会很容易造成系统崩溃。
因此没有svc模式的系统会增加很多状态检测,保证安全。
没用svc模式方便移植,但是效率还是低一点,所以rtx之类的arm原生专用系统的效率更高

效率问题,可以参考这个链接:
http://forum.armfly.com/forum.php?mod=viewthread&tid=1531

出30入54汤圆

发表于 2018-7-20 09:37:25 | 显示全部楼层
如果是调用安全上来讲,没有内存空间隔离的话,进到SVC里面我觉得也没更加实质性的安全

出0入25汤圆

 楼主| 发表于 2018-7-20 09:44:35 | 显示全部楼层
cloudboy 发表于 2018-7-20 09:37
如果是调用安全上来讲,没有内存空间隔离的话,进到SVC里面我觉得也没更加实质性的安全 ...


嗯,可能要配合使用MPU才能实现安全目的!!

出300入477汤圆

发表于 2018-7-20 11:11:03 来自手机 | 显示全部楼层
cloudboy 发表于 2018-7-20 09:37
如果是调用安全上来讲,没有内存空间隔离的话,进到SVC里面我觉得也没更加实质性的安全 ...

有,用svc调用系统api,就隐含保证了所有的系统api都不会重入,也不会互相打断!这是非常重要的保护!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 14:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表