操作系统怎样介入到我的程序的

时钟中断即使你写个死循环,也不会一直占cpu,每次中断都会强行打断执行
■网友
在Windows操作系统下,你的程序会在具有独立地址空间的进程中运行,每一个进程都至少有一个线程,你的代码就是在这个线程里执行的。至于切换,这是操作系统的功能,就是一般意义上的线程切换,操作系统会根据线程的优先级为每个线程分配时间片,切换到其它线程时会进行上下文切换,一些重要的数据结构,包括内存信息以及相关寄存器的值会被保存下来,当线程切换到你的程序时,这些信息会被重新恢复到相应位置上。对于你来说,这一切都是透明的,你其实不需要关注太多。
■网友
按照题主说的场景,结合现在主流CPU的水准,还不到分析内核进程调度的程度。因为“程序一直在控制CPU,操作系统没有CPU时间”,这个其实是不准确的。现在的大部分普通PC的CPU至少都是双核,一个死循环进程最多只会占满其中一个核心,并不能完全独占整个CPU。其余的核心还空闲着,操作系统以及其它程序还可以在那些核心上愉快的运行。所以即使不存在进程调度切换什么的,死循环程序在运行的时候,你仍然能够玩其他的。如果在一颗不知道多少年前的古董级单核单线程CPU上跑一个死循环进程,或者在双核四线程CPU上同时跑四个死循环进程,那么就真的会卡出翔了。但虽然卡出翔,但是操作系统仍然没有彻底失去响应,鼠标还能移动,只是卡得跟幻灯片一样。这种情况下,操作系统能够介入死循环用户进程的关键是,处理器硬件层面每隔固定的N毫秒会主动发出一次时钟中断,导致当前CPU核心上正在疯狂死循环的进程被暂停,切换成操作系统的相关代码。但是总体上操作系统以及其它软件进程并不会占用太多CPU时间,所以大部分CPU时间都是分配给死循环进程在跑的。
■网友
操作系统是父母,应用程序是子女。其基本关系就是,子女是大爷,“衣来伸手,饭来张口”,父母属于擦屁股的角色。父母是否将所有的资源给子女,取决于是独生子女还是有很多兄弟姐妹。当然,父母是当家的。也就是分2种情况。单任务与多任务1单任务:独生子女。操作系统将全部CPU资源给应用程序,应用程序执行题中的循环,循环结束后将CPU资源交换给应用程序。如果应用程序的代码是死循环,操作系统是否会忠实的一直执行下去,取决于操作系统。CPU有时钟,会产生中断,如果在这个中断中采取控制,是可以强行结束应用程序的。2多任务:多个子女。将CPU资源分配给多个应用程序,对于单CPU而言,将CPU资源按极其小的时间分片给应用程序,实现多任务。类似于动画的原理,将几张图片连续切换,形成动的效果,但每个时间都只看了一张图片。对于操作系统的作用,应用程序说:要内存,要使用显示器,要CPU运行时间……这些都是由操作系统来实现。应用程序一句话,操作系统忙半天。
■网友
一个线程在创建的时候,内核会为其创建一个内核对象,在该内核对象中有一个成员变量叫做上下文结构,其中存储的是CPU最后运行该线程时CPU寄存器的值,这样当该线程再次被调度运行的时候,CPU就读取上下文结构中的数据,实现继续对该线程执行。大体的调度过程是:CPU每隔20ms左右就会检查一遍所有的线程内核对象,通过其结构中的暂停计数器的值,判断是否可被调度,如果可以被调度,则加载该线程,读取其上下文结构,继续执行该线程未完的代码。如果所有运行的线程都具有相同的优先级,那么线程调度的过程就如上面所示。但是由于windows操作系统是一个抢先式的操作系统,因此任何一个线程都有可能在时间片未到的时候被其他的线程打断。楼主如果觉得自己汇编不错,数据结构不差,c很好的话可以 参考Linux内核源码。
■网友
楼主看看操作系统的进程,线程,调度算法就能知道答案了。


    推荐阅读