当前位置: 首页 > news >正文

Linux源码阅读笔记10-进程NICE案例分析2

set_user_nice

set_user_nice函数功能:设置某一进程的NICE值,其NICE值的计算是根据进程的静态优先级(task_struct->static_prio),直接通过set_user_nice函数更改进程的静态优先级。

内核源码

void set_user_nice(struct task_struct *p, long nice)
{bool queued, running;int old_prio;struct rq_flags rf;struct rq *rq;if (task_nice(p) == nice || nice < MIN_NICE || nice > MAX_NICE)return;/** We have to be careful, if called from sys_setpriority(),* the task might be in the middle of scheduling on another CPU.*/rq = task_rq_lock(p, &rf);update_rq_clock(rq);/** The RT priorities are set via sched_setscheduler(), but we still* allow the 'normal' nice value to be set - but as expected* it wont have any effect on scheduling until the task is* SCHED_DEADLINE, SCHED_FIFO or SCHED_RR:*/if (task_has_dl_policy(p) || task_has_rt_policy(p)) {p->static_prio = NICE_TO_PRIO(nice);goto out_unlock;}queued = task_on_rq_queued(p);running = task_current(rq, p);if (queued)dequeue_task(rq, p, DEQUEUE_SAVE | DEQUEUE_NOCLOCK);if (running)put_prev_task(rq, p);p->static_prio = NICE_TO_PRIO(nice);set_load_weight(p, true);old_prio = p->prio;p->prio = effective_prio(p);if (queued)enqueue_task(rq, p, ENQUEUE_RESTORE | ENQUEUE_NOCLOCK);if (running)set_next_task(rq, p);/** If the task increased its priority or is running and* lowered its priority, then reschedule its CPU:*/p->sched_class->prio_changed(rq, p, old_prio);out_unlock:task_rq_unlock(rq, p, &rf);
}
EXPORT_SYMBOL(set_user_nice);

使用示例

#include <linux/module.h>
#include <linux/pid.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/kthread.h>static int MyThreadFunc(void* argc) {printk("Prompt:kernel thread PID : %d.\n", current->pid);printk("Prompt:kernel thread static_prio : %d.\n", current->static_prio);printk("Prompt:kernel thread nice : %d.\n", task_nice(current));return 0;
}static int __init SetUserNiceInit(void) {struct task_struct* new_task = NULL;new_task = kthread_create_on_node(MyThreadFunc, NULL, -1, "setusernice.c");printk("Prompt:new thread nice : %d.\n", task_nice(new_task));printk("Prompt:new thread static_prio : %d.\n", new_task->static_prio);printk("Prompt:new thread prio : %d.\n", new_task->prio);set_user_nice(new_task, 16);printk("Prompt:new thread nice : %d.\n", task_nice(new_task));printk("Prompt:new thread static_prio : %d.\n", new_task->static_prio);printk("Prompt:new thread prio : %d.\n", new_task->prio);return 0;
}static void __exit SetUserNiceExit(void) {printk("Prompt:exit kernel.\n");
}module_init(SetUserNiceInit);
module_exit(SetUserNiceExit);

运行结果

相关文章:

Linux源码阅读笔记10-进程NICE案例分析2

set_user_nice set_user_nice函数功能&#xff1a;设置某一进程的NICE值&#xff0c;其NICE值的计算是根据进程的静态优先级&#xff08;task_struct->static_prio&#xff09;&#xff0c;直接通过set_user_nice函数更改进程的静态优先级。 内核源码 void set_user_nice…...

Elasticsearch实战教程: 如何在海量级数据中进行快速搜索

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 Elasticsearch&#xff08;简称ES&#xff09;是一个基于Apache Lucene™的开源搜索引擎&#xff0c;无论在开源还是专有领…...

Python学习笔记24:进阶篇(十三)常见标准库使用之数据压缩功能模块zlib,gzip,bz2,lzma的学习使用

前言 本文是根据python官方教程中标准库模块的介绍&#xff0c;自己查询资料并整理&#xff0c;编写代码示例做出的学习笔记。 根据模块知识&#xff0c;一次讲解单个或者多个模块的内容。 教程链接&#xff1a;https://docs.python.org/zh-cn/3/tutorial/index.html 数据压缩…...

【笔记】Android Settings 应用设置菜单的界面代码介绍

简介 Settings应用中&#xff0c;提供多类设置菜单入口&#xff0c;每个菜单内又有各模块功能的实现。 那么各个模块基于Settings 基础的界面Fragment去实现UI&#xff0c;层层按不同业务进行封装继承实现子类&#xff1a; DashboardFragmentSettingsPreferenceFragment 功…...

Symfony配置管理深度解析:构建可维护项目的秘诀

Symfony是一个高度灵活且功能丰富的PHP框架&#xff0c;它提供了一套强大的配置管理系统&#xff0c;使得开发者能够轻松定制和优化应用程序的行为。本文将深入探讨Symfony中的配置管理机制&#xff0c;包括配置的结构、来源、加载过程以及最佳实践。 一、配置管理的重要性 在…...

视频的宣传片二维码怎么做?扫码播放视频的制作教程

现在很多的宣传片会通过扫码的方式来展示&#xff0c;通过将视频生成二维码之后&#xff0c;其他人就可以扫码来查看视频内容&#xff0c;从而简化获取视频的过程&#xff0c;提升视频传播的效率及用户查看视频的便捷性。目前&#xff0c;日常生活和工作中就有视频二维码的应用…...

实用的网站

前端 精简CSS格式 Font Awesome 图标库 BootCDN 加速服务 LOGO U钙网 AI AI工具集 视频下载 B站视频解析下载...

Monorepo(单体仓库)与 MultiRepo(多仓库): Monorepo 单体仓库开发策略与实践指南

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言1. Monorepo 和 MultiRepo 简介2. 为什么选择 Monorepo&#xff1f; 二、Monorepo 和 MultiRepo 的区别1. 定义和概述2. 各自的优点和缺点3. 适用场景 三、Monorepo 的开发策略1. 版本控制2. 依赖管理3. 构建和发布…...

使用 PyTorch 创建的多步时间序列预测的 Encoder-Decoder 模型

Encoder-decoder 模型在序列到序列的自然语言处理任务&#xff08;如语言翻译等&#xff09;中提供了最先进的结果。多步时间序列预测也可以被视为一个 seq2seq 任务&#xff0c;可以使用 encoder-decoder 模型来处理。本文提供了一个用于解决 Kaggle 时间序列预测任务的 encod…...

开启IT世界的第一步:高考新生的暑期学习指南

目录 前言 了解IT领域 学习编程语言 实践项目 学习资源 阅读专业书籍 培养良好的学习习惯 结语 最后 - 投票 前言 七月的钟声敲响&#xff0c;各省的高考分数已揭晓&#xff0c;意味着一段紧张而又充满奋斗的旅程画上了句号。然而&#xff0c;高考的结束并不意味…...

软考系统架构师高效备考方法论

软考系统架构师高效备考方法论 本章总结的备考方法论也是希望能帮助更多的小伙伴高效的备考最终通过考试&#xff0c;这种考试个人感觉是尽量一次性考过&#xff0c; 要不然老拖着&#xff0c;虽然每年可以考两次&#xff0c;5月和11月&#xff0c;两次考试间隔5个月时间&#…...

【neo4j图数据库】入门实践篇

探索数据之间的奥秘&#xff1a;Neo4j图数据库引领新纪元 在数字化浪潮汹涌的今天&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;随着数据量的爆炸性增长和数据关系的日益复杂&#xff0c;传统的关系型数据库在处理诸如社交网络、推荐系统、生物信息学等高度互…...

【TS】TypeScript 原始数据类型深度解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 TypeScript 原始数据类型深度解析一、引言二、基础原始数据类型2.1 boolean2.2 …...

怎么样调整分类的阈值

调整分类模型的阈值是改变模型对正负类的预测标准的一种方法&#xff0c;常用于提高精确率、召回率或者其他性能指标。以下是如何调整分类阈值的步骤和方法&#xff1a; PS&#xff1a;阈值是针对预测概率&#xff08;表示样本属于某个特定类别的可能性&#xff09;来说的 调…...

java+mysql教师管理系统

完整源码地址 教师信息管理系统使用命令行交互的方式及数据库连接实现教师信息管理系统&#xff0c;该系统旨在实现教师信息的管理&#xff0c;并根据需要进行教师信息展示。该软件的功能有如下功能 (1)基本信息管理(教师号、姓名、性别、出生年月、职称、学历、学位、教师类型…...

PDF文档如何统计字数,统计PDF文档字数的方法有哪些?

在平时使用pdf阅读或者是处理文档的时候&#xff0c;常常需要统计文档的字数。pdf在查看文字时其实很简单。 PDF文档是一种常见的电子文档格式&#xff0c;如果需要对PDF文档中的字数进行统计&#xff0c;可以使用以下方法&#xff1a; Adobe Acrobat DC&#xff1a;Adobe Ac…...

在Python asyncio中如何识别协程是否被block了

现在asyncio在Python中的使用越来越广泛了,但是很多人对于协程(corotine)的一些使用方式还不太熟悉。在这篇文章中,我将会介绍如何识别协程是否被block了,并以常用的HTTP网络库requests/httpx为例来说明如何避免协程被block的问题。 为什么协程会被block 在Python中,可…...

Hyper-V虚拟机固定IP地址(手把手教设置)

链接虚拟机修改网络配置文件 输入指令 sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0 然后 输入 按 i 键 再按回车 (enter) 进入编辑模式 修改配置(这几项)其中 IPADDR 就是你想给虚拟机固定的 IP 地址 多台的话只需要修改这个IP 就行其他不变 BOOTPROTO=static…...

以 Vue 3 项目为例,多个请求下如何全局封装 Loading 的展示与关闭?其中大有学问!

大家好,我是CodeQi! 项目开发中,Loading 的展示与关闭是非常关键的用户体验设计。 当我们的应用需要发起多个异步请求时,如何有效地管理全局 Loading 状态,保证用户在等待数据加载时能有明确的反馈,这是一个值得深入探讨的问题。 本文将以 Vue 3 项目为例,详细讲解如…...

Node.js学习(一)

Node.js安装与入门案例&#xff1a; 需求&#xff1a;点击按钮&#xff0c;请求本地目录指定文件的内容&#xff0c;并显示在页面上 刚入门肯定想着直接写相对路径请求指定路径数据就行了&#xff0c;可是会发现不行。 网页运行在浏览器端&#xff0c;通常后续要发布&#xf…...

未发表】“VMD-BKA-CNN-BiLSTM四模型多变量时序预测一键对比Matlab代码

【未发表】VMD-BKA-CNN-BiLSTM四模型多变量时序预测一键对比 Matlab代码 可用于风电预测&#xff0c;光伏预测等 基于变分模态分解结合黑翅鸳算法优化卷积神经网络结合双向长短期记忆神经网络的数据多变量时序预测一键对比 各种对比图都有 包含VMD-BKA-CNN-BiLSTM,VMD-CNN…...

2023B卷,IPv4地址转换成整数

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:华为OD面试 文章目录 一、🍀前言 1.1 ☘️题目详情 1.2 ☘️参考解题答案 一、🍀前言 2023B卷,IPv4地址转换成整数。 1.1 ☘️题目详情 题目: 存…...

AndroidTVLauncher自定义功能卡片开发:FunctionCardPresenter实现原理与实践

AndroidTVLauncher自定义功能卡片开发&#xff1a;FunctionCardPresenter实现原理与实践 【免费下载链接】AndroidTVLauncher This is a leanback style tv launcher(minSdkVersion 17) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidTVLauncher AndroidTVLaunch…...

打破邮件营销壁垒:免费响应式HTML模板的实战指南

打破邮件营销壁垒&#xff1a;免费响应式HTML模板的实战指南 【免费下载链接】email-templates Free HTML email templates for Mailchimp and other emails services 项目地址: https://gitcode.com/gh_mirrors/ema/email-templates 一、邮件营销的隐形痛点与解决方案 …...

自动化测试框架选型:Selenium vs Cypress深度对比

在快速迭代的软件开发周期中&#xff0c;自动化测试框架的选型直接影响产品质量与交付效率。Selenium与Cypress作为当前主流工具&#xff0c;分别代表了传统与现代化的技术路线。本文将从架构设计、核心特性、适用场景及未来趋势等维度&#xff0c;为测试从业者提供深度对比分析…...

避坑指南:OpenClaw对接nanobot镜像的3大常见错误与解决方法

避坑指南&#xff1a;OpenClaw对接nanobot镜像的3大常见错误与解决方法 1. 为什么需要这份避坑指南&#xff1f; 上周我在本地部署nanobot镜像时&#xff0c;原本以为半小时就能搞定的事情&#xff0c;硬是折腾了整整一个下午。这个超轻量级的OpenClaw镜像确实很吸引人——内…...

用Lumerical MODE的EME Solver设计硅基波导耦合器:一个完整案例解析

硅基光子集成中的EME Solver实战&#xff1a;定向耦合器设计与性能优化全解析 光子集成电路(PIC)设计领域&#xff0c;模式展开法(EME)因其在长距离波导结构仿真中的独特优势&#xff0c;正成为工程师验证器件性能的首选工具。尤其在硅基定向耦合器这类关键无源器件的设计中&am…...

UE4蓝图插件推荐:这5款免费工具让你的开发效率翻倍(附详细使用技巧)

UE4蓝图插件推荐&#xff1a;5款免费工具解锁高效开发新姿势 第一次在虚幻引擎中搭建复杂交互逻辑时&#xff0c;我盯着满屏纠缠的连线发呆了半小时——这简直比解毛线团还令人崩溃。直到发现那些藏在社区角落的蓝图效率神器&#xff0c;才意识到原来80%的重复劳动都可以交给插…...

探索Pem电解槽三维仿真模型:聚焦氢气扩散

Pem电解槽三维仿真模型&#xff0c;阴极不通水&#xff0c;只考虑氢气的扩散&#xff0c;使用二次电流分布浓物质传递自由与多孔介质流&#xff0c;不使用水电解槽节点。最近在研究Pem电解槽的三维仿真模型&#xff0c;这里面有个挺有意思的设定&#xff0c;阴极不通水&#xf…...

不止于模拟器:在Windows10上用VS2019+QEMU调试EDK2 UEFI应用的完整流程

从零构建UEFI开发环境&#xff1a;VS2019与QEMU深度整合实战指南 在当今固件开发领域&#xff0c;UEFI已逐步取代传统BIOS成为主流标准。对于开发者而言&#xff0c;搭建一个高效的UEFI开发环境是进行底层系统开发的第一步。本文将带你深入探索如何在Windows10平台上&#xff0…...