免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4421 | 回复: 15
打印 上一主题 下一主题

[中断] 为什么我禁止了中断,jiffies还是会增长? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-30 15:39 |只看该作者 |倒序浏览
想知道自己的电脑是单处理机还是多处理机,于是我用spin_lock()去获得一个已经上锁了的自旋锁,结果整个系统被锁住,死机了,于是我猜测自己的系统是单处理机(不知道这种猜测对不对),后来又看某篇文章的方法,用 grep 'physical id' /proc/cpuinfo | sort -u 命令知道了自己的电脑只有一个CPU,这是背景。。

后来想试下禁止了中断后jiffies会不会增长,在模块初始化函数中有如下代码

  1.     unsigned long delay_time = 3000;
  2.     spin_lock_init(&my_lock);

  3.     // 会禁止中断的自旋锁版本
  4.     spin_lock_irq(&my_lock);
  5.     printk(KERN_INFO "jiffies is %u\n",jiffies);
  6.     // 延迟3ms,是忙延迟
  7.     udelay(delay_time);
  8.     printk(KERN_INFO "delay jiffies is %u\n", jiffies);
  9.     spin_unlock_irq(&my_lock);
复制代码
结果是,两次输出的jiffies有时会相差3,有时则相等,不过通常相差3的情况更普遍。请问各位这是什么原因啊,是不是我对禁止中断或jiffies的理解有问题?

论坛徽章:
0
2 [报告]
发表于 2013-05-30 15:52 |只看该作者
好吧。。看了下面的这个帖子后,知道了多核的CPU就会这样,我的电脑是2核的。。那么,核心和cpu有什么关系啊,如果一个核心相当于一个cpu,那么为什么我去获得一个已经上锁的自旋锁时会锁住整个系统呢?
http://bbs.chinaunix.net/thread-1920118-2-1.html

论坛徽章:
0
3 [报告]
发表于 2013-05-30 17:38 |只看该作者
本帖最后由 frank529 于 2013-05-30 17:39 编辑

自旋锁本来就是防止多个处理器竞争同一段临界区的,CPUA获得锁后,CPUB再试图获取的话会自旋等待。

论坛徽章:
0
4 [报告]
发表于 2013-05-30 18:24 |只看该作者
frank529 发表于 2013-05-30 17:38
自旋锁本来就是防止多个处理器竞争同一段临界区的,CPUA获得锁后,CPUB再试图获取的话会自旋等待。

我就只是在一段代码中里连续两次spin_lock,假设这段代码工作在CPUB,那么也只是CPUB在自旋,可是我还有CPUA可以工作吧?

论坛徽章:
0
5 [报告]
发表于 2013-05-30 19:21 |只看该作者
楼主要认真看看自旋锁的概念,CPUA获取自旋锁后,在释放之前,所有其他CPU试图获取这个锁都会在那里空转,所以叫自旋。连续两次锁,就会死锁死机

论坛徽章:
0
6 [报告]
发表于 2013-05-30 21:20 |只看该作者
frank529 发表于 2013-05-30 19:21
楼主要认真看看自旋锁的概念,CPUA获取自旋锁后,在释放之前,所有其他CPU试图获取这个锁都会在那里空转,所 ...

我能这样理解你的意思吗?就是我的电脑之所以会死机不是因为没有可用的CPU来调度其他任务,而是内核检测到了死锁,所以直接导致死机。

论坛徽章:
0
7 [报告]
发表于 2013-05-31 20:24 |只看该作者
按理说,一个cpu死锁了,另一个cpu应该还能执行进程的,不该死机啊

论坛徽章:
0
8 [报告]
发表于 2013-05-31 20:51 |只看该作者
aweii 发表于 2013-05-31 20:24
按理说,一个cpu死锁了,另一个cpu应该还能执行进程的,不该死机啊

在网上找了篇文章,发现上面说得和我电脑发生死锁时的情况很相似,所以我现在只能理解为,无论有多少个CPU,只要内核检测到死锁,都会死机了。
http://www.linuxidc.com/Linux/2013-04/82063.htm

论坛徽章:
0
9 [报告]
发表于 2013-05-31 21:22 |只看该作者
单cpu中,一旦两次spin_lock_irq,因为禁止了中断,有softlockup_tick也没用啊,中断执行不了

论坛徽章:
0
10 [报告]
发表于 2013-05-31 21:31 |只看该作者
本帖最后由 aweii 于 2013-05-31 22:01 编辑

这个看门狗进程的作用应该是检查cpu上是不是超过10秒都没有执行看门狗进程,因为看门狗是FIFO进程,优先级很高,如果发生这样的情况,就说明当前进程长时间占据cpu(典型的情况就是死锁或者内核死循环,且禁用了抢占),于是采取相应的保护措施。但是如果中断始终不开启的话,就没办法了,因为cpu上连运行softlockup_tick检查时间戳的机会都没了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP