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…...
【高考志愿】医学
目录 一、明确职业定位与兴趣 二、选择大学与专业 三、考虑身体条件 四、了解录取规则 五、考虑选科与成绩 六、注意志愿填报策略 七、关注就业前景 八、资深医生的建议 高考志愿填报学医时,考生需要综合考虑多个因素,确保自己能够做出明智的选择…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
