Linux的进程优先级调度学习笔记

发布于:2025-04-02 ⋅ 阅读:(21) ⋅ 点赞:(0)

Linux的进程优先级数值范围

范围 -20 到 19,数值越大优先级越低

示例代码

下面是一个简单的 C 语言示例,它演示了如何在 Linux 下修改进程的优先级并观察调度影响。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/resource.h>
#include <sys/time.h>

int main(int argc, char *argv[]) {
    if (argc != 2) {
        fprintf(stderr, "用法: %s <优先级 (-20 到 19)>\n", argv[0]);
        return 1;
    }

    int priority = atoi(argv[1]);
    if (priority < -20 || priority > 19) {
        fprintf(stderr, "错误: 优先级范围应在 -20 到 19 之间\n");
        return 1;
    }

    // 设置进程的优先级
    if (setpriority(PRIO_PROCESS, 0, priority) == -1) {
        perror("setpriority 失败");
        return 1;
    }

    // 获取并打印修改后的优先级
    int new_priority = getpriority(PRIO_PROCESS, 0);
    printf("进程的优先级已设置为: %d\n", new_priority);

    // 记录开始时间
    struct timeval start, end;
    gettimeofday(&start, NULL);

    // 模拟计算任务
    for (volatile long i = 0; i < 1000000000; i++);

    // 记录结束时间
    gettimeofday(&end, NULL);

    // 计算运行时间
    double elapsed_time = (end.tv_sec - start.tv_sec) +
                          (end.tv_usec - start.tv_usec) / 1000000.0;
    printf("进程运行时间: %.6f 秒\n", elapsed_time);

    return 0;
}

示例代码分析

没啥好分析的,看注释就行了。

交叉编译

将代码文件复制到Ubuntu中:

在这里插入图片描述
然后执行下面的命令进行编译:

arm-buildroot-linux-gnueabihf-gcc -o Priority_demo Priority_demo.c

在这里插入图片描述
复制到网络文件目录中备用:
在这里插入图片描述

上板测试

打开串口终端→打开开发板→挂载网络文件系统:

mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt

执行测试程序

/mnt/process_priority/Priority_demo 10

在这里插入图片描述

/mnt/process_priority/Priority_demo 5
/mnt/process_priority/Priority_demo 4

在这里插入图片描述

结果分析

由于咱们的开发板上的Linux系统并没有多少进程在运行,所以改变进程优先级对运行时间影响不大。