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

标签 linux-kernel kernel cpu multitasking

假设在一个双进程环境中,一个进程被内核调度执行,它需要一些在 RAM 中不可用的数据。所以cpu会向内核指示某些东西不可用,进程将被挂起。然后在内核加载第二个进程以通过 CPU 执行并开始调查辅助内存位置(例如虚拟内存)中的数据并获取它之后,通过与当前不活动的内存数据的交换将其放回主内存,并且将进程放回就绪队列以执行。

我们知道计算机系统中的一切都是由 CPU 操纵的,如果 CPU 忙于连续执行进程代码,那么谁在执行内核代码来执行内核完成的任务?
如果我能够解释这个场景,请告诉我。

最佳答案

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

  • 在用户模式下运行进程。
  • 代表内核模式下的进程运行以执行预授权指令或访问硬件(例如,当发出系统调用读/写时)。
  • 响应硬件中断运行。即在中断上下文中运行。 (特别与任何进程无关)并且在内核模式下是的。
  • 运行一些内核线程来服务像软中断这样的延迟工作。 (小任务/Softirq)
  • 如果没有要执行的内容,则运行 CPU 空闲线程。

  • 如果您特别询问日程安排,那么
  • 假设一个进程正在运行,现在它发出了一个读取调用以从硬盘中检索数据,例如,然后进程从 cpu 中删除并且内核调用 schedule() 函数。所以在这里,第一个进程发出读取系统调用,这导致从用户模式切换到内核模式。代表进程运行的内核为硬盘读操作做准备,然后调用schedule()函数
  • 假设出现了一个硬件中断,那么当前正在运行的进程被移除,并且该中断的中断服务处理程序开始在内核模式下执行(显然)。

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

    现在清楚了吗?

    沙什

    关于linux-kernel - 如果 cpu 正在运行进程,谁在运行内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8667501/

    相关文章:

    c - Linux内核中真正的Grand GRAND Ancestor进程是什么?

    linux - 通过直接读取内核内存撕掉隐藏的内核模块?

    linux - copy_to_user 在链表 linux 内核模块中不起作用

    operating-system - 什么是 "Logical CPU Core"

    linux - request_irq 和 request_threaded_irq 有什么区别?

    linux-kernel - Linux 时钟架构

    android - 内核如何知道 USB 设备何时自行进入低功耗模式(不是由主机启动)?

    ubuntu - 为 Ubuntu 安装 RT Linux 补丁

    mpi - GPU可以在CPU的多个核心之间共享吗?

    java - jvm如何处理多个处于可运行状态的线程