Archive for the ‘Linux下C编程’ category

Memory Barriers 的一些思考

August 14th, 2014

之前由于各种原因blog停更了半个月,现在回到正常环境下。

我们都知道在多处理器环境下,我们会遇到Memory Barriers,其实说白了,就是数据的不一致性,说的更加精确点,就是cache的不一致性,因为各种architecture 不同,x86与ARM不同,在x86下,Intel与AMD又不同,所以我们要搞清cpu与cache的不同结构,之前我们知道cache分为N路组相联(N-way set associative)。在取值的时候,中间位负责区分是哪一路,在这篇文章中讲的很详细:http://www.lizhaozhong.info/archives/580

不过x86的mb。x86 CPU会自动处理store顺序,所以smp_wmb()原语什么也不做,但是load有可能乱序!

» Read more: Memory Barriers 的一些思考

Uinx Thread API备注

May 7th, 2014

这是最近读unix pthread and process使用的注意事项。 » Read more: Uinx Thread API备注

设定IDT表以及中断处理函数编写

March 26th, 2014

IDT本质是在kernel中的一个数组,是中断向量id到中断描述符(也即中断服务程序起始地址)的映射。
我画了一个图,图解IDT处理流程。
» Read more: 设定IDT表以及中断处理函数编写

编写Linux中断处理程序(上半部)(读书笔记)

January 7th, 2014

今天看了Linux中断处理的前半部分。中断,本质上是一种特殊的电信号。

» Read more: 编写Linux中断处理程序(上半部)(读书笔记)

CPU指令并行化(读书笔记)

December 4th, 2013

SIMD俗称单指令流,多数据流,就是同一条指令被多个数据流的多处理器执行。SIMD通过将相同的操作以并行的方式应用在数据的各个项来实现数据级的并行。我们在选购处理器的时候,经常会关注指令集。我们以SSE为例,SSE俗称Streaming SIMD Extensions 的缩写,思想就是每个16字节的XMM寄存器可以存放多个值。可以存放4个int和float 或者两个double  。SSE指令可以使用这些xmm寄存器执行向量操作。 » Read more: CPU指令并行化(读书笔记)