linux kernel的中断子系统之(八):softirq

作者:linuxer 发布于:2014-10-24 11:53 分类:中断子系统

对于中断处理而言,linux将其分成了两个部分,一个叫做中断handler(top half),是全程关闭中断的,另外一部分是deferable task(bottom half),属于不那么紧急需要处理的事情。在执行bottom half的时候,是开中断的。有多种bottom half的机制,例如:softirq、tasklet、workqueue或是直接创建一个kernel thread来执行bottom half(这在旧的kernel驱动中常见,现在,一个理智的driver厂商是不会这么做的)。本文主要讨论softirq机制。由于tasklet是 基于softirq的,因此本文也会提及tasklet,但主要是从需求层面考虑,不会涉及其具体的代码实现。

在普通的驱动中一般是不会用 到softirq,但是由于驱动经常使用的tasklet是基于softirq的,因此,了解softirq机制有助于撰写更优雅的driver。 softirq不能动态分配,都是静态定义的。内核已经定义了若干种softirq number,例如网络数据的收发、block设备的数据访问(数据量大,通信带宽高),timer的deferable task(时间方面要求高)。本文的第二章讨论了softirq和tasklet这两种机制有何不同,分别适用于什么样的场景。第三章描述了一些 context的概念,这是要理解后续内容的基础。第四章是进入softirq的实现,对比hard irq来解析soft irq的注册、触发,调度的过程。

注:本文中的linux kernel的版本是3.14

阅读全文>>

标签: 软中断 softirq

评论(124) 浏览(25535)

防冲突机制介绍

作者:cherishui 发布于:2014-10-24 11:35 分类:基础技术

本文介绍了通讯领域中的两种防冲突机制,CSMA/CD和CSMA/CA.

阅读全文>>

标签: CSMA/CA 防冲突

评论(2) 浏览(5455)

Linux common clock framework(2)_clock provider

作者:wowo 发布于:2014-10-23 23:49 分类:电源管理子系统

本文接上篇文章,从clock driver的角度,分析怎么借助common clock framework管理系统的时钟资源。换句话说,就是怎么编写一个clock driver。

由于kernel称clock driver为clock provider(相应的,clock的使用者为clock consumer),因此本文遵循这个规则,统一以clock provider命名。

阅读全文>>

标签: Linux framework clock provider dts

评论(27) 浏览(12590)

arm64 linux移植

作者:forion 发布于:2014-10-23 17:02

arm64大潮来势汹汹,不知道大家有没有在搞64位cpu呢?

arm64 linux 只支持device tree了,大家要努力学好dt啦。可以去参考楼主之前的dt文章。

arm64 架构已经有很大的改变啦,不知道楼主什么时候给大家普及呢?哈哈。

Porting to ARM 64-bit.pdf

32-bit to 64-bit portingv3.pdf

上面两篇pdf在网上可以找到,可以初步的了解aarch32与aarch64 porting注意事项。

标签: Linux arm64 aarch64

评论(10) 浏览(6529)

linux内核同步

作者:dashijian 发布于:2014-10-21 16:41

同步就是避免并发和防止竞争条件。有关临界区的例子我就不举了,随便一本操作系统的书上都有。锁机制的提出也算解决了一些问题,我们待会再说,现在只要知道锁的使用是自愿的,非强制的。linux自身也提供了几种不同的锁机制,区别主要在于当锁被争用时,有些会简单地执行等待,而有些锁会使当前任务睡眠直到锁可用为止,这个后面细说。真正的困难在于发现并辨认出真正需要共享的数据和相应的共享区。先来说一些感性的话:大多数内核数据结构都需要加锁,如果有其他执行线程可以访问这些数据,那么就给这些数据加上某种形式的锁。如果任何其他什么东西能看到它,那么就要锁住它。简而言之,几乎访问所有的内核全局变量和共享数据都需要某种形式的同步方法。有关加锁的细节,在嵌套的锁时,要保证以相同的顺序获取锁,不要重复请求同一个锁,释放时,最好还是以获得锁的相反顺序来释放锁。加锁的粒度用来描述加锁保护的数据规模。接下来就开始讨论真正的同步方法:

       1.原子操作。就是指执行过程不被打断的操作,是 不能够被分割的指令。关于这个linux内核提供了两组原子操作接口:原子整数操作和原子位操作。好,先来说说这个原子整数操作。针对整数的原子操作只能对atomic_t类型的数据进行处理。需要说明的是,尽管linux支持的所有机器上的整形数据都是32位的,但是使用atomic_t的代码只能将该类型的数据当作24位来用,原因就不说了。使用原子操作需要的声明在asm/atomic.h中。原子整数操作列表如下;


 在编写代码的时候,能使用原子操作的时候,就尽量不要使用复杂的加锁机制,因为大多数或者100%情况下,原子操作比更复杂的同步方法相比较而言,给系统带来的开销小,对高速缓存行(cache-line)的影响也很小。

       对应于原子整数操作,还有一种原子操作就是原子位操作,它们是与体系结构相关的操作,定义在文件<asm/bitops.h>,它是对普通的内存地址进行操作的。它的参数是一个指针和一个位号,第0位是给定地址的最低有效位。这里没有想atomic_t一样的数据结构,只要指针指向任何希望的数据,就可以进行操作。原子位操作函数列表如下:

同时,内核还提供了一组与上述操作对应的非原子位函数,操作完全相同,不同在于不保证原子性且名字前缀多了两个下划线,例如与test_bit()对应的非原子形式是__test_bit().如果不需要原子操作,这时这些函数的执行效率可能更高。内核还提供了两个函数用来从指定的地址开始搜索第一个被设置(或未被设置)的位:

评论(0) 浏览(2842)

Linux common clock framework(1)_概述

作者:wowo 发布于:2014-10-20 23:06 分类:电源管理子系统

common clock framework是用来管理系统clock资源的子系统,根据职能,可分为三个部分:

1)向其它driver提供操作clocks的通用API。

2)实现clock控制的通用逻辑,这部分和硬件无关。

3)将和硬件相关的clock控制逻辑封装成操作函数集,交由底层的platform开发者实现,由通用逻辑调用。

因此,蜗蜗会将clock framework的分析文章分为3篇:

第一篇为概述和通用API的使用说明,面向的读者是使用clock的driver开发者,目的是掌握怎么使用clock framework(就是本文);

第二篇为底层操作函数集的解析和使用说明,面向的读者是platform clock driver的开发者,目的是掌握怎么借助clock framework管理系统的时钟资源;

第三篇为clock framework的内部逻辑解析,面向的读者是linux kernel爱好者,目的是理解怎么实现clock framework。

注1:任何framework的职能分类都是如此,因此都可以按照这个模式分析。

阅读全文>>

标签: Linux framework clock API

评论(29) 浏览(17769)

Linux内核同步机制之(二):Per-CPU变量

作者:linuxer 发布于:2014-10-16 11:17 分类:内核同步机制

本文主要介绍了linux kernel中的per cpu变量的源由,接口以及具体的实现。

阅读全文>>

标签: 内核同步 Per-CPU变量

评论(34) 浏览(17808)

Linux内核同步机制之(一):原子操作

作者:linuxer 发布于:2014-10-10 17:56 分类:内核同步机制

本文主要描述了ARM linux中的原子操作相关的内容。

阅读全文>>

标签: 原子操作 atomic 内核同步

评论(43) 浏览(14722)

Linux电源管理(11)_Runtime PM之功能描述

作者:wowo 发布于:2014-10-8 23:32 分类:电源管理子系统

终于可以写Runtime PM了,说实话,蜗蜗有点小激动。因为从个人的角度讲,我很推崇使用Runtime PM进行日常的动态电源管理,而不是suspend机制。

软件工程的基本思想就是模块化:高内聚和低耦合。通俗地讲呢,就是“各人自扫门前雪”,尽量扫好自己的(高内聚),尽量不和别人交互(低耦合)。而Runtime PM正体现了这一思想:每个设备(包括CPU)都处理好自身的电源管理工作,尽量以最低的能耗完成交代的任务,尽量在不需要工作的时候进入低功耗状态,尽量不和其它模块有过多耦合。每个设备都是最节省的话,整个系统一定是最节省的,最终达到无所谓睡、无所谓醒的天人合一状态。

讲到这里想到自己的一则趣事:大学时,蜗蜗是寝室长,但不爱打扫卫生,于是就提出一个口号,“不污染,不治理;谁污染,谁治理”。结果呢,大家猜就是了,呵呵。言归正传,开始吧。

阅读全文>>

标签: Linux PM 电源管理 runtime rpm

评论(51) 浏览(25554)

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog