打印

操作系统的分时处理的理解

[复制链接]
1333|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ee168|  楼主 | 2019-9-29 10:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ee168 于 2019-9-29 10:23 编辑

想使用操作系统,比如 uCOS,FreeOS,VC的多线程之类,有些概念不是很了解

线程挂起和唤醒看了一个网上一个比如
张三等10人搬砖,其中张三就是一个线程,其中张三想休息了,如是就线程挂起,休息完了,再让他搬砖,线程唤醒。

我现在有另外一个问题:
每个线程是不是处理时间都是固定的,如果固定,有些时线程时间上很多是等待,比如利用While语句查询某个状态,没有到激活条件就马上出来去执行其它线程,而不是在固定时间内不停查询状态,有没有这样的处理机制呢?

使用特权

评论回复

相关帖子

沙发
18990194628| | 2019-9-29 10:23 | 只看该作者
有的,最高优先级的任务在时间片结束后会优先执行,这个任务切换时在系统timer中断中触发的,你线程就算一直在while里面也会被挂起

使用特权

评论回复
板凳
ee168|  楼主 | 2019-9-29 11:05 | 只看该作者
谢谢楼上的回答,但是不知道具体如何操作,那种操作系统都可以啊

使用特权

评论回复
地板
R2D2| | 2019-9-29 11:09 | 只看该作者
RTOS是实时系统,ucos、freertos都是。

你用VC是写Windows应用程序,这个系统是分时的。

使用特权

评论回复
5
ee168|  楼主 | 2019-9-29 11:40 | 只看该作者
谢谢楼上的回答,

可不可以这么理解uCOS、FreeRTOS,可以通过响应的指令完成从线程中退出

而VC没有这方面的处理

使用特权

评论回复
6
R2D2| | 2019-9-29 12:13 | 只看该作者
以ucosii为例,有两个任务调度函数,一个是OSSched(),由systick驱动,负责OSTimeDelay()的任务调度。。。。。通俗的讲,如果你只用OSTimeDelay()的话,那么ucosii也是个分时操作系统,每个时间片(systick中断一次)调度任务一次。

另一个是OSIntExit();写在中断处理函数的最后,进行一次任务调度。假设有个task pendsem挂起在某个信号量上面,而在中断中postsem发出了这个信号量,中断退出后后立刻执行这个就绪的任务,不受时间片的影响,这就是实时。

使用特权

评论回复
7
zyj9490| | 2019-9-29 12:15 | 只看该作者
ee168 发表于 2019-9-29 11:40
谢谢楼上的回答,

可不可以这么理解uCOS、FreeRTOS,可以通过响应的指令完成从线程中退出

延时挂起的线程,用一种定时中断来检查挂起表,就绪表的线程的状态转换,且就绪表的优先级与运行态的线程的优先级比较,如前者高于后者,则进行线程切换,反之,维持原线程运行。

使用特权

评论回复
8
ee168|  楼主 | 2019-9-29 13:13 | 只看该作者
谢谢楼上二位高人,我现在似懂非懂,准备建立一个例程来实际操作一遍

使用特权

评论回复
评论
18990194628 2019-10-9 18:30 回复TA
@R2D2 :大哥,我就是让他可以测试一下,能不能没有任何操作的情况下被高优先级打断,你上升到了产品阶段了,难道while(1)里面不任何操作的任务不能被打断进行高优先级任务调度? 
18990194628 2019-9-29 15:51 回复TA
你就写个while(1)然后循环体内不做操作,死循环,然后另一个高优先级任务打印输出 看有没有打印就知道能不能进行硬实时调度 
9
zchong| | 2019-9-30 16:08 | 只看该作者
别用while查询,用一个信号量即可

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

114

主题

200

帖子

2

粉丝