庞加莱-菲尔兹 2022-12-22 20:27 采纳率: 71.4%
浏览 39
已结题

Windows11操作系统是什么类型的操作系统,如果是复合性的操作系统,各部分是什么类型的,如何去验证,给我个思路和代码例子

我想问一下对于win11操作系统,或者说现在操作系统如何分清它的的work or task(屏蔽不能发)调度或者说进程管理等等是采用分时的那一套,还是多道批处理系统那一套,或者是其他一种新的东西,能不能写代码去验证这个问题,毕竟现代都是多核CPU,而且速度又很快,会不会出现现在创建进程后,去除误差,所用毫秒数差不多,有没有人知道这个问题,我去百度上搜了,没有,知网我在校外进不去,而且好像没有这个课题,请大家多多帮忙解答,囊中羞涩
  • 写回答

3条回答 默认 最新

  • 我不是idol 2022-12-22 23:24
    关注

    对于当前的操作系统,进程调度通常采用分时调度的方式。分时调度系统是指将 CPU 的时间分配给多个进程,使得所有进程都能得到执行的机会,从而实现公平的调度。

    这种调度方式通常是通过时间片轮转的方式实现的,即将 CPU 的时间分成若干个时间片,每个进程每次执行一个时间片的时间,然后把 CPU 时间分配给下一个进程。这样,所有进程都能得到公平的调度。

    与此同时,当前的操作系统也通常会支持多线程,也就是说,一个进程可以包含多个线程,每个线程在多核 CPU 系统中,操作系统会根据 CPU 核数来调度进程或线程,使得所有核都能得到充分利用。这种调度方式叫做并行调度。

    对于 Windows 11 操作系统,其进程调度机制采用的是分时调度的方式,并支持多线程。

    如果你想通过代码验证进程调度的方式,可以使用操作系统提供的 API,例如 Windows 中的 GetProcessAffinityMask 函数可以用来获取进程可以在哪些 CPU 上运行。

    下面是一个简单的代码示例,可以用来获取当前进程的 CPU 亲和性(即进程可以在哪些 CPU 上运行):

    #include <windows.h>
    #include <stdio.h>
    
    int main()
    {
        DWORD_PTR processMask, systemMask;
        GetProcessAffinityMask(GetCurrentProcess(), &processMask, &systemMask);
        printf("Process affinity mask: %llu\n", processMask);
        printf("System affinity mask: %llu\n", systemMask);
        return 0;
    }
    

    在上面的代码中,GetProcessAffinityMask 函数可以用来获取当前进程的 CPU 亲和性。它的第一个参数是进程的句柄,通过 GetCurrentProcess 函数可以获取当前进程的句柄。第二个参数是一个指向 DWORD_PTR 类型变量的指针,用来保存进程可以在哪些 CPU 上运行的亲和性掩码。第三个参数是一个指向 DWORD_PTR 类型变量的指针,用来保存系统可用的 CPU 的亲和性掩码。

    在上面的代码中,我们使用 printf 函数来输出进程的 CPU 亲和性掩码和系统的 CPU 亲和性掩码。通过这些信息,我们可以了解当前进程能够在哪些 CPU 上运行,从而判断当前操作系统的进程调度方式。

    另外,还可以使用其他 API 函数来了解进程调度的情况,例如 GetProcessPriorityClass 函数可以用来获取进程的优先级,SetProcessAffinityMask 函数可以用来设置进程的 CPU 亲和性,以及 SetThreadAffinityMask 函数可以用来设置线程的 CPU 亲和性等。这些函数都可以帮助我们了解当前操作系统的进程调度情况。

    此外,还可以使用系统命令或工具来查看进程调度的情况。例如,在 Windows 系统中,可以使用 tasklist 命令来查看当前运行的进程信息,包括进程名、PID、优先级、内存使用情况等。还可以使用 Process Explorer 工具来查看更为详细的进程信息,包括 CPU 亲和性、内存常数、线程信息等。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月23日
  • 创建了问题 12月22日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看