zoukankan      html  css  js  c++  java
  • 内核---抢占原理

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

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

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

    insmod_test.c

      1 #include <linux/init.h>
      2 #include <linux/module.h>
      3 #include <linux/sched.h>
      4 #include <linux/delay.h>
      5 
      6 //当模块安装的时候执行
      7 static __init int test_init(void)
      8 {
      9     printk("test_init
    ");
     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
    ");
     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 <stdio.h>
      3 #include <stdlib.h>
      4 #include <sched.h>
      5 #include <utmpx.h>
      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
    ", sched_getcpu());
     24         sleep(1);
     25     }
     26     return 0;
     27 }

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

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

    有时候,不小心知道了一些事,才发现自己所在乎的事是那么可笑。
  • 相关阅读:
    mysql时间戳转换成可读时间格式
    浅谈依赖注入与控制反转
    win下安装wget以及使用wget
    Mysql 压力测试工具 mysqlslap
    PHP Web木马扫描器
    PHP双向队列,双端队列代码
    20款响应式bootstrap后台模板源码下载
    15款fullpage.js鼠标滚动页面动画展示特效
    20款网页常用的返回顶部代码
    21款大气的全屏图片切换代码
  • 原文地址:https://www.cnblogs.com/axjlxy/p/9048368.html
Copyright © 2011-2022 走看看