博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内核---抢占原理
阅读量:4919 次
发布时间:2019-06-11

本文共 1548 字,大约阅读时间需要 5 分钟。

内核的抢占是可以配置的:make menuconfig   按照以下图片选中则内核支持抢占,不选中则内核不支持抢占:

可以写一段代代码来验证内核是否支持抢占:

下面这段代码:在模块安装的时候运行:

insmod_test.c

1 #include 
2 #include
3 #include
4 #include
5 6 //当模块安装的时候执行 7 static __init int test_init(void) 8 { 9 printk("test_init\n"); 10 //模拟一段需要执行事件很长的代码 11 12 while (1); 13 //关闭内核抢占 14 //preempt_disable(); 15 //mdelay(5000); 16 //打开内核抢占 17 //preempt_enable(); 18 19 return 0; 20 } 21 22 //当模块卸载的时候执行 23 static __exit void test_exit(void) 24 { 25 printk("test_exit\n"); 26 } 27 28 module_init(test_init); 29 module_exit(test_exit); 30 31 MODULE_LICENSE("GPL");

下面这段代码的功能是每一秒打印一下本函数在CPU的哪个核上运行:

while.c

1 #define _GNU_SOURCE  2 #include 
3 #include
4 #include
5 #include
6 7 int main(void) 8 { 9 int ret; 10 11 cpu_set_t set; 12 13 CPU_ZERO(&set); 14 CPU_SET(1, &set); 15 CPU_SET(2, &set); 16 17 ret = sched_setaffinity(0, sizeof(cpu_set_t), &set); 18 if (ret < 0) { 19 perror("sched"); 20 exit(1); 21 } 22 while (1) { 23 printf("cpu:%d\n", sched_getcpu()); 24 sleep(1); 25 } 26 return 0; 27 }

实际验证的时候,先运行while.c然后再安装insmod_test.c这个模块.发现如果内核支持抢占,则while.c的每秒打印函数会正常运行,如果内核不支持抢占,则while.c函数的打印将会被阻塞.

上面的insmod中注释掉的一段代码preempt_disable相关的是关闭内核抢占和打开内核抢占的函数:大家学习的过程中不要忽略!其实也就是动态调整内核功能的一对函数!

 

转载于:https://www.cnblogs.com/axjlxy/p/9048368.html

你可能感兴趣的文章
Hadoop HBase Phoenix 版本
查看>>
深入Java集合学习系列:ConcurrentHashSet简单实现
查看>>
[原创]独立模式安装Hive
查看>>
Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1
查看>>
LeetCode My Solution: Minimum Depth of Binary Tree
查看>>
Objective-C中的Category(分类)
查看>>
浅谈python可迭代对象,迭代器
查看>>
python 多分类任务中按照类别分层采样
查看>>
Java(23)_ String类常用方法
查看>>
IOS开发网络篇—XML介绍
查看>>
Spider-four
查看>>
asp.net中动态修改网页Title的几种方法
查看>>
匿名函数递归调用自身
查看>>
【转】U-BOOT之三:u-boot移植一
查看>>
NOJ 1651 Red packet(二分)
查看>>
php 中间代码opcode
查看>>
Uva 1061 The Morning after Halloween
查看>>
777,755,644在linux中的权限表示
查看>>
【笔记】LR响应时间
查看>>
关于Cocos2d-x中对其他某个类的某个属性的获得
查看>>