看代码不如看系统状态

今天同事问我, linux的中断可以嵌套吗?
我说我也不知道啊, 印象中是cpu是可以中断嵌套的, 但是linux关掉了, 所以linux是不允许中断嵌套的, 如何证明, 找代码, 突然跳到另一个领域, 哪有这么快能找到, 看代码不如看系统

直接开个vm, 把状态停到中断函数里面, 比如do_timer

Breakpoint 1, do_timer (ticks=1) at kernel/time/timekeeping.c:1604
1604    {
(gdb) bt
#0  do_timer (ticks=1) at kernel/time/timekeeping.c:1604
#1  0xffffffff810da0bf in tick_do_update_jiffies64 (now=..., now@entry=...) at kernel/time/tick-sched.c:83
#2  0xffffffff810da191 in tick_sched_do_timer (now=now@entry=...) at kernel/time/tick-sched.c:131
#3  0xffffffff810da6e3 in tick_sched_timer (timer=timer@entry=0xffff88003fd0df40) at kernel/time/tick-sched.c:1047
#4  0xffffffff810a18e5 in __run_hrtimer (cpu_base=cpu_base@entry=0xffff88003fd0d920, base=base@entry=0xffff88003fd0d960, timer=0xffff88003fd0df40, now=now@entry=0xffff88003fd03ee0) at kernel/hrtimer.c:1218
#5  0xffffffff810a1a00 in __hrtimer_run_queues (cpu_base=cpu_base@entry=0xffff88003fd0d920, now=..., now@entry=...) at kernel/hrtimer.c:1272
#6  0xffffffff810a1dc9 in hrtimer_interrupt (dev=<optimized out>) at kernel/hrtimer.c:1306
#7  0xffffffff81048cdb in local_apic_timer_interrupt () at arch/x86/kernel/apic/apic.c:917
#8  0xffffffff81606d05 in smp_apic_timer_interrupt (regs=<optimized out>) at arch/x86/kernel/apic/apic.c:941
#9  <signal handler called>
#10 0xffffffffffffff10 in ?? ()
Cannot access memory at address 0x297
(gdb) info registers
rax            0x15fe   5630
rbx            0xf583e  1005630
rcx            0xf4240  1000000
rdx            0xffffffff81927184       -2121109116
rsi            0x148a8f680      5514000000
rdi            0x1      1
rbp            0xffff88003fd03e48       0xffff88003fd03e48
rsp            0xffff88003fd03e38       0xffff88003fd03e38
r8             0x6      6
r9             0x2      2
r10            0x4b6    1206
r11            0x7      7
r12            0x148a90c7e      5514005630
r13            0xffff880035fcbba8       -131940489577560
r14            0xffff88003fd0d920       -131940324681440
r15            0xffff88003fd0d960       -131940324681376
rip            0xffffffff810d3a1f       0xffffffff810d3a1f <do_timer>
eflags         0x2      [ ]
cs             0x10     16
ss             0x18     24
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0

eflags 0x2 [ ] 中断没开, 可以再换个函数看一下, 看了一圈, 基本都没开, 可以认为中断是不能嵌套的

其实是真的不能嵌套的
https://github.com/torvalds/linux/commit/e58aa3d2d0cc01ad8d6f7f640a0670433f794922

时间: 2024-08-12 22:23:27

看代码不如看系统状态的相关文章

main-java 子线程结束结束 内部子线程也结束 具体看代码注释

问题描述 java 子线程结束结束 内部子线程也结束 具体看代码注释 import java.util.ArrayList; import org.junit.Test; /** 代码很简单的 就是起了一个线程 然后在一个list里面放了1000个数字 然后打印以下 但是test方法 用junit起的 不能完全打印 而main可以 最终是想要使得这个test方法能和main的效果一样 * */ public class TestSub { @Test public void test() { /

一个简单的php MVC留言本实例代码(必看篇)_php实例

摘要 标题上我把这个留言板叫最简单的,其实应该叫最简陋的,因为把全部注意力集中在MVC模式设计和实现上,所以UI方面几乎没有一点修饰. 这个小程序一共包含6个文件,其中index.php是程序入口.post.htm是留言表单.在lib文件夹里Model.View .Controller三个文件分别实现MVC,DataAccess是一个简单的数据库访问类.其实这个程序是国外的一个人写的. PHP代码: /** * 一个用来访问MySQL的类 * 仅仅实现演示所需的基本功能,没有容错等 * 代码未作

如何看代码

问题描述 哪位高手教教我如何看代码呀 解决方案 本帖最后由 taomanman 于 2012-04-14 21:35:11 编辑解决方案二:首先,你当然是基础都掌握了,起码得熟悉吧,然后在看代码的时候,要知道代码是要实现什么功能(整体到局部),要是你来编要怎么做,这样你就更容易理解作者的意图.解决方案三:首先基础语法你要掌握,看得懂.然后看得懂方法,再看一个项目.就像学中文.首先你得认识大部分基础的汉字,然后自己会造句,看的懂一句一句的话,然后你看文章及长篇小说就可以了.刚开始没关系,坚持看,时

求看代码过不了用但是可以玩

问题描述 求看代码过不了用但是可以玩 猜数字游戏是令系统随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了("Too big"),还是小了("Too small"),相等表示猜到了.如果猜到,则结束程序.程序还要求统计猜的次数,如果1次猜出该数,提示"Bingo!":如果3次以内猜到该数,则提示"Lucky You!":如果超过3次但是在N(>3)次以

怎么看电脑是什么系统?

  网友"放弃你"近日问小编这样一个问题:电脑开机密码怎么设置啊?对于这个问题,其实很简单,简单设置一下即可,随后小编问网友电脑是什么系统,打算发一个教程给他.岂料网友弱弱的问到:怎么看电脑是什么系统?有种无语的感觉,好吧本文写给那些电脑小白朋友吧. 怎么看电脑是什么系统? 目前大多数朋友用的都是Windows系统,如果你用的是苹果电脑的话,那么一般用的是OS X操作系统.鉴于绝大多数朋友用的是Windows系统(包括XP.Win7.Win8.Win10),下面教电脑小白如何看吧. 一

怎么看网吧电脑的系统和位数?

  尽管曾经经常会去网吧上网,但一直以来都比较讨厌去网吧上网,不仅是网吧环境不太好,更多的是因为很多网吧使用的还是32位XP系统,使用上很不方便.由于最近工作趋势没有网络,无奈只能去附近的网吧了,上网之前,小编首先要看下网吧电脑系统和位数等信息,如果系统老掉牙只能换其他地方了.下面本文简单分享一下怎么看网吧电脑的系统和位数. 一.怎么看网吧电脑的系统? 要看网吧电脑是什么系统其实是很简单的,如果熟悉Windows系统,只要看桌面界面就可以很简单的辨别. 比如XP系统Z桌面会有"我的电脑"

c#-网页设计 其实我是个小白 也不清楚怎么说 看代码吧

问题描述 网页设计 其实我是个小白 也不清楚怎么说 看代码吧 <%#Eval("UserType").ToString() == "0" ? "注册app用户" : ToString() == "1" ? "会员" : ToString() == "2" ? "VIP" : ToString() == "3" ? "讲师"

对象-java 抽象类有段代码没看懂!!!帮忙解释下

问题描述 java 抽象类有段代码没看懂!!!帮忙解释下 自己看视频自学到网络编程,发现下边的代码看不懂,自己也百度了很多,还是没理解好抽象类 OutputStream os=Socket.getOutputSteam(); os.write("加油".getBytes()): 这段代码没看懂,OutputStream抽象类不能直接创建对象,也没有子类去实现,为什么可以直接调用write(byte[] b) 方法? 解决方案 不能创建对象的意思是不能通过new outputstream

java-这段代码没看明大神们来帮看一下

问题描述 这段代码没看明大神们来帮看一下 这段代码没看明大神们来帮忙看下,尤其是if(flag)这块,还有while(true)为什么是死循环呢?小弟自学求大神说的详细一点. 解决方案 首先flag是实例变量,程序在生成你的测试类的实例时,会为实例变量赋初始值,boolean类型的默认值为false,在上面的程序中flag的值为false,程序走else分支,然后遇到while语句,while语句的格式为while(boolean){statements},意思是先判断boolean的值,如果为