1 总体设计思路
系统调用的本质是调用内核函数,以内核态运行程序。为了在内核态下运行,本实验针对Linux的内核进行修改,增加自定义系统调用函数实现用户态程序对任意进程的nice值进行修改或者读取来进行测试。
2 主要函数的接口设计
核心态程序
SYSCALL_DEFINE3(mysetnice, pid_t, pid, int, flag, int, nicevalue)
其中pid为选择进程的进程标识符;flag是操作符,设计为0时读取nice值,设计为1时进行修改操作;nice值为一返回变量,返回内核程序读取到的进程nice值;共计三个变量。
使用SYSCALL_DEFINE声明添加到~/kernel/sys.c文件中。
3 项目实现过程
3.1 准备
本次实验使用的环境为装载在Vmware Workstation Pro 14中的Ubuntu 17.10镜像。
镜像下载地址:http://mirrors.zju.edu.cn/ubuntu-releases/17.10/
为了编译执行顺利,我给虚拟机分配了8GB RAM和100GB虚拟硬盘空间,同时vCPU分配了8个核心,以便make -jn命令的使用。
安装ubuntu的时候,一定要注意查看/boot分区是否足够,如果不是工作环境最好直接将/boot分区挂载在根目录下,否则编译的时候产生的文件会塞满/boot分区导致编译安装失败。
参考文档和完整的文档和源码下载地址: