Linux源码阅读笔记08-进程调度API系统调用案例分析
kthread_create_on_node
kthread_create_on_node函数功能:指定存储节点创建新内核线程。源码如下:

操作实战
#include <linux/module.h>
#include <linux/pid.h>
#include <linux/sched.h>
#include <linux/kthread.h>
#include <linux/wait.h>int MyThreadFunc(void* argc) {printk("MyThreadFunc\n");printk("MyThreadFuncPID: %d\n", current->pid);printk("Exit MyThreadFunc\n");return 0;
}static int __init KthreadCreateOnNodeInit(void) {struct task_struct* pts = NULL;printk("KthreadCreateOnNodeInit\n");pts = kthread_create_on_node(MyThreadFunc, NULL, -1, "ktconode.c");printk("New thread PID: %d\n", pts->pid);wake_up_process(pts);printk("Curretn thread PID: %d\n", current->pid);return 0;
}static void __exit KthreadCreateOnNodeExit(void) {printk("Exit kernel: KthreadCreateOnNodeExit\n");
}MODULE_LICENSE("GPL");
module_init(KthreadCreateOnNodeInit);
module_exit(KthreadCreateOnNodeExit);

wake_up_process
wake_up_process函数功能:唤醒处于睡眠状态的进程,状态转换为RUNNING状态,让CPU重新调度处理。
- 唤醒成功返回1
- 唤醒失败(该线程已经是RUNNING状态)返回0
源代码如下:

操作实战
#include <linux/kthread.h>
#include <linux/sched.h>
#include <linux/wait.h>
#include <linux/module.h>
#include <linux/pid.h>
#include <linux/list.h>
#include <linux/delay.h>struct task_struct* pts_thread = NULL;int MyThreadFunc(void* argc) {int iData = -1;printk("MyThreadFunc\n");printk("MyThreadFunc PID: %d\n", current->pid);//查看父进程状态printk("初始化函数状态为: %ld\n", pts_thread->state);iData = wake_up_process(pts_thread);printk("wake_up_process之后父进程状态: %ld\n", pts_thread->state);printk("wake_up_process返回结果为: %d\n", iData);printk("Exit MyThreadFunc\n");return 0;
}static int __init WakeUpProcessInit(void) {int res = 1; // 保存wake_up_process结果char cName[] = "wakeup.c%s";struct task_struct* pResult = NULL;long time_out;wait_queue_head_t head;wait_queue_entry_t data;printk("WakeUpProcessInit\n");//指定节点,创建新的内核线程pResult = kthread_create_on_node(MyThreadFunc, NULL, -1, cName);printk("New thread PID: %d\n", pResult->pid);printk("Current thread PID: %d\n", current->pid);init_waitqueue_head(&head);init_waitqueue_entry(&data, current);add_wait_queue(&head, &data);pts_thread = current;res = wake_up_process(pResult);printk("wake_up_process唤醒新线程之后的结果为: %d\n", res);time_out = schedule_timeout_uninterruptible(2000*10);res = wake_up_process(current);printk("唤醒当前线程的结果为: %d\n", res);printk("调用sched_timeout_uninterruptible返回结果为: %ld\n", time_out);printk("Exit WakeUpProcessInit\n");return 0;
}static void __exit WakeUpProcessExit(void) {printk("Exit WakeUpProcessExit\n");
}module_init(WakeUpProcessInit);
module_exit(WakeUpProcessExit);

相关文章:
Linux源码阅读笔记08-进程调度API系统调用案例分析
kthread_create_on_node kthread_create_on_node函数功能:指定存储节点创建新内核线程。源码如下: 操作实战 #include <linux/module.h> #include <linux/pid.h> #include <linux/sched.h> #include <linux/kthread.h> #inclu…...
短视频抓取:成都柏煜文化传媒有限公司
短视频抓取:技术挑战、法律边界与未来趋势 随着移动互联网的迅猛发展,短视频平台如雨后春笋般涌现,成为现代人生活娱乐的重要组成部分。然而,在海量短视频内容中,如何高效、准确地抓取目标视频,成为了一个…...
proto的前后端使用
首先定义一个input.proto文件 内容如下 syntax "proto3";message InputData {int32 UserId 1; // 将 number 改为 int32 或 int64string UserInput 2;string DrunkState 3; }message ResponseData {string AIResponse 1;string prompt 2;string emoti…...
华为解决固态硬盘致命弱点:延长30~50%的SSD寿命
如今的SSD容量越做越大,企业级SSD容量已达30TB、60TB的、甚至120TB。但SSD寿命一直是“致命伤”,越大容量的盘,出现故障后,丢失的数据就越多。 近日, 华为数据存储发文,揭开华为全闪分布式存储让SSD大盘更“…...
登录验证码高扩展性设计方案
登录验证码高扩展性建设方案 本文分享了一种登录验证码高扩展性的建设方案,通过工厂模式策略模式,增强了验证码服务中验证码生成器、验证码存储器、验证码图片生成器的扩展性,实现了服务组件的多样化,降低了维护成本 登录验证码高…...
Spring MVC数据绑定和响应——数据回写(一)普通字符串的回写
接下来通过HttpServletResponse输出数据的案例,演示普通字符串的回写,案例具体实现步骤如下。 1、创建一个数据回写类DataController,在DataController类中定义showDataByResponse()方法,用于测试在Spring MVC中普通字符串的回写…...
怎样才能更好地保护个人账号的安全
怎样才能更好地保护个人账号的安全 保护个人账号安全是网络安全的重要组成部分,以下是一些有效的措施来增强账号的安全性: 1. 使用强密码 复杂性:创建包含大小写字母、数字和特殊字符的密码。长度:密码至少应有12个字符长。唯一…...
react native优质开源项目
React Native 是一个非常流行的用于构建跨平台移动应用程序的框架,开源社区贡献了许多优质的项目和库。以下是一些备受认可的 React Native 开源项目,适合用来学习和参考: ### 1. **React Native Elements** [React Native Elements](https:…...
速盾:海外cdn有哪些优缺点呢?
海外 CDN(内容分发网络)是一种通过在全球多个节点上分布内容来加速网站访问速度的服务。它通过将网站的静态内容缓存到全球各地的服务器上,使用户可以从最近的服务器获取内容,从而提高网站的响应速度和用户体验。然而,…...
Unity Shader 软粒子
Unity Shader 软粒子 前言项目Shader连连看项目渲染管线设置 鸣谢 前言 当场景有点单调的时候,就需要一些粒子点缀,此时软粒子就可以发挥作用了。 使用软粒子与未使用软粒子对比图 项目 Shader连连看 这里插播一点,可以用Vertex Color与…...
nextTick的应用和原理理解
一.代码的理解 <template><div id"app"><div></div><button click"fn" ref"box"> {{ name }}</button></div> </template><script> export default {data: function () {return {n…...
.Net Core 微服务之Consul
目录 一、微服务架构 vs 单体架构 1. 单体架构介绍 2. 微服务架构介绍 3. 微服务架构 vs 单体架构的区别 4. 适用场景和选择 4.1 微服务架构的适用场景和选择 复杂度和规模需求高的应用程序: 技术栈的灵活性需求: 快速迭代和持续交付: 高可用性和容错性的要求: 4…...
速盾:cdn流量调度
CDN(Content Delivery Network)是指内容分发网络,它是一种通过部署在不同地理位置的服务器来传递互联网内容的技术。CDN的主要目标是通过将内容放置在离用户最近的服务器上,来提高用户访问网站的响应速度和性能。 CDN的流量调度是…...
Windows批处理入门:快速掌握批处理脚本的基本技巧
一、前言 在Windows操作系统中,批处理文件(Batch File)是一种非常实用的工具,它允许用户通过简单的命令行脚本来自动化各种任务。无论是系统管理员、开发人员,还是普通用户,掌握批处理文件的基本知识都能极…...
【C++之unordered_set和unordered_map的模拟实现】
C学习笔记---025 C之unordered_set和unordered_map的模拟实现1、unordered_set的模拟实现2、unordered_map的模拟实现 C之unordered_set和unordered_map的模拟实现 前言: 前面篇章学习了C对unordered_set和unordered_map的认识和应用,接下来继续学习&am…...
服务器使用别人的conda
很多台机器都共用一个conda时候,可以在conda的bin目录下运行./conda init来使得该环境机器用这个conda作为默认的conda。 但是有个环境报错: -bash: ./conda: /apdcephfs_cq8/share_1367250/jaimeji/anaconda/jaime_conda/bin/python: bad interpreter:…...
农村程序员陈随易2024年中总结
今天是 2024年7月1日,时间如白驹过隙,今年已去其一半。 总结一下今年上半年的情况,给大家提供一些参考和建议。 希望大家关注一下公众号 陈随易,有些内容只在公众号发表。 先看看我的年初计划,这个在今年年初的时候&…...
Spring Boot中的日志管理最佳实践
Spring Boot中的日志管理最佳实践 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨一下在Spring Boot应用中如何有效管理日志,确保系统…...
python基础语法 004-2流程控制- for遍历
1 遍历 1.1 什么是遍历? 可以遍历的元素:字符串、列表、元组、字典、集合字符串是可以进行for 循环。(容器对象,序列)可迭代对象iterable 例子: 1 )、for遍历字符串: name xiao…...
【高考志愿】医学
目录 一、明确职业定位与兴趣 二、选择大学与专业 三、考虑身体条件 四、了解录取规则 五、考虑选科与成绩 六、注意志愿填报策略 七、关注就业前景 八、资深医生的建议 高考志愿填报学医时,考生需要综合考虑多个因素,确保自己能够做出明智的选择…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
