好的,我们知道单个处理器一次可以执行一条指令,这意味着单个处理器一次可以执行操作系统的指令或用户程序的指令。
那么操作系统和用户程序如何能够在单个处理器上同时运行呢?
当您打开程序时,CPU 是否分配给用户程序,当您关闭用户程序时,CPU 是否分配回操作系统?
答案1
时间分片。CPU 每隔几毫秒就会在任务之间切换一次,因此在观察者看来,它好像同时在做两件或多件事情。此外,操作系统对如何授予线程执行时间有一定的控制权,因此它可以堆叠卡片,但线程调度超出了我愿意在这个答案中讨论的范围。
CPU 将进程作为一个或多个线程指令,并且每个线程代表它正在执行的指令的自己的“上下文”(登记价值观等)。
CPU 将多个线程的指令流水线化为队列,并按顺序执行。当来自不同线程的指令到达队列前端时,CPU 执行“上下文切换”暂停一个线程并执行另一个线程的指令。这是必要的,因为这样 CPU 才能同时运行多个线程,并且能够处理中断在 CPU 执行其他任务时发生的。
您特别提到了操作系统和用户程序。在程序运行时,操作系统用户界面对用户保持响应的程度与时间分片有关,但同样重要的是程序使用操作系统函数执行任务时会发生什么。正如@Techie007 指出的那样,当操作系统服务完成一半或全部工作时,操作系统和用户程序之间的区别就会减弱。当程序链接到系统库以实现功能时,这种模糊甚至会更加严重。当程序使用操作系统调用来执行某个函数时,该函数的实际机器代码将作为线程指令流的一部分加载到 RAM 中,因此用户程序线程实际上是在执行操作系统的代码,而不是相反!