弱弱的问,一个while(1){}的程序在user space中运行,是怎么被系统中断并切换到别的process的?

gkernel 2006-10-31 07:22:40
弱弱的问,一个while(1){}的程序在user space中运行,是怎么被系统中断并切换到别的process的?

谢谢~
...全文
625 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
george3038 2007-03-18
  • 打赏
  • 举报
回复
任务都是都是while { 1} 死循环。
HaoyuTan 2007-03-17
  • 打赏
  • 举报
回复
cpu可以被外部的设备中断,比如产生时钟中断的芯片,cpu被中断时自动跳转到中断处理过程进行处理,而中断处理过程一般由操作系统在系统启动时设置
ToIP 2007-03-16
  • 打赏
  • 举报
回复
执行到while(1);之后这个用户态进程将永远处于ready状态,只要获得CPU时间就可以运行。但是无论如何,在每个时间片用完之后进程都会陷入内核,这是通过时钟中断来实现的。内核中的调度模块将根绝情况决定下面的时间片让哪个进程来运行。至于上下文如何切换,我也不很懂,比如在x86上,有全局描述符表,中断描述符表,局部描述符表,这些表就构成了硬件的上下文,还有一些软件上的上下文,那就是linux的进程控制块啊之类的,不甚了解,你要感兴趣自己慢慢学吧!
joyself 2007-03-11
  • 打赏
  • 举报
回复
1) 时间片到了
2) 被抢占

参考 ch4 Process Scheduling of the book "Linux kernel Development, 2nd"
仰望星空WU 2007-03-09
  • 打赏
  • 举报
回复
多任务的切换了:1)时间片到了;2)软件或硬件中断
hnhbdss 2007-03-09
  • 打赏
  • 举报
回复
时钟中断的到来会进入当前进程的内核态,返回时切换到别的进程
manespz 2007-03-03
  • 打赏
  • 举报
回复
很简单,如果你正在while(1); 那么如果你安装了一个轮训信号,就会中断while(1)。然后中断完成之后又继续while1.比如安装了一个时钟信号
redex 2007-03-02
  • 打赏
  • 举报
回复
mark.
prozilla 2007-02-18
  • 打赏
  • 举报
回复
如何切换,取决于调度算法。公交线路有公交调度,UNIX 系统有进程调度器
tkit 2006-11-06
  • 打赏
  • 举报
回复
关键在于,一个用户程序在运行的时候,系统中断是允许的,在这种情况下,即使用户程序没有主动通过系统调用切换到内核,周期性的时钟中断和随机的设备中断都会使指令流从用户态切换到内核态,而一旦进入内核态,当前进程就有可能被切换。对于非抢占式内核,通常时间片用完就会被切换,对于抢占式内核,切换的几率由于高优先级事件会更高。
ghyd 2006-11-06
  • 打赏
  • 举报
回复
楼主似乎对多任务得理解不够. 在你的用户任务里,即使你写的是个看似"不间断"的任务,但实际上,系统的任务调度可以打断你的这个任务的执行,转而执行其他具有更高优先级的任务,或者响应硬件中断. 最后,再返回来,继续执行你的任务.
zengwujun 2006-11-02
  • 打赏
  • 举报
回复
看看这个吧, 虽然有点长, 挑你关心的看
http://www.oreilly.com.cn/samplechap/understandingLinuxKernel/under_linux_kern_10.pdf

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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