打印

请教os

[复制链接]
3223|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangqi412|  楼主 | 2007-10-11 18:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
正在学rtos,有些初级问题请教,哪位高手帮下忙,谢谢
os是利用定时器溢出中断作为系统时间,若干个系统时间为一个时间片.
如果是用时间片轮转方式的话,时间片长2ms
一个任务执行一次需要1ms,那么它执行完一次只用了1ms,在一个时间片里是立即切换到下一个任务还是执行两次?
如果是立即切换的话,是不是会将系统时间复位既立即重新计算时间片?这样的话,就不可能利用系统时间来做时钟了.
一个任务一次要3ms,执行1ms时要等待一个信号,这个时候,2ms没有耗完,是立即切换还是把时间片空闲耗完?
用时间片的话,有些程序是不是有潜在的危险,比如软件模拟iic,串口之类,如果刚发生在一个字节传送时候,比如某字节刚发送4个位就被切换了.
还有延时问题:
四个任务,每个任务>10ms,任务1--任务2--任务3--任务4--任务1--
其中任务1有一个延时4ms,具体如何执行呢?这个4ms是系统时间还是任务的时间?如果是系统的时间,把所有任务轮转要8ms,怎么做的呢?如果延时是任务时间,是把任务1应该执行的两个时间片空闲还是删去
如果有四个任务,每个任务>10ms,任务1--任务2--任务3--任务4--任务1--
其中任务1中有一个延时3ms,具体会如何执行呢?

相关帖子

沙发
huangqi412|  楼主 | 2007-10-11 18:57 | 只看该作者

哎,怎么没一个人帮下我啊,

使用特权

评论回复
板凳
computer00| | 2007-10-11 19:12 | 只看该作者

re

一个任务要不就是一直执行,要不就会消亡,不存在执行两次这样的说法.
如果它只执行1ms就释放了CPU,那么CPU就会给其它任务使用.直到它再需要
使用CPU并且CPU可用时,它才会继续使用CPU.

时间片并不是太严格的,多点少点关系不大. 只要能够分配到时间即可.

任务延时,通常是把CPU让出来给别人使用。此外,还要有优先级管理,如果任务延迟时间
到了,它的优先级高的话,就可以打断其它任务.立即运行。如果它的优先级不够高,
那么它的延迟时间就会延长。

对于一些IO操作,为了保持完整性,可以使用临界段,这样即使时间到了,任务也不会
切换. 

这些内容,不同的操作系统处理方式不一样,所以也不能一概而论的。多找些操作系统
方面的书来看看慢慢揣摩吧.

使用特权

评论回复
地板
huangqi412|  楼主 | 2007-10-11 19:58 | 只看该作者

呵呵,还是没太懂,再请教一下

不好意思,我这里没找到这些方面的东西,书也没有,只有本51的书顺带讲了rtx51,一本avr顺带讲了avrx,linux书不讲这些东西
每个任务是一个死循环,我说的执行一次是指执行完一次循环.
如果一次循环不到一个时间片长,是不是有些系统会接着下一次循环,有些是切换?

执行3ms但是要等待信号那个任务是不是会马上切换?就是说会经常出现不完整的时间片,以实时为主要特点,不让时间片浪费.
延时的话这样说来如果是小时间就会非常不正确了.
临界段没看到过

使用特权

评论回复
5
jack.king| | 2007-10-11 20:00 | 只看该作者

这2本书可以看下

1. 邵贝贝译,‘嵌入式实时操作系统uc/OS-2’(第2版),北京航空航天大学出版社,2004.5. 
2. 周立功等,‘ARM嵌入式系统实验教程’,北京航空航天大学出版社,2004.12. 

使用特权

评论回复
6
huangqi412|  楼主 | 2007-10-11 20:58 | 只看该作者

呵呵,都没有啊这些书,哎,

使用特权

评论回复
7
IceAge| | 2007-10-11 21:13 | 只看该作者

这根 os 的设计思想相关

一般来说:
如果一次循环不到一个时间片长,除非任务主动放弃(调用一个出让函数),os 不会立即切换,因为调度核心一般不会干涉任务的具体运作。

一个任务一次要3ms:如果是非抢占 os, 那么任务必须完成后主动出让 cpu. 抢占os, 如果任务不是最高优先级(对于带优先级的抢占os),或没有声称独占(需要 os 支持),那么 os 会立即切换

使用特权

评论回复
8
ketp| | 2007-10-11 21:19 | 只看该作者

一般来说

如果一次循环不到一个时间片长,就算任务调用api(比如延时)主动放弃,剩下的时间也不会给其他用户任务用, 而是被os耗掉了,比如休眠.

使用特权

评论回复
9
computer00| | 2007-10-11 21:34 | 只看该作者

什么一个循环?一个任务就是个死循环,

它何时释放CPU资源跟它现在处于第几次任务没有什么关系,反正它就是一个死循环,一直在哪运行,何时需要释放CPU就释放,而不用管它处于哪。

使用特权

评论回复
10
jack.king| | 2007-10-11 21:58 | 只看该作者

在执行顺序程序时候

在执行顺序程序时候(例如:机器上面的半自动过程)
  是不是只需要建立一个任务就可以了.还是要把所有半自动的动作程序都写成任务啊?
  因为半自动过程里面的动作都要执行相对应的时间都有几秒

使用特权

评论回复
11
平常人| | 2007-10-11 22:21 | 只看该作者

看了几遍大致明白LZ的意思了,这些问题对懂OS的人挺简单

但对不懂OS的人解释还挺难,我试着按照LZ的思路解释一下。

首先假定有这样一个任务task1:
task1()
{
  while (1) {
    execute();
  }
}

LZ:“一个任务执行一次需要1ms...”,估计LZ的一个任务应是上述循环的一次执行,即一次调用execute()。

第一个问题:“一个任务执行一次需要1ms,那么它执行完一次只用了1ms,在一个时间片里是立即切换到下一个任务还是执行两次?”
答:这种情况下,task1应在执行完一次execute()后调用OS的系统函数等待新的触发条件(信号),这时OS把task1放入等待队列、收回CPU时间并重新进行任务调度,把CPU分配给其它任务并重新计算时间片(8楼说的休眠是不可取的),当task1等待的触发条件(信号)满足时,OS会重新把task1放回就序队列。

第二个问题:“一个任务一次要3ms,执行1ms时要等待一个信号,这个时候,2ms没有耗完,是立即切换还是把时间片空闲耗完?”
答:根据第一个问题的原则,OS会收回CPU时间并重新进行任务调度。

第三个问题,关于软件模拟的IIC,建议在OS环境下不要这样做,一定要做的话,要么破坏OS的完整性,临时阻止任务的调度;要么修改OS的核心,在核心的驱动一级实现,而不是在任务一级实现。至于“临时阻止任务的调度”,要看具体的OS是否允许并有相应的系统调用函数。

第四个问题,关于软件延迟的问题,这是套用非OS环境下的概念。在OS环境下通常有一个sleep()的调用,它启动一个闹钟,然后调用sleep()的任务等待闹钟事件,此时如同第一个问题的结果一样,OS可以收回CPU时间并重新进行任务调度了。


不好意思,不要问我有什么书看,我已经20年没看OS方面的书了。

使用特权

评论回复
12
ayb_ice| | 2007-10-12 10:12 | 只看该作者

要花点时间理解

使用特权

评论回复
13
huangqi412|  楼主 | 2007-10-12 14:04 | 只看该作者

谢谢平常人,谢谢所有帮回答问题朋友

不好意思,刚学这些东西,真的很多不懂,和以前用的程序运行方法完全不同,图书馆也找不到相关的书,谁可以推荐一点资料给我,谢谢,
试着理解
7楼:os 不会立即切换,因为调度核心一般不会干涉任务的具体运作。
平常人:任何时候,OS会收回CPU时间并重新进行任务调度。
7f意思是os不会干扰任务,平常人意思是os以实时为目的,会去影响任务的时间片.
好象截然相反,是不是os不同,所采用的策略不错呢?一般单片机上的rtos是哪种呢?
经常复位系统时钟重新计算时间片的话,那我要在上面做一个时钟比如闹钟就必须另选时钟源了,
还有 如果是简单的时间片轮转os,没有优先级,小时间的延时是不是会误差非常大呢?

还请大家多指点一下新手.

使用特权

评论回复
14
IceAge| | 2007-10-12 20:48 | 只看该作者

ketp 与 平常人 说的

都是对的,这是不同的调度策略问题。简单的 os  一般倾向于 ketp 的做法,os 没有复杂的调度策略。估计 51 rtos 也是如此

>3ms 问题,如果是简单的时间片轮转os,没有优先级,就会向平常人所说,OS会收回CPU时间并进行任务调度。

小时间的延时是不是会误差非常大,如果os 允许独占,则误差不大

使用特权

评论回复
15
huangqi412|  楼主 | 2007-10-13 11:10 | 只看该作者

谢谢,

使用特权

评论回复
16
wxj1952| | 2007-10-14 23:28 | 只看该作者

推荐一本书

《RTX51TNY源代码分析与应用》
源代码一共只有不到900字节,这是一个最小、最简单的嵌入式操作系统。而且所有系统函数都是用C51写的,然后用SRC化为汇编语言A51文件。(除了内核和T0中断服务是用汇编语言写的,不过一共没有50条,并且书中都有逐条清晰讲解。)

其中很多精彩思想,大开眼界。看完之后,可以添加一些自己作的函数,或者修改一下成为自己做的RTOS。一下从菜鸟跃迁为高手了。

使用特权

评论回复
17
hotpower| | 2007-10-14 23:31 | 只看该作者

网上有PDF

使用特权

评论回复
18
huangqi412|  楼主 | 2007-10-15 07:40 | 只看该作者

谢谢16楼,网上有下不 ?我找下

使用特权

评论回复
19
wxj1952| | 2007-10-15 12:37 | 只看该作者

网上搜不到的。

   网上只有源代码,4页纸,没有分析讲解。(该书原文有100多页!)10年来还没发现我们有谁写过这样的书。陈明计的一本看完了才理解RTX51的简明而优雅。泛泛讲原理的帖子到处都是,“遍地都是专家。”只是没理解甚至没看过源代码,都没讲对。
其实LZ的问题用RTX51解决是非常容易的。但是如果没看过这本书,只能凭原理/凭猜/凭试验,“估计是这样用的吧”。
     
      Intel就是Intel,看过这本书之后,LZ的所有问题都是RTX51很初级的应用。 
    才知道什么样的人才能到Intel工作。
    
      该书是英文版的,正在翻译。

使用特权

评论回复
20
isbit| | 2007-10-16 13:53 | 只看该作者

ls 你是说陈明计的书值得看吗?谢谢!

使用特权

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

本版积分规则

622

主题

24960

帖子

18

粉丝