menu gh0st
系统调用之修改或返回指定进程的优先级(nice值和prio值)
311 浏览 | 2021-04-28 | 阅读时间: 约 1 分钟 | 分类: 学校课程 | 标签: 操作系统
请注意,本文编写于 221 天前,最后修改于 221 天前,其中某些信息可能已经过时。

系统调用之修改或返回指定进程的优先级(nice值和prio值)

第一步头文件中声明系统调用函数

include/linux/syscalls.h #在这个目录添加头文件

第二步把系统调用函数加入到syscall数组中

include/uapi/asm-generic/unistd.h #在这个目录下操作

这里的注意点可以参考前一篇博客

第三步添加函数体

kernel/sys.c #在这个目录下添加函数体

可以看一下这里的主函数,注意点在各种函数,比如find_get_pid,pid_task,task_nice,task_prio,set_user_nice,copy_to_user等,总体不难看懂。

第四步正常编译内核

具体不说了

第五步写文件调用

#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
#include <stdio.h>
#define __NR_mysetnice 295 //系统调用号

int main() {
    pid_t tid;
    int nicevalue;
    int prio = 0;
    int nice = 0;
    tid = getpid();
    syscall(__NR_mysetnice,tid,0,-5,&prio,&nice);//read
    printf("pid: %d\nprio: %d\nnice: %d\n", tid, prio,nice);
    syscall(__NR_mysetnice,tid,1,-5,&prio,&nice);//set
    printf("pid: %d\nprio: %d\nnice: %d\n", tid, prio,nice);
    syscall(__NR_mysetnice,tid,0,-5,&prio,&nice);//read
    printf("pid: %d\nprio: %d\nnice: %d\n", tid, prio,nice);  
    printf("*******************************\n");
    syscall(__NR_mysetnice,tid,0,-15,&prio,&nice);//read
    printf("pid: %d\nprio: %d\nnice: %d\n", tid, prio,nice);
    syscall(__NR_mysetnice,tid,1,-15,&prio,&nice);//set
    printf("pid: %d\nprio: %d\nnice: %d\n", tid, prio,nice);
    syscall(__NR_mysetnice,tid,0,-15,&prio,&nice);//read
    printf("pid: %d\nprio: %d\nnice: %d\n", tid, prio,nice);          
    return 0;
}

执行文件结果如下:

这里是一种方法,下面介绍另一个,就简略把信息贴上来(顺序与上面一致)

附参考博客

OS 实验一 | linux 内核编译及添加系统调用 - 知乎 (zhihu.com)

【OS】HDU-OS-Lab1-Linux 内核编译及添加系统调用 | 咸鱼的自留地 (leslievan.github.io)

发表评论

email
web

全部评论 (共 1 条评论)

    呜呜呜
    2021-05-13 18:58
    聂神tql,带带我呜呜呜呜呜