![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux内核
milaodou
专心做个很二的二货
展开
-
linux kernel source code ABC #2 spinlock与preemption, interrupt
hold住spinlock之后,会置一个状态(进程描述符中的?),导致当前处理器处于不抢占(non-preemptive)状态。如果hold spinlock之后,可以抢占,则可能会被调试到另外的程序,而另外的程序需要获取这个spinlock的时候,就白白浪费处理器了。如果spinlock需要与中断进行同步,则需要在获取spinlock的时候,同时禁止当前处理器中断,这就是spinlock原创 2015-07-14 16:15:07 · 389 阅读 · 0 评论 -
ldd3读书笔记:x86的中断处理顺序
就不说硬件相关的,从CPU调用中断向量处的代码开始:1. 首先entry.S中的代码会把中断号push到堆栈上。2. 调用到irq.c中的do_IRQ. 给中断控制器发送一个ACK信号:对于有中断控制器有意义,对于某些中断控制器则没有意义。do_IRQ然后会spinlock住相应的中断号:这样可以防止相同的中断在多个处理上同时执行。调用handle_IRQ_event原创 2015-07-15 08:35:48 · 340 阅读 · 0 评论 -
linux kernel ABC #1 中断环境与原子环境
在linux代码中,常见到的两人个中断宏(函数)in_interrupt, in_atomic的准确定义。in_interrupt(), 处于中断环境。与中断环境对应的就是进程环境,所以中断环境就是没有当前进程的环境(或者说当前进程没有意义的环境),一般就是指中断处理函数或者后半部分处理中(soft interrupt processing)。in_atomic(),处理不原创 2015-07-14 15:53:28 · 373 阅读 · 0 评论 -
linux内核互斥问题总结#1
自己看书的一点点总结,先不管对不对,乱笔头而已。linux中的同步涉及到两个问题:当前是否允许中断,当前是否允许调度。既允许中断,又允许调度状态下的同步,不在此文讨论之内。为了方便描述,CPU当前指令状态分为下面几种:1. IRQ-handler状态下,此时正在运行注册的中断处理函数。2. tasklet/soft-irq状态下,也就是一般的下半部。3. 一般任原创 2015-07-16 14:59:05 · 398 阅读 · 0 评论 -
linux kernel ABC #2 LVM
所有计算机的方案都是分层和去分层,更多的是分层,当问题没有办法解决时,就考虑引入一层。一开始是这样的,物理磁盘划分为分区,分区上建立文件系统,文件系统与物理磁盘之间通过分区解耦。后来发现分区一分就死掉了,要改变文件系统就要重新分区,而分区呢,又由于磁盘管理的一些限制很麻烦。所以就建立一个虚拟的磁盘VG,在虚拟的磁盘上建立虚拟的分区LV,在虚拟的分区上再建立文件系统。VG再建立在分区上,原创 2015-07-17 15:30:18 · 367 阅读 · 0 评论 -
ldd3读书笔记#1 驱动程序模型
kobejct, kset与kobj_type及其相应的操作,是sysfs文件系统的底层实现细节:它展现的是sysfs的目录结构。bus是连接CPU与设备的设备,所以一个bus不仅出现在/sys/bus目录下,还要出现在device目录下。bus还维护两人个kset: driver和device,分别对应到总线驱动与设备列表。device对应到bus,device还会出现在原创 2015-07-21 17:01:48 · 413 阅读 · 0 评论