首页 文章

如果cpu正在运行进程,谁在运行内核?

提问于
浏览
2

假设在一个双进程环境中,一个进程被安排由内核执行,并且它需要一些在RAM中不可用的数据 . 所以cpu会指示内核没有可用的东西,并且进程将被暂停 . 然后在内核加载第二个进程以通过CPU执行并开始调查辅助内存位置(比如虚拟内存)中的数据并获取它后,通过交换到当前处于非活动状态的内存数据将其放回主内存,并且将进程放回就绪队列中以便执行 .

我们知道计算机系统中的所有内容都只能被CPU操纵,如果CPU忙着连续执行进程代码,那么谁正在执行内核代码来执行内核完成的任务?如果我能够解释这个场景,请告诉我 .

3 回答

  • 2

    在任何时间点,CPU(/ s)都将是

    • 在用户模式下运行进程 .

    • 代表内核模式下的进程运行以执行带有优先权的指令或访问硬件(例如,在发出系统调用读/写时) .

    • 以repsonse运行到硬件中断 . 即在中断环境中运行 . (特别是与任何进程无关),在内核模式下是 .

    • 运行一些内核线程来提供像soft irq这样的延迟工作 . (Tasklet / Softirq)

    • 如果没有要执行的话,则运行CPU空闲线程 .

    如果你特别询问安排,那么

    • 假设进程正在运行,现在它已发出读取调用以从硬盘检索数据,例如,然后从cpu中删除进程,内核调用schedule()函数 . 所以这里,第一个进程问题是读取系统调用,这导致从用户模式切换到内核模式 . 代表进程运行的内核准备进行硬盘读取操作,然后调用schedule()函数

    • 假设硬件中断已经到来,那么当前正在运行的进程被删除,并且该中断的中断服务处理程序开始在内核模式下执行(显然) .

    基本上,内核在用户进程之间运行!!

    现在清楚了?

    词shash

  • 4

    内核可以作为硬件中断的结果运行,也可以由进程调用来执行某些操作 . 在这两种情况下,当前执行的代码都会停止运行,直到内核完成其工作 .

    它类似于函数调用:当函数A调用函数B时,函数A必须等到函数B完成它所做的事情,并将控制返回到函数A.你不需要多个CPU或任何类型的魔法完成这个 .

  • 3

    CPU不会连续执行进程代码 . CPU被中断以执行各种操作 . 中断可能由于各种原因而发生:资源变得可用,先前的操作完成,或者只是计时器关闭 .

    我推荐这一系列视频以获取更深入的信息:http://academicearth.org/courses/operating-systems-and-system-programming

相关问题