编写简单的ramdisk(无请求队列)】的更多相关文章

最近在研究块设备驱动的编写,看了赵磊大牛的<写一个块设备驱动>,受益匪浅,虽然能看懂里面说的,但动手写写代码还是能加深理解的,下面实现的ramdisk写的很简单,如果有错误,欢迎大牛们指正哈! 分配一块内存区存放ram disk数据 为了简单,我直接静态分配了一个大小为16MB的内存区,当然对于编写驱动来说这个空间有点大.不过就是为了简单嘛,可以理解. #define SIMP_BLKDEV_BYTES (16 * 1024 * 1024) unsigned char simp_blkdev_…
前言 前面用无请求队列实现的ramdisk的驱动程序虽然申请了请求队列,但实际上没用上,因为ramdisk不像实际的磁盘访问速度慢需要缓存,ramdisk之间使用内存空间,所以就没用请求队列了.本文将介绍使用请求队列的ramdisk驱动,虽然对于ramdisk使用请求队列用处不大,但对于基于磁盘的块设备驱动来说却是必须要用的. 在LDD3书中,其中的有些块设备操作函数在当前的linux版本中有了很大的变动,需要自己重新根据新定义的一些函数进行适当的移植,以解决编译时报出的各种错误,主要是在请求处…
前言 目前linux中包含anticipatory.cfq.deadline和noop这4个I/O调度器.2.6.18之前的linux默认使用anticipatory,而之后的默认使用cfq.我们在前面编写简单的ramdisk(有请求队列)中分配请求队列使用了blk_init_queue函数,该函数会默认该请求队列分配一个调度器,这里我们打算不使用该函数默认分配给请求队列的调度器,而是使用noop调度器.noop顾名思义,是一个基本上不干事的调度器.它基本不对请求进行什么附加的处理,仅仅假惺惺地…
Q:CAS的实现 A:gcc提供了两个函数 bool __sync_bool_compare_and_swap (type *ptr, type oldval, type newval, ...)//type 的类型有限制 只能是 1,2,4,8字节的整形 或者是指针类型 type __sync_val_compare_and_swap (type *ptr, type oldval, type newval, ...) 这两个函数提供原子的比较和交换,如果*ptr == oldval,就将ne…
1.基于folly的AtomicIntrusiveLinkedList略微修改的无锁队列代码: #ifndef FOLLY_REVISE_H #define FOLLY_REVISE_H namespace folly { /** * A very simple atomic single-linked list primitive * */ template <typename T> struct node { T data; node* next; node(const T& da…
本文首先介绍 Erlang 运行时中需要使用无锁队列的场合,然后介绍无锁队列的基本原理及会遇到的问题,接下来介绍 Erlang 运行时中如何通过“线程进度”机制解决无锁队列的问题,并介绍 Erlang 运行时中提供的一个通用无锁队列的实现及其在 ERTS 异步线程池中的应用. 无锁队列在 ERTS 中的应用场合 为了提升 Erlang 运行时在多核/众核处理器上的 scalability,Erlang 运行时使用了大量无锁数据结构,无锁队列(lock-free queue)就是其中广泛使用的一种…
1.什么是无锁(Lock-Free)编程 当谈及 Lock-Free 编程时,我们常将其概念与 Mutex(互斥) 或 Lock(锁) 联系在一起,描述要在编程中尽量少使用这些锁结构,降低线程间互相阻塞的机会,以提高应用程序的性能.类同的概念还有 "Lockless" 和 "Non-Blocking" 等.实际上,这样的描述只涵盖了 Lock-Free编程的一部分内容.本质上说,Lock-Free 编程仅描述了代码所表述的性质,而没有限定或要求代码该如何编写. 基本…
转自:http://www.ibm.com/developerworks/cn/linux/l-lpic1-105-2/index.html 学习如何使用标准的 shell 语法.循环和控制结构,以及成功或失败测试来自定义现有脚本或编写简单的新 bash 脚本.您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 102 考试内容,或者仅为兴趣而学习. 查看本系列更多内容 | 0 评论 Ian Shields, Linux 作家, Freelance 2016 年 2 月 23…
在上一篇中说到了mailbox_t的底层实际上使用了管道ypipe_t来存储命令.而ypipe_t实质上是一个无锁队列,其底层使用了yqueue_t队列,ypipe_t是对yueue_t的再包装,所以我们先来看看yqueue_t是怎么实现的. 1.yqueue_t yqueue_t是一个高效的队列,高效体现在她的内存配置上,尽量少的申请内存,尽量重用将要释放的内存.其实,容器的设计都会涉及这点--高效的内存配置器,像sgi stl容器的内存配置器,使用了内存池,预先分配一块较大内存,用不同大小的…
一哥们翻译的boost的无锁队列的官方文档 原文地址:http://blog.csdn.net/great3779/article/details/8765103 Boost_1_53_0终于迎来了久违的Boost.Lockfree模块,本着学习的心态,将其翻译如下.(原文地址:http://www.boost.org/doc/libs/1_53_0/doc/html/lockfree.html) Chapter 17. Boost.Lockfree 第17章.Boost.Lockfree Ta…