请问,基于时间的流程管理是如何实现的?
cpu如何从内核函数切换到进程?cpu是如何切换回来的?
例如,当时间片耗尽时,cpu如何强制转换回内核函数?在程序中,没有编译开关函数,是中断吗?我不太明白,如果可以的话请回答我
发布于 2020-08-17 00:40:30
通常,在任何类型的中断时,当前正在运行的进程的CPU状态的某些部分被保存(到内存中). --即使是运行严格限制的组装代码,也需要保存一定量的这种保存,而另一部分则可以运行一些更正常的,可能是C代码,可能是设备驱动程序堆栈的一部分。一旦中断被服务,进程的CPU状态的这一部分就会被恢复,中断的进程可以在不知道中断的情况下恢复。
在某些中断期间,操作系统调度程序可以选择恢复与中断的进程不同的进程,如果这样做,则保存中断进程的CPU状态的所有其余部分,而恢复状态的进程则恢复到CPU中,其中大部分是用普通CPU指令完成的,例如写(读)寄存器到(从)内存。
切换进程需要额外的精力来保存和恢复CPU上下文,但对于另一个进程来说,处理器缓存是冷的--因此性能方面最好的选择是恢复中断的进程。然而,调度程序可以选择切换进程(上下文切换),如果高优先级进程的I/O现在已准备好被消耗,或者,如果当前进程在CPU中具有公平的份额,则按时间顺序运行,还有其他同等优先级的进程要运行。
这一基本机制被硬件工程师称为异常处理,它包括软件引起的异常(陷阱/syscalls,除以零),以及访问冲突(页面错误、空指针删除、写入时的复制)和设备中断(包括计时器和设备或I/O就绪信号)。这是一种内置在处理器中的自动机制--它可以对正在运行的进程执行最基本的中断,并将控制传递给操作系统中断服务例程。
这种处理器机制决定哪条指令未完成(即中断),它完成所有先前的指令,取消所有后续指令,然后将指令流的控制转移到中断服务例程,给它一些关于中断的最小状态,其中包括中断的原因和中断进程的程序计数器/指令指针,因为这通常是通过将控制转移到ISR来消除的。在此之后,软件的任务是保存中断进程的任何额外CPU状态,并处理异常,无论是由运行的进程引起的还是外部触发的。处理器还具有一种机制(通常称为从中断返回的指令),通过它可以恢复恢复用户进程所需的最后一段状态,并且可以通过软件来恢复任何进程。
硬件作为中断进程的上下文所保存的内容和软件的责任在处理器之间的分工差别很大。在x86上,硬件保存的上下文比严格的最小值更多,这使得一些新的x86 CPU可以在不知道它们的操作系统上运行。在其他处理器上,硬件的功能更严格,硬件的功能更小,其余的必须由软件来完成。
发布于 2020-08-16 17:32:14
至少有许多处理假等位基因的方法,就像外面有核一样。
最幼稚的学生实现将涉及和外部中断被触发后,一个进程的时间片已经用完,可能是由某种计时器(在PC上传统的“坑”,可编程中断计时器)。此时,内核将被隐式或显式地放入特权模式,保存当前进程的上下文(即寄存器和虚拟内存信息的内容),加载旧进程的上下文,更改为“底层”模式(例如,x86处理器上的环1-3 ),并最终跳转到新进程在执行过程中被中断的位置。
https://stackoverflow.com/questions/63439910
复制相似问题