摘要: 调度时机: 1、进程终止、睡眠,这些通常是进程自身行为,当然也有运行异常; 2、时间片用完时,而时间片更新是在时钟中断驱动下完成的; 3、设备驱动程序; 4、进程从异常、中断、及系统调用返回的时候会进行need_resched()检测,会触发调度。问题:多cpu下,时钟中断如何处理的?时钟中... 阅读全文
posted @ 2015-10-28 18:15 幻暝玄冰 阅读(624) 评论(0) 推荐(0) 编辑
摘要: 随着看的东西的增多,之前不明白的地方也开始有了眉目,所以更新前几节的东西,欢迎指正。想想马上就中断返回,进入进程描述了,还是挺激动的呢。不得不推荐一篇写得很好的文章《spinlock的剖析与改进》http://www.searchtb.com/2011/06/spinlock%E5%89%96%E6... 阅读全文
posted @ 2015-10-24 14:31 幻暝玄冰 阅读(606) 评论(0) 推荐(0) 编辑
摘要: 这节主要说软中断,书中注释相对少点,理解困难点,后面有些问题需要大家帮忙,感激不尽。2.4以前的内核采用bh(bottom half)机制,来避免中断关闭时间太长而丢失重要中断。因为bh机制实际上是调用bh_base[32]中的某一项来完成,所以后文用bh_base来代替。由于bh_base设计的是... 阅读全文
posted @ 2015-10-24 00:08 幻暝玄冰 阅读(539) 评论(0) 推荐(0) 编辑
摘要: 再次梳理会用到的一些数据结构和名词中断向量表(中断描述符表)idt_table全局,8字节64位,从低到高位16位段选择符,32位偏移量,16位状态信息256项起始地址在内核数据节的idt中用于寻找各种门,门的作用是防止用户程序访问陷阱门、中断门等特殊资源,出于安全考虑,linux为用户留有3,4,... 阅读全文
posted @ 2015-10-23 15:44 幻暝玄冰 阅读(860) 评论(0) 推荐(0) 编辑
摘要: 中断或异常发生之前当 CPU 执行了当前指令之后,CS 和 EIP 这对寄存器中所包含的内容就是下一条将要执行 指令的逻辑地址。在对下一条指令执行前,CPU 先要判断在执行当前指令的过程中是否发生 了中断或异常。如果发生了一个中断或异常那么 CPU 将做以下事情• 确定所发生中断或异常的向量i(在 ... 阅读全文
posted @ 2015-10-22 23:57 幻暝玄冰 阅读(1815) 评论(3) 推荐(1) 编辑
摘要: Intel x86共有256种异常或者中断,也就是常说的中断向量,分别有对应的中断类型码,分布如下0-31异常和非屏蔽中断32-47由I/O设备引起的屏蔽中断,书中所讲为8259A单片机来处理响应34号中断外的其他中断48-255标识软中断,linux系统只使用了128号即0x80来实现系统内调用,... 阅读全文
posted @ 2015-10-22 20:49 幻暝玄冰 阅读(567) 评论(0) 推荐(0) 编辑
摘要: 之前百度面试的时候被volatile虐了,内核中很多地方也会用到,这个面试的时候出现概率太大了,所以搜集了一些结果供大家参考,大部分是百度到的,说得挺明确的,以后读代码的时候遇到了再更新。百度知道有人提如下问题:#include "stdio.h"int main(void){ const c... 阅读全文
posted @ 2015-10-22 16:25 幻暝玄冰 阅读(1696) 评论(0) 推荐(0) 编辑
摘要: static inline int strcmp(const char * cs,const char * ct) { int d0, d1; register int __res; __asm__ __volatile__( "1:\tlodsb\n\t" "scasb... 阅读全文
posted @ 2015-10-22 16:00 幻暝玄冰 阅读(2712) 评论(0) 推荐(0) 编辑