linux kernel synchronization 1

news/2025/9/20 21:42:29/文章来源:https://www.cnblogs.com/fangdroid/p/19102615

cat /proc/cpuinfo check all processors

ps -eaF the PSR shows process is runing on processor number

preemption

user space

Under Linux, user-space programs have always been preemptible: the kernel interrupts user-space programs to switch to other threads, using the regular clock tick.

kernel space

kernel preemption has been introduced in 2.6 kernels, and one can enable or disable it using the CONFIG_PREEMPT option.
Kernel preemption can occur:
​ When returning to kernel-space from an interrupt handler
​ When kernel code becomes preemptible again
​ If a task in the kernel explicitly calls schedule()
​ If a task in the kernel blocks (which results in a call to schedule())

processor id

smp_processor_id() gives you the current processor number on which kernel is running
在多处理器系统中,Linux内核调度器会动态地将线程调度到不同的CPU上运行,导致每次调用smp_processor_id()返回不同的值

点击查看代码
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kdev_t.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include<linux/slab.h>                 //kmalloc()
#include<linux/uaccess.h>              //copy_to/from_user()
#include <linux/kthread.h>             //kernel threads
#include <linux/sched.h>               //task_struct 
#include <linux/delay.h>static struct task_struct *my_thread;int thread_function(void *pv)
{int i=0;while(!kthread_should_stop()) {printk(KERN_INFO "Processor id:%d\t In Thread Function %d\n", smp_processor_id(), i++);msleep(1000);}return 0;
}static int __init my_driver_init(void)
{pr_info("%s: processor id:%d\n", __func__, smp_processor_id());my_thread = kthread_create(thread_function,NULL,"myThread");if(my_thread) {wake_up_process(my_thread);return 0;} else {printk(KERN_ERR "Cannot create kthread\n");return -1;}
}void __exit my_driver_exit(void)
{kthread_stop(my_thread);pr_info("%s:Device Driver Remove...Done\tProcessor Id:%d\n", __func__, smp_processor_id());
}module_init(my_driver_init);
module_exit(my_driver_exit);MODULE_LICENSE("GPL");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

势能分析揭开一些算法的秘密

势能分析太厉害了! 势能分析主要是计算一些过程十分复杂的算法的时间复杂度。我们巧妙地借助物理中的势能解决问题,我们先定义一个状态的势能,将复杂度刻画为引起势能变化所做的功,而关于势能很多时候我们只关心始…

企业省钱又安全的5款Linux发行版:从Ubuntu到Pop!_OS全面解析

本文详细分析了五款适合企业使用的Linux发行版,包括Ubuntu、Linux Mint、Debian、elementaryOS和Pop!_OS,重点探讨它们的硬件兼容性、安全特性、成本效益及部署优势,帮助企业实现安全与成本控制的双重目标。5款适用…

【深度学习新浪潮】数字孪生研发进展:从技术突破到代码实践 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

how to count

Polygon 根据范围 dp 还是比较显然的。\(f_{i,j}\):将i边形分成j个多边形的方案数。 整体思考 一开始的方向是通过保证每种方案,对于每条分割线计算一次去重,对于每个状态的转移,枚举每条分割线,然后枚举两侧分割个…

第六章 数组

一维数组的使用具有相同类型的若干变量按有序形式组织起来,这些按序排列的同类数据元素称为数组 数组的元素是连续的(元素的内存地址连续) 同一个数组所有的成员都是相同类型 一维数组数据类型 数组名 [常量表达式] …

basic - graph theory

P2860 [USACO06JAN] Redundant Paths G 先转化为加尽量少的边使得图为边双。 注意到边双具有传递性,则先进行缩点。(此处注意tot=1和lst^1的实现细节) 则问题又转化为加尽可能少的边,使一个全是割点的图变成边双。 边…

详细介绍:阻塞 IO为什么叫BIO,非阻塞IO为什么叫NIO,异步IO为什么叫AIO

详细介绍:阻塞 IO为什么叫BIO,非阻塞IO为什么叫NIO,异步IO为什么叫AIOpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family:…

Ubuntu系统使用gcc和Makefile编译C程序

一.用Ubuntu系统编写hello world程序并编译运行 1.用vim命令编写hello world程序代码

构造选记

CF1815B Sum Graph 考虑肯定要把图建成一个特殊形态,考虑链。指定x分别为\(n+1,n+2\)即可做到,这个时候链的实际形态已经确定下来(这里预处理出来链的实现没有想到)。有了链查询n-1次与\(p_1\)的距离,最长的肯定是…

0133_解释器模式(Interpreter)

解释器模式(Interpreter) 意图 给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 UML 图优点易于扩展文法:由于使用类来表示语言的文法规则,可以通过继承来扩展文…

trick杂记 例题

会把一些不太有分类的trick放在这里,弄得好乱啊! 其实感觉大部分算不上trick,就是一些思考的方向)组合数学。一些决策对总贡献没有影响,可以先钦定它们,在该局面下考虑对总贡献有影响的决策。CF2092E She knows.…

代码随想录算法训练营第四天 | leetcode 24

两两交换链表中的节点 注意:交换两个节点的步骤,采用虚拟节点会更加方便,每次交换的步骤是相同的所以可以使用递归做出来(二刷再做吧),然后就是注意指针是否为空,普通做法时可以将保存交换节点的下一个接地点,…

网络流 最小割、费用流

网络流 最小割、费用流 割 网络流中的割被定义为一种点集的划分方式,源点 \(s\in S\) ,汇点 \(t\in T\) 割 \((S,T)\) 的容量为 \(c(S,T)\) 表示所有从 \(S\) 到 \(T\) 的边的容量之和 最小割问题就是求一个割 \((S,…

DP tricks

乱记随机做到的dptricks 交换状态与答案 适用场景:状态大但是答案小AT_dp_e Knapsack 2 CF176D Hyper String AT_agc033_d [AGC033D] Complexity用map存 写出明显存不了的状态的柿子之后 发现只有比较少的几个会有更新…

碎碎念(十七)

awa听风听雨,留云留意 还在怀念过去吗? 那个清晨一起抓住了温柔的风, 那个午后一起接住了淅沥的雨, 那个黄昏一起数清了着火的云, 那个夜晚一起点亮了暗淡的星。那么现在呢? 只能祈祷吹过相同的风, 只能独自撑起…

OpenCV的一些API的使用

本文章会陆续记录一些OpenCV的API方法

AdMergeX与小川科技最右App合作案例入选中国信通院“高质量数字化转型典型案例集” - 实践

AdMergeX与小川科技最右App合作案例入选中国信通院“高质量数字化转型典型案例集” - 实践2025-09-20 21:19 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !importan…

在 macOS 上准备 CentOS 7.5 离线迁移文件的完整指南

在 macOS 上准备 CentOS 7.5 离线迁移文件的完整指南本地使用的是 macOS,但目标机器是 CentOS 7.5,我们需要特别小心地准备兼容的安装包。以下是详细步骤: 准备工作:在 macOS 上设置环境 1. 创建工作目录 mkdir -p…

2971:抓住那头牛

题目 总时间限制: 2000ms 内存限制: 65536kB 描述 农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式: 1、从X移动…

高效测试的第一步:5个用例设计基础思维模型

测试之路,思维先行。掌握这些基础思维模型,让你在测试领域走得更远更稳。欢迎分享你的测试设计经验和心得!在软件开发领域,测试是确保产品质量的关键环节。而对于测试工作来说,测试用例设计无疑是核心中的核心。一…