其实我读完整本书,一开始感觉前面几章概念性的解释部分比后面的实操部分困难。但是后来,在做题的时候,我有一道题一开始没有找对方法,就是arm64的栈架构那道题目(注,答案其实在第一卷)然后我还想尝试去读一下代码,准备用代码来还原图形结构,我就感觉读代码也是真的困难。很多时候学习上做的只是一些很浅的修修补补的工作,真正实操起来,就要有种恨自己怎么不是冯诺依曼转世的感觉了。
如果有人问,那你看很多字的解释部分也晕,你看代码也晕,你什么时候不晕?可能我看整本书的时候都是晕的吧= =,这一定是最近的甲流的错,不是我的错。
所以说有时候读书还是得迎难而上,但也要学会投机取巧。
然后就来摘抄一点第二章的概念咯,第二章也是关于中断的部分,中断管理。
中断其实应该是做工程师很早会接触的一个概念吧,比如第一次开始学单片机的时候,就会学到的按键中断实验,就是非常典型的硬件中断。
这一章我印象比较深刻的是中断号的这个概念。
在Linux系统中注册中断接口函数使用的是Linux软件内核中断号(irq号)而不是硬件中断号。因此硬件中断号和这个虚拟号是有映射关系的。
至于为什么印象深刻大概是做题涉及了吧...
再摘抄一下软中断和tasket的概念小结
软中断是Linux内核中最常见的一种下半部机制,适合系统对性能和实时响应要求很高的场合,如网络子系统、块设备、高精度定时器、RCU等。
关于软中断,注意以下几点。 软中断类型是静态定义的,Linux内核不希望驱动开发者新增软中断类型。 软中断的回调函数在开中断环境下执行。 同一类型的软中断可以在多个CPU上并行执行。以TASKLET_SOFTIRQ类型的软中断为例,多个CPU可以同时tasklet_schedule,并且多个CPU也可能同时从中断处理返回,然后同时触发和执行TASKLET_SOFTIRQ类型的软中断。
假如有驱动开发者要新增一个软中断类型,那么软中断的处理程序需要考虑同步问题。 软中断的回调函数不能睡眠。 软中断的执行时间点是在中断返回前,即退出硬中断上下文时,首先检查是否有等待的软中断,然后再检查是否需要抢占当前进程。因此,软中断上下文总是抢占进程上下文。
tasklet是基于软中断的一种下半部机制。 tasklet可以静态定义,也可以动态初始化。 tasklet是串行执行的。一个tasklet在tasklet_schedule()函数执行时会绑定某个CPU的tasklet_vec链表,它必须在该CPU上执行完tasklet的回调函数才会和该CPU松绑。 TASKLET_STATE_SCHED和TASKLET_STATE_RUN标志位巧妙地构成了串行执行。
说实话还是没看懂tasket是什么...