为什么中断处理程序不能睡眠(电脑睡眠状态程序是否运行)

2024-05-05 数科 86阅读 投稿:梦太乱

1.为什么中断处理程序不能睡眠

1. 中断处理的时候,不应该发生进程切换,因为在中断context中,唯一能打断当前中断handler的只有更高优先级的中断,它不会被进程打断(这点对 于softirq,tasklet也一样,因此这些bottom half也不能休眠),如果在中断context中休眠,则没有办法唤醒它,因为所有的 wake_up_xxx都是针对某个进程而言的,而在中断context中,没有进程的概念,没有一个task_struct(这点对于softirq和 tasklet一样),因此真的休眠了,比如调用了会导致block的例程,内核几乎肯定会死.

2.schedule()在切换进程时,保存当前的进程上下文(CPU寄存器的值、进程的状态以及堆栈中的内容),以便以后恢复此进程运行。中断发生后,内核会先保存当前被中断的进程上下文(在调用中断处理程序后恢复);

但在中断处理程序里,CPU寄存器的值肯定已经变化了吧(最重要的程序计数器PC、堆栈SP等),如果此时因为睡眠或阻塞操作调用了schedule(),则保存的进程上下文就不是当前的进程context了.所以不可以在中断处理程序中调用schedule()。

3.2.4内核中schedule()函数本身在进来的时候判断是否处于中断上下文:

if(unlikely(in_interrupt()))BUG();因此,强行调用schedule()的结果就是内核BUG,但我看2.6.18的内核schedule()的实现却没有这句,改掉了.

2.电脑睡眠状态程序是否运行

计算机进入睡眠状态内部程序不会继续运行。

计算机睡眠(Sleep)是计算机由工作状态转为等待状态的一种新的节能模式。其开启方式是在电脑系统的开始菜单中点击电源按钮右侧的下拉箭头选择“睡眠”按钮。开启睡眠状态时,系统的所有工作都会保存在硬盘下的一个系统文件,同时关闭除了内存外所有设备的供电。

睡眠是待机+休眠的方式,不光机器仅提供维持内存数据不丢失所需要的工作(像待机一样),还把当前状态存入硬盘(像休眠一样)。 如果在睡眠过程中不断电,那么,就不从硬盘读数据了,用内存数据直接恢复机器状态,象从待机中恢复一样。如果断了电,那就从硬盘读入数据,象休眠一样。

3.win7休眠后网络断开怎么办

休眠功能是在电脑进入休眠状态时将数据保存到硬盘中,进入休眠状态后,电脑相当于断电了,所以功耗几乎为零!而在休眠状态时不会影响已经保存的数据,当电脑唤醒时,所有工作依然可以正常恢复。但是在休眠过程中网络处于断开状态,所以此时需联网的程序都会被断开连接了。

1、点击“开始”图标打开“运行”(或者直接快捷键Win+R),输入“regedit”进入“注册表编辑器”窗口;

2、在“注册表编辑器”窗口左侧栏中依次进入HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control /SessionManager/Power目录;

3、在右侧栏,我们找到“AwayModeEnabled”文件,双击将该值改为“1”(16进制);

4、如果没有找到“AwayModeEnabled”文件,可以在空白处单击鼠标右键,选择新建一个“DWORD32位”的值,并命名为“AwayModeEnabled”,双击给该键值,并赋值为“1”(16进制)即可;

P.S 这样当用户的电脑处于休眠状态时网络依旧是畅通的。

声明:沿途百知所有(内容)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们将尽快删除