NT10 内核抢占式多任务处理
NT10 Kernel preemptive multitasking
我正在上一门操作系统课程,其中我们使用 Windows Server 2016 和 ESXi
我们的设置是一台机器 运行 W2K16 提升为 DC,一台 运行 直接在硬件上的 ESXi 和一台客户端机器。在 ESXi 机器上,我们还有两个额外的 W2K16 虚拟化副本,其中一个升级为 DC。
问题是你如何使用你的一台机器证明 NT10 内核使用抢占式多任务而不是协作。任何帮助将不胜感激。
写一个简单的程序:
volatile unsigned i = 0;
int main() {
for(; ; ++i);
return 0;
}
编译它,并启动与您拥有的 CPU 个内核一样多的副本。您的计算机不会锁定,您仍然可以 运行 其他应用程序(尽管性能会下降)。这是一个很好的证明,表明您正在 运行 进行抢占式多任务处理 OS。
这个程序只是疯狂地浪费 CPU 个周期,从不 explicitly or implicitly yielding the CPU back to the system;在协作式多任务系统中,这将导致系统完全锁定(一旦任务获得 CPU,它会为自己保留它,永远不会给任何其他任务留下机会给 运行)。
另一方面,在抢占式多任务系统中,您可以随心所欲地保留 CPU,但 OS 会定期收回它(通常是在某些定时器中断时)让还有其他任务 运行。
我正在上一门操作系统课程,其中我们使用 Windows Server 2016 和 ESXi
我们的设置是一台机器 运行 W2K16 提升为 DC,一台 运行 直接在硬件上的 ESXi 和一台客户端机器。在 ESXi 机器上,我们还有两个额外的 W2K16 虚拟化副本,其中一个升级为 DC。
问题是你如何使用你的一台机器证明 NT10 内核使用抢占式多任务而不是协作。任何帮助将不胜感激。
写一个简单的程序:
volatile unsigned i = 0;
int main() {
for(; ; ++i);
return 0;
}
编译它,并启动与您拥有的 CPU 个内核一样多的副本。您的计算机不会锁定,您仍然可以 运行 其他应用程序(尽管性能会下降)。这是一个很好的证明,表明您正在 运行 进行抢占式多任务处理 OS。
这个程序只是疯狂地浪费 CPU 个周期,从不 explicitly or implicitly yielding the CPU back to the system;在协作式多任务系统中,这将导致系统完全锁定(一旦任务获得 CPU,它会为自己保留它,永远不会给任何其他任务留下机会给 运行)。
另一方面,在抢占式多任务系统中,您可以随心所欲地保留 CPU,但 OS 会定期收回它(通常是在某些定时器中断时)让还有其他任务 运行。