
Linux-syn
wh8_2011
这个作者很懒,什么都没留下…
展开
-
每CPU变量
最好的同步技术是把设计不需要同步的临界资源放在首位,这是一种思维方法,因为每一种显式的同步原语都有不容忽视的性能开销。最简单也是最重要的同步技术包括把内核变量或数据结构声明为每CPU变量(per-cpu variable)。每CPU变量主要是数据结构的数组,系统的每个CPU对应数组的一个元素。一个CPU不应该访问与其他CPU对应的数组元素,另外,它可以随意读或修改它自己的元素而不用转载 2016-05-08 10:02:52 · 659 阅读 · 0 评论 -
Linux内核部件分析 原子性操作atomic_t
在任何处理器平台下,都会有一些原子性操作,供操作系统使用,我们这里只讲x86下面的。在单处理器情况下,每条指令的执行都是原子性的,但在多处理器情况下,只有那些单独的读操作或写操作才是原子性的。为了弥补这一缺点,x86提供了附加的lock前缀,使带lock前缀的读修改写指令也能原子性执行。带lock前缀的指令在操作时会锁住总线,使自身的执行即使在多处理器间也是原子性执行的。xchg指令不带lock前转载 2016-06-19 10:48:20 · 435 阅读 · 0 评论 -
read()/write()的生命旅程之四——第四章:writeback
第三章write()中已经提到要写的page加到了writeback queue后将有writeback thread将其真正写到block device上,而不是每一次写都直接写到media上。如果要绕过writeback机制直接写到media上,在open()的时候指定O_DIRECT即可。Writeback机制的好处总结起来主要是两点:加快write()的响应速度。因为media的读转载 2016-06-30 08:01:21 · 2448 阅读 · 0 评论 -
read()/write()的生命旅程之五——第五章:从bio到media
第四章中writeback thread已经将要写的page或inode(meta data)变成了bio,bio就是已经对应到了block device的哪一块了。本章我们就要搞清楚最后一步,即bio是怎样写到实际的存储media上的。下面这张图从submit_bio开始,揭示了bio最后被写到media上的过程。从上图可以看到,写到media的过程以submit_bio转载 2016-06-30 08:02:29 · 1189 阅读 · 0 评论 -
read()/write()的生命旅程之三——第三章:write()
本章将介绍write()系统调用的过程。和第二章read()一样我们将从file_operations.write()开始。 1. write():从file operation到page cachefile_operations.write()的核心函数是generic_perform_write()。大部分文件系统的file_operations.write()转载 2016-06-30 08:03:35 · 3344 阅读 · 1 评论 -
read()/write()的生命旅程之二——第二章:read()
本章将介绍read()系统调用的过程。回忆一下第一章里讲到的read()系统调用发生后VFS将调用文件实际所在文件系统的file_operations.read(),我们就从这个地方开始。 1. read():从file operation到page cache这个过程是在file_operation.read()的核心函数:do_generic_file_read()中完转载 2016-06-30 08:04:36 · 1052 阅读 · 0 评论 -
read()/write()的生命旅程——前言与目录
read()/write()是libc最常用的库函数,那么在application调用了read()/write()之后,发生了哪些事情,数据经过了怎样的流程才从media上读出到用户的buffer里,或是从用户buffer被写到media上的呢?本文将通过以下章节详细阐述整个过程。第一章:文件系统基础整个文件系统Overview从libc到SYSCALLVFS的分发转载 2016-06-30 08:05:10 · 904 阅读 · 0 评论 -
linux下数据同步、回写机制分析
一、前言在linux2.6.32之前,linux下数据同步是基于pdflush线程机制来实现的,在linux2.6.32以上的版本,内核彻底删掉了pdflush机制,改为了基于per-bdi线程来实现数据同步,与pdflush线程相比,在per-bdi线程机制中,每个后备存储器拥有自己唯一的回写线程,数据同步时需要更少的线程、也不会有多个pdflush对同一个后备存储器进行回写的竞态问题,回写转载 2016-06-29 09:46:50 · 1619 阅读 · 0 评论 -
pdflush进程详解
以下转自:http://blog.youkuaiyun.com/kofshower/article/details/7357968大家知道,在linux操作系统中,写操作是异步的,即写操作返回的时候数据并没有真正写到磁盘上,而是先写到了系统cache里,随后由pdflush内核线程将系统中的脏页写到磁盘上,在下面几种情况下,系统会唤醒pdflush回写脏页:1 、定时方式:转载 2016-06-28 09:40:22 · 598 阅读 · 0 评论 -
Linux 设备驱动--- 并发 与 竞态 --- atomic_t --- atomic_dec_and_test --- 原子操作
并发: 多个执行单元同时被执行.竞态: 并发的执行单元对资源 ( 硬件资源和软件上的全局变量等 ) 的访问导致的竞争状态. 并发的处理: 处理并发的常用技术是加锁或者互斥,即保证在任何时间只有一个执行单元可以操作共享资源. 在转载 2016-09-10 10:00:29 · 716 阅读 · 0 评论