社区
汇编语言
帖子详情
挑战:如何做到精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统???
gencheng
2008-03-10 08:37:53
由于现在在做的是实时通讯,要求精确的延时,汇编语言能不能做到:精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统???
也就是说在等待时期内不占用cpu资源.我现在用的是Delphi,它的sheep()函数经测试精度太差,比如sheep(1)应该是等待1毫秒,在这1毫秒内让出cpu使用权.但实际上等待了n个毫秒,很不精确.不知道汇编语言能不能做到??
...全文
241
13
打赏
收藏
挑战:如何做到精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统???
由于现在在做的是实时通讯,要求精确的延时,汇编语言能不能做到:精确等待n个CPU时钟,并且在等待时期将控制权交给操作系统??? 也就是说在等待时期内不占用cpu资源.我现在用的是Delphi,它的sheep()函数经测试精度太差,比如sheep(1)应该是等待1毫秒,在这1毫秒内让出cpu使用权.但实际上等待了n个毫秒,很不精确.不知道汇编语言能不能做到??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zmwgreenrain
2008-03-14
打赏
举报
回复
使用timer函数
cnzdgs
2008-03-12
打赏
举报
回复
如果你是要精确一些的定时可以用CreateWaitableTimer和SetWaitableTimer,每秒50次还是没问题的,不过这个定时器跟Sleep的效果是不同的,比Sleep准得多,但离精确到n个CPU周期可差得远了。
再罗嗦一句,这问题跟汇编语言没什么关系。
gencheng
2008-03-12
打赏
举报
回复
不是我要求苛刻,而是用户要求在Windows系统上实现单位时间内的数据采集率要求有一定的指标.比如说每秒50组数据等等.所以Sleep就达不到要求了.而如果不Sleep,让cpu一直无限循环的采集数据,那么cpu占用率将会一直保持在97%以上,用不了多久也会死掉,那样更玩完.
rularys
2008-03-11
打赏
举报
回复
在一个实时系统上也许可以实现;在Windows上可不行,楼主要求很苛刻
大熊猫侯佩
2008-03-11
打赏
举报
回复
windows非实时OS,你可以看一下 windows 内核揭秘 4edit 为什么不可以。
alan001
2008-03-11
打赏
举报
回复
一块板+时钟引线+定时器芯片/处理器
BMCRNET
2008-03-11
打赏
举报
回复
MARK
ckc
2008-03-11
打赏
举报
回复
晕到死不是实时操作系统,无法实现你的要求
不知道你的具体应用是什么,要么降低应用对实时的要求,要么使用硬件解决这个问题
archim
2008-03-11
打赏
举报
回复
阅读CPU手册,计算每条指令的时钟数,然后自己设计一个循环来等待
gencheng
2008-03-11
打赏
举报
回复
楼上的还真够取巧.因为Delphi的Sleep()也是调用win32API的 Sleep.所以效果应该一样.
另外Delphi内嵌的BASM不支持invoke,所以上述方法事实上在Delphi中也行不通.
cnzdgs
2008-03-11
打赏
举报
回复
要与Sleep(1)效果相同?那就用汇编调Sleep函数不就行了。
invoke Sleep, 1
gencheng
2008-03-11
打赏
举报
回复
如何用汇编做出效果和sleep(1)函数相同的东西?难道汇编做不到???
因为主要是用在串口数据采集上,所以有此要求!
cnzdgs
2008-03-10
打赏
举报
回复
做不到,也不可能做到,因为切换一次任务所需要的时间就是微秒级的。如果等待时间不把控制权交出,在一定程度上还有机会做到。
执行Sleep函数不是定时用的,而是放弃线程对CPU的控制权,等到线程轮回一周后才能再次获得控制权,此时如果还未达到Sleep指定的时间,则自动再次放弃控制权,如此往复。线程每次获得控制权是10毫秒(时间片),达到10毫秒后系统会自动切换到其它线程,未达到时可以执行Sleep函数主动放弃。
操作系统
CPU
调度
概述多道程序
操作系统
的基础。通过在进程之间切换
CPU
,
操作系统
可以提高计算机的吞吐率。 对于单处理器系统,每次只允许一个进程运行:任何其他进程必须
等待
,直到
CPU
空闲能被调度为止。
CPU
按一定的调度算法从就绪队列中选择一个进程,把
CPU
的使用权
交给
被选中的进程,如果没有就绪进程,系统会安排一个系统空闲进程或系统空闲进程。调度触发事件: 创建、唤醒、退出等进程控制操作 进程
等待
I/O,I/O中断
操作系统
是如何运行的?
内核在启动时设置好与
时钟
中断相关的处理程序。通过将定时器中断(IRQ0)与处理函数()关联。这相当于告诉内核,当硬件定时器发出中断信号时,应该跳转到哪个函数进行处理。每次硬件定时器触发时,
CPU
会进入中断处理程序。中断向量表将
控制权
传递给入口,
CPU
会保存现场,允许处理函数执行。此时的中断处理并不直接切换到其他任务,而是先通过汇编指令跳转到 C 语言的do_timer函数。/* 更新全局
时钟
节拍 */total++;// jiffies++,记录自开机以来的中断总次数。
每次
时钟
中断(Timer Interrupt)用来干嘛?为什么要一直中断?
如果没有它,系统将会“停滞”在某个任务中,这样,每 10ms
操作系统
都会。每次
时钟
中断,OS 会检查。,如果是,就让进程继续运行。这些新技术比传统的 PIT。每次触发
时钟
中断,OS。,可以减少
CPU
开销。
时钟
中断是周期性发生的,在
操作系统
(OS)中,每次
时钟
中断(通常每。
操作系统
需要维护一个。
CPU
调度
CPU
调度是多道程序
操作系统
的基础。通过在进程之间切换
CPU
,
操作系统
可以提高计算机的吞吐率。 进程调度—线程调度 基础 当一个进程必须
等待
时,
操作系统
会从该进程拿走
CPU
的使用权,而将
CPU
交给
其他进程。
CPU
的成功调度依赖于进程的如下属性:进程执行由
CPU
执行和I/O
等待
周期组成。进程在这两个状态之间切换。
CPU
burst—I/O bust I/O约束程序通常具有很多短C
操作系统
选择题题库
操作系统
选择题题库 1.以下有关
操作系统
的叙述中,哪一个是不正确的? (D) A.
操作系统
管理系统中的各种资源 B.
操作系统
为用户提供的良好的界面 C.
操作系统
就是资源的管理者和仲裁者 D.
操作系统
是计算机系统中的一个应 用软件 2.
操作系统
所占用的系统资源和所需的处理器时间称为 (D) A.资源利用率 B.系统性能 C.系统吞吐率 D.系统开销 3.操作
汇编语言
21,499
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章