杭电操作系统实验:实现mysetnice系统调用
需积分: 31 27 浏览量
更新于2024-09-11
1
收藏 1KB TXT 举报
"杭电操作系统实验1提供了添加一个自定义系统调用mysetnice的代码,该调用允许用户修改或读取指定进程的nice值和优先级。实验代码包括了内核空间的系统调用处理函数以及用户态的调用示例。"
在操作系统中,nice值是一个用于表示进程执行优先级的参数。Nice值范围通常在-20(最高优先级)到19(最低优先级)之间,较高的nice值意味着较低的执行优先级。这个实验的目的是让学生理解和实践如何通过系统调用来调整进程的nice值,从而影响其在CPU调度中的位置。
实验代码中定义了一个名为`mysetnice`的系统调用,它接受5个参数:进程ID (pid)、标志(flag)、新的nice值(nicevalue)、以及两个用户空间的指针,用于传递旧的优先级(prio)和nice值(nice)。系统调用处理函数在内核空间实现,使用了`SYSCALL_DEFINE5`宏来定义。
在内核函数中,首先通过`for`循环遍历所有的进程,由`init_task`开始,通过`next_task`获取下一个进程,直到找到指定PID的进程或者遍历完整个进程链表。如果找到了目标进程,根据`flag`的值来决定是修改还是读取nice值:
- 当`flag`等于1时,调用`set_user_nice`函数,传入新的nice值,更新进程的nice值,并打印出原nice值和新nice值,然后返回0表示成功。
- 当`flag`等于0时,利用`copy_to_user`函数将进程的当前nice值和优先级复制到用户空间的`nice`和`prio`指针所指向的位置,然后打印nice值和优先级,返回0表示成功。
- 如果`flag`既不是1也不是0,函数会打印错误信息并返回`EFAULT`错误码。
- 如果没有找到指定的进程,也会返回`EFAULT`错误码。
在用户态部分,实验提供了一个简单的C程序来演示如何调用`mysetnice`系统调用。它首先尝试读取指定进程(这里为3045)的当前nice值和优先级,然后设置一个新的nice值,最后再次读取以确认nice值是否已更改。
通过这个实验,学生可以学习到操作系统内核中如何处理系统调用,理解进程管理的基本概念,以及nice值和优先级如何影响进程调度。同时,还会接触到内核空间与用户空间之间的数据传输方法,如`copy_to_user`函数。
2019-07-03 上传
2018-10-31 上传
2024-06-09 上传
2021-03-11 上传
2024-04-20 上传
2023-06-14 上传
2024-04-22 上传
杭电陈冠希
- 粉丝: 0
- 资源: 2
最新资源
- 全国江河水系图层shp文件包下载
- 点云二值化测试数据集的详细解读
- JDiskCat:跨平台开源磁盘目录工具
- 加密FS模块:实现动态文件加密的Node.js包
- 宠物小精灵记忆配对游戏:强化你的命名记忆
- React入门教程:创建React应用与脚本使用指南
- Linux和Unix文件标记解决方案:贝岭的matlab代码
- Unity射击游戏UI套件:支持C#与多种屏幕布局
- MapboxGL Draw自定义模式:高效切割多边形方法
- C语言课程设计:计算机程序编辑语言的应用与优势
- 吴恩达课程手写实现Python优化器和网络模型
- PFT_2019项目:ft_printf测试器的新版测试规范
- MySQL数据库备份Shell脚本使用指南
- Ohbug扩展实现屏幕录像功能
- Ember CLI 插件:ember-cli-i18n-lazy-lookup 实现高效国际化
- Wireshark网络调试工具:中文支持的网口发包与分析