假设在一个双进程环境中,一个进程被安排由内核执行,并且它需要一些在RAM中不可用的数据 . 所以cpu会指示内核没有可用的东西,并且进程将被暂停 . 然后在内核加载第二个进程以通过CPU执行并开始调查辅助内存位置(比如虚拟内存)中的数据并获取它后,通过交换到当前处于非活动状态的内存数据将其放回主内存,并且将进程放回就绪队列中以便执行 .
我们知道计算机系统中的所有内容都只能被CPU操纵,如果CPU忙着连续执行进程代码,那么谁正在执行内核代码来执行内核完成的任务?如果我能够解释这个场景,请告诉我 .
3 回答
在任何时间点,CPU(/ s)都将是
在用户模式下运行进程 .
代表内核模式下的进程运行以执行带有优先权的指令或访问硬件(例如,在发出系统调用读/写时) .
以repsonse运行到硬件中断 . 即在中断环境中运行 . (特别是与任何进程无关),在内核模式下是 .
运行一些内核线程来提供像soft irq这样的延迟工作 . (Tasklet / Softirq)
如果没有要执行的话,则运行CPU空闲线程 .
如果你特别询问安排,那么
假设进程正在运行,现在它已发出读取调用以从硬盘检索数据,例如,然后从cpu中删除进程,内核调用schedule()函数 . 所以这里,第一个进程问题是读取系统调用,这导致从用户模式切换到内核模式 . 代表进程运行的内核准备进行硬盘读取操作,然后调用schedule()函数
假设硬件中断已经到来,那么当前正在运行的进程被删除,并且该中断的中断服务处理程序开始在内核模式下执行(显然) .
基本上,内核在用户进程之间运行!!
现在清楚了?
词shash
内核可以作为硬件中断的结果运行,也可以由进程调用来执行某些操作 . 在这两种情况下,当前执行的代码都会停止运行,直到内核完成其工作 .
它类似于函数调用:当函数A调用函数B时,函数A必须等到函数B完成它所做的事情,并将控制返回到函数A.你不需要多个CPU或任何类型的魔法完成这个 .
CPU不会连续执行进程代码 . CPU被中断以执行各种操作 . 中断可能由于各种原因而发生:资源变得可用,先前的操作完成,或者只是计时器关闭 .
我推荐这一系列视频以获取更深入的信息:http://academicearth.org/courses/operating-systems-and-system-programming