内核
文章平均质量分 75
幻暝玄冰
这个作者很懒,什么都没留下…
展开
-
进程切换switch_to()注释
进程切换前需要做准备工作,其中对于内核进程和用户进程在切换地址空间中的处理方式是不同的,主要因为内核进程只使用内核地址空间,而linux的内核地址空间是固定的,但用户进程就不一样了,而内核会借用用户的地址空间,mm_struct中的页表信息在tlb中是有缓存的,这一块儿的刷新问题必须保持一致性,推荐两篇文章,写得很好,对这个问题说得很清楚。 《Linux TLB 刷新的懒惰模式》 http:/原创 2015-10-29 01:25:19 · 766 阅读 · 0 评论 -
linux 2.4.16 内核 strcmp详解
linux内核2.4.16中strcmp汇编实现详解原创 2015-10-30 09:58:42 · 1220 阅读 · 0 评论 -
中断与异常详解(一)
Intel x86共有256种异常或者中断,也就是常说的中断向量,分别有对应的中断类型码,分布如下 0-31 异常和非屏蔽中断 32-47 由I/O设备引起的屏蔽中断,书中所讲为8259A单片机来处理响应34号中断外的其他中断 48-255 标识软中断,linux系统只使用了128号即0原创 2015-10-30 10:21:49 · 518 阅读 · 0 评论 -
中断与异常详解(二)
中断或异常发生之前 当 CPU 执行了当前指令之后,CS 和 EIP 这对寄存器中所包含的内容就是下一条将要执行 指令的逻辑地址。在对下一条指令执行前,CPU 先要判断在执行当前指令的过程中是否发生 了中断或异常。 如果发生了一个中断或异常 那么 CPU 将做以下事情 • 确定所发生中断或异常的向量i(在 0~255 之间)。 • 通过 IDTR 寄存器找到 IDT原创 2015-10-30 10:24:07 · 424 阅读 · 0 评论 -
中断与异常详解(三)
再次梳理会用到的一些数据结构和名词 中断向量表(中断描述符表) idt_table 全局,8字节64位,从低到高位16位段选择符,32位偏移量,16位状态信息 256项 起始地址在内核数据节的idt中 用于寻找各种门,门的作用是防止用户程序访问陷阱门、中断门等特殊资源,出于安全考虑,linux为用户留有3,4,原创 2015-10-30 10:25:34 · 283 阅读 · 0 评论 -
中断与异常详解(四)
这节主要说软中断,书中注释相对少点,理解困难点,后面有些问题需要大家帮忙,感激不尽。 2.4以前的内核采用bh(bottom half)机制,来避免中断关闭时间太长而丢失重要中断。 因为bh机制实际上是调用bh_base[32]中的某一项来完成,所以后文用bh_base来代替。 由于bh_base设计的是单cpu不可重入,在SMP系统中,即使其他CPU空闲也无法执行bh_ba原创 2015-10-30 10:26:37 · 408 阅读 · 0 评论 -
中断与异常详解(五)
随着看的东西的增多,之前不明白的地方也开始有了眉目,所以更新前几节的东西,欢迎指正。想想马上就中断返回,进入进程描述了,还是挺激动的呢。 不得不推荐一篇写得很好的文章《spinlock的剖析与改进》 http://www.searchtb.com/2011/06/spinlock%E5%89%96%E6%9E%90%E4%B8%8E%E6%94%B9%E8%BF%9B.html原创 2015-10-30 10:27:28 · 292 阅读 · 0 评论 -
调度程序schedule()注释
调度时机: 1、进程终止、睡眠,这些通常是进程自身行为,当然也有运行异常; 2、时间片用完时,而时间片更新是在时钟中断驱动下完成的; 3、设备驱动程序; 4、进程从异常、中断、及系统调用返回的时候会进行need_resched()检测,会触发调度。 问题:多cpu下,时钟中断如何处理的?时钟中断应该是只被一个cpu捕获并处理,那么其他cpu靠什么来驱动原创 2015-10-30 10:28:24 · 819 阅读 · 0 评论