首页
社区
课程
招聘
[旧帖] [求助]设想一个功能,如何实现 0.00雪花
发表于: 2010-8-22 15:53 1551

[旧帖] [求助]设想一个功能,如何实现 0.00雪花

2010-8-22 15:53
1551
我想编写一个线程。
该线程大概这样:
           mov xxx
           add xxx
           mov xxx
           cli               ;此处开始禁止中断,即我以后的指令流大概60条指令,一定要连续执行,过程不允许中断。
       mov xxx
           xor xxx
           and xxx
           ...
           ;大概60条指令以后
       mov xxx
           sti             ;此处开始,允许中断,允许时钟中断,允许操作系统把此线程从cpu上面切换下来,把cpu分配给其他线程.

其上一段线程的原则就是,cli-sti中间的大约60条指令不允许中断的,即使在此期间有中断,也移后到sti以后,我允许中断了,再执行。
60条指令,不到1毫微妙的时间,我想外部中断等我执行完60条再中断,应该可以吧。
现在请问,我的cli,sti可以在ring3实现吗?
如果此段代码不能达到预计效果,那么该如何实现“60条关键指令”不中断连续运行呢?如果60条执行了30条被windows调度,暂停,去执行别的线程
那么完了,肯定要出错了。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己百度一下。
[c#] 多线程下,如何保证一个线程的一组操作不被中断
一旦执行了进入了这段代码区,就保证让这段代码全部执行
中间不会被打断,执行完这段代码后,其他线程可以执行。
==========
线程保持不中断的理由,只有2个
1、要求严格时间的,这种应用在应用层基本不可能出现。
2、要求对某个共享资源进行保护。

对于2来说,用lock方式保护所有线程可能访问的共享资源就可以了!在应用层基本上不可能存在要求线程不被抢先的需求!!!!!
==============
有人能详细解释一下吗。
我要求一段代码执行不能被中断,这是必须的,就没有办法了吗?
看来我要进入驱动级编程保证代码不被中断吗?
2010-8-23 10:26
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
原因是这样的,
该线程独占了一个资源,它必须执行一段代码后,释放该资源,别的线程才能获得该资源,执行下去。否则,如果该线程占有一个资源后,没有执行60条就被中断了,那其他线程永远处于等待该资源被释放的状态,也就是说,一旦中断该线程,所有其他线程都在空转等待之中,这是不行的。
如果该线程执行60条以后再被windows调度系统挂起,那没关系,该线程已经把资源释放了,其他线程可以获得该资源继续执行,而不必空转等待。
所以说,执行60条以后再中断是必须的,千万不要执行30条就中断,那整个系统被挂起。
怎么办?
2010-8-23 10:41
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
标题: 多线程,如何保证一段代码不被打扰的执行完?

--------------------------------------------------------------------------------

要写一个多线程的函数,其中在主线程中,有一段代码希望连续执行完,中间不会被其他线程中断,类似于Critical Section。

请教各位,linux中有类似的函数吗?
=================================
引用:
作者: luckyrex
其实这个“临界区”是我从uCOS中借用的词,可能不准确。我想表达的意思就是在这个区域内,代码的执行不会被打断。

孤陋寡闻了,不会被打断我们一般称之为"原子操作"

引用:
如果只能用开关中断的话,请教一下如何实现?谢谢  

开关中断不是一个好办法,不过没有想到更好的办法.
如果实在要用,只能用汇编指令了.不同的cpu有不同的开关中断的指令,x86 为cli/sti
============================
找到linux论坛去了,最后答案也是cli/sti,可是酉时特权指令。
看来和我遇到同样问题的朋友不少,“执行一段代码不被打断”,这么简单的要求都不能实现吗?
操作系统干什么吃的。要你不要用时钟中断粗暴的打断我的线程的运行,等到执行60条以后再打断,
难道不能实现ok吗?怎么办?
2010-8-23 11:38
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
自己设想了,
看了callgate,调用门相关文章,
决定自己设计一个调用门,
从ring3  call调用门。
call调用门进入ring0以后 ,在ring0层,cli......  ===sti,然后调用门返回ring03,不知道可行否?
2010-8-23 15:32
0
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
6
cli 与 sti在多核机器上,也被描述说,是非安全的独占。
2010-8-23 16:56
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
哦,cli,sti在多核上不能安全独占?
能讲下原理么?
2010-8-23 19:25
0
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这类应用建议还是考虑ARM之类的片子上面裸奔。
可控性强一点。
2010-8-23 20:26
0
游客
登录 | 注册 方可回帖
返回
//