★★★可不可以抛弃操纵系统的轮转而独占CPU的资源★★★

jilinxuheng 2003-09-12 06:39:10

要在windows2000下开发一个
实时仿真环境下的系统框架程序

需求里面有这样一条

表面上是多线程的,
即在系统运行时客户端要实时地对客户的输入做出响应

而服务器端希望只保留一个运行流
就是说在一个时钟周期内(通常很短,最多只有10ms左右)
首先优先,独占地访问CPU,进行仿真计算和I/O
也就是说要抛弃操纵系统的轮转制多线程机制
然后在仿真计算结束后
才在这个周期内剩余的时间里
进行另外一个命令线程的处理

感觉上这样做不可能啊?
能够跳过操纵系统的控制直接访问硬件吗?

多谢各位高手指点!
...全文
97 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
other1999 2003-09-17
  • 打赏
  • 举报
回复
me to
liujialiang1977 2003-09-17
  • 打赏
  • 举报
回复
看完收获不小啊!
babylovecon 2003-09-15
  • 打赏
  • 举报
回复
这种想法本身就和OS的发展方向有冲突。鱼和熊掌,你自己斟酌吧。
jilinxuheng 2003-09-15
  • 打赏
  • 举报
回复
看来这个想法是有点问题了。
估计是老板最近对嵌入式系统研究过多的结果,我得喝他谈谈了。
谢谢大家!

不过说说起来,对特定应用来说,这个想法不算坏啊。
只是无法和现有的系统结合。
火焰射手 2003-09-15
  • 打赏
  • 举报
回复
在2000下不太可能,这通常都是嵌入式系统的做法。
llll 2003-09-15
  • 打赏
  • 举报
回复
理论上软件是万能的。hook 内核函数也是可以办到的。但是这么做的问题很多,别的不说光是这个你就要专门写个驱动程序,工作的难度就加大拉。而且你是做应用软件的,过多的涉及一些核心的东西必然会有一些平台相关的问题。我不知道你是搞研究还是做产品,如果是想研究一下window倒是个不错的目标。如果你是做产品我劝你就不要这么搞拉。
AthlonxpX86 2003-09-15
  • 打赏
  • 举报
回复
不要再想了,你的目的处处和操作系统矛盾,所以你要做出这个软件,简单期间最好是在DOS下或者裸机上做
jilinxuheng 2003-09-14
  • 打赏
  • 举报
回复
呵呵,所以才跑到这里来问啊?

只想问问,有没有可能实现?如果答案是no,那么我也好回去说no。
gcai 2003-09-14
  • 打赏
  • 举报
回复
弄个中断触发去做
vinx 2003-09-13
  • 打赏
  • 举报
回复
无聊的想法,一般没有时间片的OS只在嵌入式系统才会看到,
jilinxuheng 2003-09-13
  • 打赏
  • 举报
回复
hook内核调度函数,真的可行吗?有没有类似的实现或代码?

就运行实时性来说,并不是最大的问题。
1。之所以想改变调度策略,主要是想减轻开发者的负担。因为这样调度能够保证在一个周期内完成关键的仿真计算和i/o,省去仿真开发人员的许多编程工作,因为这些人都不是计算机专家。
2。至于用户命令处理相对来说是次要的,这个周期内搞不定,就挪到下个周期的剩余时间去完成。

感觉上,需求就是这么想的,真的有人作个类似的实现吗?

谢谢
llll 2003-09-13
  • 打赏
  • 举报
回复
对于用户输入的线程你只需要设置信号量可以控制拉。每个用户线程只有在属于他的信号量有效是才运行。
至于系统中的线程,就比较麻烦。或许你可以hook 那些内核调度函数(听起来很诱人),搞不好还要写驱动。虽然不是不可能,但是既麻烦又难。
我个人认为,你把用户输入的线程搞定应该就可以拉。你使用时不要再运行其他的window程序,至于windows自己的调度,你就不要管,一般来说实时性应该足够拉。

一家之言,欢迎讨论
jilinxuheng 2003-09-13
  • 打赏
  • 举报
回复
谢谢回复!
我最初看到这个需求,也想的是靠调整优先级来实现。可是关键是
1。如果把计算线程设为实时优先级,那用户输入线程怎样响应?这个需求比较变态的地方就是给用户的感觉要是多线程的,系统要对用户的输入做出实时响应;同时还要求最好在一个仿真周期内,优先独占地执行比较重要的计算线程,因为这样的话,开发者写起仿真程序来就比较简单一些。呵呵,想的美啊!
2。如果一个CPU上同时运行多个这样的系统,那么靠调整优先级是不是也有问题?两个实时优先级的线程之间是不是还会有切换呢?如果有,那么辛苦得到的独占也就无从谈起了。

谢谢继续指导!
babylovecon 2003-09-13
  • 打赏
  • 举报
回复
我看你干脆别要OS了。整个机器就跑一个软件,那样兴许还能容易点吧。
babylovecon 2003-09-13
  • 打赏
  • 举报
回复
要在多线程的OS下编写一个表面上是多现成而实际上却是单线程的程序--------这么做有什么必要和好处?衡量一下你将付出的代价,在衡量一下好处。如果这任务是给我发下来的话----这么低水平的PE,趁还没被他折磨死以前闪人吧。
AthlonxpX86 2003-09-12
  • 打赏
  • 举报
回复
不太可能,任务调度被牢牢的掌握在操作系统手中,除非你能剥夺操作系统任务调度的权利(操作系统本身应该没有放弃调度任务的机制),否则根本不能实现真正意义上的独占CPU,要剥夺操作系统任务调度的权利,就要求你最好是接管所有的中断(中断是引起操作系统调度任务的根源),但同时所有的基本功能将无法使用,除非你能写出所有中断的中断服务程序(等于你自己写了个操作系统了),即便是有其他更好的方法剥夺操作系统任务调度的权利,那也是比较失败的,因为操作系统如果没有任务调度的机制后,很多设备将无法使用,所以要在windows2000下实现真正意义上的CPU独占,几乎不可能,不过你可以把你的程序设置成实时优先级(可能会造成死机)来达到你的目的,

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧